API-Basis-URL fest auf eine LAN-IP verdrahtet, ohne HTTPS und ohne Timeout #16

Closed
opened 2026-09-09 20:12:46 +00:00 by Aceless · 1 comment
Owner
// TODO: Make this configurable or auto-detect based on environment
static const String baseUrl = 'http://192.168.1.104:5261';

Drei Probleme in einer Zeile:

  1. Nicht konfigurierbar. Ausserhalb dieses einen Heimnetzes ist die App komplett funktionslos. Auch ein neuer DHCP-Lease des Servers legt sie lahm.
  2. Klartext-HTTP. Login-Passwort und Bearer-Token gehen unverschluesselt ueber das Netz. Android blockt Cleartext ab API 28 ohnehin nur ueber eine explizite Manifest-Ausnahme.
  3. Kein Timeout auf get/post/put/patch/delete - Requests haengen bis zum OS-Timeout.

Vorschlag: URL ueber --dart-define=API_BASE_URL=... bzw. String.fromEnvironment konfigurierbar machen, fuer Produktion HTTPS erzwingen und um jeden Request .timeout(Duration(seconds: 10)) legen.

Datei: app/lib/services/api_client.dart:6-8,33-74

```dart // TODO: Make this configurable or auto-detect based on environment static const String baseUrl = 'http://192.168.1.104:5261'; ``` Drei Probleme in einer Zeile: 1. **Nicht konfigurierbar.** Ausserhalb dieses einen Heimnetzes ist die App komplett funktionslos. Auch ein neuer DHCP-Lease des Servers legt sie lahm. 2. **Klartext-HTTP.** Login-Passwort und Bearer-Token gehen unverschluesselt ueber das Netz. Android blockt Cleartext ab API 28 ohnehin nur ueber eine explizite Manifest-Ausnahme. 3. **Kein Timeout** auf `get`/`post`/`put`/`patch`/`delete` - Requests haengen bis zum OS-Timeout. **Vorschlag:** URL ueber `--dart-define=API_BASE_URL=...` bzw. `String.fromEnvironment` konfigurierbar machen, fuer Produktion HTTPS erzwingen und um jeden Request `.timeout(Duration(seconds: 10))` legen. Datei: `app/lib/services/api_client.dart:6-8,33-74`
Author
Owner

Behoben auf Branch frontend-improvements.

baseUrl kommt aus --dart-define=API_BASE_URL, jeder Request hat 10s Timeout. Die LAN-URL bleibt nur noch als Default fuer die lokale Entwicklung; HTTPS zu erzwingen ist eine Deployment-Entscheidung und gehoert nicht in den Client.

Commits
  • 47edeeb Added Claude
  • 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung
  • 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests
  • bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten
  • d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben
  • d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren
  • 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen

flutter analyze: 0 Issues. flutter test: 22 Tests gruen.

Behoben auf Branch `frontend-improvements`. baseUrl kommt aus --dart-define=API_BASE_URL, jeder Request hat 10s Timeout. Die LAN-URL bleibt nur noch als Default fuer die lokale Entwicklung; HTTPS zu erzwingen ist eine Deployment-Entscheidung und gehoert nicht in den Client. <details><summary>Commits</summary> - 47edeeb Added Claude - 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung - 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests - bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten - d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben - d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren - 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen </details> `flutter analyze`: 0 Issues. `flutter test`: 22 Tests gruen.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Aceless/RecipePlanner#16
No description provided.