PageRenderTime 44ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/api/routes/TwitterRedirect.py

https://gitlab.com/fdemian/Shelob
Python | 63 lines | 46 code | 16 blank | 1 comment | 6 complexity | 01964650edeae3edc80b97f650916b3d MD5 | raw file
  1. from tornado import gen
  2. from tornado.web import RequestHandler
  3. from tornado.auth import TwitterMixin, AuthError
  4. from tornado.escape import json_encode
  5. from api.model.sessionHelper import get_session
  6. from api.model.models import User
  7. from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
  8. class TwitterHandler(RequestHandler, TwitterMixin):
  9. @gen.coroutine
  10. def get(self):
  11. if self.get_argument("oauth_token", None):
  12. response = yield self.get_authenticated_user(include_email="true")
  13. # Save the user using e.g. set_secure_cookie()
  14. del response["description"]
  15. twitter_user = json_encode(response)
  16. if not twitter_user:
  17. return None
  18. user = self.get_user(twitter_user)
  19. return user
  20. else:
  21. yield self.authorize_redirect()
  22. @staticmethod
  23. def get_user(twitter_user):
  24. try:
  25. session_object = get_session()
  26. session = session_object()
  27. user = session.query(User).filter(User.email == twitter_user['email']).one()
  28. user_link = '/users/' + str(user.id) + "/" + user.username
  29. payload = {
  30. 'id': user.id,
  31. 'avatar': user.avatar,
  32. 'username': user.username,
  33. 'role': 'author',
  34. 'link': user_link
  35. }
  36. except MultipleResultsFound:
  37. payload = None
  38. except NoResultFound:
  39. payload = {
  40. 'id': twitter_user["id_str"],
  41. 'avatar': twitter_user["profile_image_url"],
  42. 'username': twitter_user["name"],
  43. 'role': 'guest',
  44. 'link': "" # Twitter does not provide a link to its users profile by default.
  45. }
  46. return payload