| """ |
| Admin API endpoints for token management |
| """ |
|
|
| from fastapi import APIRouter, Depends, HTTPException, status |
| from fastapi.security import HTTPBearer |
| from fastapi.security.http import HTTPAuthorizationCredentials |
| from typing import Dict, Any |
|
|
| from app.core.config import settings |
| from app.core.token_manager import token_manager |
|
|
| router = APIRouter(prefix="/admin", tags=["admin"]) |
| security = HTTPBearer() |
|
|
|
|
| def verify_admin_token(credentials: HTTPAuthorizationCredentials = Depends(security)) -> str: |
| """Verify admin authentication token""" |
| if settings.SKIP_AUTH_TOKEN: |
| return credentials.credentials |
| |
| if credentials.credentials != settings.AUTH_TOKEN: |
| raise HTTPException( |
| status_code=status.HTTP_401_UNAUTHORIZED, |
| detail="Invalid authentication credentials", |
| headers={"WWW-Authenticate": "Bearer"}, |
| ) |
| return credentials.credentials |
|
|
|
|
| @router.get("/token-stats") |
| async def get_token_stats(token: str = Depends(verify_admin_token)) -> Dict[str, Any]: |
| """Get token pool statistics""" |
| return token_manager.get_token_stats() |
|
|
|
|
| @router.post("/reload-tokens") |
| async def reload_tokens(token: str = Depends(verify_admin_token)) -> Dict[str, str]: |
| """Force reload tokens from file""" |
| try: |
| token_manager.reload_tokens() |
| return {"message": "Token池已重新加载"} |
| except Exception as e: |
| raise HTTPException( |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, |
| detail=f"重新加载失败: {str(e)}" |
| ) |
|
|
|
|
| @router.post("/reset-tokens") |
| async def reset_tokens(token: str = Depends(verify_admin_token)) -> Dict[str, str]: |
| """Reset all tokens (clear failure counts)""" |
| try: |
| token_manager.reset_all_tokens() |
| return {"message": "所有token状态已重置"} |
| except Exception as e: |
| raise HTTPException( |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, |
| detail=f"重置失败: {str(e)}" |
| ) |