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"}'
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
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'])
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)
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)
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)
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)
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'])