From f28781dd1dd718f45bf1cef82d1ce6eb4792b4ca Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Wed, 22 Jul 2026 17:37:10 +0200 Subject: Added management interface --- management/endpoints.py | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 management/endpoints.py (limited to 'management/endpoints.py') diff --git a/management/endpoints.py b/management/endpoints.py new file mode 100644 index 0000000..47602d6 --- /dev/null +++ b/management/endpoints.py @@ -0,0 +1,50 @@ +from fastapi import FastAPI, Request +from sqlalchemy import func +from sqlmodel import select +from starlette.authentication import requires +from starlette.middleware.authentication import AuthenticationMiddleware +from starlette.middleware.sessions import SessionMiddleware +from starlette.responses import RedirectResponse +from starlette.templating import Jinja2Templates + +import conf +from authentication.backend import SessionAuthBackend +from db.models import User +from db.session import get_session_context + +management = FastAPI() +management.add_middleware(AuthenticationMiddleware, backend=SessionAuthBackend()) +management.add_middleware(SessionMiddleware, secret_key=conf.SECRET_KEY) + +templates = Jinja2Templates(directory=[ + 'templates', + 'management/templates' +]) + +@management.get('/') +async def index(request: Request): + with get_session_context() as session: + query = select(func.count(User.id)) + user_count = session.exec(query) + + if user_count.first() == 0: + return RedirectResponse('/auth/register/?next=/management/dashboard/', status_code=303) + + return RedirectResponse('/management/dashboard/', status_code=303) + + +@management.get('/dashboard/') +@requires(['authenticated', 'session'], redirect='get_login') +async def dashboard(request: Request): + return templates.TemplateResponse(request, 'dashboard.html') + +@management.get('/users/') +@requires(['authenticated', 'session'], redirect='get_login') +async def users(request: Request): + with get_session_context() as session: + query = select(User) + users = session.exec(query).all() + + return templates.TemplateResponse(request, 'users.html', context={ + 'users': users + }) -- cgit v1.2.3