privacy: anonymized sharing on by default with opt-out, mention in README

This commit is contained in:
Utku Bilen Demir 2026-09-19 18:06:06 +02:00
parent fade8a632f
commit 1df8b3f37e
3 changed files with 14 additions and 11 deletions

View file

@ -43,6 +43,8 @@ python -m kindle_zotero_importer run ... --full # ignore incremental; re-proces
PDF positioning uses Poppler (`pdftotext`; `pdftohtml`; `pdfinfo`) + `qpdf` fallback; EPUB uses CFI. Zotero writes are only via `Zotero.Annotations`; never direct `zotero.sqlite` writes. PDF positioning uses Poppler (`pdftotext`; `pdftohtml`; `pdfinfo`) + `qpdf` fallback; EPUB uses CFI. Zotero writes are only via `Zotero.Annotations`; never direct `zotero.sqlite` writes.
Anonymized sharing is **on by default** to help future development (only `citation key`; hashed highlight; `color`; `has comment` + note; `added_on`; `integrated_at`; never raw highlight text); opt out anytime in `Manager → Settings` → uncheck `Share anonymized annotations` (also `annotation.utkubilen.de`, private, no AI).
## Releases ## Releases
Stable releases are on `Releases` with `kindle-zotero-importer.xpi` + `updates.json` attached. Pre-releases (`beta`) are marked `Pre-release` on GitHub. Zotero auto-updates from `releases/latest/download/updates.json`. Stable releases are on `Releases` with `kindle-zotero-importer.xpi` + `updates.json` attached. Pre-releases (`beta`) are marked `Pre-release` on GitHub. Zotero auto-updates from `releases/latest/download/updates.json`.

View file

@ -184,17 +184,16 @@
try { try {
const hasAsked = Services.prefs.getBoolPref("extensions.kindleZoteroImporter.askedAnonymizedShare"); const hasAsked = Services.prefs.getBoolPref("extensions.kindleZoteroImporter.askedAnonymizedShare");
} catch(e) { } catch(e) {
// First run: ask // First run: default ON, allow opt-out
if (results.created > 0 && confirm("Would you like to share anonymized annotations to help future development?\n\nWe would only send: citation key, hashed highlight (not text), color, has comment + note text (if any), and dates — never your highlight text without the note. Notes help understand context. No AI at this stage.\n\nYou can change this anytime in Settings.")) {
Services.prefs.setBoolPref("extensions.kindleZoteroImporter.shareAnonymized", true); Services.prefs.setBoolPref("extensions.kindleZoteroImporter.shareAnonymized", true);
try { try {
const anonId = Math.random().toString(36).slice(2,10) + Date.now().toString(36); const anonId = Math.random().toString(36).slice(2,10) + Date.now().toString(36);
Services.prefs.setCharPref("extensions.kindleZoteroImporter.anonId", anonId); Services.prefs.setCharPref("extensions.kindleZoteroImporter.anonId", anonId);
} catch(e2) {} } catch(e2) {}
} else {
Services.prefs.setBoolPref("extensions.kindleZoteroImporter.shareAnonymized", false);
}
Services.prefs.setBoolPref("extensions.kindleZoteroImporter.askedAnonymizedShare", true); Services.prefs.setBoolPref("extensions.kindleZoteroImporter.askedAnonymizedShare", true);
if (results.created > 0) {
alert("Anonymized sharing is enabled by default to help future development (only citation key, hashed highlight, color, has comment + note, and dates — never your highlight text alone). You can opt out anytime in Settings → uncheck 'Share anonymized annotations'.");
}
} }
} }
this.data = data; this.data = data;
@ -1046,7 +1045,7 @@
const shareCheck = document.createElement('input'); const shareCheck = document.createElement('input');
shareCheck.type = 'checkbox'; shareCheck.type = 'checkbox';
shareCheck.id = 'setting-shareAnonymized'; shareCheck.id = 'setting-shareAnonymized';
try { shareCheck.checked = Services.prefs.getBoolPref("extensions.kindleZoteroImporter.shareAnonymized"); } catch(e) { shareCheck.checked = false; } try { shareCheck.checked = Services.prefs.getBoolPref("extensions.kindleZoteroImporter.shareAnonymized"); } catch(e) { shareCheck.checked = true; }
shareRow.appendChild(shareCheck); shareRow.appendChild(shareCheck);
const shareLabel = document.createElement('label'); const shareLabel = document.createElement('label');
shareLabel.htmlFor = 'setting-shareAnonymized'; shareLabel.htmlFor = 'setting-shareAnonymized';

View file

@ -2,3 +2,5 @@ pref("extensions.kindleZoteroImporter.projectDir", "/Users/ubd/Library/Mobile Do
pref("extensions.kindleZoteroImporter.pythonPath", "/opt/homebrew/bin/python3"); pref("extensions.kindleZoteroImporter.pythonPath", "/opt/homebrew/bin/python3");
pref("extensions.kindleZoteroImporter.zoteroDbPath", "/Users/ubd/Zotero/zotero.sqlite"); pref("extensions.kindleZoteroImporter.zoteroDbPath", "/Users/ubd/Zotero/zotero.sqlite");
pref("extensions.kindleZoteroImporter.zoteroStorageRoot", "/Users/ubd/Zotero/storage"); pref("extensions.kindleZoteroImporter.zoteroStorageRoot", "/Users/ubd/Zotero/storage");
pref("extensions.kindleZoteroImporter.shareAnonymized", true);
pref("extensions.kindleZoteroImporter.askedAnonymizedShare", false);