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
.help("Retrieve an already downloaded attachment base64 encoded.");
30 subparser
.addArgument("--id").required(true).help("The ID of the attachment file.");
31 var mut
= subparser
.addMutuallyExclusiveGroup().required(true);
32 mut
.addArgument("--recipient").help("Sender of the attachment");
33 mut
.addArgument("-g", "--group-id").help("Group in which the attachment was received");
37 public void handleCommand(
38 final Namespace ns
, final Manager m
, final OutputWriter outputWriter
39 ) throws CommandException
{
41 final var id
= ns
.getString("id");
43 try (InputStream attachment
= m
.retrieveAttachment(id
)) {
44 final var bytes
= attachment
.readAllBytes();
45 final var base64
= Base64
.getEncoder().encodeToString(bytes
);
46 switch (outputWriter
) {
47 case PlainTextWriter writer
-> writer
.println(base64
);
48 case JsonWriter writer
-> 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
);