Example #1
0
def login(phone, pwd):
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    values = get_all_users(0, 100000, True)
    for u in values:
        if u['phone'] == phone and u['pass'] == pwd:
            return True
    return False
Example #2
0
def login(phone, pwd):
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    values = get_all_users(0, 100000, True)
    for u in values:
        if u['phone'] == phone and u['pass'] == pwd:
            return True
    return False
Example #3
0
def mod_admin_info(name, pwd, email):
    '''修改管理员信息'''
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    new = locals()
    info = kv.get(settings.K_ADMIN_INFO)
    info.update(new)
    kv.set(settings.K_ADMIN_INFO, info)
    return _od(err=False)
Example #4
0
def mod_admin_info(name, pwd, email):
    '''修改管理员信息'''
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    new = locals()
    info = kv.get(settings.K_ADMIN_INFO)
    info.update(new)
    kv.set(settings.K_ADMIN_INFO, info)
    return _od(err=False)
Example #5
0
def add_user(phone, name, pwd):
    '''添加用户'''
    users = kv.get(settings.K_USER) or ''
    aid = len(users)
    kv.set(settings.K_ARTS, arts + '2')
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    info = {'ct': utils.now(), 'name': name, 'pass': pwd, 'phone': phone}
    kv.set(settings.K_USER_INFO % aid, info)
    return ''
Example #6
0
def add_user(phone, name, pwd):
    '''添加用户'''
    users = kv.get(settings.K_USER) or ''
    aid = len(users)
    kv.set(settings.K_ARTS, arts + '2')
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    info = {'ct': utils.now(), 'name': name, 'pass': pwd, 'phone': phone}
    kv.set(settings.K_USER_INFO % aid, info)
    return ''
Example #7
0
 def post(self):
     next_page = g.login_url
     admin = g.kv.get(settings.K_ADMIN_INFO)
     if admin is not None:
         name = self.input('username', '')
         pwd = self.input('password', '', strip=False)
         pwd = utils.md5(pwd + settings.COOKIE_SECRET)
         if admin['name'] == name and pwd == admin['pwd']:
             # 登录成功,设置cookie
             cookie = self.get_secure_cookie(settings.COOKIE_INFO, {})
             cookie['loggedin'] = True
             self.set_secure_cookie(
                 settings.COOKIE_INFO, cookie, settings.COOKIE_INFO_TIMEOUT)
             next_page = g.site_info()['admin']['default']
     self.redirect(next_page)
Example #8
0
def save_img_by_ext(myfile):
    '''保存上传的图片到kvdb中'''
    ret = _od()
    ct, img_binary = myfile.filename.lower().rsplit('.', 1)[1], myfile.body
    if len(img_binary) > settings.KVDB_FILE_MAX_SIZE:
        ret.msg = u'图片大小不能超过4M'
        return ret
    url = str('%s.%s' % (utils.md5(img_binary), ct))
    ret.err = not kv.set(settings.K_IMG % url, img_binary)

    # 生成160 x 120大小的图片,后台图片管理预览用
    img_160x120 = utils.resize_img(img_binary, 160, 120, ct)
    kv.set(settings.K_IMG_160X120 % url, img_160x120)

    return _check_kvdb_error(ret, url='/img/%s' % url)
Example #9
0
 def post(self):
     next_page = g.login_url
     admin = g.kv.get(settings.K_ADMIN_INFO)
     if admin is not None:
         name = self.input('username', '')
         pwd = self.input('password', '', strip=False)
         pwd = utils.md5(pwd + settings.COOKIE_SECRET)
         if admin['name'] == name and pwd == admin['pwd']:
             # 登录成功,设置cookie
             cookie = self.get_secure_cookie(settings.COOKIE_INFO, {})
             cookie['loggedin'] = True
             self.set_secure_cookie(settings.COOKIE_INFO, cookie,
                                    settings.COOKIE_INFO_TIMEOUT)
             next_page = g.site_info()['admin']['default']
     self.redirect(next_page)
Example #10
0
def save_img_by_ext(myfile):
    '''保存上传的图片到kvdb中'''
    ret = _od()
    ct, img_binary = myfile.filename.lower().rsplit('.', 1)[1], myfile.body
    if len(img_binary) > settings.KVDB_FILE_MAX_SIZE:
        ret.msg = u'图片大小不能超过4M'
        return ret
    url = str('%s.%s' % (utils.md5(img_binary), ct))
    ret.err = not kv.set(settings.K_IMG % url, img_binary)

    # 生成160 x 120大小的图片,后台图片管理预览用
    img_160x120 = utils.resize_img(img_binary, 160, 120, ct)
    kv.set(settings.K_IMG_160X120 % url, img_160x120)

    return _check_kvdb_error(ret, url='/img/%s' % url)
