File size: 1,007 Bytes
bffe28b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/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)