acm-site/acmsite/auth/__init__.py
Cara Salter 87adc200b3
Initial work on local passwords.
- Create password change modal on user dashboard
- Split login into two flows -- WPI and local

Need to define password strength requirements and create local login
page, as well as allow for setting an alternative contact email.
2024-05-04 11:21:32 +10:00

57 lines
1.5 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 render_template('login.html')
@bp.route('/oauth')
def oauth_redirect():
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(microsoft_id=profile['id']).first()
if u is None:
u = User(
id=ulid.ulid(),
microsoft_id=profile['id'],
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'))