Example #11
0
def init():
    from sae.kvdb import KVClient
    from pabo.main import settings
    import pabo.utils as utils
    kv = KVClient()
    '''
    _site_info = kv.get(settings.K_SITE_INFO)
    _site_info['navs'][1]['link'] = '/archives'
    kv.set(settings.K_SITE_INFO, _site_info)
    '''

    # 如果初始化过了就不要初始化了
    if kv.get(settings.K_ADMIN_INFO) is not None:
        pass
        return
    kv.add = kv.set

    # 初始化默认分类
    default = {settings.DEFAULT_CLS: u'默认分类'}
    kv.add(settings.K_ART_CLS, default)

    # 初始化文章索引
    kv.add(settings.K_ARTS, '')

    # 初始化用户名(admin)和密码(a123)
    pwd = '@a123456'
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    kv.add(settings.K_ADMIN_INFO, {
        'name': 'admin',
        'pwd': pwd,
        'email': '*****@*****.**'
    })

    # 初始化站点信息[不要超过4M]
    _site_info = {
        # 用于登录的网址,起一个别人不容易知道的网址
        'login_url':
        '/login' if settings.DEBUG else '/must_not_be_guessed',
        'title':
        u'Pabo Blog',
        'subtitle':
        u'知识就是力量',
        'keywords':
        u'博客 python tornado sae pabo 开源',  # 网站关键字
        'description':
        u'Pabo是一个利用python tornado web server搭建于sae上面的博客程序. 采用KVDB存储全站数据.',  # 给搜索引擎用的
        'theme':
        'default',  # 网站主题样式
        'admin_theme':
        'default',  # 后台管理主题样式
        # 友链
        'links': {
            'http://pabo.sinaapp.com': 'Pabo Blog',
            'http://www.baidu.com': u'百度一下,你就知道',
        },
        'author': {
            'name': u'书记',
            'intro': u'书记,专注Web前端技术的凡夫俗子。',
        },
        # 注: 请不要修改链接link值
        'navs': [
            {
                'link': '/',
                'label': u'首页',
                'title': u'Pabo Blog首页'
            },
            {
                'link': '/archives',
                'label': u'归档',
                'title': u'文章归档'
            },
            {
                'link': '/message',
                'label': u'留言',
                'title': u'访客留言'
            },
            {
                'link': '/rss',
                'label': u'订阅',
                'title': u'RSS订阅'
            },
            #{'link': '/about', 'label': u'关于', 'title': u'关于'},
        ],
        'app':
        5,  # article per page
        # 是否预览友链(如果友链多了,可能会比较卡)
        # XXX 如果友链那边设置了'X-Frame-Options'(如设为'SAMEORIGIN'),
        # 那么iframe将不能显示.
        'links_preview':
        False,
        # 是否显示登录链接[安全起见,最好设置为False]
        'show_login':
        settings.DEBUG,
        'rss_full':
        False,  # rss是否全文输出
        # url显示类型,将按照顺序加载,如果加载失败,将自动尝试后面一种显示类型
        # XXX 目前暂时用short
        # 可以根据情况变换4种类型的顺序
        # short是短网址,一般为5个小写字母;(推荐使用)
        # digit则是文章的id, 速度最快;
        # english: Google翻译标题作为网址(可能不能正常访问Google导致翻译失败);
        # pinyin: 将文章标题转换为拼音.(产生的url可能会很长)
        'url_show_order': ['short', 'digit', 'english', 'pinyin'],
        'admin': {
            'url':
            '/admin',
            'title':
            u'后台管理',
            'navs': [
                # 不要修改link的值
                {
                    'link': '/admin/stats',
                    'label': u'概览',
                    'icon': 'home'
                },
                {
                    'icon':
                    'book',
                    'label':
                    u'文章',
                    'sub': [
                        {
                            'link': '/admin/article/add',
                            'label': u'发表文章'
                        },
                        {
                            'link': '/admin/articles/manage',
                            'label': u'管理文章'
                        },
                    ]
                },
                {
                    'link': '/admin/classes',
                    'label': u'分类',
                    'icon': 'th-list'
                },
                {
                    'link': '/admin/attachments',
                    'label': u'附件',
                    'icon': 'paper-clip'
                },
                {
                    'link': '/admin/friends',
                    'label': u'友链',
                    'icon': 'link'
                },
                {
                    'link': '/admin/settings',
                    'label': u'设置',
                    'icon': 'cog'
                },
                {
                    'link': '/admin/kv',
                    'label': u'KVDB',
                    'icon': 'hdd'
                },
            ],
            'default':
            '/admin/stats',  # 登录后台后默认显示的页面
        },
        'baidu_statistics':
        '''
<script>
var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3Fb665710f3241366f461da2dfe6af1dda' type='text/javascript'%3E%3C/script%3E"));
</script>''',
    }
    kv.add(settings.K_SITE_INFO, _site_info)

    _stats_info = {
        'uip': 0,  # 独立ip
        'pv': 0,  # pv
        'rss': 0,  # 订阅数
    }
    kv.add(settings.K_STATS_INFO, _stats_info)
    kv.disconnect_all()
