import org.asamk.signal.commands.exceptions.CommandException;
import org.asamk.signal.commands.exceptions.IOErrorException;
+import org.asamk.signal.manager.api.ProofRequiredException;
import org.asamk.signal.manager.api.RecipientIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.whispersystems.signalservice.api.messages.SendMessageResult;
-import org.whispersystems.signalservice.api.push.exceptions.ProofRequiredException;
+import org.asamk.signal.manager.api.SendMessageResult;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.stream.Collectors;
-import static org.asamk.signal.util.Util.getLegacyIdentifier;
-
public class ErrorUtils {
- private final static Logger logger = LoggerFactory.getLogger(ErrorUtils.class);
-
private ErrorUtils() {
}
}
public static String getErrorMessageFromSendMessageResult(SendMessageResult result) {
- var identifier = getLegacyIdentifier(result.getAddress());
- if (result.isNetworkFailure()) {
- return String.format("Network failure for \"%s\"", identifier);
- } else if (result.isUnregisteredFailure()) {
- return String.format("Unregistered user \"%s\"", identifier);
- } else if (result.getIdentityFailure() != null) {
- return String.format("Untrusted Identity for \"%s\"", identifier);
- } else if (result.getProofRequiredFailure() != null) {
- final var failure = result.getProofRequiredFailure();
+ var identifier = result.address().getLegacyIdentifier();
+ if (result.proofRequiredFailure() != null) {
+ final var failure = result.proofRequiredFailure();
return String.format(
- "CAPTCHA proof required for sending to \"%s\", available options \"%s\" with token \"%s\", or wait \"%d\" seconds",
+ "CAPTCHA proof required for sending to \"%s\", available options \"%s\" with challenge token \"%s\", or wait \"%d\" seconds.\n"
+ + (
+ failure.getOptions().contains(ProofRequiredException.Option.RECAPTCHA)
+ ? """
+ To get the captcha token, go to https://signalcaptchas.org/challenge/generate.html
+ Check the developer tools (F12) console for a failed redirect to signalcaptcha://
+ Everything after signalcaptcha:// is the captcha token.
+ Use the following command to submit the captcha token:
+ signal-cli submitRateLimitChallenge --challenge CHALLENGE_TOKEN --captcha CAPTCHA_TOKEN"""
+ : ""
+ ),
identifier,
failure.getOptions()
.stream()
.collect(Collectors.joining(", ")),
failure.getToken(),
failure.getRetryAfterSeconds());
+ } else if (result.isNetworkFailure()) {
+ return String.format("Network failure for \"%s\"", identifier);
+ } else if (result.isUnregisteredFailure()) {
+ return String.format("Unregistered user \"%s\"", identifier);
+ } else if (result.isIdentityFailure()) {
+ return String.format("Untrusted Identity for \"%s\"", identifier);
}
return null;
}
for (var error : errors) {
message.append(error).append("\n");
}
- throw new IOErrorException(message.toString());
+ throw new IOErrorException(message.toString(), null);
}
}