]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/commands/SendCommand.java
Fix NoSuchElementException in json serialization for messages from an untrusted identity
[signal-cli] / src / main / java / org / asamk / signal / commands / SendCommand.java
index 74209feb54d8cbb8ec5e74b3d0d206532445f9e5..5e81047ae520ccd5f175523a83d0b47e4661a81c 100644 (file)
@@ -7,8 +7,8 @@ import net.sourceforge.argparse4j.inf.Subparser;
 import org.asamk.signal.commands.exceptions.CommandException;
 import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
 import org.asamk.signal.commands.exceptions.UserErrorException;
-import org.asamk.signal.manager.AttachmentInvalidException;
 import org.asamk.signal.manager.Manager;
+import org.asamk.signal.manager.api.AttachmentInvalidException;
 import org.asamk.signal.manager.api.InvalidStickerException;
 import org.asamk.signal.manager.api.Message;
 import org.asamk.signal.manager.api.RecipientIdentifier;
@@ -51,7 +51,11 @@ public class SendCommand implements JsonRpcLocalCommand {
                 .help("Send the message to self without notification.")
                 .action(Arguments.storeTrue());
 
-        subparser.addArgument("-m", "--message").help("Specify the message, if missing standard input is used.");
+        var mut = subparser.addMutuallyExclusiveGroup();
+        mut.addArgument("-m", "--message").help("Specify the message to be sent.");
+        mut.addArgument("--message-from-stdin")
+                .action(Arguments.storeTrue())
+                .help("Read the message from standard input.");
         subparser.addArgument("-a", "--attachment").nargs("*").help("Add file as attachment");
         subparser.addArgument("-e", "--end-session", "--endsession")
                 .help("Clear session state and send end session message.")
@@ -107,16 +111,13 @@ public class SendCommand implements JsonRpcLocalCommand {
         final var sticker = stickerString == null ? null : parseSticker(stickerString);
 
         var messageText = ns.getString("message");
-        if (messageText == null) {
-            if (sticker != null) {
-                messageText = "";
-            } else {
-                logger.debug("Reading message from stdin...");
-                try {
-                    messageText = IOUtils.readAll(System.in, Charset.defaultCharset());
-                } catch (IOException e) {
-                    throw new UserErrorException("Failed to read message from stdin: " + e.getMessage());
-                }
+        final var readMessageFromStdin = ns.getBoolean("message-from-stdin") == Boolean.TRUE;
+        if (readMessageFromStdin || (messageText == null && sticker == null)) {
+            logger.debug("Reading message from stdin...");
+            try {
+                messageText = IOUtils.readAll(System.in, Charset.defaultCharset());
+            } catch (IOException e) {
+                throw new UserErrorException("Failed to read message from stdin: " + e.getMessage());
             }
         }
 
@@ -146,7 +147,7 @@ public class SendCommand implements JsonRpcLocalCommand {
         }
 
         try {
-            var results = m.sendMessage(new Message(messageText,
+            var results = m.sendMessage(new Message(messageText == null ? "" : messageText,
                     attachments,
                     mentions,
                     Optional.ofNullable(quote),