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>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
a04aaae859
commit
2bcb625c11
@@ -67,13 +67,13 @@ Dateiformat (`lablinks.json`):
|
||||
- **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), aber **unverschlüsselt** auf der Festplatte des Browser-Profils.
|
||||
- **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 in `chrome.storage.sync` (Chrome-Limit ≈ 8 KB pro Eintrag, grob 50 Links). Bei mehr Links wäre ein Wechsel auf `storage.local` nötig.
|
||||
- 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).
|
||||
|
||||
@@ -89,6 +89,7 @@ Dateiformat (`lablinks.json`):
|
||||
|
||||
## 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
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "LabLinks",
|
||||
"version": "1.1.1",
|
||||
"version": "1.2.0",
|
||||
"description": "Retro-Launcher für deine HomeLab WebUIs.",
|
||||
"permissions": ["storage"],
|
||||
"optional_host_permissions": ["https://*/*", "http://*/*"],
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// WebDAV-/Nextcloud-Sync. Gemeinsam genutzt von Popup und Einstellungsseite.
|
||||
// Lokale Daten: chrome.storage.sync {links, deleted, modified}
|
||||
// Lokale Daten: chrome.storage.local {links, deleted, modified}
|
||||
// Zugangsdaten: chrome.storage.local {webdav: {url, user, pass}} (nie über Google synchronisiert)
|
||||
const LabSync = (() => {
|
||||
const FILE = "lablinks.json";
|
||||
@@ -67,12 +67,25 @@ const LabSync = (() => {
|
||||
const setConfig = (cfg) =>
|
||||
cfg ? chrome.storage.local.set({ webdav: cfg }) : chrome.storage.local.remove("webdav");
|
||||
|
||||
const KEYS = ["links", "deleted", "modified"];
|
||||
|
||||
// Bis v1.1.1 lagen die Daten in chrome.storage.sync (Limit ~8 KB) -> einmalig übernehmen.
|
||||
async function migrateFromSyncStorage() {
|
||||
const old = await chrome.storage.sync.get(KEYS);
|
||||
if (old.links) await chrome.storage.local.set(old);
|
||||
await chrome.storage.sync.remove(KEYS);
|
||||
}
|
||||
|
||||
async function readLocal() {
|
||||
const d = await chrome.storage.sync.get(["links", "deleted", "modified"]);
|
||||
let d = await chrome.storage.local.get(KEYS);
|
||||
if (!d.links) {
|
||||
await migrateFromSyncStorage();
|
||||
d = await chrome.storage.local.get(KEYS);
|
||||
}
|
||||
return cleanState(d);
|
||||
}
|
||||
const writeLocal = (s) =>
|
||||
chrome.storage.sync.set({ links: s.links, deleted: s.deleted, modified: s.modified });
|
||||
chrome.storage.local.set({ links: s.links, deleted: s.deleted, modified: s.modified });
|
||||
|
||||
const baseUrl = (cfg) => cfg.url.trim().replace(/\/+$/, "");
|
||||
const fileUrl = (cfg) => baseUrl(cfg) + "/" + FILE;
|
||||
|
||||
Reference in New Issue
Block a user