Compare commits
No commits in common. 'master' and 'refactor' have entirely different histories.
@ -1,5 +1,3 @@
|
|||||||
peewee
|
peewee
|
||||||
quart
|
quart
|
||||||
Quart-Keycloak
|
quart_session_openid
|
||||||
uvicorn
|
|
||||||
redis
|
|
||||||
|
@ -1,34 +1,28 @@
|
|||||||
import re
|
|
||||||
|
|
||||||
import peewee
|
import peewee
|
||||||
from quart import session, redirect, url_for, current_app
|
from quart import session, redirect, url_for
|
||||||
from quart_keycloak import Keycloak, KeycloakAuthToken, KeycloakLogoutRequest
|
|
||||||
from yellow.factory import keycloak
|
from yellow.factory import openid
|
||||||
from yellow.models import User
|
from yellow.models import User
|
||||||
|
|
||||||
|
|
||||||
@keycloak.after_login()
|
@openid.after_token()
|
||||||
async def handle_user_login(auth_token: KeycloakAuthToken):
|
async def handle_user_login(resp: dict):
|
||||||
username = auth_token.username
|
access_token = resp["access_token"]
|
||||||
uid = auth_token.sub
|
openid.verify_token(access_token)
|
||||||
|
|
||||||
if not re.match(r"^[a-zA-Z0-9_\.-]+$", username):
|
user = await openid.user_info(access_token)
|
||||||
raise Exception("bad username")
|
username = user['preferred_username']
|
||||||
|
uid = user['sub']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user = User.select().where(User.username == username).get()
|
user = User.select().where(User.id == uid).get()
|
||||||
except Exception as ex:
|
except peewee.DoesNotExist:
|
||||||
user = None
|
user = None
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
# create new user if it does not exist yet
|
# create new user if it does not exist yet
|
||||||
current_app.logger.info(f'User {username} not found, creating')
|
user = User.create(id=uid, username=username)
|
||||||
try:
|
|
||||||
user = User.create(id=uid, username=username)
|
|
||||||
except Exception as ex:
|
|
||||||
current_app.logger.debug(f'User {username}, creation error')
|
|
||||||
raise
|
|
||||||
|
|
||||||
# user is now logged in
|
# user is now logged in
|
||||||
session['user'] = user.to_json()
|
session['user'] = user.to_json()
|
||||||
return redirect(url_for('bp_routes.dashboard'))
|
return redirect(url_for('bp_routes.root'))
|
||||||
|
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 2.1 KiB |
@ -1,3 +0,0 @@
|
|||||||
<form action="{{ url_for('bp_routes.search') }}" method="GET">
|
|
||||||
<input type="text" name="username" placeholder="Search for an username...">
|
|
||||||
</form>
|
|
@ -1,11 +0,0 @@
|
|||||||
<div id="addresses">
|
|
||||||
{% for user in users %}
|
|
||||||
<article>
|
|
||||||
<header>
|
|
||||||
<em><a href="{{ url_for('bp_routes.user_page', name=user.username) }}">{{user.username}}</a></em>
|
|
||||||
<small style="float: right">Added: {{ user.created_dt }}</small>
|
|
||||||
</header>
|
|
||||||
<kbd>{{user.address}}</kbd>
|
|
||||||
</article>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
@ -1,42 +0,0 @@
|
|||||||
{% extends "base.html" %}
|
|
||||||
{% block content %}
|
|
||||||
<div style="display:none">
|
|
||||||
{% block title %}YellWOWPages - User{% endblock %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="main">
|
|
||||||
{% include 'includes/search.html' %}
|
|
||||||
|
|
||||||
{% if not users %}
|
|
||||||
<br>Nothing found...
|
|
||||||
{% else %}
|
|
||||||
{% include 'includes/user_results.html' %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
#main{
|
|
||||||
width: 100%;
|
|
||||||
height: 80vh;
|
|
||||||
display: grid;
|
|
||||||
place-content: center;
|
|
||||||
}
|
|
||||||
form{
|
|
||||||
height: 80px;
|
|
||||||
}
|
|
||||||
#addresses{
|
|
||||||
width: 100%;
|
|
||||||
height: 50vh;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
#addresses::-webkit-scrollbar{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
@media (max-width: 800px) {
|
|
||||||
kbd{
|
|
||||||
width: 100vw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
Loading…
Reference in new issue