def oauth2callback(request): t = request.session.get(TEMP_USER_SESSION_ID) if not t: return redirect_to_login_page() state = request.REQUEST['state'] if not xsrfutil.validate_token(settings.SECRET_KEY, state, t): return HttpResponseBadRequest() try: credential = _get_flow(request).step2_exchange(request.REQUEST) except FlowExchangeError: return HttpResponseRedirect(reverse(login)) if credential.invalid: return HttpResponseRedirect(reverse(login)) http = httplib2.Http() http = credential.authorize(http) _h, c = http.request('https://www.googleapis.com/oauth2/v1/userinfo') data = simplejson.loads(c) user, _created = get_model().objects.get_or_create( email=data['email'], defaults=dict( name=data.get('name') or data['email'].split('@')[0], ) ) user.name = data.get('given_name') or user.name user.surname = data.get('family_name', '') try: user.save() except ValidationError, e: return redirect_to_login_page(e.messages[0])
def login(request): if TEMP_USER_SESSION_ID in request.session: del request.session[TEMP_USER_SESSION_ID] if not request.method == 'POST': return redirect_to_login_page() t = random.randint(0, sys.maxint) flow = _get_flow(request) flow.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY, t) request.session[TEMP_USER_SESSION_ID] = t return HttpResponseRedirect(flow.step1_get_authorize_url())