
- 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.
57 lines
1.5 KiB
Python
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'))
|