예제 #1
0
def google_oauth_callback(request):
    state = request.GET['state']
    credentials = Google.exchange_code(request.GET['code'], state)
    if state == 'login':
        profile_str = Google.get_profile(credentials)
        profile = json.loads(profile_str)
        try:
            user = MyUser.objects.get(email=profile['email'])
        except ObjectDoesNotExist:
            user = None

        if user is None:
            user = MyUser(name=profile['name'], email=profile['email'], picture_url=profile['picture'])
            user.save()
        request.session['user_id'] = user.id
        return redirect(reverse('connect_apps'))
    elif state == 'gmail':
        # store gmail oauth credentials in db
        try:
            gmail_auth = Gmail.objects.get(user__id=request.session['user_id'])
        except ObjectDoesNotExist:
            gmail_auth = None

        if gmail_auth is None:
            user = MyUser.objects.get(id=request.session['user_id'])
            gmail_auth = Gmail(user=user, credentials_json=credentials.to_json())
            gmail_auth.save()
        else:
            gmail_auth.credentials_json = credentials.to_json()
            gmail_auth.save()

        return redirect(reverse('close_window'))