diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 580f23a22..e4ad6b9fe 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -261,6 +261,8 @@ + diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SignalProxyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SignalProxyUtil.java index 735167726..bff3ae276 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SignalProxyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SignalProxyUtil.java @@ -103,11 +103,17 @@ public final class SignalProxyUtil { * If this is a valid proxy deep link, this will return the embedded host. If not, it will return * null. */ - public static @Nullable String parseHostFromProxyDeepLink(@NonNull String proxyLink) { + public static @Nullable String parseHostFromProxyDeepLink(@Nullable String proxyLink) { + if (proxyLink == null) { + return null; + } + try { URI uri = new URI(proxyLink); - if (!"https".equalsIgnoreCase(uri.getScheme())) { + if (!"https".equalsIgnoreCase(uri.getScheme()) && + !"sgnl".equalsIgnoreCase(uri.getScheme())) + { return null; } diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/SignalProxyUtilText_parseHostFromProxyDeepLink.java b/app/src/test/java/org/thoughtcrime/securesms/util/SignalProxyUtilText_parseHostFromProxyDeepLink.java new file mode 100644 index 000000000..a9fe76978 --- /dev/null +++ b/app/src/test/java/org/thoughtcrime/securesms/util/SignalProxyUtilText_parseHostFromProxyDeepLink.java @@ -0,0 +1,43 @@ +package org.thoughtcrime.securesms.util; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.Collection; + +import static junit.framework.TestCase.assertEquals; + +@RunWith(Parameterized.class) +public class SignalProxyUtilText_parseHostFromProxyDeepLink { + + private final String input; + private final String output; + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[][]{ + { "https://signal.tube/#proxy.parker.org", "proxy.parker.org" }, + { "sgnl://signal.tube/#proxy.parker.org", "proxy.parker.org" }, + { "https://signal.tube/", null }, + { "https://signal.tube/#", null }, + { "sgnl://signal.tube/", null }, + { "sgnl://signal.tube/#", null }, + { "http://signal.tube/#proxy.parker.org", null }, + { "signal.tube/#proxy.parker.org", null }, + { "", null }, + { null, null } + }); + } + + public SignalProxyUtilText_parseHostFromProxyDeepLink(String input, String output) { + this.input = input; + this.output = output; + } + + @Test + public void parse() { + assertEquals(output, SignalProxyUtil.parseHostFromProxyDeepLink(input)); + } +}