import secrets from datetime import datetime import secrets from datetime import datetime from fastapi import APIRouter, HTTPException, Depends, status from supabase import Client from core.config import SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY from core.models import User, ApiKeyCreateResponse, ApiKeyItem from core.dependencies import get_current_active_user, get_supabase_client # Import get_supabase_client router = APIRouter() @router.post("/generate-api-key", response_model=ApiKeyCreateResponse) async def generate_api_key( current_user: User = Depends(get_current_active_user), supabase_client: Client = Depends(get_supabase_client) # Inject Supabase client ): try: # Generate a secure random API Key new_api_key = secrets.token_urlsafe(32) # 32 bytes = 43 characters # Store the API Key in the database data, count = supabase_client.table('sp_user_api_keys').insert({ "user_id": current_user.id, "api_key": new_api_key, "created_at": datetime.now().isoformat() # Store creation time }).execute() if data: return ApiKeyCreateResponse(api_key=new_api_key) else: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to store API Key." ) except Exception as e: raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e)) @router.get("/api-keys", response_model=list[ApiKeyItem]) async def get_user_api_keys( current_user: User = Depends(get_current_active_user), supabase_client: Client = Depends(get_supabase_client) # Inject Supabase client ): try: res = supabase_client.table('sp_user_api_keys').select('api_key, created_at').eq('user_id', current_user.id).execute() return [ApiKeyItem(**item) for item in res.data] except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.get("/me", response_model=User) async def get_me(current_user: User = Depends(get_current_active_user)): """ 获取当前登录用户的详细信息。 """ return current_user