]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/util/Utils.java
Reformat files
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / Utils.java
index efa72bf2abb9b350836126f7b202566d30ba6b97..ee1f608f9a45a5e806cf40825bc53bd971ea709c 100644 (file)
@@ -1,14 +1,14 @@
 package org.asamk.signal.manager.util;
 
 import org.asamk.signal.manager.api.Pair;
-import org.asamk.signal.manager.storage.recipients.RecipientAddress;
 import org.signal.libsignal.protocol.IdentityKey;
 import org.signal.libsignal.protocol.fingerprint.Fingerprint;
 import org.signal.libsignal.protocol.fingerprint.NumericFingerprintGenerator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.whispersystems.signalservice.api.NetworkResult;
+import org.whispersystems.signalservice.api.push.ServiceId;
 import org.whispersystems.signalservice.api.util.StreamDetails;
-import org.whispersystems.signalservice.internal.ServiceResponse;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
@@ -25,12 +25,14 @@ import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.function.BiFunction;
 import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
 public class Utils {
 
-    private final static Logger logger = LoggerFactory.getLogger(Utils.class);
+    private static final Logger logger = LoggerFactory.getLogger(Utils.class);
 
     public static Pair<StreamDetails, Optional<String>> createStreamDetailsFromDataURI(final String dataURI) {
         final DataURI uri = DataURI.of(dataURI);
@@ -56,31 +58,41 @@ public class Utils {
         }
     }
 
-    public static Fingerprint computeSafetyNumber(
-            boolean isUuidCapable,
-            RecipientAddress ownAddress,
+    public static Fingerprint computeSafetyNumberForNumber(
+            String ownNumber,
             IdentityKey ownIdentityKey,
-            RecipientAddress theirAddress,
+            String theirNumber,
             IdentityKey theirIdentityKey
     ) {
-        int version;
-        byte[] ownId;
-        byte[] theirId;
-
-        if (!isUuidCapable && ownAddress.number().isPresent() && theirAddress.number().isPresent()) {
-            // Version 1: E164 user
-            version = 1;
-            ownId = ownAddress.number().get().getBytes();
-            theirId = theirAddress.number().get().getBytes();
-        } else if (isUuidCapable && theirAddress.serviceId().isPresent()) {
-            // Version 2: UUID user
-            version = 2;
-            ownId = ownAddress.getServiceId().toByteArray();
-            theirId = theirAddress.getServiceId().toByteArray();
-        } else {
-            return null;
-        }
+        // Version 1: E164 user
+        final var version = 1;
+        final var ownId = ownNumber.getBytes(StandardCharsets.UTF_8);
+        final var theirId = theirNumber.getBytes(StandardCharsets.UTF_8);
+
+        return getFingerprint(version, ownId, ownIdentityKey, theirId, theirIdentityKey);
+    }
+
+    public static Fingerprint computeSafetyNumberForUuid(
+            ServiceId ownServiceId,
+            IdentityKey ownIdentityKey,
+            ServiceId theirServiceId,
+            IdentityKey theirIdentityKey
+    ) {
+        // Version 2: UUID user
+        final var version = 2;
+        final var ownId = ownServiceId.toByteArray();
+        final var theirId = theirServiceId.toByteArray();
+
+        return getFingerprint(version, ownId, ownIdentityKey, theirId, theirIdentityKey);
+    }
 
+    private static Fingerprint getFingerprint(
+            final int version,
+            final byte[] ownId,
+            final IdentityKey ownIdentityKey,
+            final byte[] theirId,
+            final IdentityKey theirIdentityKey
+    ) {
         return new NumericFingerprintGenerator(5200).createFor(version,
                 ownId,
                 ownIdentityKey,
@@ -118,6 +130,10 @@ public class Utils {
         }, leftStream.isParallel() || rightStream.isParallel());
     }
 
+    public static <OK, NK, V> Map<NK, V> mapKeys(Map<OK, V> map, Function<OK, NK> keyMapper) {
+        return map.entrySet().stream().collect(Collectors.toMap(e -> keyMapper.apply(e.getKey()), Map.Entry::getValue));
+    }
+
     public static Map<String, String> getQueryMap(String query) {
         var params = query.split("&");
         var map = new HashMap<String, String>();
@@ -130,15 +146,15 @@ public class Utils {
         return map;
     }
 
-    public static <T> T handleResponseException(final ServiceResponse<T> response) throws IOException {
-        final var throwableOptional = response.getExecutionError().or(response::getApplicationError);
-        if (throwableOptional.isPresent()) {
-            if (throwableOptional.get() instanceof IOException) {
-                throw (IOException) throwableOptional.get();
+    public static <T> T handleResponseException(final NetworkResult<T> response) throws IOException {
+        final var throwableOptional = response.getCause();
+        if (throwableOptional != null) {
+            if (throwableOptional instanceof IOException ioException) {
+                throw ioException;
             } else {
-                throw new IOException(throwableOptional.get());
+                throw new IOException(throwableOptional);
             }
         }
-        return response.getResult().orElse(null);
+        return response.successOrThrow();
     }
 }