### fix: v28 verbessere Same-Origin-Strategie und Fehlerbehandlung
All checks were successful
All checks were successful
- **PlatformConfig.wasmJs.kt:** API-URLs auf leere Strings geändert (Root-Proxy). - **OnlineNennungFormular:** Fehlermeldungen bei Versandfehlern präzisiert. - **NennungRemoteRepository:** Detaillierte Fehlerrückmeldungen hinzugefügt. - **Caddyfile:** Reverse Proxy angepasst, Header und Strategie-Version aktualisiert. - **WebMainScreen:** Versionsmarker auf `v2026-04-23.28 - SAME-ORIGIN v2` aktualisiert.
This commit is contained in:
parent
251647a6ab
commit
3f291c907c
|
|
@ -20,18 +20,19 @@
|
|||
# Same-Origin Strategy: Alle /api/* Anfragen werden intern an den Mail-Service weitergeleitet
|
||||
# Dadurch sieht der Browser nur noch app.mo-code.at und CORS wird hinfällig.
|
||||
handle /api/* {
|
||||
# Wir entfernen das /api Präfix bevor wir es an den Service weitergeben
|
||||
uri strip_prefix /api
|
||||
# Wir leiten direkt weiter, der mail-service erwartet /api/mail/...
|
||||
reverse_proxy mail-service:8085 {
|
||||
header_up Host {upstream_hostport}
|
||||
header_up X-Real-IP {remote_host}
|
||||
header_up X-Forwarded-For {remote_host}
|
||||
}
|
||||
|
||||
# CORS Header zur Sicherheit trotzdem mitsenden (Nuclear Option v3)
|
||||
header {
|
||||
Access-Control-Allow-Origin "*"
|
||||
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
|
||||
Access-Control-Allow-Headers "*"
|
||||
X-Caddy-Strategy "same-origin-v27"
|
||||
X-Caddy-Strategy "same-origin-v28"
|
||||
}
|
||||
|
||||
reverse_proxy mail-service:8085
|
||||
}
|
||||
|
||||
handle /health {
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ package at.mocode.frontend.core.network
|
|||
@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
|
||||
actual object PlatformConfig {
|
||||
actual fun resolveMailServiceUrl(): String {
|
||||
// SAME-ORIGIN Strategy: Use relative path to bypass CORS
|
||||
return "/api"
|
||||
// SAME-ORIGIN Strategy: Use root for proxying
|
||||
return ""
|
||||
}
|
||||
|
||||
actual fun resolveKeycloakUrl(): String {
|
||||
|
|
@ -20,8 +20,8 @@ actual object PlatformConfig {
|
|||
}
|
||||
|
||||
actual fun resolveApiBaseUrl(): String {
|
||||
// SAME-ORIGIN Strategy: Use relative path to bypass CORS
|
||||
return "/api"
|
||||
// SAME-ORIGIN Strategy: Use root for proxying
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -92,11 +92,21 @@ class NennungRemoteRepository(private val client: HttpClient) {
|
|||
)
|
||||
|
||||
// Wir senden an den mail-service (URL dynamisch aufgelöst)
|
||||
client.post("$mailServiceUrl/api/mail/nennung") {
|
||||
val fullUrl = "$mailServiceUrl/api/mail/nennung"
|
||||
println("Sende Nennung an URL: $fullUrl")
|
||||
|
||||
val response = client.post(fullUrl) {
|
||||
contentType(ContentType.Application.Json)
|
||||
setBody(request)
|
||||
}
|
||||
Result.success(Unit)
|
||||
|
||||
if (response.status.isSuccess()) {
|
||||
Result.success(Unit)
|
||||
} else {
|
||||
val errorText = "Server meldet Fehler: ${response.status.value} ${response.status.description}"
|
||||
println(errorText)
|
||||
Result.failure(Exception(errorText))
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Result.failure(e)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -401,7 +401,7 @@ fun OnlineNennungFormular(
|
|||
onNennenAbgeschickt(payload) { success, error ->
|
||||
isLoading = false
|
||||
if (!success) {
|
||||
errorMessage = error ?: "Ein unbekannter Fehler ist aufgetreten."
|
||||
errorMessage = "Senden fehlgeschlagen: " + (error ?: "Netzwerkfehler oder Server nicht erreichbar.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -443,7 +443,7 @@ fun OnlineNennungFormular(
|
|||
onNennenAbgeschickt(payload) { success, error ->
|
||||
isLoading = false
|
||||
if (!success) {
|
||||
errorMessage = error ?: "Ein unbekannter Fehler ist aufgetreten."
|
||||
errorMessage = "Senden fehlgeschlagen: " + (error ?: "Netzwerkfehler oder Server nicht erreichbar.")
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -126,7 +126,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.27 - SAME-ORIGIN PROXY",
|
||||
text = "v2026-04-23.28 - SAME-ORIGIN v2",
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
color = Color.LightGray.copy(alpha = 0.5f)
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user