From bce7d19ed788db52b5ec4cd89075796c05a09599 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 8 Mar 2024 15:25:00 +0000 Subject: [PATCH] Add method for checking whether bridges should be used. --- .../onionwrapper/CircumventionProvider.java | 16 +++++--------- .../CircumventionProviderImpl.java | 15 +++++++------ .../CircumventionProviderImplTest.java | 21 +++++++++++++++++++ 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java index c437a42..78f14f3 100644 --- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java +++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProvider.java @@ -50,6 +50,11 @@ public interface CircumventionProvider { */ String[] COUNTRIES_SNOWFLAKE = {"BY", "CN", "EG", "HK", "IR", "RU", "TM"}; + /** + * Returns true if bridges should be used by default in the given country. + */ + boolean shouldUseBridges(String countryCode); + /** * Returns the types of bridge connection that are suitable for the given country, or * {@link BridgeType#DEFAULT_OBFS4} and {@link BridgeType#VANILLA} if we don't have any @@ -57,17 +62,6 @@ public interface CircumventionProvider { */ List<BridgeType> getSuitableBridgeTypes(String countryCode); - /** - * Returns bridges of the given type that are usable in the given country. - * - * @param letsEncrypt Specifies whether the client is able to verify Let's Encrypt TLS - * certificates signed with the IdentTrust DST Root X3 certificate. Versions of Android - * older than 7.1 consider the certificate to have expired at the end of September 2021. - * This parameter is currently ignored, as no domain-fronted bridges use Let's Encrypt - * certificates. - */ - List<String> getBridges(BridgeType type, String countryCode, boolean letsEncrypt); - /** * Returns bridges of the given type that are usable in the given country. */ diff --git a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java index 4b53217..1c33da7 100644 --- a/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java +++ b/onionwrapper-core/src/main/java/org/briarproject/onionwrapper/CircumventionProviderImpl.java @@ -39,6 +39,15 @@ class CircumventionProviderImpl implements CircumventionProvider { CircumventionProviderImpl() { } + @Override + public boolean shouldUseBridges(String countryCode) { + return USE_DEFAULT_OBFS4.contains(countryCode) || + USE_NON_DEFAULT_OBFS4.contains(countryCode) || + USE_VANILLA.contains(countryCode) || + USE_MEEK.contains(countryCode) || + USE_SNOWFLAKE.contains(countryCode); + } + @Override public List<BridgeType> getSuitableBridgeTypes(String countryCode) { List<BridgeType> types = new ArrayList<>(); @@ -55,12 +64,6 @@ class CircumventionProviderImpl implements CircumventionProvider { return types; } - @Override - public List<String> getBridges(BridgeType type, String countryCode, boolean letsEncrypt) { - // The `letsEncrypt` parameter is ignored, as no domain-fronted bridges use Let's Encrypt - return getBridges(type, countryCode); - } - @Override public List<String> getBridges(BridgeType type, String countryCode) { ClassLoader cl = getClass().getClassLoader(); diff --git a/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java b/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java index 83b8991..0f5c6fe 100644 --- a/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java +++ b/onionwrapper-core/src/test/java/org/briarproject/onionwrapper/CircumventionProviderImplTest.java @@ -21,6 +21,27 @@ public class CircumventionProviderImplTest extends BaseTest { private final CircumventionProviderImpl provider = new CircumventionProviderImpl(); + @Test + public void testShouldUseBridges() { + for (String countryCode : COUNTRIES_DEFAULT_OBFS4) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_NON_DEFAULT_OBFS4) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_VANILLA) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_MEEK) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + for (String countryCode : COUNTRIES_SNOWFLAKE) { + assertTrue(provider.shouldUseBridges(countryCode)); + } + assertFalse(provider.shouldUseBridges("US")); + assertFalse(provider.shouldUseBridges("ZZ")); + } + @Test public void testGetSuitableBridgeTypes() { for (String countryCode : COUNTRIES_DEFAULT_OBFS4) { -- GitLab