my_voice_assistant_v3_jamulix/app/api
dschlueter 6792e1be86 feat(auth): Passwort-Login (1FA) für die App; Admin ebenfalls 1FA
Variante 1: Senioren behalten ihren persönlichen Link; zusätzlich ein
Passwort-Einstieg ohne 2FA über Authelia.

- Neuer Endpunkt GET /api/login (app_login): hinter Authelia (nginx-Location
  /login, one_factor), erkennt den per Remote-User weitergereichten Nutzer
  (Admin ODER normaler Authelia-Nutzer), mintet das va_token-Cookie und leitet
  in die App (/). Cookie-Mint in _issue_login_cookie() gemeinsam mit
  /api/admin/login refaktoriert.
- "Persönlicher Zugang nötig"-Seite (main.py) bekommt einen großen Knopf
  „Mit Benutzername & Passwort anmelden" -> /login. Bare / leitet bewusst NICHT
  automatisch um (Senioren ohne Authelia-Konto würden sonst feststecken).

Begleitende Infra (außerhalb des Repos):
- nginx: location = /login (auth_request one_factor -> /api/login).
- Authelia: access_control-Regel voice.jamulix.de -> one_factor (über der
  *.jamulix.de-Wildcard); damit sind App-Login UND Admin nur noch 1FA, andere
  Subdomains bleiben 2FA.

Tests: /api/login für Nicht-Admin/Admin/ohne-Identität. 257 Offline-Tests grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 19:04:37 +02:00
..
__init__.py Initial commit: Voice Assistant Gateway mit Konfig-/Routing-Fundament 2026-06-17 01:48:56 +02:00
admin.py feat(auth): Passwort-Login (1FA) für die App; Admin ebenfalls 1FA 2026-06-26 19:04:37 +02:00
chat.py feat(notruf): Wiederauslöse-Sperre + grüner Hinweis; "Neues Gespräch" in die Kopfzeile 2026-06-26 15:58:17 +02:00
config.py feat: UI-Hinweis bei Cartesia + nicht unterstützter Sprache 2026-06-25 00:49:28 +02:00
devices.py Initial commit: Voice Assistant Gateway mit Konfig-/Routing-Fundament 2026-06-17 01:48:56 +02:00
health.py Initial commit: Voice Assistant Gateway mit Konfig-/Routing-Fundament 2026-06-17 01:48:56 +02:00
me.py refactor(ui): Geräte-STT entfernt + Menü-Redesign (schlanke Kopfzeile + ⋮-Sheet) 2026-06-20 22:26:20 +02:00
metrics.py feat: Resilienz (Fallback-Ketten) und Metriken (#5) 2026-06-17 05:19:07 +02:00
sessions.py feat: Cloud-Fundament - Auth, Persistenz und Mandanten-Trennung 2026-06-17 02:14:25 +02:00
speak.py Jamulix: Optimierungen übernehmen, lokale Voice-Modelle ignorieren 2026-06-24 22:01:38 +02:00
transcribe.py feat: Tageskontingent und Notfall-Eskalation (#6) 2026-06-17 05:29:30 +02:00
ws.py feat(stt): bessere Spracherkennung — small-Modell, VAD, feste Sprache 2026-06-25 19:36:17 +02:00