[DO NOT USE] Restore DOH support

This commit is contained in:
tarsin committed 2023-06-05 15:28:00 +08:00
1 parent b41e564411
commit b1671eacb7
2 files changed
+41 -2

No files matched your search

@@ -3,6 +3,7 @@ package com.hippo.ehviewer.client
import android.os.Build
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.builtInHosts
import com.hippo.ehviewer.ui.settings.EhDoH
import okhttp3.AsyncDns
import okhttp3.Dns
import okhttp3.android.AndroidAsyncDns
@@ -29,5 +30,5 @@ fun HostsMap.hosts(vararg hosts: String, builder: HostMapBuilder.() -> Unit) = a
val systemDns = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) AsyncDns.toDns(AndroidAsyncDns.IPv4, AndroidAsyncDns.IPv6) else Dns.SYSTEM
object EhDns : Dns {
override fun lookup(hostname: String): List<InetAddress> = builtInHosts[hostname].takeIf { Settings.builtInHosts } ?: systemDns.lookup(hostname)
override fun lookup(hostname: String): List<InetAddress> = builtInHosts[hostname].takeIf { Settings.builtInHosts } ?: EhDoH.lookup(hostname) ?: systemDns.lookup(hostname)
}
@@ -1,6 +1,7 @@
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
@@ -32,12 +33,15 @@ 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.legacy.BaseDialogBuilder
import com.hippo.ehviewer.ui.legacy.EditTextDialogBuilder
import com.hippo.ehviewer.ui.login.LocalNavController
import com.hippo.ehviewer.util.LogCat
import com.hippo.ehviewer.util.ReadableTime
@@ -46,7 +50,10 @@ 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
@@ -138,7 +145,23 @@ fun AdvancedScreen() {
)
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),
@@ -265,3 +288,18 @@ 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()
}