Skip to content

KeepLocal v1.14.0

Choose a tag to compare

@zwaetschge zwaetschge released this 22 Sep 14:34
· 33 commits to main since this release
4f019ec

Die zweite Top-10-Runde (ZIP-Härtung, Revisions-UI, Android-Sync & PDF-Anhänge)

Server

  • ZIP-Import-Härtung — Endungs-Whitelist + Magic-Bytes-Prüfung + Bildauflösungs-Grenze (40 MP) für Fremd-ZIPs; zuvor war ein .html/.svg-Eintrag Stored XSS
  • revisions[]-Projektion — Listen/Detail-Antworten und alle Schreibpfade (PUT, Pin/Archive, Restore, Share, Bild/Datei) sowie der 409-Conflict-Body liefern die Historie nicht mehr mit
  • Delta-Pull-Endpunkte — GET /api/notes/meta (Signatur), GET /api/notes/tree (+since), ?since= am Listing — inklusive Grenze ($gte), damit Bulk-Timestamps keine Notiz dauerhaft überspringen
  • Backup async I/O — Streaming-Hash + async Kopien; abgebrochene Läufe verworfen ihr Verzeichnis und belegen keine Retention-Slots mehr
  • API-Key-Scopes — Keys mit read / read+write, expiresIn als Server-Vokabular (30d/90d/365d/never); Bestands-Keys behalten Vollzugriff

Web

  • Revisions-Historie UI — Fassungen ansehen und wiederherstellen (Restore-Status re-armt sich jetzt beim erneuten Anwählen)
  • Bulk-Auswahl + Tag-Farb-Punkte — tote Props wiederbelebt; Bulk-Toasts zählen nur tatsächliche API-Calls
  • includeMeta-Gating — Meta-Abfragen nur noch bei Bedarf; Settings-API-Key-Expiry-Fix

Android (versionCode 28)

  • Tag-Verwaltung über die Bulk-API — Rename/Merge/Delete je ein PATCH /api/notes/tags statt einem Request pro Notiz; Room-Spiegel, offline bleibt der alte Pfad
  • PDF-Anhänge — files[] durch alle Mapper (Room 5→6), Upload mit Budget-Prüfung, Löschen, Öffnen über FileProvider
  • Background-Sync pulled jetzt — Meta-Signatur-Sonde → Baum-Lösch-Cleanup → seitenweiser ?since=-Delta-Upsert; während des Pulls gequeuete Offline-Edits werden per Live-Check respektiert (kein stiller Verlust mehr)
  • API-Keys — Route-Fix /api/api-keys (der Screen 404-te bisher), Scope-Auswahl beim Anlegen, Scope-Anzeige pro Key, Wrapper korrekt entpackt (Einmal-Key war vorher verloren)

Zahlen

Server 409/409 · Web 269/269 · E2E grün · Android-Unit-Tests grün · 16-Agent-Adversarial-Review: 10 Findings bestätigt, alle behoben · APK auf dem Testgerät installiert und gestartet

Bekannt (bewusst offen): PATCH /api/notes/tags lowercased die Quell-Tags, Mongo $in matcht aber case-sensitiv auf gespeicherte Bestände — gemischte Schreibweisen („Einkauf"/„einkauf") werden vom Server-Rename nicht erfasst; Web + Android gleichermaßen, Folge-Issue für eine Normalisierungs-Migration.

🤖 Generated with Claude Code