Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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'))
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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'))
Exemplo n.º 5
0
def deconnect_facebook():
    dq.update(g.user, ['facebook_id'], [None])
    return redirect(url_for('settings'))
Exemplo n.º 6
0
def before_request():
    g.user = current_user
    if g.user.is_authenticated():
        dq.update(g.user, ['last_seen'], [datetime.utcnow()])
Exemplo n.º 7
0
def deconnect_weibo():
    dq.update(g.user, ['weibo_id','weibo_img'], [None, None])
    return redirect(url_for('settings'))