X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/44851887894ed9162006ad9b12309e732aa3e876..5cccf521032954d7ad8e3f70e3cbef2ce1293e85:/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java diff --git a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java index 5e5e6a33..264b7fce 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -1,69 +1,79 @@ package org.asamk.signal.json; -import org.asamk.Signal; -import org.whispersystems.signalservice.api.messages.SignalServiceContent; -import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import com.fasterxml.jackson.annotation.JsonInclude; -import java.util.List; +import org.asamk.signal.manager.Manager; +import org.asamk.signal.manager.api.UntrustedIdentityException; +import org.asamk.signal.manager.api.MessageEnvelope; +import org.asamk.signal.manager.api.RecipientIdentifier; +import org.asamk.signal.manager.storage.recipients.RecipientAddress; -public class JsonMessageEnvelope { +import java.util.UUID; - String source; - int sourceDevice; - String relay; - long timestamp; - JsonDataMessage dataMessage; - JsonSyncMessage syncMessage; - JsonCallMessage callMessage; - JsonReceiptMessage receiptMessage; +public record JsonMessageEnvelope( + @Deprecated String source, + String sourceNumber, + String sourceUuid, + String sourceName, + Integer sourceDevice, + long timestamp, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage, + @JsonInclude(JsonInclude.Include.NON_NULL) JsonTypingMessage typingMessage +) { - public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content) { - if (!envelope.isUnidentifiedSender() && envelope.hasSource()) { - SignalServiceAddress source = envelope.getSourceAddress(); - this.source = source.getLegacyIdentifier(); - this.relay = source.getRelay().isPresent() ? source.getRelay().get() : null; + public static JsonMessageEnvelope from( + MessageEnvelope envelope, Throwable exception, Manager m + ) { + final RecipientAddress sourceAddress; + final Integer sourceDevice; + if (envelope.sourceAddress().isPresent()) { + sourceAddress = envelope.sourceAddress().get(); + sourceDevice = envelope.sourceDevice(); + } else if (exception instanceof UntrustedIdentityException e) { + sourceAddress = e.getSender(); + sourceDevice = e.getSenderDevice(); + } else { + sourceAddress = null; + sourceDevice = null; } - this.sourceDevice = envelope.getSourceDevice(); - this.timestamp = envelope.getTimestamp(); - if (envelope.isReceipt()) { - this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp)); - } - if (content != null) { - if (envelope.isUnidentifiedSender()) { - this.source = content.getSender().getLegacyIdentifier(); - this.sourceDevice = content.getSenderDevice(); - } - if (content.getDataMessage().isPresent()) { - this.dataMessage = new JsonDataMessage(content.getDataMessage().get()); - } - if (content.getSyncMessage().isPresent()) { - this.syncMessage = new JsonSyncMessage(content.getSyncMessage().get()); - } - if (content.getCallMessage().isPresent()) { - this.callMessage = new JsonCallMessage(content.getCallMessage().get()); - } - if (content.getReceiptMessage().isPresent()) { - this.receiptMessage = new JsonReceiptMessage(content.getReceiptMessage().get()); - } - } - } - public JsonMessageEnvelope(Signal.MessageReceived messageReceived) { - source = messageReceived.getSender(); - timestamp = messageReceived.getTimestamp(); - dataMessage = new JsonDataMessage(messageReceived); - } + final String source; + final String sourceNumber; + final String sourceUuid; + final String sourceName; + if (sourceAddress != null) { + source = sourceAddress.getLegacyIdentifier(); + sourceNumber = sourceAddress.number().orElse(null); + sourceUuid = sourceAddress.uuid().map(UUID::toString).orElse(null); + sourceName = m.getContactOrProfileName(RecipientIdentifier.Single.fromAddress(envelope.sourceAddress() + .get())); + } else { + source = null; + sourceNumber = null; + sourceUuid = null; + sourceName = null; + } + final var timestamp = envelope.timestamp(); + final var receiptMessage = envelope.receipt().map(JsonReceiptMessage::from).orElse(null); + final var typingMessage = envelope.typing().map(JsonTypingMessage::from).orElse(null); - public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) { - source = receiptReceived.getSender(); - timestamp = receiptReceived.getTimestamp(); - receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp)); - } + final var dataMessage = envelope.data().map(JsonDataMessage::from).orElse(null); + final var syncMessage = envelope.sync().map(JsonSyncMessage::from).orElse(null); + final var callMessage = envelope.call().map(JsonCallMessage::from).orElse(null); - public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) { - source = messageReceived.getSource(); - timestamp = messageReceived.getTimestamp(); - syncMessage = new JsonSyncMessage(messageReceived); + return new JsonMessageEnvelope(source, + sourceNumber, + sourceUuid, + sourceName, + sourceDevice, + timestamp, + dataMessage, + syncMessage, + callMessage, + receiptMessage, + typingMessage); } }