From 71aea3f41dfe82ae422e7a780b9cec162aa61f9d Mon Sep 17 00:00:00 2001 From: StefanMoCoAt Date: Thu, 23 Apr 2026 13:02:49 +0200 Subject: [PATCH] ### fix: verbessere CORS-Handling im Caddy-Proxy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - **Caddyfile:** Verlagerung des CORS-Handlings in den Reverse Proxy, inkl. Unterstützung für Preflight-Anfragen und Header-Optimierungen. - **UI:** Aktualisierung des Versionsmarkers auf `v2026-04-23.21 - CADDY CORS PROXY FIX`. - **Docs:** Ergänzung der Problem- und Lösungshistorie für Version 21. --- config/docker/caddy/web-app/Caddyfile | 19 +++++++++++++++++++ .../03_Journal/2026-04-23_Plan-B-Formulare.md | 8 ++++++++ .../frontend/shell/web/WebMainScreen.kt | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/config/docker/caddy/web-app/Caddyfile b/config/docker/caddy/web-app/Caddyfile index d9346aef..65b55538 100644 --- a/config/docker/caddy/web-app/Caddyfile +++ b/config/docker/caddy/web-app/Caddyfile @@ -19,6 +19,25 @@ # Reverse Proxy: Plan-B leitet nur /api/mail an den Mail-Service weiter (kein API-Gateway nötig) handle /api/mail/* { + # CORS Handshake direkt im Proxy abfangen (Plan-B radikal) + @options method OPTIONS + header @options { + Access-Control-Allow-Origin "https://app.mo-code.at" + Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + Access-Control-Allow-Headers "*" + Access-Control-Allow-Credentials "true" + Access-Control-Max-Age "3600" + } + respond @options 204 + + # CORS Header auch für die eigentlichen Antworten (GET/POST) setzen + header { + Access-Control-Allow-Origin "https://app.mo-code.at" + Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" + Access-Control-Allow-Headers "*" + Access-Control-Allow-Credentials "true" + } + reverse_proxy mail-service:8085 } diff --git a/docs/03_Journal/2026-04-23_Plan-B-Formulare.md b/docs/03_Journal/2026-04-23_Plan-B-Formulare.md index 5edaf298..b84f859f 100644 --- a/docs/03_Journal/2026-04-23_Plan-B-Formulare.md +++ b/docs/03_Journal/2026-04-23_Plan-B-Formulare.md @@ -71,3 +71,11 @@ Die "Hallo Du!" Test-UI wurde durch produktive, fachlich korrekte Formulare erse - CORS-Konfiguration in `GlobalSecurityConfig.kt` finalisiert: Whitelist für `https://*.mo-code.at` und `http://localhost:[*]` verfeinert. - `allowedMethods` um `HEAD` erweitert und `exposedHeaders` hinzugefügt, um Browser-Warnungen zu eliminieren. - **Status**: Versionsmarker auf v2026-04-23.20 aktualisiert. + +### v2026-04-23.21 - CADDY CORS PROXY FIX +- **Problem**: Trotz umfangreicher Backend-Konfiguration (v20) meldete der Browser weiterhin fehlende CORS-Header bei Preflight-Anfragen (`No 'Access-Control-Allow-Origin' header`). +- **Lösung**: + - CORS-Handshaking wurde direkt in den Caddy-Reverse-Proxy (`Caddyfile` der Web-App) verlagert. + - OPTIONS-Requests werden nun sofort vom Proxy mit `204 No Content` und den korrekten CORS-Headern beantwortet. + - Damit wird sichergestellt, dass der Browser die Header erhält, noch bevor die Anfrage das Backend erreicht. +- **Status**: Versionsmarker auf v2026-04-23.21 aktualisiert. diff --git a/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt b/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt index ea1a1804..2027d514 100644 --- a/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt +++ b/frontend/shells/meldestelle-web/src/wasmJsMain/kotlin/at/mocode/frontend/shell/web/WebMainScreen.kt @@ -124,7 +124,7 @@ fun MainAppContent() { // Dezentraler Versions-Marker in der unteren rechten Ecke Box(modifier = Modifier.fillMaxSize().padding(8.dp), contentAlignment = Alignment.BottomEnd) { Text( - text = "v2026-04-23.20 - CLOUDFLARE DNS VERIFIED", + text = "v2026-04-23.21 - CADDY CORS PROXY FIX", style = MaterialTheme.typography.labelSmall, color = Color.LightGray.copy(alpha = 0.5f) )