X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/62687d103fab1ade650b920008060c220361d581..1ea4309a2ac1e1c368f7ce6a3e1b5dcdf0e0635a:/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java diff --git a/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java b/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java index bb46a89d..cf2b282f 100644 --- a/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java +++ b/src/main/java/org/asamk/signal/util/SendMessageResultUtils.java @@ -1,5 +1,8 @@ package org.asamk.signal.util; +import org.asamk.signal.commands.exceptions.CommandException; +import org.asamk.signal.commands.exceptions.UntrustedKeyErrorException; +import org.asamk.signal.commands.exceptions.UserErrorException; import org.asamk.signal.json.JsonSendMessageResult; import org.asamk.signal.manager.api.ProofRequiredException; import org.asamk.signal.manager.api.RecipientIdentifier; @@ -33,7 +36,9 @@ public class SendMessageResultUtils { } } - public static void outputResult(final OutputWriter outputWriter, final SendMessageResults sendMessageResults) { + public static void outputResult( + final OutputWriter outputWriter, final SendMessageResults sendMessageResults + ) throws CommandException { if (outputWriter instanceof PlainTextWriter writer) { var errors = getErrorMessagesFromSendMessageResults(sendMessageResults.results()); printSendMessageResultErrors(writer, errors); @@ -43,6 +48,13 @@ public class SendMessageResultUtils { var results = getJsonSendMessageResults(sendMessageResults.results()); writer.write(Map.of("timestamp", sendMessageResults.timestamp(), "results", results)); } + if (!sendMessageResults.hasSuccess()) { + if (sendMessageResults.hasOnlyUntrustedIdentity()) { + throw new UntrustedKeyErrorException("Failed to send message due to untrusted identities"); + } else { + throw new UserErrorException("Failed to send message"); + } + } } public static List getErrorMessagesFromSendMessageResults(final Map> mapResults) { @@ -72,11 +84,11 @@ public class SendMessageResultUtils { + ( 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""" + 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, @@ -88,6 +100,8 @@ public class SendMessageResultUtils { failure.getRetryAfterSeconds()); } else if (result.isNetworkFailure()) { return String.format("Network failure for \"%s\"", identifier); + } else if (result.isRateLimitFailure()) { + return String.format("Rate limit failure for \"%s\"", identifier); } else if (result.isUnregisteredFailure()) { return String.format("Unregistered user \"%s\"", identifier); } else if (result.isIdentityFailure()) { @@ -106,7 +120,7 @@ public class SendMessageResultUtils { } } - public static List getJsonSendMessageResults(final Map> mapResults) { + private static List getJsonSendMessageResults(final Map> mapResults) { return mapResults.entrySet().stream().flatMap(entry -> { final var groupId = entry.getKey() instanceof RecipientIdentifier.Group g ? g.groupId() : null; return entry.getValue().stream().map(r -> JsonSendMessageResult.from(r, groupId));