X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/c72aeed8bba4d5ca873b36b4edb2b8eda9c24ec7..40fc71258160812b56f9dc0b7de511ef764e2633:/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java diff --git a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java index 506948ba..baff2047 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java @@ -16,6 +16,9 @@ */ package org.asamk.signal.manager; +import org.asamk.signal.manager.config.ServiceConfig; +import org.asamk.signal.manager.config.ServiceEnvironment; +import org.asamk.signal.manager.config.ServiceEnvironmentConfig; import org.asamk.signal.manager.helper.PinHelper; import org.asamk.signal.manager.storage.SignalAccount; import org.asamk.signal.manager.util.KeyUtils; @@ -28,11 +31,12 @@ import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.KeyBackupServicePinException; import org.whispersystems.signalservice.api.KeyBackupSystemNoDataException; import org.whispersystems.signalservice.api.SignalServiceAccountManager; +import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations; +import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.util.SleepTimer; import org.whispersystems.signalservice.api.util.UptimeSleepTimer; import org.whispersystems.signalservice.api.util.UuidUtil; -import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; import org.whispersystems.signalservice.internal.push.LockedException; import org.whispersystems.signalservice.internal.push.VerifyAccountResponse; import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider; @@ -46,7 +50,7 @@ public class RegistrationManager implements Closeable { private SignalAccount account; private final PathConfig pathConfig; - private final SignalServiceConfiguration serviceConfiguration; + private final ServiceEnvironmentConfig serviceEnvironmentConfig; private final String userAgent; private final SignalServiceAccountManager accountManager; @@ -55,31 +59,45 @@ public class RegistrationManager implements Closeable { public RegistrationManager( SignalAccount account, PathConfig pathConfig, - SignalServiceConfiguration serviceConfiguration, + ServiceEnvironmentConfig serviceEnvironmentConfig, String userAgent ) { this.account = account; this.pathConfig = pathConfig; - this.serviceConfiguration = serviceConfiguration; + this.serviceEnvironmentConfig = serviceEnvironmentConfig; this.userAgent = userAgent; final SleepTimer timer = new UptimeSleepTimer(); - this.accountManager = new SignalServiceAccountManager(serviceConfiguration, new DynamicCredentialsProvider( - // Using empty UUID, because registering doesn't work otherwise - null, - account.getUsername(), - account.getPassword(), - account.getSignalingKey(), - SignalServiceAddress.DEFAULT_DEVICE_ID), userAgent, null, ServiceConfig.AUTOMATIC_NETWORK_RETRY, timer); - final KeyBackupService keyBackupService = ServiceConfig.createKeyBackupService(accountManager); + GroupsV2Operations groupsV2Operations; + try { + groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceEnvironmentConfig.getSignalServiceConfiguration())); + } catch (Throwable ignored) { + groupsV2Operations = null; + } + this.accountManager = new SignalServiceAccountManager(serviceEnvironmentConfig.getSignalServiceConfiguration(), + new DynamicCredentialsProvider( + // Using empty UUID, because registering doesn't work otherwise + null, account.getUsername(), account.getPassword(), SignalServiceAddress.DEFAULT_DEVICE_ID), + userAgent, + groupsV2Operations, + ServiceConfig.AUTOMATIC_NETWORK_RETRY, + timer); + final KeyBackupService keyBackupService = accountManager.getKeyBackupService(ServiceConfig.getIasKeyStore(), + serviceEnvironmentConfig.getKeyBackupConfig().getEnclaveName(), + serviceEnvironmentConfig.getKeyBackupConfig().getServiceId(), + serviceEnvironmentConfig.getKeyBackupConfig().getMrenclave(), + 10); this.pinHelper = new PinHelper(keyBackupService); } public static RegistrationManager init( - String username, File settingsPath, SignalServiceConfiguration serviceConfiguration, String userAgent + String username, File settingsPath, ServiceEnvironment serviceEnvironment, String userAgent ) throws IOException { PathConfig pathConfig = PathConfig.createDefault(settingsPath); + final ServiceEnvironmentConfig serviceConfiguration = ServiceConfig.getServiceEnvironmentConfig( + serviceEnvironment, + userAgent); if (!SignalAccount.userExists(pathConfig.getDataPath(), username)) { IdentityKeyPair identityKey = KeyUtils.generateIdentityKeyPair(); int registrationId = KeyHelper.generateRegistrationId(false); @@ -120,9 +138,6 @@ public class RegistrationManager implements Closeable { String verificationCode, String pin ) throws IOException, KeyBackupSystemNoDataException, KeyBackupServicePinException { verificationCode = verificationCode.replace("-", ""); - if (account.getSignalingKey() == null) { - account.setSignalingKey(KeyUtils.createSignalingKey()); - } VerifyAccountResponse response; try { response = verifyAccountWithCode(verificationCode, pin, null); @@ -154,12 +169,13 @@ public class RegistrationManager implements Closeable { account.setRegistered(true); account.setUuid(UuidUtil.parseOrNull(response.getUuid())); account.setRegistrationLockPin(pin); + account.getSignalProtocolStore().archiveAllSessions(); account.getSignalProtocolStore() .saveIdentity(account.getSelfAddress(), account.getSignalProtocolStore().getIdentityKeyPair().getPublicKey(), TrustLevel.TRUSTED_VERIFIED); - try (Manager m = new Manager(account, pathConfig, serviceConfiguration, userAgent)) { + try (Manager m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) { m.refreshPreKeys(); @@ -173,7 +189,7 @@ public class RegistrationManager implements Closeable { final String verificationCode, final String legacyPin, final String registrationLock ) throws IOException { return accountManager.verifyAccountWithCode(verificationCode, - account.getSignalingKey(), + null, account.getSignalProtocolStore().getLocalRegistrationId(), true, legacyPin,