]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java
Update libsignal-service
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / RecipientHelper.java
index 1581c1a5112aa7bace07330de18ecfdfe6a364d5..58e7ba59fb85e705254486982b2fe80ff1ea1e75 100644 (file)
@@ -3,7 +3,6 @@ package org.asamk.signal.manager.helper;
 import org.asamk.signal.manager.api.RecipientIdentifier;
 import org.asamk.signal.manager.api.UnregisteredRecipientException;
 import org.asamk.signal.manager.api.UsernameLinkUrl;
-import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
 import org.asamk.signal.manager.internal.SignalDependencies;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.storage.recipients.RecipientId;
@@ -11,12 +10,13 @@ import org.signal.libsignal.usernames.BaseUsernameException;
 import org.signal.libsignal.usernames.Username;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.whispersystems.signalservice.api.cds.CdsiV2Service;
 import org.whispersystems.signalservice.api.push.ServiceId;
 import org.whispersystems.signalservice.api.push.ServiceId.ACI;
 import org.whispersystems.signalservice.api.push.ServiceId.PNI;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
+import org.whispersystems.signalservice.api.push.exceptions.CdsiInvalidArgumentException;
 import org.whispersystems.signalservice.api.push.exceptions.CdsiInvalidTokenException;
-import org.whispersystems.signalservice.api.services.CdsiV2Service;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -27,6 +27,7 @@ import java.util.Optional;
 import java.util.Set;
 
 import static org.asamk.signal.manager.config.ServiceConfig.MAXIMUM_ONE_OFF_REQUEST_SIZE;
