示例#1
0
    def POST(self):
        data = web.input()
        douban_id = data.douban_id
        email = data.email
        reason = data.reason
        users.save_user_apply_permission_log(douban_id, email, reason)

        #发送邮件
        apply_time = datetime.datetime.now()
        apply_user = users.get_douban_user_by_doubanid(douban_id)
        #发送通知邮件 给管理员们
        email_templates.apply_for_permission(apply_user, apply_time, email)

        return '{"info":"申请已发送,谢谢你的支持。","status":"y"}'
示例#2
0
    def POST(self):
        data = web.input()
        douban_id = data.douban_id
        email = data.email
        reason = data.reason
        users.save_user_apply_permission_log(douban_id, email, reason)

        #发送邮件
        apply_time = datetime.datetime.now()
        apply_user = users.get_douban_user_by_doubanid(douban_id)
        #发送通知邮件 给管理员们
        email_templates.apply_for_permission(apply_user, apply_time, email)

        return '{"info":"申请已发送,谢谢你的支持。","status":"y"}'
示例#3
0
    def POST(self):
        per = users.get_permission_by_douid(user.douban_id)
        rights = per[0].rights
        if rights > 1:
            data = web.input()
            id = data.apply_id #申请记录的id
            douban_id = data.douban_id  #申请用户的豆瓣id
            apply_email = data.apply_email #申请时留的邮箱
            apply_result = int(data.apply_result) #申请结果 1 通过 0 未通过

            operator = user.id
            operating_ts = datetime.datetime.now()
            rights = apply_result

            #修改Log管理操作信息
            users.update_user_apply_permission_log(id, operator, operating_ts, apply_result)

            
            apply_user = users.get_douban_user_by_doubanid(douban_id)
            if apply_result == -1: #忽略申请 鉴于可能有乱填邮件地址的情况 note 其实可以去掉这个判断
                pass
            elif apply_result == 1: #申请通过
                #修改用户权限
                users.change_user_permission(douban_id, rights, operator, operating_ts)
                #发送通知邮件
                email_templates.email_to_user_for_apply_success(apply_user, apply_email)
                #
            elif apply_result == 0: #申请未通过
                #修改用户权限
                users.change_user_permission(douban_id, rights, operator, operating_ts)
                #发送通知邮件
                email_templates.email_to_user_for_apply_fail(apply_user, apply_email)

            mes = '处理完毕'
            return mes
        else:
            raise web.notfound
