feat: Semaine 8

This commit is contained in:
gauvainboiche
2026-05-11 09:25:19 +02:00
parent 606e43e53f
commit 3315cb2336
123 changed files with 5748 additions and 0 deletions
@@ -0,0 +1,51 @@
from fastapi import APIRouter, Depends, Form, Request
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates
from domain import services
from domain.exceptions import AuthenticationError
from infra.database import get_database_connection
from infra.repositories import UserRepository
import infra.crypto as crypto
router = APIRouter()
templates = Jinja2Templates(directory="presentation/templates")
def _get_db():
conn = get_database_connection()
try:
yield conn
finally:
conn.close()
@router.get("/login", response_class=HTMLResponse)
def login_page(request: Request):
if request.session.get("user_id"):
return RedirectResponse(url="/secrets", status_code=302)
return templates.TemplateResponse(request, "login.html", {"user": None, "error": None})
@router.post("/login")
def login(
request: Request,
username: str = Form(...),
password: str = Form(...),
conn=Depends(_get_db),
):
user_repo = UserRepository(conn)
try:
user = services.authenticate_user(username, password, user_repo, crypto)
except AuthenticationError as exc:
return templates.TemplateResponse(
request,
"login.html",
{"user": None, "error": str(exc)},
status_code=401,
)
request.session["user_id"] = user.id
request.session["username"] = user.username
return RedirectResponse(url="/secrets", status_code=302)
@router.get("/logout")
def logout(request: Request):
request.session.clear()
return RedirectResponse(url="/login", status_code=302)