]>
nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/util/ErrorUtils.java
1 package org
.asamk
.signal
.util
;
3 import org
.asamk
.signal
.commands
.exceptions
.CommandException
;
4 import org
.asamk
.signal
.commands
.exceptions
.IOErrorException
;
5 import org
.asamk
.signal
.manager
.api
.ProofRequiredException
;
6 import org
.asamk
.signal
.manager
.api
.RecipientIdentifier
;
7 import org
.asamk
.signal
.manager
.api
.SendMessageResult
;
8 import org
.slf4j
.Logger
;
9 import org
.slf4j
.LoggerFactory
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Collection
;
13 import java
.util
.List
;
15 import java
.util
.stream
.Collectors
;
17 public class ErrorUtils
{
19 private final static Logger logger
= LoggerFactory
.getLogger(ErrorUtils
.class);
21 private ErrorUtils() {
24 public static void handleSendMessageResults(
25 Map
<RecipientIdentifier
, List
<SendMessageResult
>> mapResults
26 ) throws CommandException
{
27 List
<String
> errors
= getErrorMessagesFromSendMessageResults(mapResults
);
28 handleSendMessageResultErrors(errors
);
31 public static void handleSendMessageResults(
32 Collection
<SendMessageResult
> results
33 ) throws CommandException
{
34 var errors
= getErrorMessagesFromSendMessageResults(results
);
35 handleSendMessageResultErrors(errors
);
38 public static List
<String
> getErrorMessagesFromSendMessageResults(final Map
<RecipientIdentifier
, List
<SendMessageResult
>> mapResults
) {
39 return mapResults
.values()
41 .flatMap(results
-> getErrorMessagesFromSendMessageResults(results
).stream())
42 .collect(Collectors
.toList());
45 public static List
<String
> getErrorMessagesFromSendMessageResults(Collection
<SendMessageResult
> results
) {
46 var errors
= new ArrayList
<String
>();
47 for (var result
: results
) {
48 var error
= getErrorMessageFromSendMessageResult(result
);
57 public static String
getErrorMessageFromSendMessageResult(SendMessageResult result
) {
58 var identifier
= result
.address().getLegacyIdentifier();
59 if (result
.proofRequiredFailure() != null) {
60 final var failure
= result
.proofRequiredFailure();
62 "CAPTCHA proof required for sending to \"%s\", available options \"%s\" with challenge token \"%s\", or wait \"%d\" seconds.\n"
64 failure
.getOptions().contains(ProofRequiredException
.Option
.RECAPTCHA
)
66 To get the captcha token, go to https://signalcaptchas.org/challenge/generate.html
67 Check the developer tools (F12) console for a failed redirect to signalcaptcha://
68 Everything after signalcaptcha:// is the captcha token.
69 Use the following command to submit the captcha token:
70 signal-cli submitRateLimitChallenge --challenge CHALLENGE_TOKEN --captcha CAPTCHA_TOKEN"""
76 .map(ProofRequiredException
.Option
::toString
)
77 .collect(Collectors
.joining(", ")),
79 failure
.getRetryAfterSeconds());
80 } else if (result
.isNetworkFailure()) {
81 return String
.format("Network failure for \"%s\"", identifier
);
82 } else if (result
.isUnregisteredFailure()) {
83 return String
.format("Unregistered user \"%s\"", identifier
);
84 } else if (result
.isIdentityFailure()) {
85 return String
.format("Untrusted Identity for \"%s\"", identifier
);
90 private static void handleSendMessageResultErrors(List
<String
> errors
) throws CommandException
{
91 if (errors
.size() == 0) {
94 var message
= new StringBuilder();
95 message
.append("Failed to send (some) messages:\n");
96 for (var error
: errors
) {
97 message
.append(error
).append("\n");
99 throw new IOErrorException(message
.toString(), null);