X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/a17262d9ff7379c4f1590a3669af52e7237144bb..ceafe96e81150991e538bf6f446124ecc15f149f:/src/main/java/org/asamk/signal/util/ErrorUtils.java diff --git a/src/main/java/org/asamk/signal/util/ErrorUtils.java b/src/main/java/org/asamk/signal/util/ErrorUtils.java index ef1956c3..3ca73163 100644 --- a/src/main/java/org/asamk/signal/util/ErrorUtils.java +++ b/src/main/java/org/asamk/signal/util/ErrorUtils.java @@ -2,31 +2,25 @@ package org.asamk.signal.util; 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.List; import java.util.Map; +import java.util.Objects; 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 void handleSendMessageResults( Map> mapResults ) throws CommandException { - List errors = getErrorMessagesFromSendMessageResults(mapResults); + var errors = getErrorMessagesFromSendMessageResults(mapResults); handleSendMessageResultErrors(errors); } @@ -38,36 +32,39 @@ public class ErrorUtils { } public static List getErrorMessagesFromSendMessageResults(final Map> mapResults) { - return mapResults.values() + return mapResults.entrySet() .stream() - .flatMap(results -> getErrorMessagesFromSendMessageResults(results).stream()) + .flatMap(entry -> entry.getValue() + .stream() + .map(ErrorUtils::getErrorMessageFromSendMessageResult) + .filter(Objects::nonNull) + .map(error -> entry.getKey().getIdentifier() + ": " + error)) .collect(Collectors.toList()); } public static List getErrorMessagesFromSendMessageResults(Collection results) { - var errors = new ArrayList(); - for (var result : results) { - var error = getErrorMessageFromSendMessageResult(result); - if (error != null) { - errors.add(error); - } - } - - return errors; + return results.stream() + .map(ErrorUtils::getErrorMessageFromSendMessageResult) + .filter(Objects::nonNull) + .collect(Collectors.toList()); } 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 challenge 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() @@ -75,6 +72,12 @@ public class ErrorUtils { .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; }