示例#4
0
class Douban:
    def GET(self):
        data = web.input()

        if data.has_key('code'):
            code = data.code
            provider = 'douban'
            d = config.APIKEY_DICT.get(provider)

            login_service = None
            if provider == config.OPENID_DOUBAN:
                openid_type = config.OPENID_TYPE_DICT[config.OPENID_DOUBAN]
                login_service = DoubanLogin(d['key'], d['secret'],
                                            d['redirect_uri'])
            # elif provider == config.OPENID_SINA:
            #     openid_type = config.OPENID_TYPE_DICT[config.OPENID_SINA]
            #     login_service = SinaLogin(d['key'], d['secret'], d['redirect_uri'])
            # else:
            #     ## 处理以oauth1的方式授权的
            #     if provider == config.OPENID_QQ:
            #         user = _qqweibo_callback(request)

            #     elif provider == config.OPENID_TWITTER:
            #         user = _twitter_callback(request)

            #     if user:
            #         _add_sync_task_and_push_queue(provider, user)
            #         return redirect(url_for('index'))
            #     else:
            #         return "connect to %s fail" % provider

            try:
                token_dict = login_service.get_access_token(code)
            except OAuthLoginError, e:
                return view.error404(
                    'Connection failed'
                )  #note:need to change view name "error404"

            if not (token_dict and token_dict.get("access_token")):
                return (401, "no_access_token")
            try:
                user_info = login_service.get_user_info(
                    token_dict.get("access_token"), token_dict.get("uid"))
            except OAuthLoginError, e:
                return (401, e.msg)

            if user_info:
                douban_id = user_info['id']
                nickname = user_info[u'name']
                avatarPath = user_info['avatar']

                #判断邮箱激活表中是否有此豆瓣ID
                if users.douban_id_exist_in_table_confirm_email(douban_id):
                    #如果此用户填写过email
                    if users.get_confirm_email_by_douban_id(douban_id).email:
                        info = users.get_confirm_email_by_douban_id(douban_id)
                        c = info.confirmed
                        #如果填写的邮箱已经验证
                        if c == 1:
                            #更新用户邮箱 和 昵称 等资料
                            users.update_user_by_douid(
                                douban_id,
                                nickname=nickname,
                                avatarPath=avatarPath,
                                nicknameChangeTime=datetime.datetime.now(),
                                lastLoginIP=web.ctx.ip,
                                lastLoginTime=datetime.datetime.now())
                            # last_user_id = db.query("SELECT LAST_INSERT_ID()")[0].values()[0]

                            last_user_id = users.get_douban_user_by_doubanid(
                                douban_id).id

                            try:
                                city = user_info['loc_name']
                            except Exception, e:
                                city = None

                            try:
                                desc = user_info['desc']
                            except:
                                desc = None

                            users.update_profile(last_user_id,
                                                 city=city,
                                                 bio=desc)

                            session.douban_login(douban_id)
                            raise web.seeother(session.get_last_visited_url())
                        elif c == 0:
                            session.douban_callback(user_info)
                            #返回 提醒用户需要激活邮件 的页面
                            raise web.seeother(
                                '/welcome/' + user_info['uid'] +
                                '/send_email_feedback?status=succesful')

                    #如果没填写email
                    else:
                        session.douban_callback(user_info)
                        #删除表中的记录 为了一会儿重新insert
                        users.del_verification_data_by_douban_id(douban_id)
                        #跳转到邮箱设置页面
                        raise web.seeother('/welcome/' + user_info['uid'])

                #如果是新用户
                else:
                    session.douban_callback(user_info)
                    #跳转到邮箱设置页面
                    raise web.seeother('/welcome/' + user_info['uid'])
示例#5
0
    def GET(self, token):
        CE = users.get_confirm_email_by_token(token)
        if CE:
            new = time.time()  #得到访问当前页面时的时间
            old = time.mktime(CE.get('creation_ts').timetuple())
            if new - old > 86400:  #如果超过24小时
                #删除记录
                users.del_verification_data_by_token(token)
                return view.base02(
                    view.welcome_confirm_email(
                        user,
                        msg="out-time",
                    ), user, siteName)
            else:
                try:
                    #通过token得到douban_id,保险起见,session中的douban_id可能已失效 ?#note
                    douban_id = CE.douban_id
                    email = CE.email

                    username = user.username
                    nickname = user.nickname
                    avatarPath = user.avatarPath
                    try:
                        city = user.city
                    except Exception, e:
                        city = None

                    try:
                        desc = user.desc
                    except:
                        desc = None

                    #把 confirm 设为 1
                    users.update_confirm_email(token)

                    #如果这个用户已经在user表中存在,则是旧用户
                    if not users.is_douban_id_available(douban_id):

                        #把邮件地址 等 用户信息 更新到 user 表
                        users.update_user_by_douid(
                            douban_id,
                            email=email,
                            nickname=nickname,
                            avatarPath=avatarPath,
                            nicknameChangeTime=datetime.datetime.now(),
                            lastLoginIP=web.ctx.ip,
                            lastLoginTime=datetime.datetime.now())
                        #得到刚刚操作的用户id
                        # last_user_id = db.query("SELECT LAST_INSERT_ID()")[0].values()[0]
                        last_user_id = users.get_douban_user_by_doubanid(
                            douban_id).id
                        #查询资料表用是否有此用户
                        if users.is_user_profile_exist(last_user_id):
                            users.update_profile(last_user_id,
                                                 city=city,
                                                 bio=desc)
                        else:
                            users.insert_profile(last_user_id,
                                                 city=city,
                                                 bio=desc)

                        #清空session,为下一次 douban_login 装填做准备,以免占用太多空间 - 可能需要这么做? #note
                        # session.clear_douban_callback()

                        #session 设为登录
                        # session.reset()
                        session.douban_login(douban_id)

                    else:
                        #创建用户
                        users.create_douban_account(
                            douban_id=douban_id,
                            username=username,
                            nickname=nickname,
                            email=email,
                            avatarPath=avatarPath,
                            ipAddress=web.ctx.ip,
                            lastLoginIP=web.ctx.ip,
                            nicknameChangeTime=datetime.datetime.now(),
                            lastLoginTime=datetime.datetime.now(),
                            via=1)

                        #得到刚刚插入的用户id
                        # last_user_id = db.query("SELECT LAST_INSERT_ID()")[0].values()[0]
                        last_user_id = users.get_douban_user_by_doubanid(
                            douban_id).id
                        #新建用户资料
                        users.insert_profile(last_user_id, city=city, bio=desc)

                        #如果权限表中没有此用户,增加,并把权限设为 0
                        if not users.is_user_exist_in__permission(douban_id):
                            db.insert('_permission',
                                      douban_id=douban_id,
                                      rights=1)

                        #清空session,为下一次 douban_login 装填做准备,以免占用太多空间 - 可能需要这么做? #note
                        # session.clear_douban_callback()

                        #session 设为登录
                        session.douban_login(douban_id)

                    return view.base02(
                        view.welcome_confirm_email(user, msg="succes"), user,
                        siteName)
                except Exception, e:
                    # print e
                    # raise web.notfound()
                    return view.test(e)
