]> nmode's Git Repositories - signal-cli/commitdiff
Improve behavior, when authorization fails
authorAsamK <asamk@gmx.de>
Tue, 24 Mar 2020 17:15:21 +0000 (18:15 +0100)
committerAsamK <asamk@gmx.de>
Tue, 24 Mar 2020 17:15:21 +0000 (18:15 +0100)
- register command should still be possible, to regain authorization
- reset uuid after registering, otherwise the verify request will fail

src/main/java/org/asamk/signal/Main.java
src/main/java/org/asamk/signal/manager/Manager.java

index 81065c778c894afca0c43f004f6842214ff55b61..5e37bf3b539be19cc00c7a4dfb0841cbf96a74f9 100644 (file)
@@ -38,6 +38,7 @@ import org.asamk.signal.util.SecurityProvider;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.freedesktop.dbus.DBusConnection;
 import org.freedesktop.dbus.exceptions.DBusException;
+import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException;
 import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
 
 import java.io.File;
@@ -105,6 +106,12 @@ public class Main {
                 ts = m;
                 try {
                     m.init();
+                } catch (AuthorizationFailedException e) {
+                    if (!"register".equals(ns.getString("command"))) {
+                        // Register command should still be possible, if current authorization fails
+                        System.err.println("Authorization failed, was the number registered elsewhere?");
+                        return 2;
+                    }
                 } catch (Exception e) {
                     System.err.println("Error loading state file: " + e.getMessage());
                     return 2;
index c928ec17ce14c2ceb6bc96558fd3debb280dc1f1..3cf345c87156e9ed304a0612e5ad92c01088f173 100644 (file)
@@ -99,7 +99,6 @@ import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage
 import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
 import org.whispersystems.signalservice.api.push.ContactTokenDetails;
 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
-import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException;
 import org.whispersystems.signalservice.api.push.exceptions.EncapsulatedExceptions;
 import org.whispersystems.signalservice.api.push.exceptions.NetworkFailureException;
 import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException;
@@ -215,20 +214,15 @@ public class Manager implements Signal {
         migrateLegacyConfigs();
 
         accountManager = getSignalServiceAccountManager();
-        try {
-            if (account.isRegistered()) {
-                if (accountManager.getPreKeysCount() < BaseConfig.PREKEY_MINIMUM_COUNT) {
-                    refreshPreKeys();
-                    account.save();
-                }
-                if (account.getUuid() == null) {
-                    account.setUuid(accountManager.getOwnUuid());
-                    account.save();
-                }
+        if (account.isRegistered()) {
+            if (accountManager.getPreKeysCount() < BaseConfig.PREKEY_MINIMUM_COUNT) {
+                refreshPreKeys();
+                account.save();
+            }
+            if (account.getUuid() == null) {
+                account.setUuid(accountManager.getOwnUuid());
+                account.save();
             }
-        } catch (AuthorizationFailedException e) {
-            System.err.println("Authorization failed, was the number registered elsewhere?");
-            throw e;
         }
     }
 
@@ -279,6 +273,7 @@ public class Manager implements Signal {
             createNewIdentity();
         }
         account.setPassword(KeyUtils.createPassword());
+        account.setUuid(null);
         accountManager = getSignalServiceAccountManager();
 
         if (voiceVerification) {