| | """ |
| | 中间件配置模块,负责设置和配置应用程序的中间件 |
| | """ |
| |
|
| | from fastapi import FastAPI, Request |
| | from fastapi.middleware.cors import CORSMiddleware |
| | from fastapi.responses import RedirectResponse |
| | from starlette.middleware.base import BaseHTTPMiddleware |
| |
|
| | |
| | from app.middleware.smart_routing_middleware import SmartRoutingMiddleware |
| | from app.core.constants import API_VERSION |
| | from app.core.security import verify_auth_token |
| | from app.log.logger import get_middleware_logger |
| |
|
| | logger = get_middleware_logger() |
| |
|
| |
|
| | class AuthMiddleware(BaseHTTPMiddleware): |
| | """ |
| | 认证中间件,处理未经身份验证的请求 |
| | """ |
| |
|
| | async def dispatch(self, request: Request, call_next): |
| | |
| | if ( |
| | request.url.path not in ["/", "/auth"] |
| | and not request.url.path.startswith("/static") |
| | and not request.url.path.startswith("/gemini") |
| | and not request.url.path.startswith("/v1") |
| | and not request.url.path.startswith(f"/{API_VERSION}") |
| | and not request.url.path.startswith("/health") |
| | and not request.url.path.startswith("/hf") |
| | and not request.url.path.startswith("/openai") |
| | and not request.url.path.startswith("/api/version/check") |
| | and not request.url.path.startswith("/vertex-express") |
| | and not request.url.path.startswith("/upload") |
| | ): |
| |
|
| | auth_token = request.cookies.get("auth_token") |
| | if not auth_token or not verify_auth_token(auth_token): |
| | logger.warning(f"Unauthorized access attempt to {request.url.path}") |
| | return RedirectResponse(url="/") |
| | logger.debug("Request authenticated successfully") |
| |
|
| | response = await call_next(request) |
| | return response |
| |
|
| |
|
| | def setup_middlewares(app: FastAPI) -> None: |
| | """ |
| | 设置应用程序的中间件 |
| | |
| | Args: |
| | app: FastAPI应用程序实例 |
| | """ |
| | |
| | app.add_middleware(SmartRoutingMiddleware) |
| |
|
| | |
| | app.add_middleware(AuthMiddleware) |
| |
|
| | |
| | |
| |
|
| | |
| | app.add_middleware( |
| | CORSMiddleware, |
| | allow_origins=["*"], |
| | allow_credentials=True, |
| | allow_methods=[ |
| | "GET", |
| | "POST", |
| | "PUT", |
| | "DELETE", |
| | "OPTIONS", |
| | ], |
| | allow_headers=["*"], |
| | expose_headers=["*"], |
| | max_age=600, |
| | ) |
| |
|