示例#6
0
    def GET(self, token):
        CE = users.get_confirm_email_by_token(token)
        if CE:
            new = time.time()  # 得到访问当前页面时的时间
            old = time.mktime(CE.get("creation_ts").timetuple())
            if new - old > 86400:  # 如果超过24小时
                # 删除记录
                users.del_verification_data_by_token(token)
                return view.base02(view.welcome_confirm_email(user, msg="out-time"), user, siteName)
            else:
                try:
                    # 通过token得到douban_id,保险起见,session中的douban_id可能已失效 ?#note
                    douban_id = CE.douban_id
                    email = CE.email

                    username = user.username
                    nickname = user.nickname
                    avatarPath = user.avatarPath
                    try:
                        city = user.city
                    except Exception, e:
                        city = None

                    try:
                        desc = user.desc
                    except:
                        desc = None

                    # 把 confirm 设为 1
                    users.update_confirm_email(token)

                    # 如果这个用户已经在user表中存在,则是旧用户
                    if not users.is_douban_id_available(douban_id):

                        # 把邮件地址 等 用户信息 更新到 user 表
                        users.update_user_by_douid(
                            douban_id,
                            email=email,
                            nickname=nickname,
                            avatarPath=avatarPath,
                            nicknameChangeTime=datetime.datetime.now(),
                            lastLoginIP=web.ctx.ip,
                            lastLoginTime=datetime.datetime.now(),
                        )
                        # 得到刚刚操作的用户id
                        # last_user_id = db.query("SELECT LAST_INSERT_ID()")[0].values()[0]
                        last_user_id = users.get_douban_user_by_doubanid(douban_id).id
                        # 查询资料表用是否有此用户
                        if users.is_user_profile_exist(last_user_id):
                            users.update_profile(last_user_id, city=city, bio=desc)
                        else:
                            users.insert_profile(last_user_id, city=city, bio=desc)

                        # 清空session,为下一次 douban_login 装填做准备,以免占用太多空间 - 可能需要这么做? #note
                        # session.clear_douban_callback()

                        # session 设为登录
                        # session.reset()
                        session.douban_login(douban_id)

                    else:
                        # 创建用户
                        users.create_douban_account(
                            douban_id=douban_id,
                            username=username,
                            nickname=nickname,
                            email=email,
                            avatarPath=avatarPath,
                            ipAddress=web.ctx.ip,
                            lastLoginIP=web.ctx.ip,
                            nicknameChangeTime=datetime.datetime.now(),
                            lastLoginTime=datetime.datetime.now(),
                            via=1,
                        )

                        # 得到刚刚插入的用户id
                        # last_user_id = db.query("SELECT LAST_INSERT_ID()")[0].values()[0]
                        last_user_id = users.get_douban_user_by_doubanid(douban_id).id
                        # 新建用户资料
                        users.insert_profile(last_user_id, city=city, bio=desc)

                        # 如果权限表中没有此用户,增加,并把权限设为 0
                        if not users.is_user_exist_in__permission(douban_id):
                            db.insert("_permission", douban_id=douban_id, rights=1)

                        # 清空session,为下一次 douban_login 装填做准备,以免占用太多空间 - 可能需要这么做? #note
                        # session.clear_douban_callback()

                        # session 设为登录
                        session.douban_login(douban_id)

                    return view.base02(view.welcome_confirm_email(user, msg="succes"), user, siteName)
                except Exception, e:
                    # print e
                    # raise web.notfound()
                    return view.test(e)
