|
|
""" |
|
|
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)}" |
|
|
) |