Spaces:
Running
Running
File size: 1,485 Bytes
385f196 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | from __future__ import annotations
from typing import Any
from fastapi import APIRouter, Request
from pydantic import BaseModel
from app.services import auth_service
from app.services.audit_log_service import log_event
router = APIRouter(prefix="/api/auth", tags=["auth"])
class LoginPayload(BaseModel):
usuario: str
matricula: str
@router.post("/login")
def login(payload: LoginPayload, request: Request) -> dict[str, Any]:
try:
user = auth_service.authenticate_user(payload.usuario, payload.matricula)
except Exception:
log_event(
"auth",
"login",
status="fail",
details={"usuario_informado": str(payload.usuario or "").strip()},
request=request,
)
raise
token = auth_service.create_auth_session(user)
log_event("auth", "login", user=user, status="ok", request=request)
return {
"token": token,
"usuario": auth_service.public_user(user),
}
@router.get("/me")
def me(request: Request) -> dict[str, Any]:
user = auth_service.require_user(request)
return {"usuario": auth_service.public_user(user)}
@router.post("/logout")
def logout(request: Request) -> dict[str, str]:
user = auth_service.require_user(request)
token = auth_service.extract_token_from_request(request)
auth_service.destroy_auth_session(token)
log_event("auth", "logout", user=user, status="ok", request=request)
return {"status": "ok"}
|