+import static org.asamk.signal.manager.util.Utils.handleResponseException;
 
 public class RecipientHelper {
 
@@ -34,12 +35,10 @@ public class RecipientHelper {
 
     private final SignalAccount account;
     private final SignalDependencies dependencies;
-    private final ServiceEnvironmentConfig serviceEnvironmentConfig;
 
     public RecipientHelper(final Context context) {
         this.account = context.getAccount();
         this.dependencies = context.getDependencies();
-        this.serviceEnvironmentConfig = dependencies.getServiceEnvironmentConfig();
     }
 
     public SignalServiceAddress resolveSignalServiceAddress(RecipientId recipientId) {
@@ -80,6 +79,8 @@ public class RecipientHelper {
     public RecipientId resolveRecipient(final RecipientIdentifier.Single recipient) throws UnregisteredRecipientException {
         if (recipient instanceof RecipientIdentifier.Uuid uuidRecipient) {
             return account.getRecipientResolver().resolveRecipient(ACI.from(uuidRecipient.uuid()));
+        } else if (recipient instanceof RecipientIdentifier.Pni pniRecipient) {
+            return account.getRecipientResolver().resolveRecipient(PNI.from(pniRecipient.pni()));
         } else if (recipient instanceof RecipientIdentifier.Number numberRecipient) {
             final var number = numberRecipient.number();
             return account.getRecipientStore().resolveRecipientByNumber(number, () -> {
@@ -97,7 +98,8 @@ public class RecipientHelper {
     }
 
     public RecipientId resolveRecipientByUsernameOrLink(
-            String username, boolean forceRefresh
+            String username,
+            boolean forceRefresh
     ) throws UnregisteredRecipientException {
         final Username finalUsername;
         try {
@@ -107,17 +109,18 @@ public class RecipientHelper {
         }
         if (forceRefresh) {
             try {
-                final var aci = dependencies.getAccountManager().getAciByUsername(finalUsername);
+                final var aci = handleResponseException(dependencies.getUsernameApi().getAciByUsername(finalUsername));
                 return account.getRecipientStore().resolveRecipientTrusted(aci, finalUsername.getUsername());
             } catch (IOException e) {
                 throw new UnregisteredRecipientException(new org.asamk.signal.manager.api.RecipientAddress(null,
+                        null,
                         null,
                         username));
             }
         }
         return account.getRecipientStore().resolveRecipientByUsername(finalUsername.getUsername(), () -> {
             try {
-                return dependencies.getAccountManager().getAciByUsername(finalUsername);
+                return handleResponseException(dependencies.getUsernameApi().getAciByUsername(finalUsername));
             } catch (Exception e) {
                 return null;
             }
@@ -128,8 +131,8 @@ public class RecipientHelper {
         try {
             final var usernameLinkUrl = UsernameLinkUrl.fromUri(username);
             final var components = usernameLinkUrl.getComponents();
-            final var encryptedUsername = dependencies.getAccountManager()
-                    .getEncryptedUsernameFromLinkServerId(components.getServerId());
+            final var encryptedUsername = handleResponseException(dependencies.getUsernameApi()
+                    .getEncryptedUsernameFromLinkServerId(components.getServerId()));
             final var link = new Username.UsernameLink(components.getEntropy(), encryptedUsername);
 
             return Username.fromLink(link);
@@ -179,7 +182,8 @@ public class RecipientHelper {
     }
 
     private Map<String, RegisteredUser> getRegisteredUsers(
-            final Set<String> numbers, final boolean isPartialRefresh
+            final Set<String> numbers,
+            final boolean isPartialRefresh
     ) throws IOException {
         Map<String, RegisteredUser> registeredUsers = getRegisteredUsersV2(numbers, isPartialRefresh);
 
@@ -189,7 +193,8 @@ public class RecipientHelper {
 
         final var unregisteredUsers = new HashSet<>(numbers);
         unregisteredUsers.removeAll(registeredUsers.keySet());
-        account.getRecipientStore().markUnregistered(unregisteredUsers);
+        account.getRecipientStore().markUndiscoverablePossiblyUnregistered(unregisteredUsers);
+        account.getRecipientStore().markDiscoverable(registeredUsers.keySet());
 
         return registeredUsers;
     }
@@ -199,17 +204,18 @@ public class RecipientHelper {
         try {
             aciMap = getRegisteredUsers(Set.of(number), true);
         } catch (NumberFormatException e) {
-            throw new UnregisteredRecipientException(new org.asamk.signal.manager.api.RecipientAddress(null, number));
+            throw new UnregisteredRecipientException(new org.asamk.signal.manager.api.RecipientAddress(number));
         }
         final var user = aciMap.get(number);
         if (user == null) {
-            throw new UnregisteredRecipientException(new org.asamk.signal.manager.api.RecipientAddress(null, number));
+            throw new UnregisteredRecipientException(new org.asamk.signal.manager.api.RecipientAddress(number));
         }
         return user.getServiceId();
     }
 
     private Map<String, RegisteredUser> getRegisteredUsersV2(
-            final Set<String> numbers, boolean isPartialRefresh
+            final Set<String> numbers,
+            boolean isPartialRefresh
     ) throws IOException {
         final var previousNumbers = isPartialRefresh ? Set.<String>of() : account.getCdsiStore().getAllNumbers();
         final var newNumbers = new HashSet<>(numbers) {{
@@ -229,14 +235,14 @@ public class RecipientHelper {
 
         final CdsiV2Service.Response response;
         try {
-            response = dependencies.getAccountManager()
-                    .getRegisteredUsersWithCdsi(previousNumbers,
+            response = handleResponseException(dependencies.getCdsApi()
+                    .getRegisteredUsers(token.isEmpty() ? Set.of() : previousNumbers,
                             newNumbers,
                             account.getRecipientStore().getServiceIdToProfileKeyMap(),
                             token,
-                            serviceEnvironmentConfig.cdsiMrenclave(),
                             null,
-                            dependencies.getServiceEnvironmentConfig().netEnvironment(),
+                            dependencies.getLibSignalNetwork(),
+                            false,
                             newToken -> {
                                 if (isPartialRefresh) {
                                     account.getCdsiStore().updateAfterPartialCdsQuery(newNumbers);
@@ -252,8 +258,8 @@ public class RecipientHelper {
                                     account.setCdsiToken(newToken);
                                     account.setLastRecipientsRefresh(System.currentTimeMillis());
                                 }
-                            });
-        } catch (CdsiInvalidTokenException e) {
+                            }));
+        } catch (CdsiInvalidTokenException | CdsiInvalidArgumentException e) {
             account.setCdsiToken(null);
             account.getCdsiStore().clearAll();
             throw e;