Spaces:
Sleeping
Sleeping
| """ | |
| 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 | |
| async def get_token_stats(token: str = Depends(verify_admin_token)) -> Dict[str, Any]: | |
| """Get token pool statistics""" | |
| return token_manager.get_token_stats() | |
| 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)}" | |
| ) | |
| 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)}" | |
| ) |