from fastapi import Header, HTTPException import time # Demo API keys (later move to DB) API_KEYS = { "free_key_123": {"plan": "free", "limit": 100}, "pro_key_456": {"plan": "pro", "limit": 10000}, } request_log = {} def verify_api_key(x_api_key: str = Header(...)): if x_api_key not in API_KEYS: raise HTTPException( status_code=401, detail="Invalid API Key" ) key_data = API_KEYS[x_api_key] now = int(time.time()) window = 60 # 1 minute window logs = request_log.get(x_api_key, []) logs = [t for t in logs if now - t < window] if len(logs) >= key_data["limit"]: raise HTTPException( status_code=429, detail=f"Rate limit exceeded for {key_data['plan']} plan" ) logs.append(now) request_log[x_api_key] = logs return key_data