]> nmode's Git Repositories - signal-cli/commitdiff
Return a Manager from ProvisioningManager and RegistrationManager when finished
authorAsamK <asamk@gmx.de>
Sun, 7 Mar 2021 13:48:02 +0000 (14:48 +0100)
committerAsamK <asamk@gmx.de>
Mon, 8 Mar 2021 20:21:51 +0000 (21:21 +0100)
lib/src/main/java/org/asamk/signal/manager/ProvisioningManager.java
lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java
src/main/java/org/asamk/signal/commands/LinkCommand.java
src/main/java/org/asamk/signal/commands/VerifyCommand.java

index 0ce43bb9c0a0c9058a7018fd3ccf7b84178dbc58..e53f1b99b2eef221d9b712c4ab815b446b763943 100644 (file)
@@ -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();
+            }
+        }
     }
 }
index 6ded4d0bb550ae0e8abdabe91270135df6634193..aad731a0a4f100460665b909e178feefa6eeddfc 100644 (file)
@@ -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(
index 34775773069b3b79069830374969c4c7aeaacce5..3a0186195995f14f1d300b5c007972dade4fb890 100644 (file)
@@ -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) {
index c26c1d3a0701a949b865f1407ff7b2fcadd31b4d..151d966a5b6c5638cc92c5e237b0d1cf3d843bdb 100644 (file)
@@ -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: "