import html from fastapi import APIRouter, Form, Request from fastapi.responses import HTMLResponse, RedirectResponse from app.auth import authenticate_user, current_user from app.templates.layout import page router = APIRouter() @router.get("/login", response_class=HTMLResponse) def login_form(request: Request): if current_user(request): return RedirectResponse(url="/portal", status_code=303) return _render_login() @router.post("/login", response_class=HTMLResponse) def login(request: Request, username: str = Form(...), password: str = Form(...)): user = authenticate_user(username, password) if not user: return _render_login("Neplatné přihlašovací údaje.") request.session.clear() request.session["user_id"] = user["id"] return RedirectResponse(url="/portal", status_code=303) @router.post("/logout") def logout(request: Request): request.session.clear() return RedirectResponse(url="/portal/login", status_code=303) def _render_login(error: str | None = None) -> str: error_html = "" if error: error_html = f'
{html.escape(error)}
' return page( "Přihlášení", f"""Přihlaste se interním účtem AppFactory.
{error_html}