Linkvorschau für den ersten Link eines Beitrags

Der Server holt zum ersten Link Titel, Seiten- bzw. Kanalname und ein
kleines Vorschaubild (320 px) und speichert das Bild lokal; der Browser
lädt nur von uns, Besucher-IPs gehen nie an die verlinkte Seite.
YouTube über oEmbed (alle Linkformen kanonisch als watch?v=<id>), alle
übrigen Seiten über OpenGraph bzw. <title>. Abruf asynchron in einem
Worker, eine Zeile je Link in link_preview, Auffrischen nach 30 Tagen.

Der Abruf-Client lässt nur öffentliche IPs auf Port 80/443 zu, geprüft
nach DNS-Auflösung und bei jeder Weiterleitung (SSRF). Bestehende
Beiträge: kver link-previews. Neue Abhängigkeit golang.org/x/net, damit
go 1.26. DEV bekommt ein beschreibbares Volume für die Vorschaubilder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
This commit is contained in:
irrlicht
2026-10-06 18:47:21 +02:00
co-authored by Claude Opus 5.5
parent a8f392edba
commit 26b0182391
15 changed files with 1052 additions and 26 deletions
+8 -1
View File
@@ -41,7 +41,14 @@ podman build -q -t "$IMAGE" . 9>&-
mounts=()
[[ -d "$DATA/data" ]] && mounts+=(-v "$DATA/data:/app/data:ro" -e KVER_GEOIP_ASN=/app/data/GeoLite2-ASN.mmdb)
[[ -d "$DATA/media" ]] && mounts+=(-v "$DATA/media:/app/static/media:ro")
if [[ -d "$DATA/media" ]]; then
mounts+=(-v "$DATA/media:/app/static/media:ro")
# Linkvorschau-Bilder schreibt der Server selbst: beschreibbares Volume über
# dem read-only Media-Mount. Der Mountpunkt muss im Quellverzeichnis
# existieren, weil der Container ihn im read-only Mount nicht anlegen kann.
mkdir -p "$DATA/media/preview"
mounts+=(-v kver-dev-preview:/app/static/media/preview:U)
fi
podman rm -f "$NAME" >/dev/null 2>&1 9>&- || true
podman run -d --name "$NAME" -p "127.0.0.1:$PORT:8080" \