Archived
Preserve the GitHub history and the newer deployed source from ct_134_karldns. Exclude runtime data, credentials, AppleDouble files and local backup copies. Make Gitea the canonical source for documentation, package metadata and project links.
143 lines
4.7 KiB
Python
143 lines
4.7 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from fastapi import APIRouter, Response
|
|
from fastapi.responses import FileResponse
|
|
|
|
ASSET_DIR = Path(__file__).parents[1] / "assets"
|
|
SCRIPT_DIR = ASSET_DIR / "scripts"
|
|
if not SCRIPT_DIR.is_dir():
|
|
SCRIPT_DIR = Path(__file__).parents[2] / "scripts"
|
|
router = APIRouter(include_in_schema=False)
|
|
ASSET_CACHE_HEADERS = {"Cache-Control": "public, max-age=31536000, immutable"}
|
|
|
|
|
|
@router.get("/favicon.ico")
|
|
def favicon() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "favicon.ico", media_type="image/x-icon", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/bootstrap-subset.css")
|
|
def bootstrap_subset_css() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "bootstrap-subset.css", media_type="text/css", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/favicon-16x16.png")
|
|
def favicon_16_png() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "favicon-16x16.png", media_type="image/png", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/favicon-32x32.png")
|
|
def favicon_32_png() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "favicon-32x32.png", media_type="image/png", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/apple-touch-icon.png")
|
|
def apple_touch_icon_png() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "apple-touch-icon.png", media_type="image/png", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/logo.png")
|
|
def logo_png() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "logo.png", media_type="image/png", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/logo.webp")
|
|
def logo_webp() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "logo.webp", media_type="image/webp", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/logo-nav.webp")
|
|
def logo_nav_webp() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "logo-nav.webp", media_type="image/webp", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/logo-192.png")
|
|
def logo_192_png() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "logo-192.png", media_type="image/png", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/logo-512.png")
|
|
def logo_512_png() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "logo-512.png", media_type="image/png", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/social-preview.png")
|
|
def social_preview_png() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "social-preview.png", media_type="image/png", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/social-preview.webp")
|
|
def social_preview_webp() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "social-preview.webp", media_type="image/webp", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/site.webmanifest")
|
|
def site_webmanifest() -> Response:
|
|
return Response(
|
|
"""
|
|
{
|
|
"name": "KarlDNS",
|
|
"short_name": "KarlDNS",
|
|
"description": "Private update links for routers.",
|
|
"start_url": "/",
|
|
"scope": "/",
|
|
"display": "standalone",
|
|
"background_color": "#ffffff",
|
|
"theme_color": "#ffffff",
|
|
"icons": [
|
|
{"src": "/logo-192.png", "sizes": "192x192", "type": "image/png"},
|
|
{"src": "/logo-512.png", "sizes": "512x512", "type": "image/png"}
|
|
]
|
|
}
|
|
""".strip(),
|
|
media_type="application/manifest+json",
|
|
headers=ASSET_CACHE_HEADERS,
|
|
)
|
|
|
|
|
|
@router.get("/theme.js")
|
|
def theme_js() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "theme.js", media_type="application/javascript", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/clipboard.js")
|
|
def clipboard_js() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "clipboard.js", media_type="application/javascript", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/admin-tables.js")
|
|
def admin_tables_js() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "admin-tables.js", media_type="application/javascript", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/visitor-ip.js")
|
|
def visitor_ip_js() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "visitor-ip.js", media_type="application/javascript", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/app.css")
|
|
def app_css() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "app.css", media_type="text/css", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/admin.css")
|
|
def admin_css() -> FileResponse:
|
|
return FileResponse(ASSET_DIR / "admin.css", media_type="text/css", headers=ASSET_CACHE_HEADERS)
|
|
|
|
|
|
@router.get("/install.sh")
|
|
def install_sh() -> FileResponse:
|
|
return FileResponse(SCRIPT_DIR / "install-linux.sh", media_type="text/plain", headers={"Cache-Control": "no-cache"})
|
|
|
|
|
|
@router.get("/uninstall.sh")
|
|
def uninstall_sh() -> FileResponse:
|
|
return FileResponse(SCRIPT_DIR / "uninstall-linux.sh", media_type="text/plain", headers={"Cache-Control": "no-cache"})
|
|
|
|
|
|
@router.get("/karldns-update.sh")
|
|
def karldns_update_sh() -> FileResponse:
|
|
return FileResponse(SCRIPT_DIR / "karldns-update.sh", media_type="text/plain", headers={"Cache-Control": "no-cache"})
|