from fastapi import APIRouter, Form, Request from fastapi.responses import RedirectResponse from fastapi.templating import Jinja2Templates from app.core.auth import authenticate_user router = APIRouter() templates = Jinja2Templates(directory="app/templates") @router.get("/login") def login_page(request: Request, error: str | None = None): if getattr(request.state, "current_user", None): return RedirectResponse(url="/", status_code=303) return templates.TemplateResponse( request=request, name="auth/login.html", context={"request": request, "error": error}, ) @router.post("/login") def login_submit(request: Request, username: str = Form(...), password: str = Form(...)): user = authenticate_user(username, password) if not user: return templates.TemplateResponse( request=request, name="auth/login.html", context={"request": request, "error": "Invalid username or password."}, status_code=400, ) request.session["current_user"] = user return RedirectResponse(url="/", status_code=303) @router.post("/logout") def logout_submit(request: Request): request.session.pop("current_user", None) return RedirectResponse(url="/login", status_code=303)