Mise à jour de la configuration de la base de données pour utiliser PostgreSQL et ajout de Redis dans le fichier .env. Modifications du Dockerfile pour installer les dépendances nécessaires. Amélioration des services de stockage pour supporter les opérations asynchrones avec S3 et le stockage local. Refactorisation des pipelines d'images pour une meilleure gestion des tâches asynchrones. Ajout de la gestion des clés API dans l'authentification. Mise à jour de la documentation et des exemples d'utilisation.
This commit is contained in:
+18
-12
@@ -26,33 +26,39 @@ def hash_api_key(api_key: str) -> str:
|
||||
|
||||
async def verify_api_key(
|
||||
request: Request,
|
||||
authorization: str = Header(
|
||||
...,
|
||||
authorization: str | None = Header(
|
||||
None,
|
||||
alias="Authorization",
|
||||
description="Clé API au format 'Bearer <key>'",
|
||||
),
|
||||
x_api_key: str | None = Header(
|
||||
None,
|
||||
alias="X-API-Key",
|
||||
description="Clé API alternative",
|
||||
),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
) -> APIClient:
|
||||
"""
|
||||
Vérifie la clé API fournie dans le header Authorization.
|
||||
Vérifie la clé API fournie dans le header Authorization ou X-API-Key.
|
||||
Injecte client_id et client_plan dans request.state pour le rate limiter.
|
||||
|
||||
Raises:
|
||||
HTTPException 401: clé absente, invalide ou client inactif.
|
||||
"""
|
||||
# ── Extraction du token ───────────────────────────────────
|
||||
if not authorization.startswith("Bearer "):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Authentification requise",
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
)
|
||||
raw_key = None
|
||||
|
||||
# ── 1. Tentative avec Authorization: Bearer <key> ────────
|
||||
if authorization and authorization.startswith("Bearer "):
|
||||
raw_key = authorization[7:].strip()
|
||||
|
||||
# ── 2. Tentative avec X-API-Key ──────────────────────────
|
||||
if not raw_key and x_api_key:
|
||||
raw_key = x_api_key.strip()
|
||||
|
||||
raw_key = authorization[7:] # strip "Bearer "
|
||||
if not raw_key:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Authentification requise",
|
||||
detail="Authentification requise (Header Authorization ou X-API-Key manquant)",
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user