feat: interface PIN, bulk disposition tagging, Google Drive delta scan, OCR memory fixes
- Interface PIN: optional session-level auth gate for the main scanner UI
(Settings → Security → Interface PIN). Salted SHA-256 in config.json,
rate-limited (5 attempts/5 min per IP). /view and viewer auth exempt.
New /login page, before_request hook, GET/POST/DELETE /api/interface/pin,
POST /api/interface/pin/verify, POST /api/interface/logout.
- Bulk disposition tagging: Select mode (filter bar "Vælg" button) reveals
per-card checkboxes. Bulk tag bar at bottom of grid; POST /api/db/disposition/bulk.
Disposition stats bar (total · unreviewed · retain · delete · % reviewed)
updates after every save.
- Google Drive delta scan: uses Drive Changes API when delta is enabled.
Per-user token stored as gdrive:{email} in delta.json. Load-then-merge
save avoids racing with concurrent M365 token writes.
- PDF OCR OOM fix: render one page at a time with convert_from_path
(first_page=N, last_page=N). Added _ocr_mem_ok() psutil guard (500 MB
threshold) before each page render across scan_pdf, redact_fitz_pdf,
redact_pdf.
- Email test message translation fix: routes/email.py returns structured
{ok, method, recipients} instead of a hardcoded English string;
scheduler.js builds the translated message client-side.
- Docs: CHANGELOG, README, TODO, MANUAL-EN, MANUAL-DA all updated.
Lang files (en/da/de) extended with bulk, interface PIN, and SMTP keys.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
b2bfa40f27
commit
d8083eb0c0
26 files changed
+1059
-128
No files matched your search
+31
-1
@@ -669,7 +669,23 @@
|
||||
"m365_smtp_test": "Testen",
|
||||
"m365_smtp_testing": "Test-E-Mail wird gesendet…",
|
||||
"m365_smtp_test_ok": "Test-E-Mail gesendet",
|
||||
"m365_smtp_test_ok_graph": "Test-E-Mail über Microsoft Graph gesendet an",
|
||||
"m365_smtp_test_ok_smtp": "Test-E-Mail über SMTP gesendet an",
|
||||
"m365_smtp_graph_also_failed": "(⚠ Graph fehlgeschlagen — Mail.Send nicht erteilt)",
|
||||
"m365_smtp_test_fail": "Verbindung fehlgeschlagen",
|
||||
"bulk_select_mode": "Auswählen",
|
||||
"bulk_select_all": "Alle sichtbaren auswählen",
|
||||
"bulk_deselect_all": "Alle abwählen",
|
||||
"bulk_apply": "Anwenden",
|
||||
"bulk_done": "Fertig",
|
||||
"bulk_selected": "ausgewählt",
|
||||
"bulk_applied": "aktualisiert",
|
||||
"disp_stats_total": "gesamt",
|
||||
"disp_stats_unreviewed": "nicht überprüft",
|
||||
"disp_stats_retain": "behalten",
|
||||
"disp_stats_delete": "löschen",
|
||||
"disp_stats_other": "sonstige",
|
||||
"disp_stats_reviewed": "überprüft",
|
||||
"m365_fsrc_edit_btn": "Bearbeiten",
|
||||
"m365_fsrc_save_changes": "Änderungen speichern",
|
||||
"m365_settings_tab_scheduler": "Zeitplaner",
|
||||
@@ -793,5 +809,19 @@
|
||||
"viewer_pin_saving": "Wird gespeichert…",
|
||||
"viewer_pin_saved": "PIN gespeichert",
|
||||
"viewer_pin_clear_confirm": "Betrachter-PIN entfernen? /view erfordert dann wieder einen Token-Link.",
|
||||
"viewer_pin_cleared": "PIN gelöscht"
|
||||
"viewer_pin_cleared": "PIN gelöscht",
|
||||
|
||||
"interface_pin_group_title": "Interface-PIN",
|
||||
"interface_pin_desc": "Eine numerische PIN (4\u20138 Stellen), die eingegeben werden muss, bevor auf die Scanner-Oberfläche zugegriffen werden kann. Betrachter, die <code style=\"font-size:10px\">/view</code> aufrufen, sind nicht betroffen.",
|
||||
"interface_pin_clear": "PIN löschen",
|
||||
"interface_pin_is_set": "Interface-PIN ist gesetzt",
|
||||
"interface_pin_not_set_msg": "Keine PIN gesetzt \u2014 Oberfläche ist für alle im Netzwerk offen",
|
||||
"interface_pin_saved": "PIN gespeichert",
|
||||
"interface_pin_clear_confirm": "Interface-PIN entfernen? Der Scanner ist dann für alle im Netzwerk zugänglich.",
|
||||
"interface_pin_cleared": "PIN gelöscht",
|
||||
"interface_pin_login_desc": "Interface-PIN eingeben, um fortzufahren.",
|
||||
"interface_pin_login_btn": "Weiter",
|
||||
"interface_pin_err_incorrect": "Falsche PIN.",
|
||||
"interface_pin_err_too_many": "Zu viele Versuche. Bitte später erneut versuchen.",
|
||||
"interface_pin_err_network": "Netzwerkfehler. Bitte erneut versuchen."
|
||||
}
|
||||
Reference in new issue
Block a user