Files
Budget_Tool_Martinhal/budget-app/backend/app/main.py
T

26 lines
946 B
Python
Raw Normal View History

2026-10-29 20:40:02 +00:00
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from . import models # noqa: F401 (registers tables)
from .routers import activity, admin, auth, mail, reports, years
app = FastAPI(title="Budget & Capex", docs_url="/api/docs", openapi_url="/api/openapi.json")
@app.middleware("http")
async def csrf_guard(request: Request, call_next):
# Cookies are SameSite=Lax; requiring a custom header on writes also blocks cross-site form posts.
if request.method not in ("GET", "HEAD", "OPTIONS") and request.url.path.startswith("/api/"):
if request.headers.get("x-requested-with") != "budget-app":
return JSONResponse({"detail": "missing_header"}, status_code=403)
return await call_next(request)
@app.get("/api/health")
def health():
return {"ok": True}
for r in (auth.router, admin.router, years.router, reports.router, mail.router, activity.router):
app.include_router(r)