CyberArena / app /api /xp.py
Hussien Haider
H
3c7b4e4
Raw
History Blame Contribute Delete
1.12 kB
"""``/api/xp`` — proxy to the Supabase ``apex-xp`` edge function."""
import httpx
from fastapi import APIRouter, Depends, HTTPException, Request
from slowapi import Limiter
from slowapi.util import get_remote_address
from app.core.auth import get_current_user
from app.core.config import SUPABASE_EDGE_URL
from app.types import XpRequest
router = APIRouter()
# Rate limiter: 10 XP requests per minute per IP
limiter = Limiter(key_func=get_remote_address)
@router.post("/api/xp")
@limiter.limit("10/minute")
async def handle_xp(request: Request, req: XpRequest, user: dict = Depends(get_current_user)):
# IDOR FIX: Use authenticated user's ID from JWT, ignore client-provided user_id
user_id = user["user_id"]
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.post(
f"{SUPABASE_EDGE_URL}/apex-xp",
json={"action": req.action, "user_id": user_id, "xp_amount": req.xp_amount},
)
data = resp.json()
if resp.status_code != 200:
raise HTTPException(status_code=resp.status_code, detail="XP operation failed")
return data