Skip to content
This repository has been archived by the owner on Sep 12, 2023. It is now read-only.

Commit

Permalink
Drop domain fronting and other network hacks since #1147
Browse files Browse the repository at this point in the history
  • Loading branch information
asuka-mio committed Jun 17, 2023
1 parent cf95e7b commit 2d20da7
Show file tree
Hide file tree
Showing 8 changed files with 6 additions and 248 deletions.
1 change: 0 additions & 1 deletion app/build.gradle.kts
Expand Up @@ -226,7 +226,6 @@ dependencies {
implementation(platform("com.squareup.okhttp3:okhttp-bom:5.0.0-alpha.11"))
implementation("com.squareup.okhttp3:okhttp-android")
implementation("com.squareup.okhttp3:okhttp-coroutines")
implementation("com.squareup.okhttp3:okhttp-dnsoverhttps")

implementation("com.squareup.okio:okio-jvm:3.3.0")

Expand Down
11 changes: 6 additions & 5 deletions app/src/main/java/com/hippo/ehviewer/EhApplication.kt
Expand Up @@ -18,6 +18,7 @@ package com.hippo.ehviewer

import android.app.Application
import android.content.ComponentCallbacks2
import android.os.Build
import androidx.appcompat.app.AppCompatDelegate
import androidx.collection.LruCache
import androidx.lifecycle.ProcessLifecycleOwner
Expand All @@ -26,11 +27,8 @@ import coil.decode.ImageDecoderDecoder
import coil.util.DebugLogger
import com.chuckerteam.chucker.api.ChuckerInterceptor
import com.hippo.ehviewer.client.EhCookieStore
import com.hippo.ehviewer.client.EhDns
import com.hippo.ehviewer.client.EhSSLSocketFactory
import com.hippo.ehviewer.client.EhTagDatabase
import com.hippo.ehviewer.client.data.GalleryDetail
import com.hippo.ehviewer.client.install
import com.hippo.ehviewer.coil.MergeInterceptor
import com.hippo.ehviewer.coil.diskCache
import com.hippo.ehviewer.coil.imageLoader
Expand All @@ -48,6 +46,9 @@ import com.hippo.ehviewer.yorozuya.FileUtils
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.DelicateCoroutinesApi
import okhttp3.AsyncDns
import okhttp3.Dns
import okhttp3.android.AndroidAsyncDns
import okio.Path.Companion.toOkioPath
import splitties.arch.room.roomDb
import splitties.init.appCtx
Expand Down Expand Up @@ -146,15 +147,15 @@ class EhApplication : Application(), ImageLoaderFactory {

companion object {
val nonCacheOkHttpClient by lazy {
val systemDns = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) AsyncDns.toDns(AndroidAsyncDns.IPv4, AndroidAsyncDns.IPv6) else Dns.SYSTEM
httpClient {
cookieJar(EhCookieStore)
dns(EhDns)
dns(systemDns)
addInterceptor(
ChuckerInterceptor.Builder(appCtx).apply {
alwaysReadResponseBody(false)
}.build(),
)
if (Settings.dF) install(EhSSLSocketFactory)
}
}

Expand Down
52 changes: 0 additions & 52 deletions app/src/main/java/com/hippo/ehviewer/EhHostsConfig.kt

This file was deleted.

7 changes: 0 additions & 7 deletions app/src/main/java/com/hippo/ehviewer/Settings.kt
Expand Up @@ -12,8 +12,6 @@ import kotlin.reflect.KProperty

object Settings : DataStorePreferences(null) {
private const val KEY_SHOW_TAG_TRANSLATIONS = "show_tag_translations"
private const val KEY_BUILT_IN_HOSTS = "built_in_hosts_2"
private const val KEY_DOMAIN_FRONTING = "domain_fronting"

var downloadScheme by stringOrNullPref("image_scheme", null)
var downloadAuthority by stringOrNullPref("image_authority", null)
Expand Down Expand Up @@ -48,14 +46,11 @@ object Settings : DataStorePreferences(null) {
var saveParseErrorBody by boolPref("save_parse_error_body", true)
var saveCrashLog by boolPref("save_crash_log", true)
var security by boolPref("require_unlock", false)
var builtInHosts by boolPref(KEY_BUILT_IN_HOSTS, false)
var removeImageFiles by boolPref("include_pic", true)
var needSignIn by boolPref("need_sign_in", true)
var blackDarkTheme by boolPref("black_dark_theme", false).observed { updateWhenAmoledModeChanges() }
var preloadThumbAggressively by boolPref("preload_thumb_aggressively", false)
var dF by boolPref(KEY_DOMAIN_FRONTING, false)
var downloadOriginImage by boolPref("download_origin_image", false)
var bypassVpn by boolPref("bypass_vpn", true)
var thumbSizeDp by intPref("thumb_size_", 120)
var favLocalCount by intPref("fav_local", 0)
var favCloudCount by intPref("fav_cloud", 0)
Expand All @@ -78,8 +73,6 @@ object Settings : DataStorePreferences(null) {
init {
if ("CN" == Locale.getDefault().country) {
edit {
if (KEY_BUILT_IN_HOSTS !in prefs) builtInHosts = true
if (KEY_DOMAIN_FRONTING !in prefs) dF = true
if (KEY_SHOW_TAG_TRANSLATIONS !in prefs) showTagTranslations = true
}
}
Expand Down
34 changes: 0 additions & 34 deletions app/src/main/java/com/hippo/ehviewer/client/EhDns.kt

This file was deleted.

55 changes: 0 additions & 55 deletions app/src/main/java/com/hippo/ehviewer/client/EhSSLSocketFactory.kt

This file was deleted.

41 changes: 0 additions & 41 deletions app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt
Expand Up @@ -24,14 +24,10 @@ import android.content.pm.verify.domain.DomainVerificationManager
import android.content.pm.verify.domain.DomainVerificationUserState
import android.graphics.Bitmap
import android.graphics.ImageDecoder
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
Expand Down Expand Up @@ -201,9 +197,6 @@ class MainActivity : EhActivity() {
}

override fun onCreate(savedInstanceState: Bundle?) {
if (Settings.dF && Settings.bypassVpn) {
bypassVpn()
}
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
Expand Down Expand Up @@ -251,19 +244,6 @@ class MainActivity : EhActivity() {
}
}

private fun bypassVpn() {
val network = connectivityManager.activeNetwork
val capabilities = connectivityManager.getNetworkCapabilities(network)
capabilities?.let {
if (it.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
val builder = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_FOREGROUND)
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
connectivityManager.registerNetworkCallback(builder.build(), mNetworkCallback)
}
}
}

@RequiresApi(Build.VERSION_CODES.S)
@Throws(PackageManager.NameNotFoundException::class)
private fun checkAppLinkVerify() {
Expand Down Expand Up @@ -484,25 +464,4 @@ class MainActivity : EhActivity() {
super.onProvideAssistContent(outContent)
mShareUrl?.let { outContent?.webUri = Uri.parse(mShareUrl) }
}

private val mNetworkCallback = object : ConnectivityManager.NetworkCallback() {
private val TAG = "mNetworkCallback"

override fun onAvailable(network: Network) {
Log.d(TAG, "onAvailable: $network")
connectivityManager.bindProcessToNetwork(network)
availableNetworks.add(network)
}

override fun onLost(network: Network) {
Log.d(TAG, "onLost: $network")
val activeNetwork = availableNetworks.last()
availableNetworks.remove(network)
if (network == activeNetwork) {
connectivityManager.bindProcessToNetwork(
availableNetworks.takeIf { it.isNotEmpty() }?.last(),
)
}
}
}
}
53 changes: 0 additions & 53 deletions app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt
@@ -1,7 +1,6 @@
package com.hippo.ehviewer.ui.settings

import android.annotation.SuppressLint
import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS
Expand Down Expand Up @@ -32,26 +31,20 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import com.hippo.ehviewer.AppConfig
import com.hippo.ehviewer.BuildConfig
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhEngine
import com.hippo.ehviewer.client.data.FavListUrlBuilder
import com.hippo.ehviewer.client.systemDns
import com.hippo.ehviewer.ui.LocalNavController
import com.hippo.ehviewer.ui.legacy.EditTextDialogBuilder
import com.hippo.ehviewer.ui.tools.observed
import com.hippo.ehviewer.util.LogCat
import com.hippo.ehviewer.util.ReadableTime
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import moe.tarsin.coroutines.runSuspendCatching
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.dnsoverhttps.DnsOverHttps
import java.io.File
import java.net.InetAddress
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream

Expand Down Expand Up @@ -133,37 +126,6 @@ fun AdvancedScreen() {
entryValueRes = R.array.app_language_entry_values,
value = Settings::language,
)
SwitchPreference(
title = stringResource(id = R.string.settings_advanced_built_in_hosts_title),
value = Settings::builtInHosts,
)
Preference(title = stringResource(id = R.string.settings_advanced_dns_over_http_title)) {
val builder = EditTextDialogBuilder(context, Settings.dohUrl, context.getString(R.string.settings_advanced_dns_over_http_hint))
builder.setTitle(R.string.settings_advanced_dns_over_http_title)
builder.setPositiveButton(android.R.string.ok, null)
val dialog = builder.create().apply { show() }
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
val text = builder.text.trim()
runCatching {
doh = if (text.isNotBlank()) buildDoHDNS(text) else null
}.onFailure {
builder.setError("Invalid URL!")
}.onSuccess {
Settings.dohUrl = text
dialog.dismiss()
}
}
}
SwitchPreference(
title = stringResource(id = R.string.settings_advanced_domain_fronting_title),
summary = stringResource(id = R.string.settings_advanced_domain_fronting_summary),
value = Settings::dF,
)
SwitchPreference(
title = stringResource(id = R.string.settings_advanced_bypass_vpn_title),
summary = stringResource(id = R.string.settings_advanced_bypass_vpn_summary),
value = Settings::bypassVpn,
)
SwitchPreference(
title = stringResource(id = R.string.preload_thumb_aggressively),
value = Settings::preloadThumbAggressively,
Expand Down Expand Up @@ -265,18 +227,3 @@ fun AdvancedScreen() {
}
}
}

private fun buildDoHDNS(url: String): DnsOverHttps {
return DnsOverHttps.Builder().apply {
client(EhApplication.okHttpClient)
url(url.toHttpUrl())
post(true)
systemDns(systemDns)
}.build()
}

private var doh: DnsOverHttps? = Settings.dohUrl.runCatching { buildDoHDNS(this) }.getOrNull()

object EhDoH {
fun lookup(hostname: String): List<InetAddress>? = doh?.runCatching { lookup(hostname).takeIf { it.isNotEmpty() } }?.onFailure { it.printStackTrace() }?.getOrNull()
}

1 comment on commit 2d20da7

@UjuiUjuMandan
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

那种事情不要啊。

Please sign in to comment.