banyaro/backend/static/js/pages
rene 9394bab1fb Big Sweep: Security + Race-Conditions + Tests + DSGVO + A11y, SW by-v1095
SECURITY (auth.py, routes/auth.py, database.py, main.py)
- JWT bekommt jti; Logout trägt in neue jwt_blacklist-Tabelle ein,
  decode_token() prüft → server-side Invalidierung
- JWT-Expiry default 30 → 7 Tage (ENV JWT_EXPIRY_DAYS überschreibt)
- Sliding-Refresh-Middleware: erneuert Cookie wenn >50% verbraucht
  (Schwelle via JWT_REFRESH_FRACTION, Default 2)
- Login-Lockout in DB-Tabelle login_attempts (5 Versuche / 15 Min,
  überlebt Container-Restart) — alte In-Memory-Lockouts ersetzt
- SMTP-Versand: alle 'except: pass' durch logger.exception ersetzt;
  Fehlversuche landen in failed_emails-Tabelle für späteres Retry
- Referral-Counter Race gefixt: UPDATE partner_codes SET uses=uses+1
  ... WHERE uses<max_uses RETURNING — atomar statt SELECT+UPDATE

RACE CONDITIONS (routes/invoices.py, database.py)
- Neue invoice_counters-Tabelle für atomare Nummernvergabe
- _next_invoice_number nutzt BEGIN IMMEDIATE + atomares UPDATE
- Funktioniert für RG- und ST-Prefixe (Stornorechnungen)
- Race-Test verifiziert (5 Threads × 20 Calls = 100 eindeutige Nummern)

VERSION + TESTS + ERROR-DIGEST (VERSION, Makefile, tests/, scheduler.py)
- Neue VERSION-Datei (Single Source of Truth) — main.py liest beim
  Startup
- Makefile-Target 'make bump' propagiert in sw.js, app.js, index.html
- Makefile-Target 'make test' setzt venv auf, läuft pytest
- 19 Smoke-Tests in tests/ (health, auth, diary, invoice) — alle grün
- Scheduler: täglicher _job_error_digest um 06:30 → schickt Error-
  Zusammenfassung an ADMIN_EMAIL (still wenn keine Errors)

DSGVO + A11Y + ERSTE-HILFE
- landing.html: 'HTML und ODS' → 'JSON' (tatsächlich implementiert)
- datenschutz.js: Sektion Account-Löschung erweitert (sofort gelöscht /
  anonymisiert / 10 Jahre für Rechnungen)
- erste-hilfe.js: prominentes Warning-Banner oben (ersetzt keine
  Tierarzt-Beratung); Notfallnummern gruppiert nach Land, TODO-Platz-
  halter für AT-Uni-Klinik, CH Tox Info Suisse, CH Tierspital Zürich
- ui.js Modal: ESC schließt, Focus-Trap, Auto-Focus erstes Element,
  Restore Focus auf vorigen Caller
- impressum.js Kontaktformular: Labels mit for=cf-name etc.

NEUE DB-TABELLEN (idempotent via CREATE TABLE IF NOT EXISTS)
- jwt_blacklist, login_attempts, failed_emails, invoice_counters

