Commit Graph

6 Commits

Author SHA1 Message Date
karim edee7b9f28 0.8.2: Auto-Recovery für hängende 0.8.0-Installationen + UpdateNotifier vor Login
- Auto-Recovery in adapter.js: wenn Cloud-Modus gesetzt + lokale Daten
  vorhanden + keine Cloud-Session → Cloud-Konfiguration wird beim
  nächsten App-Start automatisch zurückgenommen. Marker rapport_080_recovery
  verhindert wiederholte Auslösung.
- UpdateNotifier wird in allen Pre-Login-Screens gerendert (BackendChoice,
  Setup, MigrationScreen, CloudSetup, Login) — so kann ein hängender
  Wizard sich via Auto-Update selbst befreien.
- Tauri-Builds ignorieren VITE_SUPABASE_URL aus dem Build. Desktop-User
  geben die Server-URL immer aktiv im Login ein, statt eine irrelevante
  Default-IP vorgesetzt zu bekommen.
- Anon-Key bleibt aus dem Build (kein Geheimnis, pro Cloud-Instanz fix).
- BackendChoice zeigt nur dann eine vorkonfigurierte URL, wenn nicht in Tauri.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:54:14 +02:00
karim 40a28d5ff5 0.8.1: Fix Auto-Cloud-Switch beim Update von 0.7 auf 0.8
Beim Upgrade von 0.7 auf 0.8 wurden Lokal-Installationen ungewollt in den
Cloud-Modus geschoben, weil das Production-Build VITE_SUPABASE_URL enthielt
und adapter.js dies als Default-Cloud-URL gesetzt hat — auch wenn bereits
lokale Daten in localStorage vorhanden waren.

Fix in adapter.js: Auto-Cloud-Switch nur noch wenn
  - kein rapport_backend_chosen gesetzt
  - UND keine lokalen Daten (studio_data_v1) vorhanden
  - UND nicht in Tauri (Desktop-User wählen immer aktiv)

Damit klaut der Web-Deploy weiter automatisch Cloud-Konfig (kein BackendChoice
für Browser-User mit Server-URL), aber Tauri-Updates und Browser-User mit
bestehenden Lokal-Daten bleiben unangetastet.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:31:42 +02:00
karim cc4f3bb225 Einstellungen: Tab «Updates & Support» + Bump auf 0.7.0
Neuer Settings-Tab mit manueller Update-Suche (ignoriert die Skip-
Markierung), Zeitstempel der letzten Prüfung, Link zur Dokumentation
auf rapport.kgva.ch. Update-Helper sind in src/utils/updater.js
zentralisiert; UpdateNotifier schreibt jetzt auch beim Auto-Check
das Datum der letzten Prüfung mit.

Version 0.6.0 → 0.7.0 in package.json, tauri.conf.json, Cargo.toml
und allen UI-Referenzen. Changelog-Eintrag 0.7 mit den drei
Highlights dieses Releases ergänzt.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 01:29:49 +02:00
karim a5997cb52b App-Updater: Tauri-Plugin mit Auto-Check und Skip-Funktion
Beim App-Start wird automatisch geprüft, ob bei git.kgva.ch/karim/RAPPORT
eine neue Version verfügbar ist. Update-Modal mit Release-Notes und drei
Aktionen: Jetzt installieren (Download → Signaturprüfung → Neustart),
Später, oder Diese Version überspringen (in localStorage gemerkt).

Signing via minisign-Keypair unter ~/.tauri/rapport_updater.key,
Public Key im Tauri-Config. Release-Script scripts/release.sh baut,
signiert und erzeugt latest.json für Gitea.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 01:29:49 +02:00
karim 2caf662c14 UI: Spinner statt LADEN-Text, Pills unter Header in Einstellungen
- ViewFallback: dezenter, zentrierter Spinner statt kaum lesbarem
  "LADEN…"-Text zwischen lazy-loaded Views
- Einstellungen: Pill-Navigation jetzt konsistent unter dem Header
  (zuvor lagen die Pills bei allen Tabs ausser "Mein Profil" darüber)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 03:13:58 +02:00
karim 00f07d76f6 Rapport 0.6 — Initial Public Release
Sicherheits-Hardening
- Passwort-Hashing mit PBKDF2 (SHA-256, 100k Iterationen) inkl. transparenter
  Migration bestehender Klartext-Passwörter beim ersten Login
- Login Brute-Force-Schutz (5 Fehlversuche → 60s Lockout), Constant-Time-Compare,
  Mindestpasswortlänge 8 Zeichen
- HTML-Sanitizer für Brieftexte (Allowlist, entfernt javascript:/data:/vbscript:-URLs,
  Event-Handler, Script-Tags; rel=noopener für target=_blank)
- Datenexport entfernt Legacy-Klartextpasswörter (Hashes bleiben)
- Kryptografische IDs via crypto.randomUUID statt Math.random
- sessionStorage speichert keine Credentials mehr

GUI & Performance
- Code-Splitting pro View via React.lazy + Suspense (Initial-Bundle 86 KB gzipped)
- swissqrbill als lokale Dependency — QR-Rechnungen offline-fähig
- Spesenbelege (Bild/PDF) direkt in der Tageserfassung mit Bildkomprimierung
- Avatar-Upload: 256px-Skalierung + JPEG-Kompression, Typprüfung
- Über-Rapport-Modal, einheitliche Bearbeiten-Icons, Pinnwand-Kategorien als Pills

Bug-Fixes
- Auto-überfällig-Routine läuft nur noch einmal pro Tag (verhindert Re-Render-Loop)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 01:16:26 +02:00