From 1fcef91adcedea136add0030f3f07dd4431dcdac Mon Sep 17 00:00:00 2001 From: celenity Date: Wed, 9 Sep 2026 04:10:46 +0000 Subject: [PATCH] feat: add DNSBunker to list of built-in DoH providers (as they meet criteria) - see https://codeberg.org/celenity/Phoenix/issues/367 for details (+ add `IFDohProviders` for specifying DoH provider constants, instead of hardcoding them at `DohSettingsProvider`) Signed-off-by: celenity --- patches/fenix-configure-doh-providers.patch | 91 ++++++++++--------- .../org/ironfoxoss/core/IFDohProviders.kt | 39 ++++++++ .../ironfox/utils/GeckoSettingsBridge.sys.mjs | 3 + scripts/patches.yaml | 1 + 4 files changed, 91 insertions(+), 43 deletions(-) create mode 100644 patches/gecko-overlay/ironfox/android/core/src/main/java/org/ironfoxoss/core/IFDohProviders.kt diff --git a/patches/fenix-configure-doh-providers.patch b/patches/fenix-configure-doh-providers.patch index 2952f4eb..063c046a 100644 --- a/patches/fenix-configure-doh-providers.patch +++ b/patches/fenix-configure-doh-providers.patch @@ -8,16 +8,24 @@ Adds custom DoH providers. Signed-off-by: celenity --- diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsProvider.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsProvider.kt -index 028be832d6d7..4cbee0999688 100644 +index 028be832d6d7..70fc072aebf4 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsProvider.kt +++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsProvider.kt -@@ -37,17 +37,42 @@ internal class DefaultDohSettingsProvider( +@@ -7,6 +7,7 @@ package org.mozilla.fenix.settings.doh + import androidx.annotation.VisibleForTesting + import mozilla.components.concept.engine.Engine + import org.mozilla.fenix.utils.Settings ++import org.ironfoxoss.core.IFDohProviders + + internal interface DohSettingsProvider { + fun getProtectionLevels(): List +@@ -37,17 +38,50 @@ internal class DefaultDohSettingsProvider( private val cloudflare = Provider.BuiltIn( url = cloudflareUri, - name = "Cloudflare", - default = dohDefaultProviderUrl.isBlank() || dohDefaultProviderUrl == cloudflareUri, -+ name = "Cloudflare πŸ‡ΊπŸ‡Έ", ++ name = IFDohProviders.cloudflareName, + default = dohDefaultProviderUrl == cloudflareUri, ) - private val nextDns = Provider.BuiltIn( @@ -25,43 +33,51 @@ index 028be832d6d7..4cbee0999688 100644 - name = "NextDNS", - default = dohDefaultProviderUrl == nextDnsUri, + private val mullvadBase = Provider.BuiltIn( -+ url = mullvadBaseUri, -+ name = "Mullvad (Base) πŸ‡ΈπŸ‡ͺ", -+ default = dohDefaultProviderUrl.isNullOrBlank() || dohDefaultProviderUrl == mullvadBaseUri, ++ url = IFDohProviders.mullvadBaseUri, ++ name = IFDohProviders.mullvadBaseName, ++ default = dohDefaultProviderUrl.isBlank() || dohDefaultProviderUrl == IFDohProviders.mullvadBaseUri, + ) + private val cloudflareMalware = Provider.BuiltIn( -+ url = cloudflareMalwareUri, -+ name = "Cloudflare (Malware Protection) πŸ‡ΊπŸ‡Έ", -+ default = dohDefaultProviderUrl == cloudflareMalwareUri, ++ url = IFDohProviders.cloudflareMalwareUri, ++ name = IFDohProviders.cloudflareMalwareName, ++ default = dohDefaultProviderUrl == IFDohProviders.cloudflareMalwareUri, + ) + private val dns4EuAdBlocking = Provider.BuiltIn( -+ url = dns4EuAdBlockingUri, -+ name = "DNS4EU (Ad Blocking) πŸ‡¨πŸ‡Ώ", -+ default = dohDefaultProviderUrl == dns4EuAdBlockingUri, ++ url = IFDohProviders.dns4EuAdBlockingUri, ++ name = IFDohProviders.dns4EuAdBlockingName, ++ default = dohDefaultProviderUrl == IFDohProviders.dns4EuAdBlockingUri, + ) + private val dns4EuProtective = Provider.BuiltIn( -+ url = dns4EuProtectiveUri, -+ name = "DNS4EU (Protective) πŸ‡¨πŸ‡Ώ", -+ default = dohDefaultProviderUrl == dns4EuProtectiveUri, ++ url = IFDohProviders.dns4EuProtectiveUri, ++ name = IFDohProviders.dns4EuProtectiveName, ++ default = dohDefaultProviderUrl == IFDohProviders.dns4EuProtectiveUri, + ) + private val dns4EuUnfiltered = Provider.BuiltIn( -+ url = dns4EuUnfilteredUri, -+ name = "DNS4EU (Unfiltered) πŸ‡¨πŸ‡Ώ", -+ default = dohDefaultProviderUrl == dns4EuUnfilteredUri, ++ url = IFDohProviders.dns4EuUnfilteredUri, ++ name = IFDohProviders.dns4EuUnfilteredName, ++ default = dohDefaultProviderUrl == IFDohProviders.dns4EuUnfilteredUri, ++ ) ++ private val dnsBunker = Provider.BuiltIn( ++ url = IFDohProviders.dnsBunkerUri, ++ name = IFDohProviders.dnsBunkerName, ++ default = dohDefaultProviderUrl == IFDohProviders.dnsBunkerUri, + ) + private val mullvadUnfiltered = Provider.BuiltIn( -+ url = mullvadUnfilteredUri, -+ name = "Mullvad (Unfiltered) πŸ‡ΈπŸ‡ͺ", -+ default = dohDefaultProviderUrl == mullvadUnfilteredUri, ++ url = IFDohProviders.mullvadUnfilteredUri, ++ name = IFDohProviders.mullvadUnfilteredName, ++ default = dohDefaultProviderUrl == IFDohProviders.mullvadUnfilteredUri, ) private val providerUrl = settings.dohProviderUrl private val custom = Provider.Custom( - url = if (providerUrl != cloudflareUri && providerUrl != nextDnsUri) { -+ url = if (providerUrl != cloudflareUri && providerUrl != mullvadBaseUri && providerUrl != cloudflareMalwareUri && providerUrl != dns4EuAdBlockingUri && providerUrl != dns4EuProtectiveUri && providerUrl != dns4EuUnfilteredUri && providerUrl != mullvadUnfilteredUri) { ++ url = if (providerUrl != cloudflareUri && providerUrl != IFDohProviders.mullvadBaseUri && ++ providerUrl != IFDohProviders.cloudflareMalwareUri && providerUrl != IFDohProviders.dns4EuAdBlockingUri && ++ providerUrl != IFDohProviders.dns4EuProtectiveUri && providerUrl != IFDohProviders.dns4EuUnfilteredUri && ++ providerUrl != IFDohProviders.dnsBunkerUri && providerUrl != IFDohProviders.mullvadUnfilteredUri) { providerUrl } else { "" -@@ -55,8 +80,13 @@ internal class DefaultDohSettingsProvider( +@@ -55,8 +89,14 @@ internal class DefaultDohSettingsProvider( ) override fun getDefaultProviders(): List = listOf( @@ -72,35 +88,24 @@ index 028be832d6d7..4cbee0999688 100644 + dns4EuAdBlocking, + dns4EuProtective, + dns4EuUnfiltered, ++ dnsBunker, + mullvadUnfiltered, custom, ) -@@ -78,7 +108,12 @@ internal class DefaultDohSettingsProvider( +@@ -78,7 +118,13 @@ internal class DefaultDohSettingsProvider( else -> { when (settings.dohProviderUrl) { cloudflareUri -> cloudflare - nextDnsUri -> nextDns -+ mullvadBaseUri -> mullvadBase -+ cloudflareMalwareUri -> cloudflareMalware -+ dns4EuAdBlockingUri -> dns4EuAdBlocking -+ dns4EuProtectiveUri -> dns4EuProtective -+ dns4EuUnfilteredUri -> dns4EuUnfiltered -+ mullvadUnfilteredUri -> mullvadUnfiltered ++ IFDohProviders.mullvadBaseUri -> mullvadBase ++ IFDohProviders.cloudflareMalwareUri -> cloudflareMalware ++ IFDohProviders.dns4EuAdBlockingUri -> dns4EuAdBlocking ++ IFDohProviders.dns4EuProtectiveUri -> dns4EuProtective ++ IFDohProviders.dns4EuUnfilteredUri -> dns4EuUnfiltered ++ IFDohProviders.dnsBunkerUri -> dnsBunker ++ IFDohProviders.mullvadUnfilteredUri -> mullvadUnfiltered "" -> getDefaultProviders().first() else -> custom } -@@ -121,6 +156,11 @@ internal class DefaultDohSettingsProvider( - val cloudflareUri = "https://mozilla.cloudflare-dns.com/dns-query" - - @VisibleForTesting -- val nextDnsUri = "https://firefox.dns.nextdns.io/" -+ val mullvadBaseUri = "https://base.dns.mullvad.net/dns-query" -+ val cloudflareMalwareUri = "https://security.cloudflare-dns.com/dns-query" -+ val dns4EuAdBlockingUri = "https://noads.joindns4.eu/dns-query" -+ val dns4EuProtectiveUri = "https://protective.joindns4.eu/dns-query" -+ val dns4EuUnfilteredUri = "https://unfiltered.joindns4.eu/dns-query" -+ val mullvadUnfilteredUri = "https://dns.mullvad.net/dns-query" - } - } -- diff --git a/patches/gecko-overlay/ironfox/android/core/src/main/java/org/ironfoxoss/core/IFDohProviders.kt b/patches/gecko-overlay/ironfox/android/core/src/main/java/org/ironfoxoss/core/IFDohProviders.kt new file mode 100644 index 00000000..5e982834 --- /dev/null +++ b/patches/gecko-overlay/ironfox/android/core/src/main/java/org/ironfoxoss/core/IFDohProviders.kt @@ -0,0 +1,39 @@ +package org.ironfoxoss.core + +/** + * IronFox DNS over HTTPS providers + * + */ +object IFDohProviders { + // Mullvad (Base) + const val mullvadBaseName = "Mullvad (Base) πŸ‡ΈπŸ‡ͺ" + const val mullvadBaseUri = "https://base.dns.mullvad.net/dns-query" + + // Cloudflare + /// (We don't provide the Uri variable here, as it's specified by `DohSettingsProvider.kt` directly) + const val cloudflareName = "Cloudflare πŸ‡ΊπŸ‡Έ" + + // Cloudflare (Malware Protection) + const val cloudflareMalwareName = "Cloudflare (Malware Protection) πŸ‡ΊπŸ‡Έ" + const val cloudflareMalwareUri = "https://security.cloudflare-dns.com/dns-query" + + // DNS4EU (Ad Blocking) + const val dns4EuAdBlockingName = "DNS4EU (Ad Blocking) πŸ‡¨πŸ‡Ώ" + const val dns4EuAdBlockingUri = "https://noads.joindns4.eu/dns-query" + + // DNS4EU (Protective) + const val dns4EuProtectiveName = "DNS4EU (Protective) πŸ‡¨πŸ‡Ώ" + const val dns4EuProtectiveUri = "https://protective.joindns4.eu/dns-query" + + // DNS4EU (Unfiltered) + const val dns4EuUnfilteredName = "DNS4EU (Unfiltered) πŸ‡¨πŸ‡Ώ" + const val dns4EuUnfilteredUri = "https://unfiltered.joindns4.eu/dns-query" + + // DNSBunker + const val dnsBunkerName = "DNSBunker πŸ‡©πŸ‡ͺ" + const val dnsBunkerUri = "https://dnsbunker.org/dns-query" + + // Mullvad (Unfiltered) + const val mullvadUnfilteredName = "Mullvad (Unfiltered) πŸ‡ΈπŸ‡ͺ" + const val mullvadUnfilteredUri = "https://dns.mullvad.net/dns-query" +} diff --git a/patches/gecko-overlay/ironfox/utils/GeckoSettingsBridge.sys.mjs b/patches/gecko-overlay/ironfox/utils/GeckoSettingsBridge.sys.mjs index 6aa7835e..bde1941b 100644 --- a/patches/gecko-overlay/ironfox/utils/GeckoSettingsBridge.sys.mjs +++ b/patches/gecko-overlay/ironfox/utils/GeckoSettingsBridge.sys.mjs @@ -493,6 +493,9 @@ function setDohBootstrap(address) { } else if (address === "https://unfiltered.joindns4.eu/dns-query" || address === "https://unfiltered.joindns4.eu:443/dns-query") { bootstrapIP = '86.54.11.100'; + } else if (address === "https://dnsbunker.org/dns-query" || + address === "https://dnsbunker.org:443/dns-query") { + bootstrapIP = '185.250.250.61'; }; // Set our bootstrap IP diff --git a/scripts/patches.yaml b/scripts/patches.yaml index 88281eca..481f111d 100644 --- a/scripts/patches.yaml +++ b/scripts/patches.yaml @@ -490,6 +490,7 @@ patches: - DNS4EU (Ad Blocking) - DNS4EU (Protective) - DNS4EU (Unfiltered) + - DNSBunker - Mullvad (Unfiltered) reason: "To add support for multiple secure DNS providers in the UI settings." effect: "Adds a selection of carefully selected DoH providers for the users to choose from."