banyaro/backend/routes
rene de1677154f Security + E-Mail-HTML + Quartalsbericht + Registrierungspflicht
Registrierung & Login:
- E-Mail-Verifikation jetzt Pflicht vor erstem Login
- Register gibt keinen Token mehr zurück → "Postfach prüfen"-Screen
- Login blockt mit EMAIL_NOT_VERIFIED (403) wenn unverifiziert
- Resend-Verification ohne Auth (email-basiert)
- Frontend: _renderVerifyPending() nach Register und Login-Fehler
- Account-Lockout: 5 Fehlversuche → 15 Min gesperrt (ratelimit.py)
- Login Rate-Limit zusätzlich per E-Mail-Adresse (5/5 Min)
- Fehler-Tracking wird bei erfolgreichem Login zurückgesetzt

E-Mail-Templates (alle Mails jetzt HTML):
- email_html() Shared-Template in mailer.py (Gradient-Header, Warm-Beige)
- Verifikations-Mail, Passwort-Reset → HTML mit CTA-Button
- Admin-Outreach: plain text auto-wrapped in HTML
- Züchter-Mails (Antrag/Genehmigung/Ablehnung) → Template
- Tierschutz-Alert (litters.py) → Template
- send_support_mail → HTML
- outreach._build_message() + _send_smtp() unterstützen jetzt html= Parameter

Forum-Schutz:
- Post-Cooldown: 30 Sek zwischen beliebigen Posts (DB-Check)
- Stunden-Limit: 5 Threads / 20 Antworten pro User/Stunde
- Duplikat-Erkennung: gleicher Text in 5 Min blockiert (in-memory)
- content_filter.py: Spam-Keywords, URL-Sperre für Accounts < 7 Tage,
  Sonderzeichen-Ratio-Check

Security-Headers:
- HSTS: max-age=31536000; includeSubDomains
- Content-Security-Policy: frame-ancestors none, base-uri self, …
- X-Frame-Options entfernt (CSP frame-ancestors ist moderner)

Honeypot-Fallen (13 Scanner-Pfade → 24h IP-Sperre):
- /api/admin/users, /api/v1/users, /api/.env, /api/config,
  /api/setup, /api/install, /api/phpinfo, /api/debug,
  /api/actuator, /api/swagger, /api/graphql u.a.

Quartalsbericht-System:
- backend/scripts/generate_reports.py: 6 Sections
  (Sicherheit, Funktionsumfang, Dateien, Nutzer, Partner, Server)
- make reports: generiert alle Berichte aus dem Container, committed
- Scheduler: quarterly_report Job (1. Feb/Mai/Aug/Nov 07:00)
  → vollständige HTML-Mail an ADMIN_EMAIL
- quarterly_report erscheint im täglichen Status-Report

