def user(nickname, page = 1): user = dq.find(User, ['nickname'], [nickname]).first() if user == None: flash('User ' + nickname +' does not exist!' ) return redirect(url_for('index')) #data borrow_records = g.user.borrow_history() lend_records = g.user.lend_history() friends = user.valid_friends() form = EditForm(g.user.nickname) if form.validate_on_submit(): dq.update(g.user, ['nickname', 'about_me'], [form.nickname.data, form.about_me.data]) flash('Your changes have been saved.') return redirect(url_for('user', nickname = nickname)) else: form.nickname.data = g.user.nickname form.about_me.data = g.user.about_me return render_template('user.html', form = form, user = user, borrow_records = borrow_records, lend_records = lend_records, friends = friends)
def facebook_callback(resp): next_url = request.args.get('next') or url_for('index') if resp is None or 'access_token' not in resp: flash('You denied the login') return redirect(next_url) session['fb_access_token'] = (resp['access_token'], '') remember_me = False if 'remember_me' in session: remember_me = session['remember_me'] session.pop('remember_me', None) fb_user = facebook.get('/me') fb_id = me.data['id'] fb_email = me.data['email'] if fb_user.data['username']: fb_username = fb_user.data['username'] else: fb_username = fb_user.data['name'] user = dq.find(User, ['facebook_id'], [str(fb_id)]).first() #for connecting user's acc with facebook acc if g.user is not None and g.user.is_authenticated(): if user is None: dq.update(g.user, ['facebook_id'], [str(fb_id)]) flash('You are now linked with %s' % fb_username) else: flash('Your fb account has been linked previously') return redirect(url_for('settings')) #for new login if user is None: u = dq.find(User, ['email'], [str(fb_email)]).first() if u: login_user(u, remember = remember_me) return facebook.authorize(callback=url_for('facebook_callback', next=request.args.get('next') or request.referrer or None, _external=True)) else: dq.init_user(fb_username, fb_email, ROLE_USER, None, None, str(fb_id), None, None) login_user(user, remember = remember_me) flash('You are now logged in as %s' % user.nickname) return redirect(url_for('index'))
def settings(): edit_form = EditForm(g.user.nickname) if edit_form.validate_on_submit(): dq.update(g.user, ['nickname', 'about_me'], [form.nickname.data, form.about_me.data]) flash('Your changes have been saved.') return redirect(url_for('user', nickname = g.user.nickname)) else: edit_form.nickname.data = g.user.nickname edit_form.about_me.data = g.user.about_me return render_template('settings.html', edit_form = edit_form, sina_url = url)
def weibo_callback(): code = request.args.get('code') r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in session['wb_access_token'] = access_token session['wb_expires_in'] = expires_in client.set_access_token(access_token, expires_in) wb_id = client.account.get_uid.get()['uid'] next_url = request.args.get('next') or url_for('index') #for connecting user's acc with weibo acc if g.user is not None and g.user.is_authenticated(): if r is None or r.access_token is None: flash('You denied the connection') return redirect(next_url) if dq.find(User, ['weibo_id'], [str(wb_id)]).first() is None: dq.update(g.user, ['weibo_id'], [str(wb_id)]) flash('You are now linked with %s' % client.users.show.get(uid=wb_id)['screen_name']) else: flash('Your weibo account has been linked previously') return redirect(url_for('settings')) #for login else: if r is None or r.access_token is None: flash('You denied the login') return redirect(next_url) #user data from server wb_email = client.account.profile.email.get(access_token=access_token)['email'] weibo_user = client.users.show.get(uid=wb_id) wb_nickname = weibo_user['screen_name'] wb_img = weibo_user['avatar_large'] user = dq.find(User, ['weibo_id'], [str(wb_id)]).first() #cannot find a user with the current weibo id if user is None: u = dq.find(User, ['email'], [str(wb_email)]).first() # email taken if u: login_user(u, remember = remember_me) return redirect(url) # email not taken else: dq.init_user(wb_nickname, wb_email, ROLE_USER, str(wb_id), wb_img, None, None, None) #client.statuses.update.post(status=u'test oauth2.0') remember_me = False if 'remember_me' in session: remember_me = session['remember_me'] session.pop('remember_me', None) login_user(user, remember = remember_me) flash('You are now logged in as %s' % user.nickname) return redirect(url_for('index'))
def deconnect_facebook(): dq.update(g.user, ['facebook_id'], [None]) return redirect(url_for('settings'))
def before_request(): g.user = current_user if g.user.is_authenticated(): dq.update(g.user, ['last_seen'], [datetime.utcnow()])
def deconnect_weibo(): dq.update(g.user, ['weibo_id','weibo_img'], [None, None]) return redirect(url_for('settings'))