From: AsamK Date: Sun, 7 Mar 2021 13:48:02 +0000 (+0100) Subject: Return a Manager from ProvisioningManager and RegistrationManager when finished X-Git-Tag: v0.8.2~68 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/2935b96070ee687c7a17382c64e3f85730b9f706 Return a Manager from ProvisioningManager and RegistrationManager when finished --- 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..e53f1b99 100644 --- a/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java @@ -92,7 +92,7 @@ public class ProvisioningManager { 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 +114,21 @@ public class ProvisioningManager { } } - try (var 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 (var m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) { + Manager m = null; + try { + m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent); try { m.refreshPreKeys(); @@ -144,12 +148,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(); + } + } } } 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 6ded4d0b..aad731a0 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java @@ -128,7 +128,7 @@ public class RegistrationManager implements Closeable { account.save(); } - public void verifyAccount( + public Manager verifyAccount( String verificationCode, String pin ) throws IOException, KeyBackupSystemNoDataException, KeyBackupServicePinException { verificationCode = verificationCode.replace("-", ""); @@ -169,14 +169,24 @@ public class RegistrationManager implements Closeable { account.getSignalProtocolStore().getIdentityKeyPair().getPublicKey(), TrustLevel.TRUSTED_VERIFIED); - try (var m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent)) { + Manager m = null; + try { + m = new Manager(account, pathConfig, serviceEnvironmentConfig, userAgent); m.refreshPreKeys(); - m.close(false); - } + account.save(); - account.save(); + final var result = m; + account = null; + m = null; + + return result; + } finally { + if (m != null) { + m.close(); + } + } } private VerifyAccountResponse verifyAccountWithCode( diff --git a/src/main/java/org/asamk/signal/commands/LinkCommand.java b/src/main/java/org/asamk/signal/commands/LinkCommand.java index 34775773..3a018619 100644 --- a/src/main/java/org/asamk/signal/commands/LinkCommand.java +++ b/src/main/java/org/asamk/signal/commands/LinkCommand.java @@ -38,8 +38,9 @@ public class LinkCommand implements ProvisioningCommand { } try { writer.println("{}", m.getDeviceLinkUri()); - var username = m.finishDeviceLink(deviceName); - writer.println("Associated with: {}", username); + try (var manager = m.finishDeviceLink(deviceName)) { + writer.println("Associated with: {}", manager.getUsername()); + } } catch (TimeoutException e) { throw new UserErrorException("Link request timed out, please try again."); } catch (IOException e) { diff --git a/src/main/java/org/asamk/signal/commands/VerifyCommand.java b/src/main/java/org/asamk/signal/commands/VerifyCommand.java index c26c1d3a..151d966a 100644 --- a/src/main/java/org/asamk/signal/commands/VerifyCommand.java +++ b/src/main/java/org/asamk/signal/commands/VerifyCommand.java @@ -28,7 +28,8 @@ public class VerifyCommand implements RegistrationCommand { var pin = ns.getString("pin"); try { - m.verifyAccount(verificationCode, pin); + final var manager = m.verifyAccount(verificationCode, pin); + manager.close(); } catch (LockedException e) { throw new UserErrorException( "Verification failed! This number is locked with a pin. Hours remaining until reset: "