X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/46a4c2c0d0a36b7f230fc2c2d47aa371a6e02d35..ca52c0103136bc1f0cb140c33e81ff17d47aec2e:/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 2a87d129..814952aa 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -5,21 +5,37 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.asamk.Signal; import org.asamk.signal.manager.Manager; +import org.asamk.signal.manager.api.RecipientIdentifier; +import org.signal.libsignal.metadata.ProtocolUntrustedIdentityException; import org.whispersystems.signalservice.api.messages.SignalServiceContent; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import org.whispersystems.signalservice.api.util.InvalidNumberException; import java.util.List; +import java.util.UUID; + +import static org.asamk.signal.util.Util.getLegacyIdentifier; public class JsonMessageEnvelope { @JsonProperty + @Deprecated final String source; + @JsonProperty + final String sourceNumber; + + @JsonProperty + final String sourceUuid; + + @JsonProperty + final String sourceName; + @JsonProperty final Integer sourceDevice; @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) final String relay; @JsonProperty @@ -41,21 +57,49 @@ public class JsonMessageEnvelope { @JsonInclude(JsonInclude.Include.NON_NULL) final JsonReceiptMessage receiptMessage; - public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) { + @JsonProperty + @JsonInclude(JsonInclude.Include.NON_NULL) + final JsonTypingMessage typingMessage; + + public JsonMessageEnvelope( + SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception, Manager m + ) { if (!envelope.isUnidentifiedSender() && envelope.hasSource()) { - SignalServiceAddress source = envelope.getSourceAddress(); - this.source = source.getLegacyIdentifier(); + var source = envelope.getSourceAddress(); + this.source = getLegacyIdentifier(source); + this.sourceNumber = source.getNumber().orNull(); + this.sourceUuid = source.getUuid().transform(UUID::toString).orNull(); this.sourceDevice = envelope.getSourceDevice(); this.relay = source.getRelay().orNull(); } else if (envelope.isUnidentifiedSender() && content != null) { - this.source = content.getSender().getLegacyIdentifier(); + final var source = content.getSender(); + this.source = getLegacyIdentifier(source); + this.sourceNumber = source.getNumber().orNull(); + this.sourceUuid = source.getUuid().transform(UUID::toString).orNull(); this.sourceDevice = content.getSenderDevice(); this.relay = null; + } else if (exception instanceof ProtocolUntrustedIdentityException) { + var e = (ProtocolUntrustedIdentityException) exception; + final var source = m.resolveSignalServiceAddress(e.getSender()); + this.source = getLegacyIdentifier(source); + this.sourceNumber = source.getNumber().orNull(); + this.sourceUuid = source.getUuid().transform(UUID::toString).orNull(); + this.sourceDevice = e.getSenderDevice(); + this.relay = null; } else { this.source = null; + this.sourceNumber = null; + this.sourceUuid = null; this.sourceDevice = null; this.relay = null; } + String name; + try { + name = m.getContactOrProfileName(RecipientIdentifier.Single.fromString(this.source, m.getUsername())); + } catch (InvalidNumberException | NullPointerException e) { + name = null; + } + this.sourceName = name; this.timestamp = envelope.getTimestamp(); if (envelope.isReceipt()) { this.receiptMessage = JsonReceiptMessage.deliveryReceipt(timestamp, List.of(timestamp)); @@ -64,6 +108,9 @@ public class JsonMessageEnvelope { } else { this.receiptMessage = null; } + this.typingMessage = content != null && content.getTypingMessage().isPresent() + ? new JsonTypingMessage(content.getTypingMessage().get()) + : null; this.dataMessage = content != null && content.getDataMessage().isPresent() ? new JsonDataMessage(content.getDataMessage().get(), m) @@ -78,6 +125,9 @@ public class JsonMessageEnvelope { public JsonMessageEnvelope(Signal.MessageReceived messageReceived) { source = messageReceived.getSender(); + sourceNumber = null; + sourceUuid = null; + sourceName = null; sourceDevice = null; relay = null; timestamp = messageReceived.getTimestamp(); @@ -85,10 +135,14 @@ public class JsonMessageEnvelope { dataMessage = new JsonDataMessage(messageReceived); syncMessage = null; callMessage = null; + typingMessage = null; } public JsonMessageEnvelope(Signal.ReceiptReceived receiptReceived) { source = receiptReceived.getSender(); + sourceNumber = null; + sourceUuid = null; + sourceName = null; sourceDevice = null; relay = null; timestamp = receiptReceived.getTimestamp(); @@ -96,10 +150,14 @@ public class JsonMessageEnvelope { dataMessage = null; syncMessage = null; callMessage = null; + typingMessage = null; } public JsonMessageEnvelope(Signal.SyncMessageReceived messageReceived) { source = messageReceived.getSource(); + sourceNumber = null; + sourceUuid = null; + sourceName = null; sourceDevice = null; relay = null; timestamp = messageReceived.getTimestamp(); @@ -107,5 +165,6 @@ public class JsonMessageEnvelope { dataMessage = null; syncMessage = new JsonSyncMessage(messageReceived); callMessage = null; + typingMessage = null; } }