Files
web/backend/services/main/routes/static.py
T

41 lines
1.3 KiB
Python

"""
Static legal documents and expressive icons served from the instance deploy.
"""
from pathlib import Path
from fastapi import APIRouter, HTTPException
from fastapi.responses import FileResponse
router = APIRouter(tags=["static"])
_STATIC_DIR = Path(__file__).resolve().parent.parent / "static"
_ICONS_DIR = _STATIC_DIR / "icons"
@router.get("/static/PRIVACY.md")
async def privacy_markdown() -> FileResponse:
path = _STATIC_DIR / "PRIVACY.md"
if not path.is_file():
raise HTTPException(status_code=404, detail="PRIVACY.md not found")
return FileResponse(path, media_type="text/markdown; charset=utf-8")
@router.get("/static/TERMS.md")
async def terms_markdown() -> FileResponse:
path = _STATIC_DIR / "TERMS.md"
if not path.is_file():
raise HTTPException(status_code=404, detail="TERMS.md not found")
return FileResponse(path, media_type="text/markdown; charset=utf-8")
@router.get("/static/icons/{name}.webp")
async def static_icon(name: str) -> FileResponse:
safe = Path(name).name
if safe != name or ".." in name:
raise HTTPException(status_code=400, detail="Invalid icon name")
path = _ICONS_DIR / f"{safe}.webp"
if not path.is_file():
raise HTTPException(status_code=404, detail="Icon not found")
return FileResponse(path, media_type="image/webp")