mirror of
https://git.wownero.com/wownero/YellWOWPages.git
synced 2024-08-15 01:03:25 +00:00
upgrade OIDC client library
This commit is contained in:
parent
62add16c0a
commit
d9e47f51c6
4 changed files with 18 additions and 20 deletions
|
@ -1,3 +1,4 @@
|
||||||
peewee
|
peewee
|
||||||
quart
|
quart
|
||||||
quart_session_openid
|
Quart-Keycloak
|
||||||
|
uvicorn
|
|
@ -3,19 +3,13 @@ import re
|
||||||
import peewee
|
import peewee
|
||||||
from quart import session, redirect, url_for
|
from quart import session, redirect, url_for
|
||||||
|
|
||||||
from yellow.factory import openid
|
from yellow.factory import keycloak
|
||||||
from yellow.models import User
|
from yellow.models import User
|
||||||
|
|
||||||
|
|
||||||
@openid.after_token()
|
@keycloak.after_login()
|
||||||
async def handle_user_login(resp: dict):
|
async def handle_user_login(auth_token: KeycloakAuthToken):
|
||||||
access_token = resp["access_token"]
|
username = auth_token.username
|
||||||
openid.verify_token(access_token)
|
|
||||||
|
|
||||||
user = await openid.user_info(access_token)
|
|
||||||
username = user['preferred_username']
|
|
||||||
uid = user['sub']
|
|
||||||
|
|
||||||
if not re.match(r"^[a-zA-Z0-9_\.-]+$", username):
|
if not re.match(r"^[a-zA-Z0-9_\.-]+$", username):
|
||||||
raise Exception("bad username")
|
raise Exception("bad username")
|
||||||
|
|
||||||
|
|
|
@ -4,15 +4,21 @@ from datetime import datetime
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from quart import Quart, url_for, jsonify, render_template, session
|
from quart import Quart, url_for, jsonify, render_template, session
|
||||||
from quart_session_openid import OpenID
|
|
||||||
from quart_session import Session
|
from quart_session import Session
|
||||||
|
from quart_keycloak import Keycloak, KeycloakAuthToken, KeycloakLogoutRequest
|
||||||
|
from quart_session import Session
|
||||||
|
from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware
|
||||||
import settings
|
import settings
|
||||||
|
|
||||||
|
|
||||||
app: Quart = None
|
app: Quart = None
|
||||||
peewee = None
|
peewee = None
|
||||||
cache = None
|
cache = None
|
||||||
openid: OpenID = None
|
|
||||||
|
if settings.X_FORWARDED:
|
||||||
|
app.asgi_app = ProxyHeadersMiddleware(app.asgi_app, trusted_hosts=["127.0.0.1", "10.1.0.1"])
|
||||||
|
|
||||||
|
keycloak = Keycloak(app, **settings.OPENID_CFG)
|
||||||
|
|
||||||
|
|
||||||
async def _setup_database(app: Quart):
|
async def _setup_database(app: Quart):
|
||||||
|
@ -24,8 +30,6 @@ async def _setup_database(app: Quart):
|
||||||
|
|
||||||
|
|
||||||
async def _setup_openid(app: Quart):
|
async def _setup_openid(app: Quart):
|
||||||
global openid
|
|
||||||
openid = OpenID(app, **settings.OPENID_CFG)
|
|
||||||
from yellow.auth import handle_user_login
|
from yellow.auth import handle_user_login
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,13 +63,12 @@ def create_app():
|
||||||
|
|
||||||
@app.context_processor
|
@app.context_processor
|
||||||
def template_variables():
|
def template_variables():
|
||||||
global openid
|
|
||||||
from yellow.models import User
|
from yellow.models import User
|
||||||
current_user = session.get('user')
|
current_user = session.get('user')
|
||||||
if current_user:
|
if current_user:
|
||||||
current_user = User(**current_user)
|
current_user = User(**current_user)
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
return dict(user=current_user, url_login=openid.endpoint_name_login, year=now.year)
|
return dict(user=current_user, url_login=keycloak.endpoint_name_login, year=now.year)
|
||||||
|
|
||||||
@app.before_serving
|
@app.before_serving
|
||||||
async def startup():
|
async def startup():
|
||||||
|
|
|
@ -2,7 +2,6 @@ from quart import render_template, request, redirect, url_for, jsonify, Blueprin
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from yellow import login_required
|
from yellow import login_required
|
||||||
from yellow.factory import openid
|
|
||||||
from yellow.models import User
|
from yellow.models import User
|
||||||
|
|
||||||
bp_routes = Blueprint('bp_routes', __name__)
|
bp_routes = Blueprint('bp_routes', __name__)
|
||||||
|
@ -15,7 +14,8 @@ async def root():
|
||||||
|
|
||||||
@bp_routes.route("/login")
|
@bp_routes.route("/login")
|
||||||
async def login():
|
async def login():
|
||||||
return redirect(url_for(openid.endpoint_name_login))
|
from yellow.factory import keycloak
|
||||||
|
return redirect(url_for(keycloak.endpoint_name_login))
|
||||||
|
|
||||||
|
|
||||||
@bp_routes.route("/logout")
|
@bp_routes.route("/logout")
|
||||||
|
|
Loading…
Reference in a new issue