53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
import datetime
|
|
from flask import Blueprint, redirect, render_template, url_for
|
|
import ulid
|
|
import flask_login
|
|
|
|
from acmsite.models import User
|
|
from acmsite import db
|
|
|
|
bp = Blueprint('auth', __name__, url_prefix='/auth')
|
|
|
|
from acmsite import oauth
|
|
|
|
|
|
@bp.route('/login')
|
|
def login():
|
|
return oauth.azure.authorize_redirect(url_for('auth.oauth2_callback',
|
|
_external=True))
|
|
|
|
@bp.route('/register')
|
|
def register():
|
|
return render_template('auth/register.html')
|
|
|
|
@bp.route("/oauth2")
|
|
def oauth2_callback():
|
|
token = oauth.azure.authorize_access_token()
|
|
resp = oauth.azure.get('me')
|
|
resp.raise_for_status()
|
|
profile = resp.json()
|
|
print(profile)
|
|
u = User.query.filter_by(email=profile['mail']).first()
|
|
if u is None:
|
|
u = User(
|
|
id=ulid.ulid(),
|
|
password='',
|
|
email=profile['mail'],
|
|
first_name=profile['givenName'],
|
|
last_name=profile['surname'],
|
|
created=datetime.datetime.now(),
|
|
last_login=datetime.datetime.now()
|
|
)
|
|
db.session.add(u)
|
|
db.session.commit()
|
|
else:
|
|
# Returning user
|
|
u.last_login = datetime.datetime.now()
|
|
db.session.commit()
|
|
flask_login.login_user(u)
|
|
return redirect('/')
|
|
|
|
@bp.route('/logout')
|
|
def logout():
|
|
flask_login.logout_user()
|
|
return redirect(url_for('main.homepage'))
|