X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/c6395b9f35a4229d297aef063597bc96919a7f36..b09677a46c4ecf07f305892b51a927e4d7341793:/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 149b16c0..fb0509c6 100644 --- a/src/main/java/org/asamk/signal/util/ErrorUtils.java +++ b/src/main/java/org/asamk/signal/util/ErrorUtils.java @@ -1,38 +1,34 @@ package org.asamk.signal.util; import org.asamk.signal.PlainTextWriter; -import org.asamk.signal.manager.groups.GroupIdFormatException; -import org.asamk.signal.manager.groups.GroupNotFoundException; -import org.asamk.signal.manager.groups.NotAGroupMemberException; +import org.asamk.signal.commands.exceptions.CommandException; +import org.asamk.signal.commands.exceptions.IOErrorException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.whispersystems.signalservice.api.messages.SendMessageResult; -import org.whispersystems.signalservice.api.util.InvalidNumberException; +import org.whispersystems.signalservice.api.push.exceptions.ProofRequiredException; -import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; + +import static org.asamk.signal.util.Util.getLegacyIdentifier; public class ErrorUtils { - private ErrorUtils() { - } + private final static Logger logger = LoggerFactory.getLogger(ErrorUtils.class); - public static void handleAssertionError(AssertionError e) { - System.err.println("Failed to send/receive message (Assertion): " + e.getMessage()); - e.printStackTrace(); - System.err.println( - "If you use an Oracle JRE please check if you have unlimited strength crypto enabled, see README"); + private ErrorUtils() { } - public static int handleTimestampAndSendMessageResults( - PlainTextWriter writer, - long timestamp, - List results - ) throws IOException { + public static void handleTimestampAndSendMessageResults( + PlainTextWriter writer, long timestamp, List results + ) throws CommandException { if (timestamp != 0) { writer.println("{}", timestamp); } var errors = getErrorMessagesFromSendMessageResults(results); - return handleSendMessageResultErrors(errors); + handleSendMessageResultErrors(errors); } public static List getErrorMessagesFromSendMessageResults(List results) { @@ -48,49 +44,37 @@ public class ErrorUtils { } public static String getErrorMessageFromSendMessageResult(SendMessageResult result) { + var identifier = getLegacyIdentifier(result.getAddress()); if (result.isNetworkFailure()) { - return String.format("Network failure for \"%s\"", result.getAddress().getLegacyIdentifier()); + return String.format("Network failure for \"%s\"", identifier); } else if (result.isUnregisteredFailure()) { - return String.format("Unregistered user \"%s\"", result.getAddress().getLegacyIdentifier()); + return String.format("Unregistered user \"%s\"", identifier); } else if (result.getIdentityFailure() != null) { - return String.format("Untrusted Identity for \"%s\"", result.getAddress().getLegacyIdentifier()); + return String.format("Untrusted Identity for \"%s\"", identifier); + } else if (result.getProofRequiredFailure() != null) { + final var failure = result.getProofRequiredFailure(); + return String.format( + "CAPTCHA proof required for sending to \"%s\", available options \"%s\" with token \"%s\", or wait \"%d\" seconds", + identifier, + failure.getOptions() + .stream() + .map(ProofRequiredException.Option::toString) + .collect(Collectors.joining(", ")), + failure.getToken(), + failure.getRetryAfterSeconds()); } return null; } - private static int handleSendMessageResultErrors(List errors) { + private static void handleSendMessageResultErrors(List errors) throws CommandException { if (errors.size() == 0) { - return 0; + return; } - System.err.println("Failed to send (some) messages:"); + var message = new StringBuilder(); + message.append("Failed to send (some) messages:\n"); for (var error : errors) { - System.err.println(error); + message.append(error).append("\n"); } - return 3; - } - - public static void handleIOException(IOException e) { - System.err.println("Failed to send message: " + e.getMessage()); - } - - public static void handleGroupNotFoundException(GroupNotFoundException e) { - System.err.println("Failed to send to group: " + e.getMessage()); - System.err.println("Aborting sending."); - } - - public static void handleNotAGroupMemberException(NotAGroupMemberException e) { - System.err.println("Failed to send to group: " + e.getMessage()); - System.err.println("Update the group on another device to readd the user to this group."); - System.err.println("Aborting sending."); - } - - public static void handleGroupIdFormatException(GroupIdFormatException e) { - System.err.println(e.getMessage()); - System.err.println("Aborting sending."); - } - - public static void handleInvalidNumberException(InvalidNumberException e) { - System.err.println("Failed to parse recipient: " + e.getMessage()); - System.err.println("Aborting sending."); + throw new IOErrorException(message.toString()); } }