X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/de273586b4106171a3940ce5ec2c2b3712430c8c..9e3c9db5c0d8f8e35408ff65a60b7db0e455b73d:/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java diff --git a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java index 0ce43bb9..67506be8 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java @@ -38,6 +38,7 @@ import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider import java.io.File; import java.io.IOException; +import java.net.URI; import java.util.concurrent.TimeoutException; public class ProvisioningManager { @@ -86,13 +87,13 @@ public class ProvisioningManager { return new ProvisioningManager(pathConfig, serviceConfiguration, userAgent); } - public String getDeviceLinkUri() throws TimeoutException, IOException { + public URI getDeviceLinkUri() throws TimeoutException, IOException { var deviceUuid = accountManager.getNewDeviceUuid(); return new DeviceLinkInfo(deviceUuid, identityKey.getPublicKey().getPublicKey()).createDeviceLinkUri(); } - public String finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists { + public Manager finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists { var ret = accountManager.finishNewDeviceRegistration(identityKey, false, true, registrationId, deviceName); var username = ret.getNumber(); @@ -114,17 +115,20 @@ public class ProvisioningManager { } } - try (var account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), - username, - ret.getUuid(), - password, - ret.getDeviceId(), - ret.getIdentity(), - registrationId, - profileKey)) { - account.save(); - - try (var m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) { + SignalAccount account = null; + try { + account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), + username, + ret.getUuid(), + password, + ret.getDeviceId(), + ret.getIdentity(), + registrationId, + profileKey); + + Manager m = null; + try { + m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent); try { m.refreshPreKeys(); @@ -134,22 +138,26 @@ public class ProvisioningManager { } try { - m.requestSyncGroups(); - m.requestSyncContacts(); - m.requestSyncBlocked(); - m.requestSyncConfiguration(); - m.requestSyncKeys(); + m.requestAllSyncData(); } catch (Exception e) { logger.error("Failed to request sync messages from linked device."); throw e; } - m.close(false); - } + final var result = m; + account = null; + m = null; - account.save(); + return result; + } finally { + if (m != null) { + m.close(); + } + } + } finally { + if (account != null) { + account.close(); + } } - - return username; } }