]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/manager/helper/ProfileHelper.java
Make loggers private
[signal-cli] / src / main / java / org / asamk / signal / manager / helper / ProfileHelper.java
index f775cc1cba8e2dda1945108917b0e3aae41289fa..60c47d8b93a060f6aece2d97c600907dcf306415 100644 (file)
@@ -4,8 +4,6 @@ import org.signal.zkgroup.profiles.ProfileKey;
 import org.whispersystems.libsignal.util.guava.Optional;
 import org.whispersystems.signalservice.api.SignalServiceMessagePipe;
 import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
-import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException;
-import org.whispersystems.signalservice.api.crypto.ProfileCipher;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
 import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair;
 import org.whispersystems.signalservice.api.profiles.ProfileAndCredential;
@@ -15,7 +13,6 @@ import org.whispersystems.signalservice.api.push.exceptions.NotFoundException;
 import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
 import org.whispersystems.signalservice.internal.util.concurrent.CascadingFuture;
 import org.whispersystems.signalservice.internal.util.concurrent.ListenableFuture;
-import org.whispersystems.util.Base64;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -46,8 +43,7 @@ public final class ProfileHelper {
     }
 
     public ProfileAndCredential retrieveProfileSync(
-            SignalServiceAddress recipient,
-            SignalServiceProfile.RequestType requestType
+            SignalServiceAddress recipient, SignalServiceProfile.RequestType requestType
     ) throws IOException {
         try {
             return retrieveProfile(recipient, requestType).get(10, TimeUnit.SECONDS);
@@ -65,37 +61,29 @@ public final class ProfileHelper {
     }
 
     public ListenableFuture<ProfileAndCredential> retrieveProfile(
-            SignalServiceAddress address,
-            SignalServiceProfile.RequestType requestType
+            SignalServiceAddress address, SignalServiceProfile.RequestType requestType
     ) {
         Optional<UnidentifiedAccess> unidentifiedAccess = getUnidentifiedAccess(address);
         Optional<ProfileKey> profileKey = Optional.fromNullable(profileKeyProvider.getProfileKey(address));
 
         if (unidentifiedAccess.isPresent()) {
-            return new CascadingFuture<>(Arrays.asList(() -> getPipeRetrievalFuture(address, profileKey, unidentifiedAccess, requestType),
+            return new CascadingFuture<>(Arrays.asList(() -> getPipeRetrievalFuture(address,
+                    profileKey,
+                    unidentifiedAccess,
+                    requestType),
                     () -> getSocketRetrievalFuture(address, profileKey, unidentifiedAccess, requestType),
                     () -> getPipeRetrievalFuture(address, profileKey, Optional.absent(), requestType),
                     () -> getSocketRetrievalFuture(address, profileKey, Optional.absent(), requestType)),
                     e -> !(e instanceof NotFoundException));
         } else {
-            return new CascadingFuture<>(Arrays.asList(() -> getPipeRetrievalFuture(address, profileKey, Optional.absent(), requestType),
-                    () -> getSocketRetrievalFuture(address, profileKey, Optional.absent(), requestType)),
+            return new CascadingFuture<>(Arrays.asList(() -> getPipeRetrievalFuture(address,
+                    profileKey,
+                    Optional.absent(),
+                    requestType), () -> getSocketRetrievalFuture(address, profileKey, Optional.absent(), requestType)),
                     e -> !(e instanceof NotFoundException));
         }
     }
 
-    public String decryptName(
-            ProfileKey profileKey,
-            String encryptedName
-    ) throws InvalidCiphertextException, IOException {
-        if (encryptedName == null) {
-            return null;
-        }
-
-        ProfileCipher profileCipher = new ProfileCipher(profileKey);
-        return new String(profileCipher.decryptName(Base64.decode(encryptedName)));
-    }
-
     private ListenableFuture<ProfileAndCredential> getPipeRetrievalFuture(
             SignalServiceAddress address,
             Optional<ProfileKey> profileKey,
@@ -107,7 +95,17 @@ public final class ProfileHelper {
                 ? unidentifiedPipe
                 : messagePipeProvider.getMessagePipe(false);
         if (pipe != null) {
-            return pipe.getProfile(address, profileKey, unidentifiedAccess, requestType);
+            try {
+                return pipe.getProfile(address, profileKey, unidentifiedAccess, requestType);
+            } catch (NoClassDefFoundError e) {
+                // Native zkgroup lib not available for ProfileKey
+                if (!address.getNumber().isPresent()) {
+                    throw new NotFoundException("Can't request profile without number");
+                }
+                SignalServiceAddress addressWithoutUuid = new SignalServiceAddress(Optional.absent(),
+                        address.getNumber());
+                return pipe.getProfile(addressWithoutUuid, profileKey, unidentifiedAccess, requestType);
+            }
         }
 
         throw new IOException("No pipe available!");
@@ -118,9 +116,18 @@ public final class ProfileHelper {
             Optional<ProfileKey> profileKey,
             Optional<UnidentifiedAccess> unidentifiedAccess,
             SignalServiceProfile.RequestType requestType
-    ) {
+    ) throws NotFoundException {
         SignalServiceMessageReceiver receiver = messageReceiverProvider.getMessageReceiver();
-        return receiver.retrieveProfile(address, profileKey, unidentifiedAccess, requestType);
+        try {
+            return receiver.retrieveProfile(address, profileKey, unidentifiedAccess, requestType);
+        } catch (NoClassDefFoundError e) {
+            // Native zkgroup lib not available for ProfileKey
+            if (!address.getNumber().isPresent()) {
+                throw new NotFoundException("Can't request profile without number");
+            }
+            SignalServiceAddress addressWithoutUuid = new SignalServiceAddress(Optional.absent(), address.getNumber());
+            return receiver.retrieveProfile(addressWithoutUuid, profileKey, unidentifiedAccess, requestType);
+        }
     }
 
     private Optional<UnidentifiedAccess> getUnidentifiedAccess(SignalServiceAddress recipient) {