]>
nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
1 package org
.asamk
.signal
.manager
.api
;
3 import org
.slf4j
.Logger
;
4 import org
.slf4j
.LoggerFactory
;
5 import org
.whispersystems
.signalservice
.api
.util
.PhoneNumberFormatter
;
6 import org
.whispersystems
.signalservice
.api
.util
.UuidUtil
;
10 public sealed interface RecipientIdentifier
{
12 String
getIdentifier();
14 record NoteToSelf() implements RecipientIdentifier
{
16 public static final NoteToSelf INSTANCE
= new NoteToSelf();
19 public String
getIdentifier() {
20 return "Note-To-Self";
24 sealed interface Single
extends RecipientIdentifier
{
26 static Single
fromString(String identifier
, String localNumber
) throws InvalidNumberException
{
28 if (UuidUtil
.isUuid(identifier
)) {
29 return new Uuid(UUID
.fromString(identifier
));
32 if (identifier
.startsWith("u:")) {
33 return new Username(identifier
.substring(2));
36 final var normalizedNumber
= PhoneNumberFormatter
.formatNumber(identifier
, localNumber
);
37 if (!normalizedNumber
.equals(identifier
)) {
38 final Logger logger
= LoggerFactory
.getLogger(RecipientIdentifier
.class);
39 logger
.debug("Normalized number {} to {}.", identifier
, normalizedNumber
);
41 return new Number(normalizedNumber
);
42 } catch (org
.whispersystems
.signalservice
.api
.util
.InvalidNumberException e
) {
43 throw new InvalidNumberException(e
.getMessage(), e
);
47 static Single
fromAddress(RecipientAddress address
) {
48 if (address
.number().isPresent()) {
49 return new Number(address
.number().get());
50 } else if (address
.aci().isPresent()) {
51 return new Uuid(UUID
.fromString(address
.aci().get()));
52 } else if (address
.username().isPresent()) {
53 return new Username(address
.username().get());
55 throw new AssertionError("RecipientAddress without identifier");
58 RecipientAddress
toPartialRecipientAddress();
61 record Uuid(UUID uuid
) implements Single
{
64 public String
getIdentifier() {
65 return uuid
.toString();
69 public RecipientAddress
toPartialRecipientAddress() {
70 return new RecipientAddress(uuid
);
74 record Number(String number
) implements Single
{
77 public String
getIdentifier() {
82 public RecipientAddress
toPartialRecipientAddress() {
83 return new RecipientAddress(number
);
87 record Username(String username
) implements Single
{
90 public String
getIdentifier() {
91 return "u:" + username
;
95 public RecipientAddress
toPartialRecipientAddress() {
96 return new RecipientAddress(null, null, null, username
);
100 record Group(GroupId groupId
) implements RecipientIdentifier
{
103 public String
getIdentifier() {
104 return groupId
.toBase64();