Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. import facebook
  2. from flask.ext.security.decorators import anonymous_user_required
  3. from flask.ext.social.utils import get_provider_or_404
  4. from flask.ext.social.views import _security, login_handler
  5.  
  6. @app.route('/login_social/<provider_id>', methods=['GET', 'POST'])
  7. @anonymous_user_required
  8. def login_social(provider_id=None):
  9. """
  10. Login via credentials from a social network. For now only supports
  11. Facebook.
  12. """
  13. # TODO: add support for other providers
  14. if not provider_id or provider_id != 'facebook':
  15. abort(404)
  16.  
  17. if request.json:
  18. form_data = MultiDict(request.json)
  19. else:
  20. form_data = request.form
  21.  
  22. form = LoginSocialForm(form_data)
  23.  
  24. if form.validate_on_submit():
  25. access_token = form_data['token']
  26. provider = get_provider_or_404(provider_id)
  27.  
  28. # validate/debug the token
  29. graph = facebook.GraphAPI(access_token)
  30. token_info = graph.get_object("/debug_token?input_token=%s" %
  31. access_token)
  32. debug("Got token info: %s", token_info)
  33.  
  34. def validate_token_info(token_info):
  35. # We got a response
  36. if not token_info:
  37. return False
  38.  
  39. # We can read it
  40. if not token_info['data']:
  41. return False
  42.  
  43. # The token is valid
  44. if not token_info['data']['is_valid']:
  45. return False
  46.  
  47. # The app ID matches
  48. if token_info['data']['app_id'] != provider.consumer_key:
  49. return False
  50.  
  51. return True
  52.  
  53. if not validate_token_info(token_info):
  54. do_flash('Invalid token for %s' % provider.name, 'error')
  55. return _security.login_manager.unauthorized(), None
  56.  
  57. # look for a connection
  58. query = dict(
  59. provider_user_id=token_info['data']['user_id'],
  60. provider_id=provider_id)
  61.  
  62. # login, or fail back to register workflow. The first argument, the
  63. # oauth response, is probably unused and anyway we don't really have
  64. # one.
  65. return login_handler(None, provider, query)
  66.  
  67. if request.json:
  68. return _render_json(form)
  69.  
  70. return render_template('login_social.html', form=form, provider=provider_id)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement