X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/a02031aa807d45816398955c9667215baf5d06dc..4acc9a96e34995c86c076d9020a40251c726c64c:/src/main/java/org/asamk/signal/manager/ProvisioningManager.java diff --git a/src/main/java/org/asamk/signal/manager/ProvisioningManager.java b/src/main/java/org/asamk/signal/manager/ProvisioningManager.java index 61d3315f..4f1aca18 100644 --- a/src/main/java/org/asamk/signal/manager/ProvisioningManager.java +++ b/src/main/java/org/asamk/signal/manager/ProvisioningManager.java @@ -16,7 +16,6 @@ */ package org.asamk.signal.manager; -import org.asamk.signal.UserAlreadyExists; import org.asamk.signal.storage.SignalAccount; import org.signal.zkgroup.InvalidInputException; import org.signal.zkgroup.profiles.ProfileKey; @@ -24,10 +23,13 @@ import org.whispersystems.libsignal.IdentityKeyPair; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.util.KeyHelper; 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.internal.configuration.SignalServiceConfiguration; +import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider; import java.io.IOException; import java.util.concurrent.TimeoutException; @@ -52,7 +54,17 @@ public class ProvisioningManager { registrationId = KeyHelper.generateRegistrationId(false); password = KeyUtils.createPassword(); final SleepTimer timer = new UptimeSleepTimer(); - accountManager = new SignalServiceAccountManager(serviceConfiguration, null, null, password, SignalServiceAddress.DEFAULT_DEVICE_ID, userAgent, timer); + GroupsV2Operations groupsV2Operations; + try { + groupsV2Operations = new GroupsV2Operations(ClientZkOperations.create(serviceConfiguration)); + } catch (Throwable ignored) { + groupsV2Operations = null; + } + accountManager = new SignalServiceAccountManager(serviceConfiguration, + new DynamicCredentialsProvider(null, null, password, null, SignalServiceAddress.DEFAULT_DEVICE_ID), + userAgent, + groupsV2Operations, + timer); } public String getDeviceLinkUri() throws TimeoutException, IOException { @@ -83,19 +95,22 @@ public class ProvisioningManager { throw new IOException("Received invalid profileKey", e); } } - SignalAccount account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), username, ret.getUuid(), password, ret.getDeviceId(), ret.getIdentity(), registrationId, signalingKey, profileKey); - account.save(); - Manager m = new Manager(account, pathConfig, serviceConfiguration, userAgent); + try (SignalAccount account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), username, ret.getUuid(), password, ret.getDeviceId(), ret.getIdentity(), registrationId, signalingKey, profileKey)) { + account.save(); + + try (Manager m = new Manager(account, pathConfig, serviceConfiguration, userAgent)) { - m.refreshPreKeys(); + m.refreshPreKeys(); - m.requestSyncGroups(); - m.requestSyncContacts(); - m.requestSyncBlocked(); - m.requestSyncConfiguration(); + m.requestSyncGroups(); + m.requestSyncContacts(); + m.requestSyncBlocked(); + m.requestSyncConfiguration(); - m.saveAccount(); + m.saveAccount(); + } + } return username; }