1 package org
.asamk
.signal
.json
;
3 import com
.fasterxml
.jackson
.annotation
.JsonInclude
;
5 import org
.asamk
.Signal
;
6 import org
.asamk
.signal
.manager
.Manager
;
7 import org
.asamk
.signal
.manager
.UntrustedIdentityException
;
8 import org
.asamk
.signal
.manager
.api
.RecipientIdentifier
;
9 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceContent
;
10 import org
.whispersystems
.signalservice
.api
.messages
.SignalServiceEnvelope
;
11 import org
.whispersystems
.signalservice
.api
.util
.InvalidNumberException
;
13 import java
.util
.List
;
15 import static org
.asamk
.signal
.util
.Util
.getLegacyIdentifier
;
17 public record JsonMessageEnvelope(
18 @Deprecated String source
,
24 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonDataMessage dataMessage
,
25 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonSyncMessage syncMessage
,
26 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonCallMessage callMessage
,
27 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonReceiptMessage receiptMessage
,
28 @JsonInclude(JsonInclude
.Include
.NON_NULL
) JsonTypingMessage typingMessage
31 public static JsonMessageEnvelope
from(
32 SignalServiceEnvelope envelope
, SignalServiceContent content
, Throwable exception
, Manager m
35 final String sourceNumber
;
36 final String sourceUuid
;
37 final Integer sourceDevice
;
38 if (!envelope
.isUnidentifiedSender() && envelope
.hasSourceUuid()) {
39 final var sourceAddress
= m
.resolveSignalServiceAddress(envelope
.getSourceAddress());
40 source
= getLegacyIdentifier(sourceAddress
);
41 sourceNumber
= sourceAddress
.getNumber().orNull();
42 sourceUuid
= sourceAddress
.getUuid().toString();
43 sourceDevice
= envelope
.getSourceDevice();
44 } else if (envelope
.isUnidentifiedSender() && content
!= null) {
45 final var sender
= m
.resolveSignalServiceAddress(content
.getSender());
46 source
= getLegacyIdentifier(sender
);
47 sourceNumber
= sender
.getNumber().orNull();
48 sourceUuid
= sender
.getUuid().toString();
49 sourceDevice
= content
.getSenderDevice();
50 } else if (exception
instanceof UntrustedIdentityException e
) {
51 final var sender
= m
.resolveSignalServiceAddress(e
.getSender());
52 source
= getLegacyIdentifier(sender
);
53 sourceNumber
= sender
.getNumber().orNull();
54 sourceUuid
= sender
.getUuid().toString();
55 sourceDevice
= e
.getSenderDevice();
64 name
= m
.getContactOrProfileName(RecipientIdentifier
.Single
.fromString(source
, m
.getSelfNumber()));
65 } catch (InvalidNumberException
| NullPointerException e
) {
68 final var sourceName
= name
;
69 final var timestamp
= envelope
.getTimestamp();
70 final JsonReceiptMessage receiptMessage
;
71 if (envelope
.isReceipt()) {
72 receiptMessage
= JsonReceiptMessage
.deliveryReceipt(timestamp
, List
.of(timestamp
));
73 } else if (content
!= null && content
.getReceiptMessage().isPresent()) {
74 receiptMessage
= JsonReceiptMessage
.from(content
.getReceiptMessage().get());
76 receiptMessage
= null;
78 final var typingMessage
= content
!= null && content
.getTypingMessage().isPresent() ? JsonTypingMessage
.from(
79 content
.getTypingMessage().get()) : null;
81 final var dataMessage
= content
!= null && content
.getDataMessage().isPresent()
82 ? JsonDataMessage
.from(content
.getDataMessage().get(), m
)
84 final var syncMessage
= content
!= null && content
.getSyncMessage().isPresent()
85 ? JsonSyncMessage
.from(content
.getSyncMessage().get(), m
)
87 final var callMessage
= content
!= null && content
.getCallMessage().isPresent()
88 ? JsonCallMessage
.from(content
.getCallMessage().get())
91 return new JsonMessageEnvelope(source
,
104 public static JsonMessageEnvelope
from(Signal
.MessageReceived messageReceived
) {
105 return new JsonMessageEnvelope(messageReceived
.getSource(),
110 messageReceived
.getTimestamp(),
111 JsonDataMessage
.from(messageReceived
),
118 public static JsonMessageEnvelope
from(Signal
.ReceiptReceived receiptReceived
) {
119 return new JsonMessageEnvelope(receiptReceived
.getSender(),
124 receiptReceived
.getTimestamp(),
128 JsonReceiptMessage
.deliveryReceipt(receiptReceived
.getTimestamp(),
129 List
.of(receiptReceived
.getTimestamp())),
133 public static JsonMessageEnvelope
from(Signal
.SyncMessageReceived messageReceived
) {
134 return new JsonMessageEnvelope(messageReceived
.getSource(),
139 messageReceived
.getTimestamp(),
141 JsonSyncMessage
.from(messageReceived
),