PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/api/authentication/GoogleService.py

https://gitlab.com/fdemian/Shelob
Python | 80 lines | 60 code | 20 blank | 0 comment | 6 complexity | 9b3102d33a7b944b7a29468695eb80f5 MD5 | raw file
  1. import tornado
  2. import tornado.web
  3. from tornado.auth import GoogleOAuth2Mixin
  4. from tornado.web import RequestHandler
  5. from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
  6. from api.model.sessionHelper import get_session
  7. from api.model.models import User
  8. class GoogleAuthService(GoogleOAuth2Mixin):
  9. def __init__(self, key, secret):
  10. self.key = key
  11. self.secret = secret
  12. async def get(self, auth_code, redirect_url, method):
  13. await print("::::::::::::::::::::::::::::")
  14. google_user = await self.get_authenticated_user(redirect_uri=redirect_url, code=auth_code)
  15. await print(google_user)
  16. await print("..................")
  17. await print("PETE WALLANDER")
  18. if not google_user:
  19. yield None
  20. if method == "login":
  21. user = self.get_user_from_db(google_user)
  22. elif method == "register":
  23. user = self.get_user_to_save(google_user)
  24. yield user
  25. @staticmethod
  26. def get_user_to_save(google_user):
  27. payload = {
  28. 'id': google_user["sub"],
  29. 'avatar': google_user["picture"],
  30. 'username': google_user["name"],
  31. 'fullname': google_user["name"],
  32. 'email': google_user['email'],
  33. 'role': 'author'
  34. }
  35. return payload
  36. @staticmethod
  37. def get_user_from_db(google_user):
  38. try:
  39. session_object = get_session()
  40. session = session_object()
  41. user = session.query(User).filter(User.email == google_user['email']).one()
  42. user_link = '/users/' + str(user.id) + "/" + user.username
  43. payload = {
  44. 'id': user.id,
  45. 'avatar': user.avatar,
  46. 'username': user.username,
  47. 'role': 'author',
  48. 'link': user_link
  49. }
  50. except MultipleResultsFound:
  51. payload = None
  52. except NoResultFound:
  53. payload = {
  54. 'id': google_user["sub"],
  55. 'avatar': google_user["picture"],
  56. 'username': google_user["name"],
  57. 'role': 'guest',
  58. 'link': google_user["profile"]
  59. }
  60. return payload