controlpanel/server/server/__init__.py

46 lines
1003 B
Python

import json
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from .settings import settings
from .user import user_auth
from .map_tiles import map_tiles, map_meta
from .templates import j2env
app = FastAPI()
app.mount("/user/", user_auth)
app.mount("/map/", map_meta)
app.mount("/tiles/", map_tiles)
frontend = FastAPI()
manifest = dict()
if not settings.dev_mode:
from fastapi.staticfiles import StaticFiles
with open(f"{settings.frontend_path}/manifest.json", "r") as f:
manifest = json.load(f)
index = j2env.get_template("index.html").render(
dev_mode=settings.dev_mode,
manifest=manifest,
)
@frontend.middleware("http")
async def index_catch_all(request: Request, call_next):
response = await call_next(request)
if response.status_code == 404:
return HTMLResponse(index)
return response
if not settings.dev_mode:
frontend.mount("/", StaticFiles(directory=settings.frontend_path))
app.mount("/", frontend)