diff options
3 files changed, 25 insertions, 4 deletions
| diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java index 0e192882..c7087b67 100644 --- a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java +++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java @@ -230,8 +230,19 @@ public class ConfigHelper {      public static boolean isDomainName(String url) {          return url != null && Patterns.DOMAIN_NAME.matcher(url).matches();      } -    public static String getDomainFromMainURL(@NonNull String mainUrl) throws NullPointerException { -        return PublicSuffixDatabase.Companion.get().getEffectiveTldPlusOne(mainUrl).replaceFirst("http[s]?://", "").replaceFirst("/.*", ""); + +    /** +     * Extracts a domain from a given URL +     * @param mainUrl URL as String +     * @return Domain as String, null if mainUrl is an invalid URL +     */ +    public static String getDomainFromMainURL(String mainUrl) { +        try { +            String topLevelDomain = PublicSuffixDatabase.Companion.get().getEffectiveTldPlusOne(mainUrl); +            return topLevelDomain.replaceFirst("http[s]?://", "").replaceFirst("/.*", ""); +        } catch (NullPointerException | IllegalArgumentException e) { +            return null; +        }      }      public static boolean isCalyxOSWithTetheringSupport(Context context) { diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java index 60a41325..25a9fcce 100644 --- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java +++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java @@ -136,6 +136,9 @@ public abstract class ProviderApiManagerBase {      protected void getPersistedProviderUpdates(Provider provider) {          String providerDomain = getDomainFromMainURL(provider.getMainUrl()); +        if (providerDomain == null) { +            return; +        }          if (hasUpdatedProviderDetails(providerDomain)) {              provider.setCaCert(getPersistedProviderCA(providerDomain));              provider.define(getPersistedProviderDefinition(providerDomain)); @@ -155,8 +158,6 @@ public abstract class ProviderApiManagerBase {          }      } - -      protected String getPersistedPrivateKey(String providerDomain) {          return getFromPersistedProvider(PROVIDER_PRIVATE_KEY, providerDomain);      } diff --git a/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java b/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java index c6387165..fd862f2b 100644 --- a/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java @@ -1,6 +1,7 @@  package se.leap.bitmaskclient.base.utils;  import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull;  import static org.junit.Assert.assertTrue;  import com.tngtech.java.junit.dataprovider.DataProvider; @@ -66,6 +67,14 @@ public class ConfigHelperTest {      }      @Test +    public void testGetDomainFromMainURL_returnNullIfInvalid() { +        assertNull(ConfigHelper.getDomainFromMainURL("https://localhost")); +        assertNull(ConfigHelper.getDomainFromMainURL("http://localhost")); +        assertNull(ConfigHelper.getDomainFromMainURL("invalidrandomstring")); +        assertNull(ConfigHelper.getDomainFromMainURL(null)); +    } + +    @Test      public void testParseX509CertificatesFromString() throws IOException {          ArrayList<X509Certificate> certs = ConfigHelper.parseX509CertificatesFromString(TestSetupHelper.getInputAsString(getClass().getClassLoader().getResourceAsStream("updated_cert.pem")));          assertTrue(certs != null); | 
