mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-04-25 11:18:22 +00:00
Add new application structure: - app/main.py - application entry point - app/plugins/ - plugin system with auth plugin: - api/ - REST API endpoints and schemas - authorization/ - auth policies, providers, hooks - domain/ - business logic (service, models, jwt, password) - injection/ - route injection and guards - ops/ - operational utilities - runtime/ - runtime configuration - security/ - middleware, CSRF, dependencies - storage/ - user repositories and models - app/static/ - static assets (scalar.js for API docs) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
"""Inject config-driven auth guards into FastAPI routes."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import Depends, FastAPI
|
|
from fastapi.dependencies.utils import get_dependant, get_flat_dependant, get_parameterless_sub_dependant
|
|
from fastapi.routing import APIRoute, _should_embed_body_fields, get_body_field, request_response
|
|
|
|
from app.plugins.auth.injection.route_guard import enforce_route_policy
|
|
|
|
|
|
def _rebuild_route(route: APIRoute) -> None:
|
|
route.dependant = get_dependant(path=route.path_format, call=route.endpoint, scope="function")
|
|
for depends in route.dependencies[::-1]:
|
|
route.dependant.dependencies.insert(
|
|
0,
|
|
get_parameterless_sub_dependant(depends=depends, path=route.path_format),
|
|
)
|
|
route._flat_dependant = get_flat_dependant(route.dependant)
|
|
route._embed_body_fields = _should_embed_body_fields(route._flat_dependant.body_params)
|
|
route.body_field = get_body_field(
|
|
flat_dependant=route._flat_dependant,
|
|
name=route.unique_id,
|
|
embed_body_fields=route._embed_body_fields,
|
|
)
|
|
route.app = request_response(route.get_route_handler())
|
|
|
|
|
|
def install_route_guards(app: FastAPI) -> None:
|
|
for route in app.routes:
|
|
if not isinstance(route, APIRoute):
|
|
continue
|
|
if any(getattr(dependency, "dependency", None) is enforce_route_policy for dependency in route.dependencies):
|
|
continue
|
|
route.dependencies.append(Depends(enforce_route_policy))
|
|
_rebuild_route(route)
|
|
|
|
|
|
__all__ = ["install_route_guards"]
|