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