Bypass Cloudflare with webview

This commit is contained in:
FooIbar authored and tarsin committed 2023-07-01 14:56:27 +08:00
1 parent 2e3a148c7a
commit 63fcca3c7d
8 files changed
+215 -21

No files matched your search

@@ -45,6 +45,7 @@ import com.hippo.ehviewer.ui.keepNoMediaFileStatus
import com.hippo.ehviewer.ui.lockObserver
import com.hippo.ehviewer.util.ReadableTime
import com.hippo.ehviewer.yorozuya.FileUtils
import eu.kanade.tachiyomi.network.interceptor.CloudflareInterceptor
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -158,6 +159,8 @@ class EhApplication : Application(), ImageLoaderFactory {
}.build(),
)
addInterceptor(CloudflareInterceptor(appCtx))
// TODO: Rewrite CronetInterceptor to use android.net.http.HttpEngine and make it Android 14 only when released
addInterceptor { chain ->
val request = chain.request()
@@ -62,6 +62,10 @@ object EhCookieStore : CookieJar {
flush()
}
fun deleteCookie(url: HttpUrl, name: String) {
manager.setCookie(url.toString(), "$name=;Max-Age=0")
}
fun addCookie(cookie: Cookie) {
if (EhUrl.DOMAIN_E in cookie.domain) manager.setCookie(EhUrl.HOST_E, cookie.toString()) else manager.setCookie(EhUrl.DOMAIN_EX, cookie.toString())
}
@@ -1,6 +1,5 @@
package com.hippo.ehviewer.ui.login
import android.annotation.SuppressLint
import android.webkit.CookieManager
import android.webkit.WebView
import androidx.compose.foundation.layout.fillMaxSize
@@ -18,12 +17,12 @@ import com.hippo.ehviewer.client.EhUtils
import com.hippo.ehviewer.ui.FINISH_ROUTE_NAME
import com.hippo.ehviewer.ui.LocalNavController
import com.hippo.ehviewer.ui.SELECT_SITE_ROUTE_NAME
import com.hippo.ehviewer.util.setDefaultSettings
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.lang.withUIContext
import okhttp3.HttpUrl.Companion.toHttpUrl
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebviewSignInScreen() {
val navController = LocalNavController.current
@@ -68,11 +67,7 @@ fun WebviewSignInScreen() {
state = state,
modifier = Modifier.fillMaxSize(),
onCreated = {
it.settings.run {
builtInZoomControls = true
displayZoomControls = true
javaScriptEnabled = true
}
it.setDefaultSettings()
},
client = client,
)
@@ -1,6 +1,5 @@
package com.hippo.ehviewer.ui.settings
import android.annotation.SuppressLint
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
@@ -18,8 +17,8 @@ import com.google.accompanist.web.rememberWebViewState
import com.hippo.ehviewer.R
import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.ui.LocalNavController
import com.hippo.ehviewer.util.setDefaultSettings
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun MyTagsScreen() {
val navController = LocalNavController.current
@@ -41,11 +40,7 @@ fun MyTagsScreen() {
state = state,
modifier = Modifier.padding(top = paddingValues.calculateTopPadding()).fillMaxSize(),
onCreated = {
it.settings.run {
builtInZoomControls = true
displayZoomControls = false
javaScriptEnabled = true
}
it.setDefaultSettings()
},
)
}
@@ -1,6 +1,5 @@
package com.hippo.ehviewer.ui.settings
import android.annotation.SuppressLint
import android.webkit.WebView
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
@@ -27,10 +26,10 @@ import com.hippo.ehviewer.R
import com.hippo.ehviewer.client.EhCookieStore
import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.ui.LocalNavController
import com.hippo.ehviewer.util.setDefaultSettings
private const val applyJs = "javascript:(function(){var apply = document.getElementById(\"apply\").children[0];apply.click();})();"
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun UConfigScreen() {
val navController = LocalNavController.current
@@ -65,11 +64,7 @@ fun UConfigScreen() {
state = state,
modifier = Modifier.padding(top = paddingValues.calculateTopPadding()).fillMaxSize(),
onCreated = {
it.settings.run {
builtInZoomControls = true
displayZoomControls = false
javaScriptEnabled = true
}
it.setDefaultSettings()
},
factory = { WebView(it).apply { webview.set(this) } },
)
@@ -0,0 +1,11 @@
package com.hippo.ehviewer.util
import android.annotation.SuppressLint
import android.webkit.WebView
@SuppressLint("SetJavaScriptEnabled")
fun WebView.setDefaultSettings() = settings.run {
builtInZoomControls = true
displayZoomControls = false
javaScriptEnabled = true
}