Example #12
0
def init():
    from sae.kvdb import KVClient
    from pabo.main import settings
    import pabo.utils as utils
    kv = KVClient()
    '''
    _site_info = kv.get(settings.K_SITE_INFO)
    _site_info['navs'][1]['link'] = '/archives'
    kv.set(settings.K_SITE_INFO, _site_info)
    '''

    # There is no need to initialize if it has
    if kv.get(settings.K_ADMIN_INFO) is not None:
        pass
        return
    kv.add = kv.set

    # default classificaiton
    default = {settings.DEFAULT_CLS: u'Default'}
    kv.add(settings.K_ART_CLS, default)

    # 初始化文章索引
    kv.add(settings.K_ARTS, '')

    # 初始化用户名(admin)和密码(a123)
    pwd = '@a123456'
    pwd = utils.md5(pwd + settings.COOKIE_SECRET)
    kv.add(settings.K_ADMIN_INFO,
            {'name': 'admin', 'pwd': pwd, 'email': '*****@*****.**'})

    # 初始化站点信息[不要超过4M]
    _site_info = {
        # 用于登录的网址,起一个别人不容易知道的网址
        'login_url': '/login' if settings.DEBUG else '/must_not_be_guessed',
        'title': u'Absolute Spirits',
        'subtitle': u'Stay hungry, stay foolish.',
        'keywords': u'blog python tornado sae opensource',  # 网站关键字
        'description': u'Pabo是一个利用python tornado web server搭建于sae上面的博客程序. 采用KVDB存储全站数据.',  # 给搜索引擎用的
        'theme': 'default',  # 网站主题样式
        'admin_theme': 'default',  # 后台管理主题样式
        # 友链
        'links': {
            'http://pabo.sinaapp.com': 'Pabo Blog',
        },
        'author': {
            'name': u'SweenEy',
            'intro': u'Be a craftsman',
        },
        # 注: 请不要修改链接link值
        'navs': [
            {'link': '/', 'label': u'Home', 'title': u'Home page'},
            {'link': '/archives', 'label': u'Archive', 'title': u'Article archive'},
            # {'link': '/message', 'label': u'Comment', 'title': u'Comment'},
            {'link': '/rss', 'label': u'RSS', 'title': u'RSS'},
            # {'link': '/about', 'label': u'关于', 'title': u'关于'},
        ],
        'app': 5,  # article per page
        # 是否预览友链(如果友链多了,可能会比较卡)
        # XXX 如果友链那边设置了'X-Frame-Options'(如设为'SAMEORIGIN'),
        # 那么iframe将不能显示.
        'links_preview': False,
        # 是否显示登录链接[安全起见,最好设置为False]
        'show_login': settings.DEBUG,
        'rss_full': False,  # rss是否全文输出
        # url显示类型,将按照顺序加载,如果加载失败,将自动尝试后面一种显示类型
        # XXX 目前暂时用short
        # 可以根据情况变换4种类型的顺序
        # short是短网址,一般为5个小写字母;(推荐使用)
        # digit则是文章的id, 速度最快;
        # english: Google翻译标题作为网址(可能不能正常访问Google导致翻译失败);
        # pinyin: 将文章标题转换为拼音.(产生的url可能会很长)
        'url_show_order': ['short', 'digit', 'english', 'pinyin'],

        'admin': {
            'url': '/admin',
            'title': u'Admin',
            'navs': [
                # 不要修改link的值
                {'link': '/admin/stats', 'label': u'概览', 'icon': 'home'},
                {'icon': 'book', 'label': u'文章', 'sub':[
                    {'link': '/admin/article/add', 'label': u'发表文章'},
                    {'link': '/admin/articles/manage', 'label': u'管理文章'},
                ]},
                {'link': '/admin/classes', 'label': u'分类', 'icon': 'th-list'},
                {'link': '/admin/attachments', 'label': u'附件', 'icon': 'paper-clip'},
                {'link': '/admin/friends', 'label': u'友链', 'icon': 'link'},
                {'link': '/admin/settings', 'label': u'设置', 'icon': 'cog'},
                {'link': '/admin/kv', 'label': u'KVDB', 'icon': 'hdd'},
            ],
            'default': '/admin/stats',  # 登录后台后默认显示的页面
        },
        'baidu_statistics': '''
<script>
var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3Fb665710f3241366f461da2dfe6af1dda' type='text/javascript'%3E%3C/script%3E"));
</script>''',
    }
    kv.add(settings.K_SITE_INFO, _site_info)

    _stats_info = {
        'uip': 0,  # 独立ip
        'pv': 0,  # pv
        'rss': 0,  # 订阅数
    }
    kv.add(settings.K_STATS_INFO, _stats_info)
    kv.disconnect_all()