acm-site/acmsite/auth/__init__.py
2024-03-03 17:52:34 -05:00

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'))