diff options
| author | cyBerta <cyberta@riseup.net> | 2019-09-20 00:07:44 +0200 | 
|---|---|---|
| committer | cyBerta <cyberta@riseup.net> | 2019-09-20 00:07:44 +0200 | 
| commit | 67a2040e96048e164b592fab4b0e8f123a7dd68f (patch) | |
| tree | f518014d060e61548c7e10407f0c29a674273233 | |
| parent | 9044c3fdc13f02b7c21bb181d769fadb71924b75 (diff) | |
add supportsPluggableTransports() to Provider class including Tests
4 files changed, 60 insertions, 11 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/Provider.java b/app/src/main/java/se/leap/bitmaskclient/Provider.java index 561453af..067f9b2e 100644 --- a/app/src/main/java/se/leap/bitmaskclient/Provider.java +++ b/app/src/main/java/se/leap/bitmaskclient/Provider.java @@ -21,6 +21,7 @@ import android.os.Parcelable;  import com.google.gson.Gson; +import org.json.JSONArray;  import org.json.JSONException;  import org.json.JSONObject; @@ -28,8 +29,13 @@ import java.net.MalformedURLException;  import java.net.URL;  import java.util.Locale; +import static de.blinkt.openvpn.core.connection.Connection.TransportType.OBFS4; +import static se.leap.bitmaskclient.Constants.CAPABILITIES; +import static se.leap.bitmaskclient.Constants.GATEWAYS;  import static se.leap.bitmaskclient.Constants.PROVIDER_ALLOWED_REGISTERED;  import static se.leap.bitmaskclient.Constants.PROVIDER_ALLOW_ANONYMOUS; +import static se.leap.bitmaskclient.Constants.TRANSPORT; +import static se.leap.bitmaskclient.Constants.TYPE;  import static se.leap.bitmaskclient.ProviderAPI.ERRORS;  /** @@ -119,9 +125,23 @@ public final class Provider implements Parcelable {                  hasPrivateKey();      } -    //TODO: implement me!      public boolean supportsPluggableTransports() { -       return true; +        try { +            JSONArray gatewayJsons = eipServiceJson.getJSONArray(GATEWAYS); +            for (int i = 0; i < gatewayJsons.length(); i++) { +                JSONArray transports = gatewayJsons.getJSONObject(i). +                        getJSONObject(CAPABILITIES). +                        getJSONArray(TRANSPORT); +                for (int j = 0; j < transports.length(); j++) { +                    if (OBFS4.toString().equals(transports.getJSONObject(j).getString(TYPE))) { +                        return true; +                    } +                } +            } +        } catch (Exception e) { +           e.printStackTrace(); +        } +       return false;      }      public void setMainUrl(URL url) { diff --git a/app/src/sharedTest/java/se.leap.bitmaskclient/testutils/TestSetupHelper.java b/app/src/sharedTest/java/se.leap.bitmaskclient/testutils/TestSetupHelper.java index 02a575ea..669abc84 100644 --- a/app/src/sharedTest/java/se.leap.bitmaskclient/testutils/TestSetupHelper.java +++ b/app/src/sharedTest/java/se.leap.bitmaskclient/testutils/TestSetupHelper.java @@ -18,6 +18,7 @@  package se.leap.bitmaskclient.testutils;  import org.json.JSONException; +import org.json.JSONObject;  import java.io.BufferedReader;  import java.io.IOException; @@ -50,25 +51,32 @@ public class TestSetupHelper {      public static Provider getConfiguredProvider() throws IOException, JSONException { -        return getProvider(null, null, null); +        return getProvider(null, null, null, null);      } -    public static Provider getProvider(String domain, String caCertFile, String jsonFile) { +    public static Provider getProvider(String domain, String caCertFile, String providerJson, String eipServiceJson) {          if (domain == null)              domain = "https://riseup.net";          if (caCertFile == null)              caCertFile = "riseup.net.pem"; -        if (jsonFile == null) -            jsonFile = "riseup.net.json"; +        if (providerJson == null) +            providerJson = "riseup.net.json"; +        if (eipServiceJson == null) { +            eipServiceJson = "riseup.service.json"; +        }          try { -            return new Provider( +            Provider p = new Provider(                      new URL(domain),                      getInputAsString(TestSetupHelper.class.getClassLoader().getResourceAsStream(caCertFile)), -                    getInputAsString(TestSetupHelper.class.getClassLoader().getResourceAsStream(jsonFile)) +                    getInputAsString(TestSetupHelper.class.getClassLoader().getResourceAsStream(providerJson))              ); -        } catch (IOException e) { +            JSONObject eipServiceJsonObject = new JSONObject( +                    getInputAsString(TestSetupHelper.class.getClassLoader().getResourceAsStream(eipServiceJson))); +            p.setEipServiceJson(eipServiceJsonObject); +            return p; +        } catch (IOException | JSONException e) {              e.printStackTrace();          }          return null; diff --git a/app/src/test/java/se/leap/bitmaskclient/ProviderTest.java b/app/src/test/java/se/leap/bitmaskclient/ProviderTest.java index a141edec..c4b8f65e 100644 --- a/app/src/test/java/se/leap/bitmaskclient/ProviderTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/ProviderTest.java @@ -46,4 +46,25 @@ public class ProviderTest {          assertTrue(defaultProviders.contains(p2));          assertFalse(defaultProviders.contains(p3));      } + +    @Test +    public void testIsPluggableTransportsSupported_Obfs4_returnsTrue() throws Exception { +        Provider p1 = TestSetupHelper.getProvider( +                "https://pt.demo.bitmask.net", +                null, +                null, +                "ptdemo.bitmask.eip-service.json"); +        assertTrue(p1.supportsPluggableTransports()); +    } + +    @Test +    public void testIsPluggableTransportsSupported_noObfs4_returnsFalse() throws Exception { +        Provider p1 = TestSetupHelper.getProvider( +                null, +                null, +                null, +                "eip-service-two-gateways.json"); +        assertFalse(p1.supportsPluggableTransports()); +    } +  } diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java index 3070fc0b..1a2ce49d 100644 --- a/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java @@ -267,7 +267,7 @@ public class ProviderApiManagerTest {      @Test      public void test_handleIntentSetupProvider_preseededProviderAndCA_outdatedCertificate() throws IOException, CertificateEncodingException, NoSuchAlgorithmException, JSONException { -        Provider provider = getProvider(null ,"outdated_cert.pem", null); +        Provider provider = getProvider(null ,"outdated_cert.pem", null, null);          mockProviderApiConnector(NO_ERROR);          providerApiManager = new ProviderApiManager(mockPreferences, mockResources, mockClientGenerator(), new TestProviderApiServiceCallback()); @@ -384,7 +384,7 @@ public class ProviderApiManagerTest {      @Test      public void test_handleIntentSetupProvider_outdatedPreseededProviderAndCA_successfulConfiguration() throws IOException, CertificateEncodingException, NoSuchAlgorithmException, JSONException { -        Provider provider = getProvider(null, null, "riseup_net_outdated_config.json"); +        Provider provider = getProvider(null, null, "riseup_net_outdated_config.json", null);          mockFingerprintForCertificate(" a5244308a1374709a9afce95e3ae47c1b44bc2398c0a70ccbf8b3a8a97f29494");          mockProviderApiConnector(NO_ERROR);  | 
