oc_p5-dev / src /rate_limit.py
ASI-Engineer's picture
Upload folder using huggingface_hub
bffe28b verified
#!/usr/bin/env python3
"""
Module de rate limiting pour protéger l'API contre les abus.
Utilise SlowAPI pour limiter le nombre de requêtes par IP/utilisateur.
"""
from slowapi import Limiter
from slowapi.util import get_remote_address
from src.config import get_settings
settings = get_settings()
# Créer le limiter avec stratégie par IP
limiter = Limiter(
key_func=get_remote_address,
default_limits=["100/minute"] if not settings.DEBUG else [],
storage_uri="memory://", # En production: utiliser Redis
strategy="fixed-window",
)
def get_rate_limit_key(request):
"""
Fonction pour obtenir la clé de rate limiting.
En production, on pourrait utiliser l'API Key au lieu de l'IP.
Args:
request: Requête FastAPI.
Returns:
Clé unique pour identifier l'utilisateur.
"""
# Priorité: API Key > IP
api_key = request.headers.get("X-API-Key")
if api_key:
return f"api_key:{api_key}"
return get_remote_address(request)