From 524f3d6d085432b0ca59e7c9da102bbc2fd7095d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 3 Feb 2021 14:09:38 -0500 Subject: [PATCH] Add support for sgnl:// proxy deep links. --- app/src/main/AndroidManifest.xml | 2 + .../securesms/util/SignalProxyUtil.java | 10 ++++- ...xyUtilText_parseHostFromProxyDeepLink.java | 43 +++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 app/src/test/java/org/thoughtcrime/securesms/util/SignalProxyUtilText_parseHostFromProxyDeepLink.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 580f23a221..e4ad6b9fe4 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 7351677264..bff3ae2768 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 0000000000..a9fe76978c --- /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)); + } +}