]> nmode's Git Repositories - signal-cli/commitdiff
Print more detailed error message when registering with non-normalized number
authorAsamK <asamk@gmx.de>
Sun, 22 May 2022 20:01:11 +0000 (22:01 +0200)
committerAsamK <asamk@gmx.de>
Sun, 22 May 2022 20:01:11 +0000 (22:01 +0200)
Fixes #958

lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java
lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java
lib/src/main/java/org/asamk/signal/manager/api/NonNormalizedPhoneNumberException.java [new file with mode: 0644]
lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java
lib/src/main/java/org/asamk/signal/manager/util/NumberVerificationUtils.java
src/main/java/org/asamk/signal/commands/RegisterCommand.java
src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java

index 507690f413d2ae2f98c354299e0b3589c3855eee..a92792c71d78a62568d51e70ce9e9f476886fbee 100644 (file)
@@ -2,6 +2,7 @@ package org.asamk.signal.manager;
 
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
 
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
+import org.asamk.signal.manager.api.NonNormalizedPhoneNumberException;
 import org.asamk.signal.manager.api.PinLockedException;
 
 import java.io.Closeable;
 import org.asamk.signal.manager.api.PinLockedException;
 
 import java.io.Closeable;
@@ -9,7 +10,9 @@ import java.io.IOException;
 
 public interface RegistrationManager extends Closeable {
 
 
 public interface RegistrationManager extends Closeable {
 
-    void register(boolean voiceVerification, String captcha) throws IOException, CaptchaRequiredException;
+    void register(
+            boolean voiceVerification, String captcha
+    ) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException;
 
     void verifyAccount(
             String verificationCode, String pin
 
     void verifyAccount(
             String verificationCode, String pin
index 509b8923bc0711765540273b3738550e3c4475f9..3ce77557e97dac34db516de0c781526a211cfcb5 100644 (file)
@@ -18,6 +18,7 @@ package org.asamk.signal.manager;
 
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
 
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
+import org.asamk.signal.manager.api.NonNormalizedPhoneNumberException;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.api.UpdateProfile;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.api.UpdateProfile;
 import org.asamk.signal.manager.config.ServiceConfig;
@@ -95,7 +96,9 @@ class RegistrationManagerImpl implements RegistrationManager {
     }
 
     @Override
     }
 
     @Override
-    public void register(boolean voiceVerification, String captcha) throws IOException, CaptchaRequiredException {
+    public void register(
+            boolean voiceVerification, String captcha
+    ) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException {
         if (account.isRegistered()
                 && account.getServiceEnvironment() != null
                 && account.getServiceEnvironment() != serviceEnvironmentConfig.getType()) {
         if (account.isRegistered()
                 && account.getServiceEnvironment() != null
                 && account.getServiceEnvironment() != serviceEnvironmentConfig.getType()) {
diff --git a/lib/src/main/java/org/asamk/signal/manager/api/NonNormalizedPhoneNumberException.java b/lib/src/main/java/org/asamk/signal/manager/api/NonNormalizedPhoneNumberException.java
new file mode 100644 (file)
index 0000000..ae00f66
--- /dev/null
@@ -0,0 +1,12 @@
+package org.asamk.signal.manager.api;
+
+public class NonNormalizedPhoneNumberException extends Exception {
+
+    public NonNormalizedPhoneNumberException(final String message) {
+        super(message);
+    }
+
+    public NonNormalizedPhoneNumberException(final String message, final Throwable cause) {
+        super(message, cause);
+    }
+}
index 26247b09e3165d6060f0abb3cf887c33b906cc11..b75cce525dbfa7e3c2587d92f74c83d29397c4da 100644 (file)
@@ -5,6 +5,7 @@ import org.asamk.signal.manager.SignalDependencies;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
 import org.asamk.signal.manager.api.InvalidDeviceLinkException;
+import org.asamk.signal.manager.api.NonNormalizedPhoneNumberException;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.storage.SignalAccount;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.config.ServiceConfig;
 import org.asamk.signal.manager.storage.SignalAccount;
@@ -95,7 +96,7 @@ public class AccountHelper {
 
     public void startChangeNumber(
             String newNumber, String captcha, boolean voiceVerification
 
     public void startChangeNumber(
             String newNumber, String captcha, boolean voiceVerification
-    ) throws IOException, CaptchaRequiredException {
+    ) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException {
         final var accountManager = dependencies.createUnauthenticatedAccountManager(newNumber, account.getPassword());
         NumberVerificationUtils.requestVerificationCode(accountManager, captcha, voiceVerification);
     }
         final var accountManager = dependencies.createUnauthenticatedAccountManager(newNumber, account.getPassword());
         NumberVerificationUtils.requestVerificationCode(accountManager, captcha, voiceVerification);
     }
index 2f8981e3ac3132af68cd26bc3b1093cbc9ee5c2f..9dcee1fb863a11f4385a2cb3961d369ef0af34c4 100644 (file)
@@ -2,6 +2,7 @@ package org.asamk.signal.manager.util;
 
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
 
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
+import org.asamk.signal.manager.api.NonNormalizedPhoneNumberException;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.helper.PinHelper;
 import org.asamk.signal.manager.api.Pair;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.helper.PinHelper;
@@ -20,7 +21,7 @@ public class NumberVerificationUtils {
 
     public static void requestVerificationCode(
             SignalServiceAccountManager accountManager, String captcha, boolean voiceVerification
 
     public static void requestVerificationCode(
             SignalServiceAccountManager accountManager, String captcha, boolean voiceVerification
-    ) throws IOException, CaptchaRequiredException {
+    ) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException {
         captcha = captcha == null ? null : captcha.replace("signalcaptcha://", "");
 
         final ServiceResponse<RequestVerificationCodeResponse> response;
         captcha = captcha == null ? null : captcha.replace("signalcaptcha://", "");
 
         final ServiceResponse<RequestVerificationCodeResponse> response;
@@ -39,6 +40,11 @@ public class NumberVerificationUtils {
             handleResponseException(response);
         } catch (org.whispersystems.signalservice.api.push.exceptions.CaptchaRequiredException e) {
             throw new CaptchaRequiredException(e.getMessage(), e);
             handleResponseException(response);
         } catch (org.whispersystems.signalservice.api.push.exceptions.CaptchaRequiredException e) {
             throw new CaptchaRequiredException(e.getMessage(), e);
+        } catch (org.whispersystems.signalservice.api.push.exceptions.NonNormalizedPhoneNumberException e) {
+            throw new NonNormalizedPhoneNumberException("Phone number is not normalized ("
+                    + e.getMessage()
+                    + "). Expected normalized: "
+                    + e.getNormalizedNumber(), e);
         }
     }
 
         }
     }
 
index d0bc6f1b00bfcfab352fabca6aea4334c5cba1dd..b2d3581e98c44376abc0e162c933c9d9aed45ce4 100644 (file)
@@ -12,6 +12,7 @@ import org.asamk.signal.commands.exceptions.IOErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.RegistrationManager;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
 import org.asamk.signal.manager.RegistrationManager;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
+import org.asamk.signal.manager.api.NonNormalizedPhoneNumberException;
 import org.asamk.signal.output.JsonWriter;
 
 import java.io.IOException;
 import org.asamk.signal.output.JsonWriter;
 
 import java.io.IOException;
@@ -76,6 +77,8 @@ public class RegisterCommand implements RegistrationCommand, JsonRpcRegistration
                 message = "Invalid captcha given.";
             }
             throw new UserErrorException(message);
                 message = "Invalid captcha given.";
             }
             throw new UserErrorException(message);
+        } catch (NonNormalizedPhoneNumberException e) {
+            throw new UserErrorException("Failed to register: " + e.getMessage(), e);
         } catch (IOException e) {
             throw new IOErrorException("Request verify error: " + e.getMessage(), e);
         }
         } catch (IOException e) {
             throw new IOErrorException("Request verify error: " + e.getMessage(), e);
         }
index e034d677b1051220f4f7e42e4174acdf2be51742..59afebf8932dc6476d45dbb2e11cba1c438a9b88 100644 (file)
@@ -9,6 +9,7 @@ import org.asamk.signal.manager.ProvisioningManager;
 import org.asamk.signal.manager.RegistrationManager;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
 import org.asamk.signal.manager.RegistrationManager;
 import org.asamk.signal.manager.api.CaptchaRequiredException;
 import org.asamk.signal.manager.api.IncorrectPinException;
+import org.asamk.signal.manager.api.NonNormalizedPhoneNumberException;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.freedesktop.dbus.DBusPath;
 import org.asamk.signal.manager.api.PinLockedException;
 import org.asamk.signal.manager.api.UserAlreadyExistsException;
 import org.freedesktop.dbus.DBusPath;
@@ -61,6 +62,8 @@ public class DbusSignalControlImpl implements org.asamk.SignalControl {
         } catch (CaptchaRequiredException e) {
             String message = captcha == null ? "Captcha required for verification." : "Invalid captcha given.";
             throw new SignalControl.Error.RequiresCaptcha(message);
         } catch (CaptchaRequiredException e) {
             String message = captcha == null ? "Captcha required for verification." : "Invalid captcha given.";
             throw new SignalControl.Error.RequiresCaptcha(message);
+        } catch (NonNormalizedPhoneNumberException e) {
+            throw new Error.InvalidNumber(e.getMessage());
         } catch (OverlappingFileLockException e) {
             throw new SignalControl.Error.Failure("Account is already in use");
         } catch (IOException e) {
         } catch (OverlappingFileLockException e) {
             throw new SignalControl.Error.Failure("Account is already in use");
         } catch (IOException e) {