document-processor/app/routes/auth.py

40 lines
1.3 KiB
Python

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)