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;
import org.whispersystems.signalservice.api.websocket.WebSocketFactory;
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;
-import static org.asamk.signal.manager.config.ServiceConfig.capabilities;
-
public class SignalDependencies {
private final Object LOCK = new Object();
private final ExecutorService executor;
private final SignalSessionLock sessionLock;
+ private boolean allowStories = true;
+
private SignalServiceAccountManager accountManager;
private GroupsV2Api groupsV2Api;
private GroupsV2Operations groupsV2Operations;
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;
}
+ public SignalSessionLock getSessionLock() {
+ return sessionLock;
+ }
+
public SignalServiceAccountManager getAccountManager() {
return getOrCreate(() -> accountManager,
() -> accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(),
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 = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration()),
+ ServiceConfig.GROUP_MAX_SIZE));
}
private ClientZkOperations getClientZkOperations() {
return getOrCreate(() -> clientZkOperations,
- () -> clientZkOperations = capabilities.isGv2()
- ? ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration())
- : null);
+ () -> clientZkOperations = ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration()));
}
private ClientZkProfileOperations getClientZkProfileOperations() {
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);
sessionLock,
userAgent,
getSignalWebSocket(),
- Optional.absent(),
+ Optional.empty(),
getClientZkProfileOperations(),
executor,
ServiceConfig.MAX_ENVELOPE_SIZE,
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(),
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);
});
}