Skip to content

Commit 8973b5e

Browse files
committed
refactor(backend): extract api_keys routes
1 parent 9ee9f67 commit 8973b5e

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

backend/routes/api_keys.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""API key management and metrics routes."""
2+
from fastapi import APIRouter, Depends
3+
from pydantic import BaseModel
4+
5+
from dependencies import api_key_manager, rate_limiter, metrics
6+
from middleware.auth import require_auth, AuthContext
7+
8+
router = APIRouter(prefix="/api", tags=["API Keys"])
9+
10+
11+
class CreateAPIKeyRequest(BaseModel):
12+
name: str
13+
tier: str = "free"
14+
15+
16+
@router.get("/metrics")
17+
async def get_performance_metrics(
18+
auth: AuthContext = Depends(require_auth)
19+
):
20+
"""Get performance metrics and monitoring data."""
21+
return metrics.get_metrics()
22+
23+
24+
@router.post("/keys/generate")
25+
async def generate_api_key(
26+
request: CreateAPIKeyRequest,
27+
auth: AuthContext = Depends(require_auth)
28+
):
29+
"""Generate a new API key."""
30+
new_key = api_key_manager.generate_key(
31+
name=request.name,
32+
tier=request.tier,
33+
user_id=auth.user_id
34+
)
35+
36+
return {
37+
"api_key": new_key,
38+
"tier": request.tier,
39+
"name": request.name,
40+
"message": "Save this key securely - it won't be shown again"
41+
}
42+
43+
44+
@router.get("/keys/usage")
45+
async def get_api_usage(
46+
auth: AuthContext = Depends(require_auth)
47+
):
48+
"""Get current API usage stats."""
49+
usage = rate_limiter.get_usage(auth.identifier)
50+
51+
return {
52+
"tier": auth.tier,
53+
"limits": {
54+
"free": {"minute": 20, "hour": 200, "day": 1000},
55+
"pro": {"minute": 100, "hour": 2000, "day": 20000},
56+
"enterprise": {"minute": 500, "hour": 10000, "day": 100000}
57+
}[auth.tier],
58+
"usage": usage
59+
}

0 commit comments

Comments
 (0)