Created
November 1, 2014 16:47
-
-
Save claytantor/a4f7ac88e96873fa9461 to your computer and use it in GitHub Desktop.
google auth2 views.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import logging | |
import httplib2 | |
from apiclient.discovery import build | |
from django.contrib.auth.decorators import login_required | |
from django.core.urlresolvers import reverse | |
from django.http import HttpResponse | |
from django.http import HttpResponseBadRequest | |
from django.http import HttpResponseRedirect | |
from django.shortcuts import render_to_response | |
from django_sample.plus.models import CredentialsModel | |
from django_sample import settings | |
from oauth2client import xsrfutil | |
from oauth2client.client import flow_from_clientsecrets | |
from oauth2client.django_orm import Storage | |
# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this | |
# application, including client_id and client_secret, which are found | |
# on the API Access tab on the Google APIs | |
# Console <http://code.google.com/apis/console> | |
CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), '..', 'client_secrets.json') | |
FLOW = flow_from_clientsecrets( | |
CLIENT_SECRETS, | |
scope='https://www.googleapis.com/auth/plus.me', | |
redirect_uri='http://localhost:8000/oauth2callback') | |
@login_required | |
def index(request): | |
storage = Storage(CredentialsModel, 'id', request.user, 'credential') | |
credential = storage.get() | |
if credential is None or credential.invalid == True: | |
FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY, | |
request.user) | |
authorize_url = FLOW.step1_get_authorize_url() | |
return HttpResponseRedirect(authorize_url) | |
else: | |
http = httplib2.Http() | |
http = credential.authorize(http) | |
service = build("plus", "v1", http=http) | |
activities = service.activities() | |
activitylist = activities.list(collection='public', | |
userId='me').execute() | |
logging.info(activitylist) | |
return render_to_response('plus/welcome.html', { | |
'activitylist': activitylist, | |
}) | |
@login_required | |
def auth_return(request): | |
if not xsrfutil.validate_token(settings.SECRET_KEY, request.REQUEST['state'], | |
request.user): | |
return HttpResponseBadRequest() | |
credential = FLOW.step2_exchange(request.REQUEST) | |
storage = Storage(CredentialsModel, 'id', request.user, 'credential') | |
storage.put(credential) | |
return HttpResponseRedirect("/") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment