from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from starlette.middleware.trustedhost import TrustedHostMiddleware from api.config.settings import get_settings from api.database.mongodb import db from api.middleware.security_headers import SecurityHeadersMiddleware # Routers from api.routers.test_mongo import router as test_mongo_router from api.routers.value_function import router as value_router from api.routers.docmf_build import router as docmf_build_router from api.routers.docmf_evaluate import router as docmf_eval_router from api.routers.docmf_simple_validation import router as simple_validation_router from api.routers.docmf_validation import router as validation_router from api.routers.auth import router as auth_router from api.routers.history import router as history_router from api.routers.test_mongo import router as test_mongo_router from api.routers.docit2mf_build import router as docit2mf_router from api.routers.google_auth import router as google_auth_router @asynccontextmanager async def lifespan(app: FastAPI): yield settings = get_settings() app = FastAPI(lifespan=lifespan) app.add_middleware(SecurityHeadersMiddleware, settings=settings) if settings.is_production: app.add_middleware( TrustedHostMiddleware, allowed_hosts=settings.trusted_hosts, ) cors_origins = settings.cors_allowed_origins cors_kwargs = { "allow_methods": ["*"], "allow_headers": ["*"], } if cors_origins == ["*"]: cors_kwargs["allow_origins"] = ["*"] cors_kwargs["allow_credentials"] = False else: cors_kwargs["allow_origins"] = cors_origins cors_kwargs["allow_credentials"] = True app.add_middleware(CORSMiddleware, **cors_kwargs) app.include_router(test_mongo_router, prefix="/api") app.include_router(value_router, prefix="/api/criteria/doc") app.include_router(docmf_build_router, prefix="/api/criteria/doc-mf") app.include_router(docmf_eval_router, prefix="/api/criteria/doc-mf") app.include_router(simple_validation_router, prefix="/api/criteria/doc-mf") app.include_router(validation_router, prefix="/api/criteria/doc-mf") app.include_router(test_mongo_router, prefix="/api") app.include_router(auth_router, prefix="/api") app.include_router(history_router, prefix="/api") app.include_router(docit2mf_router, prefix="/api") app.include_router(google_auth_router, prefix="/api")