2022-03-23 10:04:02 +00:00
|
|
|
import re
|
|
|
|
|
2022-03-12 12:46:31 +00:00
|
|
|
import peewee
|
|
|
|
from quart import session, redirect, url_for
|
|
|
|
|
|
|
|
from yellow.factory import openid
|
|
|
|
from yellow.models import User
|
|
|
|
|
|
|
|
|
|
|
|
@openid.after_token()
|
|
|
|
async def handle_user_login(resp: dict):
|
|
|
|
access_token = resp["access_token"]
|
|
|
|
openid.verify_token(access_token)
|
|
|
|
|
|
|
|
user = await openid.user_info(access_token)
|
|
|
|
username = user['preferred_username']
|
|
|
|
uid = user['sub']
|
|
|
|
|
2022-03-23 10:04:02 +00:00
|
|
|
if not re.match(r"^[a-zA-Z0-9_\.-]+$", username):
|
|
|
|
raise Exception("bad username")
|
|
|
|
|
2022-03-12 12:46:31 +00:00
|
|
|
try:
|
|
|
|
user = User.select().where(User.id == uid).get()
|
|
|
|
except peewee.DoesNotExist:
|
|
|
|
user = None
|
|
|
|
|
|
|
|
if not user:
|
|
|
|
# create new user if it does not exist yet
|
|
|
|
user = User.create(id=uid, username=username)
|
|
|
|
|
|
|
|
# user is now logged in
|
|
|
|
session['user'] = user.to_json()
|
2022-03-12 17:13:50 +00:00
|
|
|
return redirect(url_for('bp_routes.dashboard'))
|