Spaces:
Running
Running
| from __future__ import annotations | |
| import time | |
| from fastapi import APIRouter, Depends | |
| from app.api.deps import require_auth | |
| from app.models.schemas import ( | |
| TokenGenerateRequest, | |
| TokenGenerateResponse, | |
| TokenValidateRequest, | |
| TokenValidateResponse, | |
| ) | |
| from app.services.jwt_service import JWTService | |
| router = APIRouter() | |
| _service = JWTService() | |
| async def generate_token( | |
| body: TokenGenerateRequest, | |
| auth: str = Depends(require_auth), | |
| ) -> TokenGenerateResponse: | |
| start = time.perf_counter() | |
| try: | |
| result = _service.generate( | |
| subject=body.subject, | |
| role=body.role, | |
| permissions=body.permissions, | |
| issuer=body.issuer, | |
| audience=body.audience, | |
| expiry_minutes=body.expiry_minutes, | |
| not_before_minutes=body.not_before_minutes, | |
| extra_claims=body.extra_claims, | |
| secret=body.secret, | |
| algorithm=body.algorithm, | |
| ) | |
| elapsed_ms = round((time.perf_counter() - start) * 1000, 3) | |
| return TokenGenerateResponse( | |
| success=True, | |
| time_ms=elapsed_ms, | |
| token=result["token"], | |
| claims=result["claims"], | |
| expires_at=result["expires_at"], | |
| valid_for=result.get("valid_for"), | |
| secret=result.get("secret"), | |
| algorithm=result["algorithm"], | |
| ) | |
| except Exception as exc: | |
| elapsed_ms = round((time.perf_counter() - start) * 1000, 3) | |
| return TokenGenerateResponse( | |
| success=False, | |
| time_ms=elapsed_ms, | |
| error=str(exc), | |
| ) | |
| async def validate_token( | |
| body: TokenValidateRequest, | |
| auth: str = Depends(require_auth), | |
| ) -> TokenValidateResponse: | |
| start = time.perf_counter() | |
| try: | |
| result = _service.validate(body.token, body.audience, body.secret, body.algorithm) | |
| elapsed_ms = round((time.perf_counter() - start) * 1000, 3) | |
| return TokenValidateResponse( | |
| success=True, | |
| time_ms=elapsed_ms, | |
| valid=result["valid"], | |
| claims=result["claims"], | |
| error=result["error"], | |
| ) | |
| except Exception as exc: | |
| elapsed_ms = round((time.perf_counter() - start) * 1000, 3) | |
| return TokenValidateResponse( | |
| success=False, | |
| time_ms=elapsed_ms, | |
| valid=False, | |
| error=str(exc), | |
| ) | |