From 6e8ccba258329de5db8f27b1d9775263eca005be Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 8 Aug 2026 21:26:38 +0200 Subject: [PATCH] Absicherung der Steuerendpunkte gegen die echte Datenbank verifiziert Der in Phase 4 offen gebliebene Ende-zu-Ende-Nachweis ist nachgeholt. Geprueft mit einem Wegwerf-Host, der ausschliesslich den Webserver startet - die Worker blieben aus, weil parallel eine aeltere Instanz auf derselben Datenbank laeuft. Zusaetzlich mit ApiSettings__ReadOnlyDatabase=true, sodass weder Migrationen noch Seeding liefen. Als externe Bindung diente 127.0.0.2: gilt der Pruefung als oeffentlich, bleibt aber Loopback, oeffnet also nichts im Netz. Ergebnis: - localhost ohne Token: Steuerendpunkte 200, Swagger 200 - extern ohne Token: Steuerendpunkte 404, Swagger 404, capabilities meldet canControl false - extern mit Token: ohne Header 401, falscher Token 401, richtiger 200, Swagger 404 Nebenbei verifiziert: Datenbankverbindung steht (37.803 MB), Web-UI und Assets werden ausgeliefert, /api/dashboard liefert echte Daten (151.094 Trader, 38.187.946 Trades). Nur Dokumentation - keine Codeaenderung. Co-Authored-By: Claude Opus 5 --- docs/PLAN-Linux-Portierung.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/docs/PLAN-Linux-Portierung.md b/docs/PLAN-Linux-Portierung.md index 83ff9e2..bddd18f 100644 --- a/docs/PLAN-Linux-Portierung.md +++ b/docs/PLAN-Linux-Portierung.md @@ -604,11 +604,31 @@ toleranter. Als Kommentar an der Bind-Stelle hinterlegt. Praktischer Test steht * `ApiTokenFilterTests` — richtiger Token passiert, fehlender/falscher/zu kurzer/zu langer sowie abweichend geschriebener Token werden abgewiesen. -### ⚠️ Nicht Ende-zu-Ende verifiziert +### ✅ Ende-zu-Ende verifiziert (2026-08-08, gegen die echte Datenbank) -Die Entscheidungslogik und der Filter sind einzeln getestet, die Verdrahtung dazwischen -nicht: `StartWebServerAsync` bricht ohne Datenbankkonfiguration vorher ab. Nachzuholen, -sobald die DB-Zugangsdaten wieder hinterlegt sind. +Nachgeholt, sobald die DB-Zugangsdaten wieder vorlagen. Geprüft wurde mit einem +Wegwerf-Host, der **ausschließlich den Webserver** startet — die Worker blieben aus, weil +parallel eine ältere Instanz auf derselben Datenbank läuft. Zusätzlich mit +`ApiSettings__ReadOnlyDatabase=true`, sodass weder Migrationen noch Seeding liefen +(im Log bestätigt). + +Als „externe" Bindung diente `127.0.0.2`: die Adresse gilt der Prüfung als öffentlich, +bleibt aber Loopback — der Test öffnet also nichts im Netz. + +| Fall | `/api/capabilities` | `/api/jobs` | Swagger | +|---|---|---|---| +| localhost, kein Token | `canControl:true, authRequired:false` | 200 | 200 | +| **extern, kein Token** | `canControl:false` | **404** | **404** | +| extern, mit Token | `canControl:true, authRequired:true, tokenHeader:"X-Predictalytics-Key"` | ohne Header **401**, falscher Token **401**, richtiger **200** | **404** | + +Damit ist belegt: eine externe Bindung ohne Token stellt die Steuerendpunkte gar nicht +erst bereit, und Swagger ist in beiden externen Fällen abgeschaltet. + +**Gleichzeitig verifiziert** (Vorgriff auf Phase 6): + +* Datenbankverbindung steht — 37.803 MB, `SELECT`-Pfad über `GetDatabaseSizeMbAsync` +* Web-UI und Assets werden ausgeliefert: `/`, `/css/style.css`, `/js/app.js` je 200 +* `/api/dashboard` liefert echte Daten: 151.094 Trader, 38.187.946 Trades ---