Newer
Older
bugtrail / server / app / main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from .config import settings
from .routers import auth, projects, reports, share_pages, uploads


def create_app() -> FastAPI:
    app = FastAPI(title="BugTrail API", version="0.1.0")

    app.add_middleware(
        CORSMiddleware,
        allow_origins=settings.cors_origins,
        allow_origin_regex=r"^(chrome-extension|moz-extension)://.+",
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
        expose_headers=["*"],
    )

    app.include_router(auth.router, prefix="/api")
    app.include_router(projects.router, prefix="/api")
    app.include_router(reports.router, prefix="/api")
    app.include_router(uploads.router, prefix="/api")
    # share links are served by the API so link previews (Telegram, Jira) get
    # real meta tags; caddy routes /p and /r here
    app.include_router(share_pages.router)

    @app.get("/api/healthz")
    async def healthz() -> dict:
        return {"status": "ok"}

    return app


app = create_app()