From 9a9dd3b217860f7b34bba36cb72a0a69356e5924 Mon Sep 17 00:00:00 2001 From: AsamK Date: Sun, 22 Aug 2021 19:28:13 +0200 Subject: [PATCH] Extend error information in json output for received messages from untrusted identity Fixes #91 --- .../org/asamk/signal/JsonReceiveMessageHandler.java | 3 ++- src/main/java/org/asamk/signal/json/JsonError.java | 4 ++++ .../org/asamk/signal/json/JsonMessageEnvelope.java | 13 ++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/asamk/signal/JsonReceiveMessageHandler.java b/src/main/java/org/asamk/signal/JsonReceiveMessageHandler.java index 4cade799..73c88947 100644 --- a/src/main/java/org/asamk/signal/JsonReceiveMessageHandler.java +++ b/src/main/java/org/asamk/signal/JsonReceiveMessageHandler.java @@ -28,8 +28,9 @@ public class JsonReceiveMessageHandler implements Manager.ReceiveMessageHandler if (exception != null) { object.put("error", new JsonError(exception)); } + if (envelope != null) { - object.put("envelope", new JsonMessageEnvelope(envelope, content, m)); + object.put("envelope", new JsonMessageEnvelope(envelope, content, exception, m)); } jsonWriter.write(object); diff --git a/src/main/java/org/asamk/signal/json/JsonError.java b/src/main/java/org/asamk/signal/json/JsonError.java index d8b3e5f5..45274dea 100644 --- a/src/main/java/org/asamk/signal/json/JsonError.java +++ b/src/main/java/org/asamk/signal/json/JsonError.java @@ -7,7 +7,11 @@ public class JsonError { @JsonProperty final String message; + @JsonProperty + final String type; + public JsonError(Throwable exception) { this.message = exception.getMessage(); + this.type = exception.getClass().getSimpleName(); } } diff --git a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java index c7a3f891..e53b5ca5 100644 --- a/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java +++ b/src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.asamk.Signal; import org.asamk.signal.manager.Manager; +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.util.InvalidNumberException; @@ -59,7 +60,9 @@ public class JsonMessageEnvelope { @JsonInclude(JsonInclude.Include.NON_NULL) final JsonTypingMessage typingMessage; - public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) { + public JsonMessageEnvelope( + SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception, Manager m + ) { if (!envelope.isUnidentifiedSender() && envelope.hasSource()) { var source = envelope.getSourceAddress(); this.source = getLegacyIdentifier(source); @@ -74,6 +77,14 @@ public class JsonMessageEnvelope { 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; -- 2.50.1