mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-05-12 02:19:59 +08:00
将日志系统从 app/logger/ 移至 app/log/ 目录 将路由配置从 routers.py 重命名为 routes.py 将硬编码配置值移至 constants.py 中的默认常量 统一代码格式和导入排序 优化函数参数对齐方式
75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
from typing import Optional
|
|
|
|
from fastapi import Header, HTTPException
|
|
|
|
from app.config.config import settings
|
|
from app.log.logger import get_security_logger
|
|
|
|
logger = get_security_logger()
|
|
|
|
|
|
def verify_auth_token(token: str) -> bool:
|
|
return token == settings.AUTH_TOKEN
|
|
|
|
|
|
class SecurityService:
|
|
def __init__(self, allowed_tokens: list, auth_token: str):
|
|
self.allowed_tokens = allowed_tokens
|
|
self.auth_token = auth_token
|
|
|
|
async def verify_key(self, key: str):
|
|
if key not in self.allowed_tokens and key != self.auth_token:
|
|
logger.error("Invalid key")
|
|
raise HTTPException(status_code=401, detail="Invalid key")
|
|
return key
|
|
|
|
async def verify_authorization(
|
|
self, authorization: Optional[str] = Header(None)
|
|
) -> str:
|
|
if not authorization:
|
|
logger.error("Missing Authorization header")
|
|
raise HTTPException(status_code=401, detail="Missing Authorization header")
|
|
|
|
if not authorization.startswith("Bearer "):
|
|
logger.error("Invalid Authorization header format")
|
|
raise HTTPException(
|
|
status_code=401, detail="Invalid Authorization header format"
|
|
)
|
|
|
|
token = authorization.replace("Bearer ", "")
|
|
if token not in self.allowed_tokens and token != self.auth_token:
|
|
logger.error("Invalid token")
|
|
raise HTTPException(status_code=401, detail="Invalid token")
|
|
|
|
return token
|
|
|
|
async def verify_goog_api_key(
|
|
self, x_goog_api_key: Optional[str] = Header(None)
|
|
) -> str:
|
|
"""验证Google API Key"""
|
|
if not x_goog_api_key:
|
|
logger.error("Missing x-goog-api-key header")
|
|
raise HTTPException(status_code=401, detail="Missing x-goog-api-key header")
|
|
|
|
if (
|
|
x_goog_api_key not in self.allowed_tokens
|
|
and x_goog_api_key != self.auth_token
|
|
):
|
|
logger.error("Invalid x-goog-api-key")
|
|
raise HTTPException(status_code=401, detail="Invalid x-goog-api-key")
|
|
|
|
return x_goog_api_key
|
|
|
|
async def verify_auth_token(
|
|
self, authorization: Optional[str] = Header(None)
|
|
) -> str:
|
|
if not authorization:
|
|
logger.error("Missing auth_token header")
|
|
raise HTTPException(status_code=401, detail="Missing auth_token header")
|
|
token = authorization.replace("Bearer ", "")
|
|
if token != self.auth_token:
|
|
logger.error("Invalid auth_token")
|
|
raise HTTPException(status_code=401, detail="Invalid auth_token")
|
|
|
|
return token
|