File size: 1,998 Bytes
3635acb
bccef3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# import os # Supprimé car inutilisé
import logging
from typing import Optional
from fastapi import Header, HTTPException

from config.settings import API_KEY, MANAGEMENT_API_KEY

logger = logging.getLogger(__name__)

async def verify_api_key(api_key: Optional[str] = Header(None, alias="X-API-Key")):
    """Vérifie si la clé API client fournie correspond à celle configurée."""
    if not API_KEY:
        logger.error("API_KEY environment variable is not set. Client endpoints are unsecured!")
        # Bloquer si aucune clé n'est définie pour éviter l'accès non sécurisé
        raise HTTPException(status_code=503, detail="Server configuration error: API Key not set.")

    # Gestion de plusieurs clés possibles séparées par des virgules
    valid_keys = [key.strip() for key in API_KEY.split(',')]
    
    if api_key is None or api_key not in valid_keys:
        logger.warning("Invalid or missing client API key attempt.")
        # Utiliser 403 Forbidden car l'authentification a échoué
        raise HTTPException(
            status_code=403,
            detail="Invalid or missing API Key"
        )
    # logger.debug("Client API Key verified successfully.") # Optionnel: Peut être bruyant
    return True # Clé valide

async def verify_management_api_key(x_api_key: Optional[str] = Header(None, alias="X-API-Key")):
    """Vérifie si la clé API de gestion fournie correspond à celle configurée."""
    if not MANAGEMENT_API_KEY:
        logger.warning("MANAGEMENT_API_KEY is not set. Management endpoints are inaccessible!")
        raise HTTPException(status_code=503, detail="Management API key not configured on server.")
    
    if not x_api_key or x_api_key != MANAGEMENT_API_KEY:
        logger.warning("Invalid or missing management API key attempt.")
        raise HTTPException(status_code=403, detail="Invalid or missing Management API Key")
    # logger.debug("Management API Key verified successfully.") # Optionnel
    return True # Clé valide