Example #1
0
def oauth2callback(code, include_redirect):
    if not code:
        abort(400)

    oauth_flow = create_oauth_flow(include_redirect)
    # Perform the exchange of the code. If there is a failure with exchanging
    # the code, return None.
    try:
        creds = oauth_flow.step2_exchange(code)
        if creds.refresh_token is None:
            abort(400)
    except FlowExchangeError:
        abort(400)

    users_service = util.create_service('oauth2', 'v2', creds)
    # TODO: Check for errors.
    guser = users_service.userinfo().get().execute()

    user, created = User.objects.get_or_create(googleId=guser.get('id'))
    storage = MongoStorage(user)
    creds.set_store(storage)

    if created:
        user.email = guser.get('email')
        user.gender = guser.get('gender') == 'male'
    user.locale = guser.get('locale')
    user.name = guser.get('name')

    try:
        storage.put(creds)
    except DuplicateKeyError as e:
        return "Duplicate " + str(e)

    session['userId'] = str(user.pk)
    session['user'] = {'name': user.name, 'email': user.email}
Example #2
0
def logout():
    try:
        user = getUser(session['userId'])
        creds = MongoStorage(user).get()
        http = httplib2.Http()
        creds.revoke(http)
    except Exception as e:
        pass

    session.pop('userId', None)
    session.pop('user', None)
    return redirect("/")