Admin-Panel:
- "Forum & Meldungen" → "Forum"
2026-05-01 08:20:53 +02:00
..
__init__.py Sprint 0: Backend, Docker, KI-Layer mit Free/Premium-Trennung 2026-04-12 16:39:34 +02:00
achievements.py Wiki-Foto-System: Gallery-Flow, Community-Fotos, Wiki-Fotos-Badge 2026-04-25 09:53:24 +02:00
admin.py Fix: Partner-Tab — is_founder/is_partner in Admin-Users-Liste + Checkboxen vorausfüllen + founder_number in /me, SW by-v554 2026-04-30 14:59:04 +02:00
alerts.py Push geo-filter: Giftköder-Alert nur im 30km-Radius, Standort via Alerts-Check gespeichert 2026-04-24 09:35:55 +02:00
auth.py Security + E-Mail-HTML + Quartalsbericht + Registrierungspflicht 2026-05-01 08:20:53 +02:00
breeder.py Security + E-Mail-HTML + Quartalsbericht + Registrierungspflicht 2026-05-01 08:20:53 +02:00
breeder_export.py Feature: Tierschutz-Check, KI-Züchter-Features, Export, SEO-Update 2026-04-28 19:49:54 +02:00
breeder_photos.py Feature: Vollständige Züchter-Rolle — Antrag, Würfe, Stammbaum, Genetik 2026-04-28 18:25:21 +02:00
chat.py Sprint 16: Chat-Fotos/Online/Read-Receipts, Gesundheit-Dokumente löschen, Bugfixes 2026-04-17 22:38:33 +02:00
diary.py Performance: GZip, Cache-Control, WebP, SQLite-Tuning, Indizes, srcset — SW by-v438, APP_VER 417 2026-04-26 17:40:18 +02:00
dogs.py Feature: Gründer-Aktivierung nach Hunde-Profil mit Plausibilitätsprüfung 2026-04-30 18:59:20 +02:00
events.py Sprint 19: Social, UX-Verbesserungen, Nerd2Noob-Hilfe 2026-04-17 23:53:50 +02:00
forum.py Security + E-Mail-HTML + Quartalsbericht + Registrierungspflicht 2026-05-01 08:20:53 +02:00
friends.py Feature: Gründer/Partner-Badge im User-Profil-Modal + Freunde-Suche, SW by-v555 2026-04-30 15:08:59 +02:00
health.py Feature: Vollständige Züchter-Rolle — Antrag, Würfe, Stammbaum, Genetik 2026-04-28 18:25:21 +02:00
import_data.py Sprint 12+13: Tagebuch Day-One-Redesign, Notiz-Feature, Icon-Fixes, SW by-v405 2026-04-25 20:44:46 +02:00
ki.py KI-Tracking vollständig, Cloud-Limit 20/Woche, Statusmail täglich 06:00 — SW by-v434, APP_VER 413 2026-04-26 17:01:05 +02:00
knigge.py KI-Tracking vollständig, Cloud-Limit 20/Woche, Statusmail täglich 06:00 — SW by-v434, APP_VER 413 2026-04-26 17:01:05 +02:00
litters.py Security + E-Mail-HTML + Quartalsbericht + Registrierungspflicht 2026-05-01 08:20:53 +02:00
lost.py Sprint 15: Zeitzone-Fix, Gewichts-Sync, Öffnungszeiten, KI-Bericht, POI-Moderation — SW by-v432, APP_VER 411 2026-04-26 15:38:50 +02:00
moderation.py Sprint 15: Zeitzone-Fix, Gewichts-Sync, Öffnungszeiten, KI-Bericht, POI-Moderation — SW by-v432, APP_VER 411 2026-04-26 15:38:50 +02:00
movies.py Sprint 11: Freunde & Chat + Phosphor-Icon-Vollmigration 2026-04-15 21:33:53 +02:00
notes.py KI-Tracking vollständig, Cloud-Limit 20/Woche, Statusmail täglich 06:00 — SW by-v434, APP_VER 413 2026-04-26 17:01:05 +02:00
notifications.py Badge-System: personal/general Split, Punkte ohne Zahl, SW by-v328 2026-04-24 08:39:41 +02:00
osm.py Config: mail@motocamp.de → banyaro.app-Adressen überall — ADMIN_EMAIL=admin@, hallo@ in Impressum/Datenschutz, SW by-v565 2026-04-30 18:29:51 +02:00
outreach.py Security + E-Mail-HTML + Quartalsbericht + Registrierungspflicht 2026-05-01 08:20:53 +02:00
partner.py Fix: Grant is_founder=0 löscht founder_number; /me gibt is_founder zurück; DB direkt gefixt 2026-04-30 15:38:17 +02:00
places.py Feature: Telefonnummer für Orte (DB-Migration + API + Formular + Detailansicht) 2026-04-17 10:32:04 +02:00
poison.py Push geo-filter: Giftköder-Alert nur im 30km-Radius, Standort via Alerts-Check gespeichert 2026-04-24 09:35:55 +02:00
praise.py Session 2026-04-21: SEO, Wiki-Anreicherung, Training, Lober 2026-04-21 19:38:20 +02:00
profile.py Sprint 12+13: Tagebuch Day-One-Redesign, Notiz-Feature, Icon-Fixes, SW by-v405 2026-04-25 20:44:46 +02:00
push.py Push geo-filter: Giftköder-Alert nur im 30km-Radius, Standort via Alerts-Check gespeichert 2026-04-24 09:35:55 +02:00
ratings.py Feature: Ratings, Lightbox, Forum-Standort, Notifications, Routen-Recording, Chat-Picker 2026-04-19 09:40:35 +02:00
routen.py Feature: ORS-Stats im Admin-Panel — Tagesverbrauch/2000, 30-Tage-Sparkline, Top-Nutzer — SW by-v485, APP_VER 462 2026-04-29 10:10:59 +02:00
services.py Fix: services.py fehlte nach Worktree-Merge 2026-04-17 23:54:49 +02:00
sharing.py Sprint 15: Suche, Ausweis, Teilen, Widget 2026-04-17 15:51:09 +02:00
sitting.py Sprint 8: Events + Hundesitting 2026-04-14 06:19:15 +02:00
sitting_access.py Feature: Gasthund-Zugang für Sitter 2026-04-19 10:29:21 +02:00
social.py Social: Vorschläge merken (📌), Post-Link nachträglich eintragen, Quick-Post ohne prompt(), SW by-v369 2026-04-25 10:23:17 +02:00
stats.py Routen-Validierung: >15 km/h Ø zählt nicht für Stats/Trophäen, SW by-v331 2026-04-24 09:46:15 +02:00
tieraerzte.py Sprint 15: Zeitzone-Fix, Gewichts-Sync, Öffnungszeiten, KI-Bericht, POI-Moderation — SW by-v432, APP_VER 411 2026-04-26 15:38:50 +02:00
training.py Cleanup: training_exercises.js_exercise_id — ID-Mismatch bereinigt, JOIN mit exercise_progress, Fuß-Umbenennung — SW by-v508, APP_VER 485 2026-04-29 19:00:53 +02:00
walks.py Fix: Benachrichtigungen navigieren jetzt in den richtigen Kontext 2026-04-19 09:54:46 +02:00
weather.py Wetter-Chip auf Karte + Bugfix private Routen zählen für km-Stats 2026-04-24 07:59:15 +02:00
webcal.py WebCal: Tierarzt-Termine, Medikamenten-Enddaten, Hunde-Geburtstage ergänzt 2026-04-17 09:41:14 +02:00
widget.py Sprint 15: Suche, Ausweis, Teilen, Widget 2026-04-17 15:51:09 +02:00
wiki.py Wiki-Foto-System: Gallery-Flow, Community-Fotos, Wiki-Fotos-Badge 2026-04-25 09:53:24 +02:00
zucht_hunde.py Feature: Tierschutz-Check, KI-Züchter-Features, Export, SEO-Update 2026-04-28 19:49:54 +02:00
zucht_ki.py Feature: KI-Jahresberichte speichern + Archiv + Download — SW by-v505, APP_VER 482 2026-04-29 17:03:49 +02:00