From e8ef2501509b5f73542578df4d6c0d6cbcc0882e Mon Sep 17 00:00:00 2001 From: bt90 Date: Sat, 14 Oct 2023 12:04:36 +0200 Subject: [PATCH] Load UI with Authorization header (#1982) As preparation for https://github.com/syncthing/syncthing/pull/8757. See https://github.com/syncthing/syncthing/pull/8757#issuecomment-1750372399 The app sends the `Authorization: Basic ` HTTP header in the initial request when loading the Web UI to skip the login form. --- .../activities/WebGuiActivity.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java b/app/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java index 9e21780ca..5385a9c54 100644 --- a/app/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java +++ b/app/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java @@ -1,5 +1,7 @@ package com.nutomic.syncthingandroid.activities; +import static java.nio.charset.StandardCharsets.UTF_8; + import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Context; @@ -13,6 +15,7 @@ import android.os.IBinder; import android.os.Parcelable; import android.util.ArrayMap; +import android.util.Base64; import android.util.Log; import android.view.View; import android.webkit.HttpAuthHandler; @@ -43,6 +46,8 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; /** @@ -99,10 +104,6 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e } } - public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { - handler.proceed(mConfig.getUserName(), mConfig.getApiKey()); - } - @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Uri uri = Uri.parse(url); @@ -171,7 +172,11 @@ public void onServiceStateChange(SyncthingService.State newState) { if (mWebView.getUrl() == null) { mWebView.stopLoading(); setWebViewProxy(mWebView.getContext().getApplicationContext(), "", 0, "localhost|0.0.0.0|127.*|[::1]"); - mWebView.loadUrl(getService().getWebGuiUrl().toString()); + String credentials = mConfig.getUserName() + ":" + mConfig.getApiKey(); + String b64Credentials = Base64.encodeToString(credentials.getBytes(UTF_8), Base64.NO_WRAP); + Map headers = new HashMap<>(); + headers.put("Authorization", "Basic " + b64Credentials); + mWebView.loadUrl(getService().getWebGuiUrl().toString(), headers); } } }