NEUE ENV-VARS
- JWT_REFRESH_FRACTION (Default 2)
- JWT_EXPIRY_DAYS Default geändert (30 → 7)
2026-05-26 20:12:01 +02:00
..
admin.js UX: Rechnungs-Modal Footer für Mobile, SW by-v1076 2026-05-26 14:03:09 +02:00
adoption.js Chore: Sprint32-36 Zwischenstand — alle Änderungen aus dieser Session committen 2026-05-03 11:09:39 +02:00
agb.js Rechtliche Seiten überarbeitet: Impressum, Datenschutz, AGB 2026-05-15 16:41:19 +02:00
breeder.js Fix: Breeder-FAB an document.body — verschwindet zuverlässig via destroy() (SW by-v908) 2026-05-13 19:40:21 +02:00
chat.js Desktop: Nachrichten + Gassi-Treffen auf max-width 1100px — SW by-v408 2026-04-26 08:20:13 +02:00
datenschutz.js Big Sweep: Security + Race-Conditions + Tests + DSGVO + A11y, SW by-v1095 2026-05-26 20:12:01 +02:00
diary.js Fix: Tagebuch Foto-Löschen — null-crash + 404-Cleanup, SW by-v1073 2026-05-26 13:38:11 +02:00
dog-profile.js Perf: 9 Performance-Fixes — SW by-v1072 2026-05-26 06:30:36 +02:00
ernaehrung.js Fix: Ernährung Hund-spezifisch, Erinnerungen in Settings, Übung des Tages per Hund (SW by-v872) 2026-05-11 19:25:00 +02:00
erste-hilfe.js Big Sweep: Security + Race-Conditions + Tests + DSGVO + A11y, SW by-v1095 2026-05-26 20:12:01 +02:00
events.js Icons: Emoji/Unicode → Phosphor in 8 Dateien + 16 neue Sprite-Icons — SW by-v415 2026-04-26 09:26:13 +02:00
expenses.js Feature: Welten-Onboarding, Wetter-Motivation, UX-Fixes (SW by-v715) 2026-05-05 17:32:03 +02:00
forum.js Feature: 3 Community-Features — Foto-Challenge, Stamm-Gassis, Rassen-Chip (SW by-v700) 2026-05-04 21:09:35 +02:00
friends.js Feature: Gründer/Partner-Badge im User-Profil-Modal + Freunde-Suche, SW by-v555 2026-04-30 15:08:59 +02:00
gruender.js Fix: /api/-Prefix in gruender.js+settings.js entfernt; Grant-Fehler sichtbar, SW by-v553 2026-04-30 14:45:16 +02:00
health.js Perf: 9 Performance-Fixes — SW by-v1072 2026-05-26 06:30:36 +02:00
hilfe.js Feature: Hilfe/FAQ, Übungen-Content, Navigation-Fixes (SW by-v727) 2026-05-05 21:46:16 +02:00
impressum.js Big Sweep: Security + Race-Conditions + Tests + DSGVO + A11y, SW by-v1095 2026-05-26 20:12:01 +02:00
jobs.js Feature: Welten-Onboarding, Wetter-Motivation, UX-Fixes (SW by-v715) 2026-05-05 17:32:03 +02:00
knigge.js Knigge: Padding direkt auf Frage/Options/Bars-Elemente — SW by-v422 2026-04-26 10:11:24 +02:00
laeufi.js Fix: Züchter-Header (Wurfverwaltung/Zuchtkartei/Läufigkeit) Hell-Mode kompatibel (CSS-Variablen statt hardcoded Dark-Gradient), SW by-v1036 2026-05-16 13:59:07 +02:00
litters.js Fix: Züchter-Header (Wurfverwaltung/Zuchtkartei/Läufigkeit) Hell-Mode kompatibel (CSS-Variablen statt hardcoded Dark-Gradient), SW by-v1036 2026-05-16 13:59:07 +02:00
lost.js Perf: 9 Performance-Fixes — SW by-v1072 2026-05-26 06:30:36 +02:00
map.js Style: Marker + Cluster Rand Tactical-Olive statt Weiß 2026-05-16 11:35:01 +02:00
moderation.js Feature: Moderation-Kacheln klickbar — direkter Sprung in Tab (SW by-v662) 2026-05-03 21:07:30 +02:00
movies.js Feature: Filme-Suche, HdM ins Forum + Gewinner-Badge im Profil, SW by-v594 2026-05-02 08:12:29 +02:00
notes.js Feature: Notizblock — Neue Notiz direkt erstellen mit Kategorie-Vorauswahl, SW by-v560 2026-04-30 16:43:16 +02:00
notifications.js Feature+Fix: Referral-Admin, Pro-Gates, Karten-Layer, onDogChange, Staging-Media (SW by-v855) 2026-05-11 17:23:29 +02:00
onboarding.js Fix: Nach Login ohne Hund → Onboarding mit Skip-Option statt direkt zu dog-profile (SW by-v748) 2026-05-06 21:02:55 +02:00
personality.js Feature: Hunde-Persönlichkeitstest + Kilometer-Lebenswerk-Badge (SW by-v698) 2026-05-04 20:52:51 +02:00
places.js Feature: Suchfeld in Routen, Events und Places 2026-04-18 18:42:13 +02:00
playdate.js Feature: Sprint31 — 9 Features merged (Streak, Ausgaben, KI-Tierarzt, Rückrufe, Adoption, Vet+Befunde, Hundepass, Playdate, Rassenerkennung) 2026-05-02 09:29:48 +02:00
poison.js Perf: 9 Performance-Fixes — SW by-v1072 2026-05-26 06:30:36 +02:00
recalls.js Fix: Recalls leerer State check-circle via UI.icon(), SW by-v602 2026-05-02 10:33:25 +02:00
reise.js Feature: Welten-Onboarding, Wetter-Motivation, UX-Fixes (SW by-v715) 2026-05-05 17:32:03 +02:00
routes.js Feature: Einmaliger Offline-Hinweis 'App im Vordergrund lassen' 2026-05-15 18:28:50 +02:00
settings.js Fix: Worlds.refresh() nach Profil-Speichern aufrufen 2026-05-16 12:07:31 +02:00
sitting.js Sprint 12+13: Tagebuch Day-One-Redesign, Notiz-Feature, Icon-Fixes, SW by-v405 2026-04-25 20:44:46 +02:00
social.js Fix: Karte CSS-Filter statt CartoDB Dark, Social Wrapper 860px 2026-05-16 11:19:37 +02:00
trainingsplaene.js Feature: Trauer-Feature, Futter-Verträglichkeit, Multi-Hund-Fixes, Wetter-Ort (Sprint 47) 2026-05-11 19:28:38 +02:00
uebungen.js Fix: Pfoten-Button bleibt rechts (display:flex statt '' beim Einblenden), SW by-v1070 2026-05-19 19:04:32 +02:00
walks.js Perf: 9 Performance-Fixes — SW by-v1072 2026-05-26 06:30:36 +02:00
welcome.js Neu: AGB-Seite + Impressum/Datenschutz aktualisiert (SW by-v985) 2026-05-15 16:21:04 +02:00
wetter.js UX: Wetter-Preset + robusteres Tile-Prefetch (gemeinsamer LastPos), SW by-v1091 2026-05-26 17:10:52 +02:00
widget.js Sprint 15: Suche, Ausweis, Teilen, Widget 2026-04-17 15:51:09 +02:00
wiki.js Perf: Wiki Breed-Fotos nutzen _preview.webp + breeds/ in generate-previews (SW by-v938) 2026-05-14 12:42:20 +02:00
wurfboerse.js Feature: Vollständige Züchter-Rolle — Antrag, Würfe, Stammbaum, Genetik 2026-04-28 18:25:21 +02:00
zucht-profil.js Feature: Vollständige Züchter-Rolle — Antrag, Würfe, Stammbaum, Genetik 2026-04-28 18:25:21 +02:00
zuchthunde.js Fix: Züchter-Header (Wurfverwaltung/Zuchtkartei/Läufigkeit) Hell-Mode kompatibel (CSS-Variablen statt hardcoded Dark-Gradient), SW by-v1036 2026-05-16 13:59:07 +02:00