views.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from django.http import HttpResponse
  2. from django.shortcuts import redirect
  3. from django.urls import reverse
  4. import google_auth_oauthlib.flow
  5. from django.contrib.auth.decorators import login_required
  6. from django.contrib.auth.models import User
  7. from .auth_utils import get_access_token, get_google_account_id
  8. from .models import UserModel
  9. CLIENT_SECRETS_FILE = "client_secrets.json"
  10. SCOPES = ['https://www.googleapis.com/auth/business.manage']
  11. flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
  12. CLIENT_SECRETS_FILE,
  13. scopes=SCOPES,
  14. redirect_uri="http://127.0.0.1:8000/oauth2callback")
  15. def get_token(request):
  16. get_access_token(request)
  17. cred = request.session['credentials']
  18. return HttpResponse(cred.get('access_token'))
  19. @login_required
  20. def google_auth(request):
  21. user = User.objects.filter(username='admin@ercare').first()
  22. if not user:
  23. return HttpResponse('<h1>You have to have a user account with username "admin@ercare". Please create a superuser using manage.py createsuperuser</h2>')
  24. return redirect('authorize')
  25. def authorize(request):
  26. authorization_url, state = flow.authorization_url(access_type='offline', include_granted_scopes='true')
  27. # Store the state so the callback can verify the auth server response.
  28. request.session['state'] = state
  29. return redirect(authorization_url)
  30. def oauth2callback(request):
  31. state = request.session['state']
  32. flow.state = state
  33. code = request.GET.get('code', False)
  34. flow.fetch_token(code=code)
  35. credentials = flow.credentials
  36. account_id = get_google_account_id(credentials.token)
  37. user = User.objects.filter(username='admin@ercare').first()
  38. user_model, created = UserModel.objects.get_or_create(user=user)
  39. user_model.refresh_token = credentials.refresh_token
  40. user_model.gmb_account_id = account_id
  41. user_model.save()
  42. print(credentials.refresh_token)
  43. request.session['credentials'] = credentials_to_dict(credentials)
  44. return redirect('token')
  45. def credentials_to_dict(credentials):
  46. expiry = str(credentials.expiry.utcnow())
  47. return {
  48. 'access_token': credentials.token,
  49. 'expiry': expiry
  50. }