Exemple #1
0
def authorized_with_facebook(response):
    result = {'auth': False}
    if response is not None:
        access_token = response['access_token']
        # expires = response['expires']
        session['facebook_token'] = (
            access_token,
            OAUTH_CREDENTIALS['facebook']['secret']
        )
        get = facebook.get('me?fields=id,name,picture,email')
        status = get.status
        result['get_status'] = status
        if status == 200:
            data = get.data
            user = User.query.filter_by(email=data['email']).first()
            if user is None:
                result['user_status'] = 'new'
                user = User(
                    name=data['name'],
                    email=data['email'],
                    key=Tools.generate_hash(data),
                    token=access_token,
                    photo=data['picture']['data']['url'],
                    auth=AUTH['facebook'],
                    last_seen=str(datetime.utcnow()),
                    info=json.dumps(data)
                )
                db.session.add(user)
                db.session.commit()
            else:
                result['user_status'] = 'old'
                equal = True
                new = {
                    'name': data['name'],
                    'token': access_token,
                    'photo': data['picture']['data']['url']
                }
                for key, value in new.iteritems():
                    attr = getattr(user, key)
                    if attr != value:
                        setattr(user, key, value)
                        equal = False
                if not equal:
                    result['user_status'] = 'updated'
                    db.session.add(user)
                    db.session.commit()
            result['user'] = {
                'name': user.name,
                'email': user.email,
                'key': user.key,
                'photo': user.photo,
                'info': user.info
            }
            remember_me = False
            if 'remember_me' in session:
                remember_me = session['remember_me']
                session.pop('remember_me', None)
            session['authorized'] = True
            session['active'] = True
            session['anonymous'] = False
            result['auth'] = login_user(user, remember=remember_me)
    return redirect(url_for('index'))