]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/api/RecipientIdentifier.java
Fix inspection issues
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / api / RecipientIdentifier.java
1 package org.asamk.signal.manager.api;
2
3 import org.asamk.signal.manager.groups.GroupId;
4 import org.asamk.signal.manager.storage.recipients.RecipientAddress;
5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory;
7 import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
8 import org.whispersystems.signalservice.api.util.UuidUtil;
9
10 import java.util.UUID;
11
12 public sealed interface RecipientIdentifier {
13
14 String getIdentifier();
15
16 record NoteToSelf() implements RecipientIdentifier {
17
18 public static final NoteToSelf INSTANCE = new NoteToSelf();
19
20 @Override
21 public String getIdentifier() {
22 return "Note-To-Self";
23 }
24 }
25
26 sealed interface Single extends RecipientIdentifier {
27
28 static Single fromString(String identifier, String localNumber) throws InvalidNumberException {
29 try {
30 if (UuidUtil.isUuid(identifier)) {
31 return new Uuid(UUID.fromString(identifier));
32 }
33
34 final var normalizedNumber = PhoneNumberFormatter.formatNumber(identifier, localNumber);
35 if (!normalizedNumber.equals(identifier)) {
36 final Logger logger = LoggerFactory.getLogger(RecipientIdentifier.class);
37 logger.debug("Normalized number {} to {}.", identifier, normalizedNumber);
38 }
39 return new Number(normalizedNumber);
40 } catch (org.whispersystems.signalservice.api.util.InvalidNumberException e) {
41 throw new InvalidNumberException(e.getMessage(), e);
42 }
43 }
44
45 static Single fromAddress(RecipientAddress address) {
46 if (address.number().isPresent()) {
47 return new Number(address.number().get());
48 } else if (address.uuid().isPresent()) {
49 return new Uuid(address.uuid().get());
50 }
51 throw new AssertionError("RecipientAddress without identifier");
52 }
53
54 RecipientAddress toPartialRecipientAddress();
55 }
56
57 record Uuid(UUID uuid) implements Single {
58
59 @Override
60 public String getIdentifier() {
61 return uuid.toString();
62 }
63
64 @Override
65 public RecipientAddress toPartialRecipientAddress() {
66 return new RecipientAddress(uuid);
67 }
68 }
69
70 record Number(String number) implements Single {
71
72 @Override
73 public String getIdentifier() {
74 return number;
75 }
76
77 @Override
78 public RecipientAddress toPartialRecipientAddress() {
79 return new RecipientAddress(null, number);
80 }
81 }
82
83 record Group(GroupId groupId) implements RecipientIdentifier {
84
85 @Override
86 public String getIdentifier() {
87 return groupId.toBase64();
88 }
89 }
90 }