]> nmode's Git Repositories - signal-cli/commitdiff
Fix handling of attachments in JSON RPC (#1109)
authorced-b <cedric@cos.flag.org>
Thu, 24 Nov 2022 16:29:45 +0000 (11:29 -0500)
committerGitHub <noreply@github.com>
Thu, 24 Nov 2022 16:29:45 +0000 (17:29 +0100)
* Fix handling of attachments in JSON RPC

It turns out that using a custom serializer on an
input stream did not work well. For one the stream seems
to be getting closed before the JSON gets written. But
also the method for writing it was throwing an
UnsupportedOperationException further down in Jackson.

The above simplifies the matter by simply outputting the
Base64 string first and then setting it on the model.

* Add missing files to attachment fix

Co-authored-by: cedb <cedb@keylimebox.org>
src/main/java/org/asamk/signal/commands/GetAttachmentCommand.java
src/main/java/org/asamk/signal/json/JsonAttachmentData.java
src/main/java/org/asamk/signal/json/JsonStreamSerializer.java [deleted file]

index 6deed90a4b1d9fb2a63bd9f143e7cda74d43ad9f..f2f0450ca7f5236537d49e9871db92523031ce71 100644 (file)
@@ -40,12 +40,12 @@ public class GetAttachmentCommand implements JsonRpcLocalCommand {
         final var id = ns.getString("id");
 
         try (InputStream attachment = m.retrieveAttachment(id)) {
+            final var bytes = attachment.readAllBytes();
+            final var base64 = Base64.getEncoder().encodeToString(bytes);
             if (outputWriter instanceof PlainTextWriter writer) {
-                final var bytes = attachment.readAllBytes();
-                final var base64 = Base64.getEncoder().encodeToString(bytes);
                 writer.println(base64);
             } else if (outputWriter instanceof JsonWriter writer) {
-                writer.write(new JsonAttachmentData(attachment));
+                writer.write(new JsonAttachmentData(base64));
             }
         } catch (FileNotFoundException ex) {
             throw new UserErrorException("Could not find attachment with ID: " + id, ex);
index fd759674d01e750f1f674fedde733f40fae84d5c..05a90c214b5995f074b616890887d039d63e8b9b 100644 (file)
@@ -1,9 +1,5 @@
 package org.asamk.signal.json;
 
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-import java.io.InputStream;
-
 public record JsonAttachmentData(
-        @JsonSerialize(using = JsonStreamSerializer.class) InputStream data
+        String data
 ) {}
diff --git a/src/main/java/org/asamk/signal/json/JsonStreamSerializer.java b/src/main/java/org/asamk/signal/json/JsonStreamSerializer.java
deleted file mode 100644 (file)
index 4cd2797..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.asamk.signal.json;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-public class JsonStreamSerializer extends JsonSerializer<InputStream> {
-
-    @Override
-    public void serialize(
-            final InputStream value, final JsonGenerator jsonGenerator, final SerializerProvider serializers
-    ) throws IOException {
-        jsonGenerator.writeBinary(value, -1);
-    }
-}