PageRenderTime 47ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/api/authentication/GithubService.py

https://gitlab.com/fdemian/Shelob
Python | 112 lines | 101 code | 2 blank | 9 comment | 0 complexity | 524d61e32aa09fe90b7b099177b30233 MD5 | raw file
  1. import tornado
  2. import tornado.web
  3. from .GithubMixin import GithubOAuth2Mixin
  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. from tornado.httpclient import AsyncHTTPClient
  9. from urllib.parse import urlencode
  10. def on_user_obtained(user):
  11. print(user)
  12. """
  13. class GithubAuthService(RequestHandler, GithubOAuth2Mixin):
  14. @tornado.gen.coroutine
  15. def get(self, auth_code, redirect_url):
  16. options = get_oauth_settings()
  17. github_token_request_url = "https://github.com/login/oauth/access_token"
  18. github_user_info_endpoint = "https://api.github.com/user"
  19. args = {
  20. "client_id": options.github_client_id,
  21. "client_secret": options.github_client_secret,
  22. "redirect_uri": redirect_url,
  23. "code": auth_code
  24. }
  25. user = yield self.get_authenticated_user(
  26. redirect_uri=redirect_url,
  27. client_id=options.github_client_id,
  28. client_secret=options.github_client_secret,
  29. code=auth_code,
  30. callback=on_user_obtained
  31. )
  32. # access = yield self.oauth2_request(github_token_request_url, post_args=args)
  33. #token = access["access_token"]
  34. # expires_in = access["expires_in"]
  35. print(user)
  36. #print("____________________________________")
  37. # github_user = yield self.oauth2_request(github_user_info_endpoint, access_token=token)
  38. #print(github_user)
  39. #("____________________________________")
  40. #if not github_user:
  41. # return None
  42. #user = self.get_user(github_user)
  43. #return user
  44. return None
  45. @staticmethod
  46. def print_result(response):
  47. print(response.request.headers)
  48. print(response.body)
  49. def get_auth_http_client(self):
  50. http_headers = tornado.httputil.HTTPHeaders({"Accept": "application/json"})
  51. AsyncHTTPClient.configure(None, defaults=dict(headers=http_headers))
  52. return AsyncHTTPClient(defaults=dict(headers=http_headers))
  53. @tornado.gen.coroutine
  54. def handle_token_response(response):
  55. print(response.body)
  56. @staticmethod
  57. def get_user(google_user):
  58. try:
  59. session_object = get_session()
  60. session = session_object()
  61. user = session.query(User).filter(User.email == google_user['email']).one()
  62. user_link = '/users/' + str(user.id) + "/" + user.username
  63. payload = {
  64. 'id': user.id,
  65. 'avatar': user.avatar,
  66. 'username': user.username,
  67. 'role': 'author',
  68. 'link': user_link
  69. }
  70. except MultipleResultsFound:
  71. payload = None
  72. except NoResultFound:
  73. payload = {
  74. 'id': google_user["sub"],
  75. 'avatar': google_user["picture"],
  76. 'username': google_user["name"],
  77. 'role': 'guest',
  78. 'link': google_user["profile"]
  79. }
  80. return payload
  81. """