]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/DeviceLinkInfo.java
Implement sticker pack retrieval
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / DeviceLinkInfo.java
index b8b27eaa60240759736654c88a8715f112a57a08..1f9d10ff897248f61c08d8f5c1023fef27544ff2 100644 (file)
@@ -5,6 +5,7 @@ import org.whispersystems.libsignal.ecc.Curve;
 import org.whispersystems.libsignal.ecc.ECPublicKey;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
@@ -20,14 +21,14 @@ public class DeviceLinkInfo {
     final ECPublicKey deviceKey;
 
     public static DeviceLinkInfo parseDeviceLinkUri(URI linkUri) throws InvalidKeyException {
-        final String rawQuery = linkUri.getRawQuery();
+        final var rawQuery = linkUri.getRawQuery();
         if (isEmpty(rawQuery)) {
             throw new RuntimeException("Invalid device link uri");
         }
 
-        Map<String, String> query = getQueryMap(rawQuery);
-        String deviceIdentifier = query.get("uuid");
-        String publicKeyEncoded = query.get("pub_key");
+        var query = getQueryMap(rawQuery);
+        var deviceIdentifier = query.get("uuid");
+        var publicKeyEncoded = query.get("pub_key");
 
         if (isEmpty(deviceIdentifier) || isEmpty(publicKeyEncoded)) {
             throw new RuntimeException("Invalid device link uri");
@@ -39,18 +40,18 @@ public class DeviceLinkInfo {
         } catch (IllegalArgumentException e) {
             throw new RuntimeException("Invalid device link uri", e);
         }
-        ECPublicKey deviceKey = Curve.decodePoint(publicKeyBytes, 0);
+        var deviceKey = Curve.decodePoint(publicKeyBytes, 0);
 
         return new DeviceLinkInfo(deviceIdentifier, deviceKey);
     }
 
     private static Map<String, String> getQueryMap(String query) {
-        String[] params = query.split("&");
-        Map<String, String> map = new HashMap<>();
-        for (String param : params) {
-            final String[] paramParts = param.split("=");
-            String name = URLDecoder.decode(paramParts[0], StandardCharsets.UTF_8);
-            String value = URLDecoder.decode(paramParts[1], StandardCharsets.UTF_8);
+        var params = query.split("&");
+        var map = new HashMap<String, String>();
+        for (var param : params) {
+            final var paramParts = param.split("=");
+            var name = URLDecoder.decode(paramParts[0], StandardCharsets.UTF_8);
+            var value = URLDecoder.decode(paramParts[1], StandardCharsets.UTF_8);
             map.put(name, value);
         }
         return map;
@@ -61,11 +62,15 @@ public class DeviceLinkInfo {
         this.deviceKey = deviceKey;
     }
 
-    public String createDeviceLinkUri() {
-        final String deviceKeyString = Base64.getEncoder().encodeToString(deviceKey.serialize()).replace("=", "");
-        return "tsdevice:/?uuid="
-                + URLEncoder.encode(deviceIdentifier, StandardCharsets.UTF_8)
-                + "&pub_key="
-                + URLEncoder.encode(deviceKeyString, StandardCharsets.UTF_8);
+    public URI createDeviceLinkUri() {
+        final var deviceKeyString = Base64.getEncoder().encodeToString(deviceKey.serialize()).replace("=", "");
+        try {
+            return new URI("tsdevice:/?uuid="
+                    + URLEncoder.encode(deviceIdentifier, StandardCharsets.UTF_8)
+                    + "&pub_key="
+                    + URLEncoder.encode(deviceKeyString, StandardCharsets.UTF_8));
+        } catch (URISyntaxException e) {
+            throw new AssertionError(e);
+        }
     }
 }