]> nmode's Git Repositories - signal-cli/blobdiff - lib/src/main/java/org/asamk/signal/manager/SignalDependencies.java
Add PNI to recipients
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / SignalDependencies.java
index cc894602e79191cb5911323f09f0de796fbca659..3b3b375a7d6ddd99d2f4872d14310b31d042e3fe 100644 (file)
@@ -3,8 +3,7 @@ package org.asamk.signal.manager;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
 import org.signal.libsignal.metadata.certificate.CertificateValidator;
-import org.signal.zkgroup.profiles.ClientZkProfileOperations;
-import org.whispersystems.libsignal.util.guava.Optional;
+import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations;
 import org.whispersystems.signalservice.api.KeyBackupService;
 import org.whispersystems.signalservice.api.SignalServiceAccountManager;
 import org.whispersystems.signalservice.api.SignalServiceDataStore;
@@ -18,11 +17,13 @@ import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api;
 import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 import org.whispersystems.signalservice.api.services.ProfileService;
+import org.whispersystems.signalservice.api.util.CredentialsProvider;
 import org.whispersystems.signalservice.api.util.UptimeSleepTimer;
 import org.whispersystems.signalservice.api.websocket.WebSocketFactory;
-import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider;
 import org.whispersystems.signalservice.internal.websocket.WebSocketConnection;
 
+import java.util.Collection;
+import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.function.Supplier;
 
@@ -34,11 +35,13 @@ public class SignalDependencies {
 
     private final ServiceEnvironmentConfig serviceEnvironmentConfig;
     private final String userAgent;
-    private final DynamicCredentialsProvider credentialsProvider;
+    private final CredentialsProvider credentialsProvider;
     private final SignalServiceDataStore dataStore;
     private final ExecutorService executor;
     private final SignalSessionLock sessionLock;
 
+    private boolean allowStories = true;
+
     private SignalServiceAccountManager accountManager;
     private GroupsV2Api groupsV2Api;
     private GroupsV2Operations groupsV2Operations;
@@ -55,7 +58,7 @@ public class SignalDependencies {
     SignalDependencies(
             final ServiceEnvironmentConfig serviceEnvironmentConfig,
             final String userAgent,
-            final DynamicCredentialsProvider credentialsProvider,
+            final CredentialsProvider credentialsProvider,
             final SignalServiceDataStore dataStore,
             final ExecutorService executor,
             final SignalSessionLock sessionLock
@@ -68,6 +71,19 @@ public class SignalDependencies {
         this.sessionLock = sessionLock;
     }
 
+    public void resetAfterAddressChange() {
+        this.messageSender = null;
+        this.cipher = null;
+        getSignalWebSocket().forceNewWebSockets();
+    }
+
+    /**
+     * This method needs to be called before the first websocket is created
+     */
+    public void setAllowStories(final boolean allowStories) {
+        this.allowStories = allowStories;
+    }
+
     public ServiceEnvironmentConfig getServiceEnvironmentConfig() {
         return serviceEnvironmentConfig;
     }
@@ -81,14 +97,28 @@ public class SignalDependencies {
                         ServiceConfig.AUTOMATIC_NETWORK_RETRY));
     }
 
+    public SignalServiceAccountManager createUnauthenticatedAccountManager(String number, String password) {
+        return new SignalServiceAccountManager(getServiceEnvironmentConfig().getSignalServiceConfiguration(),
+                null,
+                null,
+                number,
+                SignalServiceAddress.DEFAULT_DEVICE_ID,
+                password,
+                userAgent,
+                ServiceConfig.AUTOMATIC_NETWORK_RETRY,
+                ServiceConfig.GROUP_MAX_SIZE);
+    }
+
     public GroupsV2Api getGroupsV2Api() {
         return getOrCreate(() -> groupsV2Api, () -> groupsV2Api = getAccountManager().getGroupsV2Api());
     }
 
     public GroupsV2Operations getGroupsV2Operations() {
         return getOrCreate(() -> groupsV2Operations,
-                () -> groupsV2Operations = capabilities.isGv2() ? new GroupsV2Operations(ClientZkOperations.create(
-                        serviceEnvironmentConfig.getSignalServiceConfiguration())) : null);
+                () -> groupsV2Operations = capabilities.isGv2()
+                        ? new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration()),
+                        ServiceConfig.GROUP_MAX_SIZE)
+                        : null);
     }
 
     private ClientZkOperations getClientZkOperations() {
@@ -114,16 +144,18 @@ public class SignalDependencies {
                             serviceEnvironmentConfig.getSignalServiceConfiguration(),
                             Optional.of(credentialsProvider),
                             userAgent,
-                            healthMonitor);
+                            healthMonitor,
+                            allowStories);
                 }
 
                 @Override
                 public WebSocketConnection createUnidentifiedWebSocket() {
                     return new WebSocketConnection("unidentified",
                             serviceEnvironmentConfig.getSignalServiceConfiguration(),
-                            Optional.absent(),
+                            Optional.empty(),
                             userAgent,
-                            healthMonitor);
+                            healthMonitor,
+                            allowStories);
                 }
             };
             signalWebSocket = new SignalWebSocket(webSocketFactory);
@@ -148,7 +180,7 @@ public class SignalDependencies {
                         sessionLock,
                         userAgent,
                         getSignalWebSocket(),
-                        Optional.absent(),
+                        Optional.empty(),
                         getClientZkProfileOperations(),
                         executor,
                         ServiceConfig.MAX_ENVELOPE_SIZE,
@@ -164,6 +196,17 @@ public class SignalDependencies {
                         10));
     }
 
+    public Collection<KeyBackupService> getFallbackKeyBackupServices() {
+        return serviceEnvironmentConfig.getFallbackKeyBackupConfigs()
+                .stream()
+                .map(config -> getAccountManager().getKeyBackupService(ServiceConfig.getIasKeyStore(),
+                        config.getEnclaveName(),
+                        config.getServiceId(),
+                        config.getMrenclave(),
+                        10))
+                .toList();
+    }
+
     public ProfileService getProfileService() {
         return getOrCreate(() -> profileService,
                 () -> profileService = new ProfileService(getClientZkProfileOperations(),
@@ -176,7 +219,7 @@ public class SignalDependencies {
             final var certificateValidator = new CertificateValidator(serviceEnvironmentConfig.getUnidentifiedSenderTrustRoot());
             final var address = new SignalServiceAddress(credentialsProvider.getAci(), credentialsProvider.getE164());
             final var deviceId = credentialsProvider.getDeviceId();
-            cipher = new SignalServiceCipher(address, deviceId, dataStore, sessionLock, certificateValidator);
+            cipher = new SignalServiceCipher(address, deviceId, dataStore.aci(), sessionLock, certificateValidator);
         });
     }