diff --git a/main.py b/main.py index 67fc1b1..be6c74a 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,7 @@ from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse, HTMLResponse, PlainTextResponse +from starlette.middleware.gzip import GZipMiddleware from tortoise import Tortoise from tortoise.contrib.fastapi import register_tortoise @@ -120,6 +121,8 @@ async def migrate_password_to_hash(): app = FastAPI(lifespan=lifespan) +app.add_middleware(GZipMiddleware, minimum_size=1024, compresslevel=6) + @app.middleware("http") async def refresh_settings_middleware(request, call_next): await refresh_settings() @@ -151,8 +154,11 @@ app.include_router(admin_api) @app.get("/theme-assets/{asset_path:path}") @app.get("/assets/{asset_path:path}") async def theme_asset(asset_path: str): + # Vite with base=/theme-assets/ emits /theme-assets/assets/ while + # legacy themes use /theme-assets/. Keep both forms compatible. + normalized_asset_path = asset_path.removeprefix("assets/") theme_assets = (BASE_DIR / settings.themesSelect / "assets").resolve() - target = (theme_assets / asset_path).resolve() + target = (theme_assets / normalized_asset_path).resolve() try: target.relative_to(theme_assets) except ValueError: