init
This commit is contained in:
commit
ac39206625
58 changed files with 1814 additions and 0 deletions
67
src/main.py
Normal file
67
src/main.py
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
"""
|
||||
Application root file: Inits the FastAPI application
|
||||
"""
|
||||
from contextlib import asynccontextmanager
|
||||
from typing import AsyncGenerator
|
||||
from prometheus_client import make_asgi_app
|
||||
|
||||
from fastapi import FastAPI
|
||||
from starlette.middleware.sessions import SessionMiddleware
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
|
||||
from src.config import settings
|
||||
from src.api import api_router
|
||||
from src.prometheus import prometheus
|
||||
|
||||
from src.auth.config import auth_settings
|
||||
from src.misp.service import MISPHandler
|
||||
|
||||
# TODO: Create Pydantic request/response schemas
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(_application: FastAPI) -> AsyncGenerator:
|
||||
# Startup
|
||||
yield
|
||||
# Shutdown
|
||||
_application.misp_handler.stop_timer()
|
||||
|
||||
|
||||
if settings.ENVIRONMENT.is_deployed:
|
||||
# Do this only on prod
|
||||
pass
|
||||
|
||||
|
||||
app = FastAPI(
|
||||
swagger_ui_init_oauth={
|
||||
"clientId": auth_settings.CLIENT_ID,
|
||||
"usePkceWithAuthorizationCodeGrant": True,
|
||||
"scopes": "openid profile email",
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
metrics_app = make_asgi_app()
|
||||
app.mount("/metrics", metrics_app)
|
||||
|
||||
prometheus.APP_STATE.state("starting")
|
||||
|
||||
# Type inspection disabled for middleware injection.
|
||||
# Known bug in FastAPI type checking: https://github.com/astral-sh/ty/issues/1635
|
||||
# noinspection PyTypeChecker
|
||||
app.add_middleware(SessionMiddleware, secret_key=settings.SECRET_KEY.get_secret_value())
|
||||
# noinspection PyTypeChecker
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=settings.CORS_ORIGINS,
|
||||
allow_origin_regex=settings.CORS_ORIGINS_REGEX,
|
||||
allow_credentials=True,
|
||||
allow_methods=("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"),
|
||||
allow_headers=settings.CORS_HEADERS,
|
||||
)
|
||||
|
||||
app.include_router(api_router)
|
||||
|
||||
app.misp_handler = MISPHandler()
|
||||
|
||||
prometheus.APP_STATE.state("running")
|
||||
Loading…
Add table
Add a link
Reference in a new issue