| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- """API Key 管理端点。
- 路由前缀: /api/v1/api-keys
- """
- from fastapi import APIRouter, Depends, HTTPException
- from pydantic import BaseModel
- from app.core.auth import get_current_user
- from app.services import api_key_service
- router = APIRouter()
- class CreateApiKeyRequest(BaseModel):
- name: str = "default"
- class ApiKeyResponse(BaseModel):
- id: str
- key: str # 创建时返回完整 key,列表时返回 masked
- name: str
- status: str | None = None
- last_used_at: str | None = None
- created_at: str | None = None
- @router.post("/", response_model=ApiKeyResponse)
- async def create_key(
- req: CreateApiKeyRequest,
- current_user: dict = Depends(get_current_user),
- ):
- """创建新的 API Key(完整 key 仅返回一次)。"""
- user_id = current_user.get("sub")
- result = await api_key_service.create_api_key(user_id, req.name)
- return ApiKeyResponse(**result)
- @router.get("/", response_model=list[ApiKeyResponse])
- async def list_keys(current_user: dict = Depends(get_current_user)):
- """列出当前用户的所有 API Key。"""
- user_id = current_user.get("sub")
- keys = await api_key_service.list_api_keys(user_id)
- return [ApiKeyResponse(**k) for k in keys]
- @router.delete("/{key_id}")
- async def revoke_key(
- key_id: str,
- current_user: dict = Depends(get_current_user),
- ):
- """吊销指定的 API Key。"""
- user_id = current_user.get("sub")
- result = await api_key_service.revoke_api_key(key_id, user_id)
- if "error" in result:
- raise HTTPException(status_code=404, detail=result["error"])
- return result
|