59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
# -*- encoding: utf-8 -*-
|
|
"""
|
|
Copyright (c) 2019 - present AppSeed.us
|
|
"""
|
|
|
|
import os
|
|
from flask import current_app as app
|
|
from flask_login import current_user, login_user
|
|
from flask_dance.consumer import oauth_authorized
|
|
from flask_dance.contrib.github import github, make_github_blueprint
|
|
from flask_dance.consumer.storage.sqla import SQLAlchemyStorage
|
|
from flask_dance.contrib.twitter import twitter, make_twitter_blueprint
|
|
from sqlalchemy.orm.exc import NoResultFound
|
|
from apps.config import Config
|
|
from .models import Users, db, OAuth
|
|
from flask import redirect, url_for
|
|
from flask import flash
|
|
|
|
github_blueprint = make_github_blueprint(
|
|
client_id=Config.GITHUB_ID,
|
|
client_secret=Config.GITHUB_SECRET,
|
|
scope = 'user',
|
|
storage=SQLAlchemyStorage(
|
|
OAuth,
|
|
db.session,
|
|
user=current_user,
|
|
user_required=False,
|
|
),
|
|
)
|
|
|
|
@oauth_authorized.connect_via(github_blueprint)
|
|
def github_logged_in(blueprint, token):
|
|
info = github.get("/user")
|
|
|
|
if info.ok:
|
|
|
|
account_info = info.json()
|
|
username = account_info["login"]
|
|
|
|
query = Users.query.filter_by(oauth_github=username)
|
|
try:
|
|
|
|
user = query.one()
|
|
login_user(user)
|
|
|
|
except NoResultFound:
|
|
|
|
# Save to db
|
|
user = Users()
|
|
user.username = '(gh)' + username
|
|
user.oauth_github = username
|
|
|
|
# Save current user
|
|
db.session.add(user)
|
|
db.session.commit()
|
|
|
|
login_user(user)
|
|
|