Spaces:
Running
Running
| 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 | |
| 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), | |
| } | |
| def me(request: Request) -> dict[str, Any]: | |
| user = auth_service.require_user(request) | |
| return {"usuario": auth_service.public_user(user)} | |
| 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"} | |