From: AsamK Date: Sun, 22 May 2022 20:01:11 +0000 (+0200) Subject: Print more detailed error message when registering with non-normalized number X-Git-Tag: v0.10.7~20 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/995eaa6e7cb49b353e306adf08c0457e1aade618?ds=sidebyside Print more detailed error message when registering with non-normalized number Fixes #958 --- 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 507690f4..a92792c7 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java @@ -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.NonNormalizedPhoneNumberException; import org.asamk.signal.manager.api.PinLockedException; import java.io.Closeable; @@ -9,7 +10,9 @@ import java.io.IOException; 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 diff --git a/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java index 509b8923..3ce77557 100644 --- a/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/RegistrationManagerImpl.java @@ -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.NonNormalizedPhoneNumberException; 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 - 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()) { 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 index 00000000..ae00f66b --- /dev/null +++ b/lib/src/main/java/org/asamk/signal/manager/api/NonNormalizedPhoneNumberException.java @@ -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); + } +} diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java index 26247b09..b75cce52 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/AccountHelper.java @@ -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.NonNormalizedPhoneNumberException; 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 - ) throws IOException, CaptchaRequiredException { + ) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException { final var accountManager = dependencies.createUnauthenticatedAccountManager(newNumber, account.getPassword()); NumberVerificationUtils.requestVerificationCode(accountManager, captcha, voiceVerification); } diff --git a/lib/src/main/java/org/asamk/signal/manager/util/NumberVerificationUtils.java b/lib/src/main/java/org/asamk/signal/manager/util/NumberVerificationUtils.java index 2f8981e3..9dcee1fb 100644 --- a/lib/src/main/java/org/asamk/signal/manager/util/NumberVerificationUtils.java +++ b/lib/src/main/java/org/asamk/signal/manager/util/NumberVerificationUtils.java @@ -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.NonNormalizedPhoneNumberException; 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 - ) throws IOException, CaptchaRequiredException { + ) throws IOException, CaptchaRequiredException, NonNormalizedPhoneNumberException { captcha = captcha == null ? null : captcha.replace("signalcaptcha://", ""); final ServiceResponse 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); + } catch (org.whispersystems.signalservice.api.push.exceptions.NonNormalizedPhoneNumberException e) { + throw new NonNormalizedPhoneNumberException("Phone number is not normalized (" + + e.getMessage() + + "). Expected normalized: " + + e.getNormalizedNumber(), e); } } diff --git a/src/main/java/org/asamk/signal/commands/RegisterCommand.java b/src/main/java/org/asamk/signal/commands/RegisterCommand.java index d0bc6f1b..b2d3581e 100644 --- a/src/main/java/org/asamk/signal/commands/RegisterCommand.java +++ b/src/main/java/org/asamk/signal/commands/RegisterCommand.java @@ -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.manager.api.NonNormalizedPhoneNumberException; 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); + } catch (NonNormalizedPhoneNumberException e) { + throw new UserErrorException("Failed to register: " + e.getMessage(), e); } catch (IOException e) { throw new IOErrorException("Request verify error: " + e.getMessage(), e); } diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java index e034d677..59afebf8 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalControlImpl.java @@ -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.api.NonNormalizedPhoneNumberException; 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 (NonNormalizedPhoneNumberException e) { + throw new Error.InvalidNumber(e.getMessage()); } catch (OverlappingFileLockException e) { throw new SignalControl.Error.Failure("Account is already in use"); } catch (IOException e) {