示例#7
0
def douban_login(douban_id):
    s = get_session()
    for k, v in users.get_douban_user_by_doubanid(douban_id).items():
        s[k] = v
    s.is_logged = True
    web.setcookie('_u0i_ej3eu932j', s.session_id, expires = 3600*24*30)
示例#8
0
def douban_login(douban_id):
    s = get_session()
    for k, v in users.get_douban_user_by_doubanid(douban_id).items():
        s[k] = v
    s.is_logged = True
    web.setcookie('_u0i_ej3eu932j', s.session_id, expires=3600 * 24 * 30)
示例#9
0
    def GET(self):
        data = web.input()
        if 'code' not in data:
            return view.error404('Connection failed')

        code = data.code
        provider = 'douban'
        d = config.APIKEY_DICT.get(provider)
        if provider == config.OPENID_DOUBAN:
            openid_type = config.OPENID_TYPE_DICT[config.OPENID_DOUBAN]
            douban_login = DoubanLogin(d['key'], d['secret'], d['redirect_uri'])
        token_dict = douban_login.get_access_token(code)
        if not token_dict or not token_dict.get("access_token"):
            return(401, "no_access_token")

        user_info = douban_login.get_user_info(token_dict.get("access_token"), token_dict.get("uid"))
        if not user_info:
            return view.error404('Connection failed')

        douban_id = user_info['id']
        nickname = user_info[u'name']
        avatarPath = user_info['avatar']

        #判断邮箱激活表中是否有此豆瓣ID
        if users.douban_id_exist_in_table_confirm_email(int(douban_id)):
            #如果此用户填写过email
            if users.get_confirm_email_by_douban_id(douban_id).email:
                info = users.get_confirm_email_by_douban_id(douban_id)
                #如果填写的邮箱已经验证
                if info.confirmed:
                    #更新用户邮箱 和 昵称 等资料
                    users.update_user_by_douid(
                        douban_id,
                        nickname = nickname,
                        avatarPath = avatarPath,
                        nicknameChangeTime = datetime.datetime.now(),
                        lastLoginIP = web.ctx.ip,
                        lastLoginTime = datetime.datetime.now()
                    )
                    last_user_id = users.get_douban_user_by_doubanid(douban_id).id
                    city = user_info.get('loc_name')
                    desc = user_info.get('desc')
                    users.update_profile(last_user_id, city = city, bio = desc )
                    session.douban_login(douban_id)
                    raise web.seeother(session.get_last_visited_url())
                elif c == 0:
                    session.douban_callback(user_info)
                    #返回 提醒用户需要激活邮件 的页面
                    raise web.seeother('/welcome/'+ user_info['uid'] +'/send_email_feedback?status=succesful')
            #如果没填写email
            else:
                session.douban_callback(user_info)
                #删除表中的记录 为了一会儿重新insert
                users.del_verification_data_by_douban_id(douban_id)
                #跳转到邮箱设置页面
                raise web.seeother('/welcome/'+ user_info['uid'])
        #如果是新用户
        else:
            session.douban_callback(user_info)
            #跳转到邮箱设置页面
            raise web.seeother('/welcome/'+ user_info['uid'])