| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- """
- 密钥管理接口
- """
- 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
- }
- }
|