""" 密钥管理接口 """ from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.database import get_db from app.models.api_key import APIKey from datetime import datetime, timedelta from app.utils.timezone import beijing_now router = APIRouter() @router.get("/public") async def get_public_key(db: Session = Depends(get_db)): """ 获取公钥 (向后兼容接口) @deprecated: 建议使用 /api/keys/version 接口 """ # 获取当前激活的密钥 key = db.query(APIKey).filter(APIKey.is_active == 1).first() if not key: return {"code": 404, "msg": "未找到激活的密钥"} return { "code": 200, "msg": "成功", "data": { "public_key": key.public_key, "key_version": key.key_version } } @router.get("/version") async def get_key_version(db: Session = Depends(get_db)): """ 获取当前密钥版本信息 返回当前激活的密钥版本,用于客户端配置验证 """ # 获取当前激活的密钥 key = db.query(APIKey).filter(APIKey.is_active == 1).first() if not key: return {"code": 404, "msg": "未找到激活的密钥"} # 获取所有可用的密钥版本列表(包括当前激活的和新预热的) available_keys = db.query(APIKey).filter( APIKey.is_deleted == 0, APIKey.expire_at.is_(None) | (APIKey.expire_at > beijing_now()) ).order_by(APIKey.key_version.desc()).all() available_versions = [k.key_version for k in available_keys] return { "code": 200, "msg": "成功", "data": { "current_version": key.key_version, "available_versions": available_versions, "public_key": key.public_key, # 仍然提供公钥,用于客户端更新配置 "expire_at": key.expire_at.isoformat() if key.expire_at else None } }