From: AsamK Date: Mon, 26 Feb 2024 21:13:57 +0000 (+0100) Subject: Improve error message if captcha is rejected by server X-Git-Tag: v0.13.1~3 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/189b21dbde0b9981365ee6e39e3645b94d634ef6 Improve error message if captcha is rejected by server Fixes #1328 --- diff --git a/lib/src/main/java/org/asamk/signal/manager/Manager.java b/lib/src/main/java/org/asamk/signal/manager/Manager.java index 7e0c1120..edc16285 100644 --- a/lib/src/main/java/org/asamk/signal/manager/Manager.java +++ b/lib/src/main/java/org/asamk/signal/manager/Manager.java @@ -2,6 +2,7 @@ package org.asamk.signal.manager; import org.asamk.signal.manager.api.AlreadyReceivingException; import org.asamk.signal.manager.api.AttachmentInvalidException; +import org.asamk.signal.manager.api.CaptchaRejectedException; import org.asamk.signal.manager.api.CaptchaRequiredException; import org.asamk.signal.manager.api.Configuration; import org.asamk.signal.manager.api.Device; @@ -136,7 +137,10 @@ public interface Manager extends Closeable { void deleteAccount() throws IOException; - void submitRateLimitRecaptchaChallenge(String challenge, String captcha) throws IOException; + void submitRateLimitRecaptchaChallenge( + String challenge, + String captcha + ) throws IOException, CaptchaRejectedException; List getLinkedDevices() throws IOException; diff --git a/lib/src/main/java/org/asamk/signal/manager/api/CaptchaRejectedException.java b/lib/src/main/java/org/asamk/signal/manager/api/CaptchaRejectedException.java new file mode 100644 index 00000000..a41a168e --- /dev/null +++ b/lib/src/main/java/org/asamk/signal/manager/api/CaptchaRejectedException.java @@ -0,0 +1,16 @@ +package org.asamk.signal.manager.api; + +public class CaptchaRejectedException extends Exception { + + public CaptchaRejectedException() { + super("Captcha rejected"); + } + + public CaptchaRejectedException(final String message) { + super(message); + } + + public CaptchaRejectedException(final String message, final Throwable cause) { + super(message, cause); + } +} diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index 5ef30db0..b7808fc6 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -19,6 +19,7 @@ package org.asamk.signal.manager.internal; import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.api.AlreadyReceivingException; import org.asamk.signal.manager.api.AttachmentInvalidException; +import org.asamk.signal.manager.api.CaptchaRejectedException; import org.asamk.signal.manager.api.CaptchaRequiredException; import org.asamk.signal.manager.api.Configuration; import org.asamk.signal.manager.api.Device; @@ -407,10 +408,17 @@ public class ManagerImpl implements Manager { } @Override - public void submitRateLimitRecaptchaChallenge(String challenge, String captcha) throws IOException { + public void submitRateLimitRecaptchaChallenge( + String challenge, + String captcha + ) throws IOException, CaptchaRejectedException { captcha = captcha == null ? null : captcha.replace("signalcaptcha://", ""); - dependencies.getAccountManager().submitRateLimitRecaptchaChallenge(challenge, captcha); + try { + dependencies.getAccountManager().submitRateLimitRecaptchaChallenge(challenge, captcha); + } catch (org.whispersystems.signalservice.api.push.exceptions.CaptchaRejectedException ignored) { + throw new CaptchaRejectedException(); + } } @Override diff --git a/src/main/java/org/asamk/signal/commands/SubmitRateLimitChallengeCommand.java b/src/main/java/org/asamk/signal/commands/SubmitRateLimitChallengeCommand.java index a5e07627..91c6fc67 100644 --- a/src/main/java/org/asamk/signal/commands/SubmitRateLimitChallengeCommand.java +++ b/src/main/java/org/asamk/signal/commands/SubmitRateLimitChallengeCommand.java @@ -5,7 +5,9 @@ import net.sourceforge.argparse4j.inf.Subparser; import org.asamk.signal.commands.exceptions.CommandException; import org.asamk.signal.commands.exceptions.IOErrorException; +import org.asamk.signal.commands.exceptions.UserErrorException; import org.asamk.signal.manager.Manager; +import org.asamk.signal.manager.api.CaptchaRejectedException; import org.asamk.signal.output.OutputWriter; import java.io.IOException; @@ -38,6 +40,9 @@ public class SubmitRateLimitChallengeCommand implements JsonRpcLocalCommand { m.submitRateLimitRecaptchaChallenge(challenge, captcha); } catch (IOException e) { throw new IOErrorException("Submit challenge error: " + e.getMessage(), e); + } catch (CaptchaRejectedException e) { + throw new UserErrorException( + "Captcha rejected, it may be outdated, already used or solved from a different IP address."); } } } diff --git a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java index 257283fc..65c210fc 100644 --- a/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java +++ b/src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java @@ -4,6 +4,7 @@ import org.asamk.Signal; import org.asamk.signal.BaseConfig; import org.asamk.signal.manager.Manager; import org.asamk.signal.manager.api.AttachmentInvalidException; +import org.asamk.signal.manager.api.CaptchaRejectedException; import org.asamk.signal.manager.api.DeviceLinkUrl; import org.asamk.signal.manager.api.GroupId; import org.asamk.signal.manager.api.GroupInviteLinkUrl; @@ -159,8 +160,10 @@ public class DbusSignalImpl implements Signal, AutoCloseable { m.submitRateLimitRecaptchaChallenge(challenge, captcha); } catch (IOException e) { throw new Error.Failure("Submit challenge error: " + e.getMessage()); + } catch (CaptchaRejectedException e) { + throw new Error.Failure( + "Captcha rejected, it may be outdated, already used or solved from a different IP address."); } - } @Override