oauth.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- encoding: utf-8 -*-
  2. """
  3. Copyright (c) 2019 - present AppSeed.us
  4. """
  5. import os
  6. from flask import current_app as app
  7. from flask_login import current_user, login_user
  8. from flask_dance.consumer import oauth_authorized
  9. from flask_dance.contrib.github import github, make_github_blueprint
  10. from flask_dance.consumer.storage.sqla import SQLAlchemyStorage
  11. from sqlalchemy.orm.exc import NoResultFound
  12. from apps.config import Config
  13. from .models import Users, db, OAuth
  14. from flask import redirect, url_for
  15. from flask import flash
  16. github_blueprint = make_github_blueprint(
  17. client_id=Config.GITHUB_ID,
  18. client_secret=Config.GITHUB_SECRET,
  19. scope = 'user',
  20. storage=SQLAlchemyStorage(
  21. OAuth,
  22. db.session,
  23. user=current_user,
  24. user_required=False,
  25. ),
  26. )
  27. @oauth_authorized.connect_via(github_blueprint)
  28. def github_logged_in(blueprint, token):
  29. info = github.get("/user")
  30. if info.ok:
  31. account_info = info.json()
  32. username = account_info["login"]
  33. query = Users.query.filter_by(oauth_github=username)
  34. try:
  35. user = query.one()
  36. login_user(user)
  37. except NoResultFound:
  38. # Save to db
  39. user = Users()
  40. user.username = '(gh)' + username
  41. user.oauth_github = username
  42. # Save current user
  43. db.session.add(user)
  44. db.session.commit()
  45. login_user(user)