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
.manager
.api
.UnregisteredRecipientException
;
12 import org
.asamk
.signal
.output
.JsonWriter
;
13 import org
.asamk
.signal
.output
.OutputWriter
;
14 import org
.asamk
.signal
.output
.PlainTextWriter
;
15 import org
.asamk
.signal
.util
.CommandUtil
;
17 import java
.io
.FileNotFoundException
;
18 import java
.io
.IOException
;
19 import java
.io
.InputStream
;
20 import java
.util
.Base64
;
22 public class GetAvatarCommand
implements JsonRpcLocalCommand
{
25 public String
getName() {
30 public void attachToSubparser(final Subparser subparser
) {
31 subparser
.help("Retrieve the avatar of a contact, contact's profile or group base64 encoded.");
32 var mut
= subparser
.addMutuallyExclusiveGroup().required(true);
33 mut
.addArgument("-c", "--contact").help("Get a contact avatar");
34 mut
.addArgument("-p", "--profile").help("Get a profile avatar");
35 mut
.addArgument("-g", "--group-id").help("Get a group avatar");
39 public void handleCommand(
42 final OutputWriter outputWriter
43 ) throws CommandException
{
44 final var contactRecipient
= ns
.getString("contact");
45 final var profileRecipient
= ns
.getString("profile");
46 final var groupId
= ns
.getString("groupId");
48 final InputStream data
;
50 if (contactRecipient
!= null) {
51 data
= m
.retrieveContactAvatar(CommandUtil
.getSingleRecipientIdentifier(contactRecipient
,
53 } else if (profileRecipient
!= null) {
54 data
= m
.retrieveProfileAvatar(CommandUtil
.getSingleRecipientIdentifier(profileRecipient
,
57 data
= m
.retrieveGroupAvatar(CommandUtil
.getGroupId(groupId
));
59 } catch (FileNotFoundException ex
) {
60 throw new UserErrorException("Could not find avatar", ex
);
61 } catch (IOException ex
) {
62 throw new UnexpectedErrorException("An error occurred reading avatar", ex
);
63 } catch (UnregisteredRecipientException e
) {
64 throw new UserErrorException("The user " + e
.getSender().getIdentifier() + " is not registered.");
68 final var bytes
= data
.readAllBytes();
69 final var base64
= Base64
.getEncoder().encodeToString(bytes
);
70 switch (outputWriter
) {
71 case PlainTextWriter writer
-> writer
.println(base64
);
72 case JsonWriter writer
-> writer
.write(new JsonAttachmentData(base64
));
74 } catch (IOException ex
) {
75 throw new UnexpectedErrorException("An error occurred reading avatar", ex
);