Files
chrome-lab-links/README.md
T
rootandClaude Sonnet 5.5 2bcb625c11 Links in chrome.storage.local statt storage.sync (v1.2.0)
Bestehende Daten werden einmalig aus storage.sync übernommen.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 18:23:32 +00:00

96 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LabLinks
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.
## 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.
- **Zugangsdaten** liegen in `chrome.storage.local` (nicht im Google-Sync, ebenso wie die Links), aber **unverschlüsselt** auf der Festplatte des Browser-Profils.
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
- 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.
- 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
- **1.2.0** – Links liegen jetzt in `storage.local` (kein 8-KB-Limit mehr); bestehende Daten werden automatisch übernommen
- **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