X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/40fc71258160812b56f9dc0b7de511ef764e2633..afb22deadaa4c8058db65af7e65b242568319bf6:/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 f48ade7c..c8869212 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 { @@ -79,37 +80,30 @@ public class ProvisioningManager { public static ProvisioningManager init( File settingsPath, ServiceEnvironment serviceEnvironment, String userAgent ) { - PathConfig pathConfig = PathConfig.createDefault(settingsPath); + var pathConfig = PathConfig.createDefault(settingsPath); - final ServiceEnvironmentConfig serviceConfiguration = ServiceConfig.getServiceEnvironmentConfig( - serviceEnvironment, - userAgent); + final var serviceConfiguration = ServiceConfig.getServiceEnvironmentConfig(serviceEnvironment, userAgent); return new ProvisioningManager(pathConfig, serviceConfiguration, userAgent); } - public String getDeviceLinkUri() throws TimeoutException, IOException { - String deviceUuid = accountManager.getNewDeviceUuid(); + 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 { - SignalServiceAccountManager.NewDeviceRegistrationReturn ret = accountManager.finishNewDeviceRegistration( - identityKey, - false, - true, - registrationId, - deviceName); + public Manager finishDeviceLink(String deviceName) throws IOException, InvalidKeyException, TimeoutException, UserAlreadyExists { + var ret = accountManager.finishNewDeviceRegistration(identityKey, false, true, registrationId, deviceName); - String username = ret.getNumber(); + var username = ret.getNumber(); // TODO do this check before actually registering if (SignalAccount.userExists(pathConfig.getDataPath(), username)) { throw new UserAlreadyExists(username, SignalAccount.getFileName(pathConfig.getDataPath(), username)); } // Create new account with the synced identity - byte[] profileKeyBytes = ret.getProfileKey(); + var profileKeyBytes = ret.getProfileKey(); ProfileKey profileKey; if (profileKeyBytes == null) { profileKey = KeyUtils.createProfileKey(); @@ -121,17 +115,21 @@ public class ProvisioningManager { } } - try (SignalAccount account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), - username, - ret.getUuid(), - password, - ret.getDeviceId(), - ret.getIdentity(), - registrationId, - profileKey)) { + SignalAccount account = null; + try { + account = SignalAccount.createLinkedAccount(pathConfig.getDataPath(), + username, + ret.getUuid(), + password, + ret.getDeviceId(), + ret.getIdentity(), + registrationId, + profileKey); account.save(); - try (Manager m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) { + Manager m = null; + try { + m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent); try { m.refreshPreKeys(); @@ -151,12 +149,22 @@ public class ProvisioningManager { throw e; } - m.close(false); - } + account.save(); - account.save(); - } + final var result = m; + account = null; + m = null; - return username; + return result; + } finally { + if (m != null) { + m.close(); + } + } + } finally { + if (account != null) { + account.close(); + } + } } }