"""Rotas de login/logout.""" from __future__ import annotations from fastapi import APIRouter, Form, Request from starlette.responses import RedirectResponse from .. import auth from ..templating import flash, render router = APIRouter() @router.get("/login") def login_form(request: Request): if auth.current_user(request): return RedirectResponse("/", status_code=303) return render(request, "login.html", hide_nav=True) @router.post("/login") def login_submit( request: Request, username: str = Form(...), password: str = Form(...), csrf_token: str = Form(""), ): if not auth.check_csrf(request, csrf_token): flash(request, "Sessão expirada. Tente novamente.", "error") return RedirectResponse("/login", status_code=303) if auth.authenticate(username.strip(), password): auth.login_session(request, username.strip()) flash(request, "Bem-vindo de volta.", "success") return RedirectResponse("/", status_code=303) flash(request, "Usuário ou senha inválidos.", "error") return RedirectResponse("/login", status_code=303) @router.post("/logout") def logout(request: Request, csrf_token: str = Form("")): if auth.check_csrf(request, csrf_token): auth.logout_session(request) return RedirectResponse("/login", status_code=303)