feat: wire auth into main app, protect landing page, add create_admin script

This commit is contained in:
Oliver Hofmann
2026-04-27 13:07:51 +02:00
parent 1555dd925e
commit 05468edf9a
4 changed files with 111 additions and 18 deletions
+16 -4
View File
@@ -1,9 +1,12 @@
from fastapi import FastAPI, Request, WebSocket
from fastapi.responses import HTMLResponse
from fastapi import Depends, FastAPI, Request, WebSocket
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from app.core.config import get_settings
from app.core.database import get_db
from app.modules.auth.dependencies import RequiresLoginException, get_current_user
from app.modules.auth.router import router as auth_router
settings = get_settings()
@@ -15,6 +18,14 @@ app = FastAPI(
app.mount("/static", StaticFiles(directory="app/static"), name="static")
templates = Jinja2Templates(directory="app/templates")
app.include_router(auth_router)
@app.exception_handler(RequiresLoginException)
async def requires_login_handler(request: Request, exc: RequiresLoginException):
return RedirectResponse(url="/auth/login", status_code=307)
MODULES = [
{
"icon": "📡",
@@ -62,7 +73,7 @@ def _db_mode() -> str:
@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
async def root(request: Request, current_user=Depends(get_current_user)):
return templates.TemplateResponse(
request,
"index.html",
@@ -71,6 +82,7 @@ async def root(request: Request):
"modules": MODULES,
"db_mode": _db_mode(),
"app_version": "0.1.0",
"current_user": current_user,
},
)
@@ -79,4 +91,4 @@ async def root(request: Request):
async def websocket_hello(websocket: WebSocket, name: str):
await websocket.accept()
await websocket.send_text(f"Hello, {name}!")
await websocket.close()
await websocket.close()
+1 -1
View File
@@ -37,7 +37,7 @@ async def login(
request,
"auth/login.html",
{"nav_items": _NAV, "app_version": "0.1.0", "error": "Ungültige Zugangsdaten."},
status_code=401,
status_code=200,
)
token = create_access_token(username=user.username, is_admin=user.is_admin)
response = RedirectResponse(url="/", status_code=303)