]> nmode's Git Repositories - signal-cli/commitdiff
Improve error message if captcha is rejected by server
authorAsamK <asamk@gmx.de>
Mon, 26 Feb 2024 21:13:57 +0000 (22:13 +0100)
committerAsamK <asamk@gmx.de>
Mon, 26 Feb 2024 21:13:57 +0000 (22:13 +0100)
Fixes #1328

lib/src/main/java/org/asamk/signal/manager/Manager.java
lib/src/main/java/org/asamk/signal/manager/api/CaptchaRejectedException.java [new file with mode: 0644]
lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java
src/main/java/org/asamk/signal/commands/SubmitRateLimitChallengeCommand.java
src/main/java/org/asamk/signal/dbus/DbusSignalImpl.java

index 7e0c1120389bcef13cb9ff147e6646a476690707..edc162856a98bde2a1b060ed7735b7446bd232d9 100644 (file)
@@ -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.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;
 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 deleteAccount() throws IOException;
 
-    void submitRateLimitRecaptchaChallenge(String challenge, String captcha) throws IOException;
+    void submitRateLimitRecaptchaChallenge(
+            String challenge,
+            String captcha
+    ) throws IOException, CaptchaRejectedException;
 
     List<Device> getLinkedDevices() throws IOException;
 
 
     List<Device> 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 (file)
index 0000000..a41a168
--- /dev/null
@@ -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);
+    }
+}
index 5ef30db0ea73ffeddd49ce6bcffca26246b2a185..b7808fc6d7a3281d1cb8416a9c943b5990007f27 100644 (file)
@@ -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.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;
 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
     }
 
     @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://", "");
 
         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
     }
 
     @Override
index a5e076271335a9bed70a328bdc8312248c659f59..91c6fc676501a577014634512e6e5c21216ae094 100644 (file)
@@ -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.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.Manager;
+import org.asamk.signal.manager.api.CaptchaRejectedException;
 import org.asamk.signal.output.OutputWriter;
 
 import java.io.IOException;
 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);
             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.");
         }
     }
 }
         }
     }
 }
index 257283fc4d8912fe0d685302b3816d808d764ce9..65c210fc851d80718a7d2ebedc6ea1c66c274a93 100644 (file)
@@ -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.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;
 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());
             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
     }
 
     @Override