1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- from django.http import HttpResponse
- from django.shortcuts import redirect
- from django.urls import reverse
- import google_auth_oauthlib.flow
- from django.contrib.auth.decorators import login_required
- from .utils import get_access_token, has_expired
- from .models import UserModel
- @login_required
- def index(request):
- uid = request.user.id
- user = UserModel.objects.filter(pk=uid).first()
- if not user:
- return redirect(reverse('authorize'))
- if 'credentials' not in request.session or has_expired(request.session['credentials']):
- get_access_token(request)
- cred = request.session['credentials']
- return HttpResponse(cred['access_token'])
- CLIENT_SECRETS_FILE = "client_secrets.json"
- SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
- flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
- CLIENT_SECRETS_FILE,
- scopes=SCOPES,
- redirect_uri="http://127.0.0.1:8000/oauth2callback")
- def authorize(request):
- authorization_url, state = flow.authorization_url(access_type='offline')
- # Store the state so the callback can verify the auth server response.
- request.session['state'] = state
- return redirect(authorization_url)
- def oauth2callback(request):
- state = request.session['state']
- flow.state = state
- code = request.GET.get('code', False)
- flow.fetch_token(code=code)
- credentials = flow.credentials
- request.session['credentials'] = credentials_to_dict(credentials)
- refresh_token = credentials.refresh_token
- user_model = UserModel.objects.create(user=request.user, refresh_token=refresh_token)
- user_model.save()
- return redirect(reverse('home'))
- def credentials_to_dict(credentials):
- expiry = str(credentials.expiry.utcnow())
- return {
- 'access_token': credentials.token,
- 'expiry': expiry
- }
|