fix(android): trust self-signed certs for the user's own node in WebView
Node apps (e.g. NetBird on :8087) terminate TLS with a self-signed cert so the dashboard gets a secure context (OIDC / window.crypto.subtle, #15). The WebView's default onReceivedSslError CANCELs untrusted certs, so those apps rendered blank in the companion — exactly the netbird "won't load in the webview" report. Override onReceivedSslError in both WebViewClients (kiosk + in-app browser) to proceed() only when the failing cert's host matches the connected node; reject everything else (no blanket trust). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
89d397bb74
commit
43e700498b
@ -323,6 +323,26 @@ fun WebViewScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Node apps (e.g. NetBird) terminate TLS with a
|
||||||
|
// self-signed cert — the dashboard needs a secure
|
||||||
|
// context for OIDC/window.crypto.subtle (#15). The
|
||||||
|
// WebView default is to CANCEL untrusted certs, so
|
||||||
|
// those apps render blank. The user explicitly trusts
|
||||||
|
// their own node, so proceed for same-host certs only;
|
||||||
|
// reject anything else (don't blanket-trust the web).
|
||||||
|
override fun onReceivedSslError(
|
||||||
|
view: WebView?,
|
||||||
|
handler: android.webkit.SslErrorHandler?,
|
||||||
|
error: android.net.http.SslError?,
|
||||||
|
) {
|
||||||
|
val u = error?.url
|
||||||
|
if (u != null && isSameHost(u, serverUrl)) {
|
||||||
|
handler?.proceed()
|
||||||
|
} else {
|
||||||
|
handler?.cancel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun shouldOverrideUrlLoading(
|
override fun shouldOverrideUrlLoading(
|
||||||
view: WebView?,
|
view: WebView?,
|
||||||
request: WebResourceRequest?,
|
request: WebResourceRequest?,
|
||||||
@ -553,6 +573,23 @@ private fun InAppBrowser(
|
|||||||
canGoForward = view?.canGoForward() == true
|
canGoForward = view?.canGoForward() == true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Self-signed TLS on the node's apps (e.g. NetBird on
|
||||||
|
// :8087) would otherwise be cancelled by the WebView
|
||||||
|
// and render blank. Proceed for the user's own node
|
||||||
|
// (same host); reject any other untrusted cert.
|
||||||
|
override fun onReceivedSslError(
|
||||||
|
view: WebView?,
|
||||||
|
handler: android.webkit.SslErrorHandler?,
|
||||||
|
error: android.net.http.SslError?,
|
||||||
|
) {
|
||||||
|
val u = error?.url
|
||||||
|
if (u != null && isSameHost(u, serverUrl)) {
|
||||||
|
handler?.proceed()
|
||||||
|
} else {
|
||||||
|
handler?.cancel()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun shouldOverrideUrlLoading(
|
override fun shouldOverrideUrlLoading(
|
||||||
view: WebView?,
|
view: WebView?,
|
||||||
request: WebResourceRequest?,
|
request: WebResourceRequest?,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user