2026-10-11 18:15:37 +00:00
# LabLinks
2026-10-11 18:22:26 +00:00
Schlanke Chrome-Erweiterung (Manifest V3) im Retro-Terminal-Look, um die WebUIs deines HomeLabs
(Proxmox, Nextcloud, Router, NAS …) per Popup zu öffnen – optional per WebDAV/Nextcloud über mehrere Geräte synchronisiert.
2026-10-11 18:15:37 +00:00
2026-10-11 18:22:26 +00:00
## Funktionen
- **Popup-Launcher** mit Suche (Enter öffnet den ersten Treffer)
- **Links verwalten**: Name, URL und Emoji-Icon anlegen, bearbeiten, löschen, umsortieren
- **Export / Import** als JSON
- **WebDAV-/Nextcloud-Sync** (siehe unten)
- **Tastenkürzel** zum Öffnen des Popups
- Keine Tracker, keine externen Schriften oder Skripte, keine Abhängigkeiten
## Installation
1. Repository klonen oder als ZIP laden und entpacken.
Achtung: Beim ZIP-Download steckt der Inhalt oft in einem verschachtelten Ordner. Wähle den Ordner, in dem direkt `manifest.json` liegt.
2. In Chrome `chrome://extensions` öffnen und den **Entwicklermodus** aktivieren.
3. **Entpackte Erweiterung laden** → Ordner auswählen.
4. Icon in der Toolbar anpinnen.
Nach einem Update (`git pull` ) die Erweiterung in `chrome://extensions` neu laden.
## Tastenkürzel
Vorschlag: **Alt+Shift+L** . Chrome übernimmt Vorschläge nur bei der Erstinstallation und nur, wenn sie frei sind.
Eigene Kombination setzen unter `chrome://extensions/shortcuts` → LabLinks → „LabLinks öffnen“.
## Sync mit Nextcloud / WebDAV
1. In Nextcloud ein **App-Passwort** erstellen (Einstellungen → Sicherheit). Nicht das normale Passwort verwenden.
2. Im Popup ** [⚙]** klicken und eintragen:
- **WebDAV-Ordner**, z. B. `https://cloud.example.com/remote.php/dav/files/NUTZER/LabLinks`
(wird bei Bedarf angelegt; die Daten liegen darin als `lablinks.json` )
- **Benutzer** und **App-Passwort**
3. ** [SPEICHERN & TESTEN]** – Chrome fragt einmal nach Zugriff auf genau diesen Server.
Funktionsweise:
- Sync beim Öffnen des Popups und nach jeder Änderung; ** [⟳]** im Popup startet ihn manuell
(grün = ok, rot = Fehler, Tooltip zeigt die Meldung, blinkend = läuft).
- Zusammenführung pro Eintrag: der neuere Zeitstempel gewinnt. Löschungen werden als Tombstones (60 Tage) übertragen,
damit gelöschte Links auf anderen Geräten nicht wieder auftauchen. Die Reihenfolge übernimmt das zuletzt geänderte Gerät.
- Schreibkonflikte werden per ETag erkannt, danach wird erneut abgeglichen.
- **[TRENNEN]** entfernt Zugangsdaten und Server-Berechtigung; lokale Links bleiben.
- Funktioniert mit jedem WebDAV-Server, nicht nur mit Nextcloud.
Dateiformat (`lablinks.json` ):
```json
{
"version" : 1 ,
"links" : [{ "id" : "…" , "name" : "Proxmox" , "url" : "https://pve:8006/" , "icon" : "🖥" , "updated" : 1760000000000 }],
"deleted" : [{ "id" : "…" , "updated" : 1760000000000 }],
"modified" : 1760000000000
}
```
## Sicherheit
- **Nur http(s)-Links**: `javascript:` , `data:` , `file:` , `chrome:` u. Ä. werden beim Anlegen, Import und Sync verworfen.
- **Remote-Daten gelten als nicht vertrauenswürdig**: Typen, Längen (Name 80, URL 2048, Icon 2 Zeichen), Anzahl (500 Links),
Dateigröße (1 MB) und Zeitstempel (max. 1 Tag in der Zukunft) werden geprüft; Anzeige nur per `textContent` .
- **Minimale Rechte**: Nur `storage` . Der Serverzugriff wird als *optionale* Berechtigung nur für den eingetragenen Host angefragt
und beim Trennen oder Serverwechsel wieder entzogen.
- **HTTP nur im LAN**: Unverschlüsseltes `http://` (Basic-Auth!) ist nur für lokale Adressen erlaubt
(`localhost` , private IP-Bereiche, `*.local` , `*.lan` , Hostnamen ohne Punkt) und zeigt eine Warnung. Zugangsdaten in der URL werden abgelehnt.
- **Strikte CSP**: `script-src 'self'; object-src 'none'; base-uri 'none'` , keine Inline-Skripte, keine externen Ressourcen.
2026-10-11 18:23:32 +00:00
- **Zugangsdaten** liegen in `chrome.storage.local` (nicht im Google-Sync, ebenso wie die Links), aber **unverschlüsselt** auf der Festplatte des Browser-Profils.
2026-10-11 18:22:26 +00:00
Wer Zugriff auf dein Profil hat, kann sie auslesen. Nutze deshalb immer ein widerrufbares **App-Passwort** mit dem Nutzer, der nur diesen Ordner braucht.
- Selbstsignierte Zertifikate lehnt Chrome ab; nutze ein vertrauenswürdiges Zertifikat (z. B. Let's Encrypt) oder importiere deine CA ins System.
## Bekannte Grenzen
2026-10-11 18:23:32 +00:00
- Links liegen nur lokal (`chrome.storage.local` , ca. 10 MB Limit, Erweiterung begrenzt auf 500 Links). Geräteübergreifend geht es ausschließlich über den WebDAV-Sync; ohne ihn bleiben die Links auf diesem Browser-Profil.
2026-10-11 18:22:26 +00:00
- Kein Online-Status pro Link, keine Gruppen.
- Sync läuft nur, wenn das Popup geöffnet wird (kein Hintergrundprozess).
## Projektstruktur
| Datei | Zweck |
| --- | --- |
| `manifest.json` | Manifest V3, Rechte, Shortcut, CSP |
| `popup.html/.css/.js` | Popup: Liste, Suche, Bearbeiten |
| `options.html/.css/.js` | Sync-Einstellungen |
| `sync.js` | WebDAV-Client, Merge, Validierung (von Popup und Einstellungen genutzt) |
| `icons/` | Toolbar-Icons |
## Versionen
2026-10-11 18:23:32 +00:00
- **1.2.0** – Links liegen jetzt in `storage.local` (kein 8-KB-Limit mehr); bestehende Daten werden automatisch übernommen
2026-10-11 18:22:26 +00:00
- **1.1.1** – Sicherheits-Härtung (URL-Schema, Validierung, HTTP-Regel, CSP, UUID-IDs)
- **1.1.0** – WebDAV-/Nextcloud-Sync
- **1.0.0** – Erste Version