Spaces:
Sleeping
Sleeping
| import hashlib | |
| import secrets | |
| from fastapi import APIRouter, HTTPException | |
| from pydantic import BaseModel | |
| from app.services.auth import require_user_id | |
| from app.services.supabase import get_supabase | |
| router = APIRouter() | |
| class CreateKeyRequest(BaseModel): | |
| name: str | |
| async def list_api_keys(user_id: str = require_user_id): | |
| supabase = get_supabase() | |
| result = supabase.table("api_keys").select("id, name, key_prefix, created_at, last_used_at").eq("user_id", user_id).execute() | |
| return {"keys": result.data} | |
| async def create_api_key(req: CreateKeyRequest, user_id: str = require_user_id): | |
| raw = f"sk_bio_{secrets.token_urlsafe(32)}" | |
| key_hash = hashlib.sha256(raw.encode()).hexdigest() | |
| key_prefix = raw[:16] | |
| supabase = get_supabase() | |
| supabase.table("api_keys").insert({ | |
| "user_id": user_id, | |
| "name": req.name, | |
| "key_hash": key_hash, | |
| "key_prefix": key_prefix, | |
| }).execute() | |
| return {"key": raw, "key_prefix": key_prefix, "name": req.name} | |
| async def delete_api_key(key_id: str, user_id: str = require_user_id): | |
| supabase = get_supabase() | |
| result = supabase.table("api_keys").select("id").eq("id", key_id).eq("user_id", user_id).execute() | |
| if not result.data: | |
| raise HTTPException(status_code=404, detail="API key not found") | |
| supabase.table("api_keys").delete().eq("id", key_id).execute() | |
| return {"status": "deleted"} | |