from typing import Any, Dict from fastapi import APIRouter, Depends from ..auth import get_current_user from ..runtime import get_runtime_settings router = APIRouter(prefix="/site", tags=["site"]) _BANNER_TONES = {"info", "warning", "error", "maintenance"} def _build_site_info(include_changelog: bool) -> Dict[str, Any]: runtime = get_runtime_settings() banner_message = (runtime.site_banner_message or "").strip() tone = (runtime.site_banner_tone or "info").strip().lower() if tone not in _BANNER_TONES: tone = "info" info = { "buildNumber": (runtime.site_build_number or "").strip(), "banner": { "enabled": bool(runtime.site_banner_enabled and banner_message), "message": banner_message, "tone": tone, }, } if include_changelog: info["changelog"] = (runtime.site_changelog or "").strip() return info @router.get("/public") async def site_public() -> Dict[str, Any]: return _build_site_info(False) @router.get("/info") async def site_info(user: Dict[str, Any] = Depends(get_current_user)) -> Dict[str, Any]: return _build_site_info(True)