From 996f770935de78e6b0f4dfa13996c59f0f3dbac4 Mon Sep 17 00:00:00 2001 From: arkon Date: Sat, 2 Apr 2022 10:49:42 -0400 Subject: [PATCH] Override X-Requested-With header value in WebView requests (closes #6781) --- app/src/main/java/eu/kanade/tachiyomi/App.kt | 18 ++++++++++++++++++ .../interceptor/CloudflareInterceptor.kt | 1 - .../tachiyomi/ui/webview/WebViewActivity.kt | 1 - .../tachiyomi/util/system/WebViewUtil.kt | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 1125ec2c90..ca58e84855 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -32,6 +32,7 @@ import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.ui.base.delegate.SecureActivityDelegate import eu.kanade.tachiyomi.util.preference.asImmediateFlow import eu.kanade.tachiyomi.util.system.AuthenticatorUtil +import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.animatorDurationScale import eu.kanade.tachiyomi.util.system.logcat import eu.kanade.tachiyomi.util.system.notification @@ -148,6 +149,23 @@ open class App : Application(), DefaultLifecycleObserver, ImageLoaderFactory { } } + override fun getPackageName(): String { + try { + // Override the value passed as X-Requested-With in WebView requests + val stackTrace = Thread.currentThread().stackTrace + for (element in stackTrace) { + if ("org.chromium.base.BuildInfo".equals(element.className, ignoreCase = true)) { + if ("getAll".equals(element.methodName, ignoreCase = true)) { + return WebViewUtil.SPOOF_PACKAGE_NAME + } + break + } + } + } catch (e: Exception) { + } + return super.getPackageName() + } + protected open fun setupAcra() { if (BuildConfig.FLAVOR != "dev") { initAcra { diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt index 37c8e920d2..0a84641436 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/interceptor/CloudflareInterceptor.kt @@ -101,7 +101,6 @@ class CloudflareInterceptor(private val context: Context) : Interceptor { val origRequestUrl = request.url.toString() val headers = request.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }.toMutableMap() - headers["X-Requested-With"] = WebViewUtil.REQUESTED_WITH executor.execute { val webview = WebView(context) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt index c925206402..e46381faa5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt @@ -105,7 +105,6 @@ class WebViewActivity : BaseActivity() { headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" }.toMutableMap() binding.webview.settings.userAgentString = source.headers["User-Agent"] } - headers["X-Requested-With"] = WebViewUtil.REQUESTED_WITH supportActionBar?.subtitle = url diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt index f138cca1f1..7aec21163e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewUtil.kt @@ -9,7 +9,7 @@ import android.webkit.WebView import logcat.LogPriority object WebViewUtil { - const val REQUESTED_WITH = "com.android.browser" + const val SPOOF_PACKAGE_NAME = "com.android.chrome" const val MINIMUM_WEBVIEW_VERSION = 95