1 package org
.asamk
.signal
.commands
;
3 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
4 import net
.sourceforge
.argparse4j
.inf
.Subparser
;
6 import org
.asamk
.signal
.commands
.exceptions
.CommandException
;
7 import org
.asamk
.signal
.commands
.exceptions
.UnexpectedErrorException
;
8 import org
.asamk
.signal
.commands
.exceptions
.UserErrorException
;
9 import org
.asamk
.signal
.json
.JsonAttachmentData
;
10 import org
.asamk
.signal
.manager
.Manager
;
11 import org
.asamk
.signal
.output
.JsonWriter
;
12 import org
.asamk
.signal
.output
.OutputWriter
;
13 import org
.asamk
.signal
.output
.PlainTextWriter
;
15 import java
.io
.FileNotFoundException
;
16 import java
.io
.IOException
;
17 import java
.io
.InputStream
;
18 import java
.util
.Base64
;
20 public class GetAttachmentCommand
implements JsonRpcLocalCommand
{
23 public String
getName() {
24 return "getAttachment";
28 public void attachToSubparser(final Subparser subparser
) {
29 subparser
.addArgument("--id").required(true).help("The ID of the attachment file.");
30 var mut
= subparser
.addMutuallyExclusiveGroup().required(true);
31 mut
.addArgument("--recipient").help("Sender of the attachment");
32 mut
.addArgument("-g", "--group-id").help("Group in which the attachment was received");
36 public void handleCommand(
37 final Namespace ns
, final Manager m
, final OutputWriter outputWriter
38 ) throws CommandException
{
40 final var id
= ns
.getString("id");
42 try (InputStream attachment
= m
.retrieveAttachment(id
)) {
43 final var bytes
= attachment
.readAllBytes();
44 final var base64
= Base64
.getEncoder().encodeToString(bytes
);
45 if (outputWriter
instanceof PlainTextWriter writer
) {
46 writer
.println(base64
);
47 } else if (outputWriter
instanceof JsonWriter writer
) {
48 writer
.write(new JsonAttachmentData(base64
));
50 } catch (FileNotFoundException ex
) {
51 throw new UserErrorException("Could not find attachment with ID: " + id
, ex
);
52 } catch (IOException ex
) {
53 throw new UnexpectedErrorException("An error occurred reading attachment: " + id
, ex
);