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;
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;
--- /dev/null
+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);
+ }
+}
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;
}
@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
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;
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.");
}
}
}
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;
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