Spaces:
Running
Running
| #!/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) | |