41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
from fastapi import FastAPI
|
|
from starlette.middleware.sessions import SessionMiddleware
|
|
|
|
from app.core.settings import get_settings
|
|
from app.core.middleware.context import ContextResolveMiddleware
|
|
from app.core.middleware.domain_resolver import DomainResolverMiddleware
|
|
from app.core.middleware.security_headers import SecurityHeadersMiddleware
|
|
from app.core.startup import on_startup
|
|
from app.core.api import api_router
|
|
from app.ui.app import mount_ui
|
|
|
|
|
|
def create_app() -> FastAPI:
|
|
s = get_settings()
|
|
app = FastAPI(title=s.APP_NAME, debug=s.DEBUG)
|
|
|
|
app.add_middleware(SecurityHeadersMiddleware)
|
|
app.add_middleware(ContextResolveMiddleware)
|
|
# Phase 7T.2: added after context so it resolves the request host before
|
|
# context-aware middleware/routes need tenant/branch/domain state.
|
|
app.add_middleware(DomainResolverMiddleware)
|
|
# SessionMiddleware is added last so it is available to downstream
|
|
# middleware/routes in Starlette's middleware execution order.
|
|
app.add_middleware(
|
|
SessionMiddleware,
|
|
secret_key=s.SECRET_KEY,
|
|
session_cookie=s.COOKIE_SESSION_NAME,
|
|
same_site=s.COOKIE_SAMESITE,
|
|
https_only=s.COOKIE_SECURE,
|
|
)
|
|
|
|
app.add_event_handler("startup", lambda: on_startup(app))
|
|
|
|
app.include_router(api_router, prefix="/api")
|
|
mount_ui(app)
|
|
|
|
return app
|
|
|
|
|
|
app = create_app()
|