]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/util/ErrorUtils.java
Include recipient identifier in send error message
[signal-cli] / src / main / java / org / asamk / signal / util / ErrorUtils.java
index e245492588f751ef82d2b967f44c6b5bb955f0cc..3ca731630f0e05ccbf60ee29ee4415df5ee636a7 100644 (file)
@@ -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<RecipientIdentifier, List<SendMessageResult>> mapResults
     ) throws CommandException {
-        List<String> errors = getErrorMessagesFromSendMessageResults(mapResults);
+        var errors = getErrorMessagesFromSendMessageResults(mapResults);
         handleSendMessageResultErrors(errors);
     }
 
@@ -38,44 +32,37 @@ public class ErrorUtils {
     }
 
     public static List<String> getErrorMessagesFromSendMessageResults(final Map<RecipientIdentifier, List<SendMessageResult>> 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<String> getErrorMessagesFromSendMessageResults(Collection<SendMessageResult> results) {
-        var errors = new ArrayList<String>();
-        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.\n"
                             + (
                             failure.getOptions().contains(ProofRequiredException.Option.RECAPTCHA)
-                                    ?
-                                    "To get the captcha token, go to https://signalcaptchas.org/registration/generate.html\n"
-                                            + "Check the developer tools (F12) console for a failed redirect to signalcaptcha://\n"
-                                            + "Everything after signalcaptcha:// is the captcha token.\n"
-                                            + "Use the following command to submit the captcha token:\n"
-                                            + "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,
@@ -85,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;
     }