]> nmode's Git Repositories - signal-cli/commitdiff
Fix behavior for recipients with only UUIDs
authorAsamK <asamk@gmx.de>
Sun, 11 Oct 2020 08:41:56 +0000 (10:41 +0200)
committerAsamK <asamk@gmx.de>
Sun, 11 Oct 2020 09:15:34 +0000 (11:15 +0200)
Fixes #359

src/main/java/org/asamk/signal/JsonDbusReceiveMessageHandler.java
src/main/java/org/asamk/signal/ReceiveMessageHandler.java
src/main/java/org/asamk/signal/json/JsonGroupInfo.java
src/main/java/org/asamk/signal/json/JsonMessageEnvelope.java
src/main/java/org/asamk/signal/json/JsonSyncDataMessage.java
src/main/java/org/asamk/signal/json/JsonSyncMessage.java
src/main/java/org/asamk/signal/manager/Manager.java

index 0728b8719506b5c2ed5a3de851c457123572151b..5973d019fe1703d30d1707cd6fc0effdd512e08f 100644 (file)
@@ -12,6 +12,7 @@ import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
 import org.whispersystems.signalservice.api.messages.SignalServiceReceiptMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.SentTranscriptMessage;
 import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage;
+import org.whispersystems.signalservice.api.push.SignalServiceAddress;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,22 +35,23 @@ public class JsonDbusReceiveMessageHandler extends JsonReceiveMessageHandler {
                 conn.sendMessage(new Signal.ReceiptReceived(
                         objectPath,
                         envelope.getTimestamp(),
-                        !envelope.isUnidentifiedSender() && envelope.hasSource() ? envelope.getSourceE164().get() : content.getSender().getNumber().get()
+                        // A receipt envelope always has a source address
+                        envelope.getSourceAddress().getLegacyIdentifier()
                 ));
             } catch (DBusException e) {
                 e.printStackTrace();
             }
         } else if (content != null) {
+            final SignalServiceAddress sender = !envelope.isUnidentifiedSender() && envelope.hasSource() ? envelope.getSourceAddress() : content.getSender();
             if (content.getReceiptMessage().isPresent()) {
                 final SignalServiceReceiptMessage receiptMessage = content.getReceiptMessage().get();
                 if (receiptMessage.isDeliveryReceipt()) {
-                    final String sender = !envelope.isUnidentifiedSender() && envelope.hasSource() ? envelope.getSourceE164().get() : content.getSender().getNumber().get();
                     for (long timestamp : receiptMessage.getTimestamps()) {
                         try {
                             conn.sendMessage(new Signal.ReceiptReceived(
                                     objectPath,
                                     timestamp,
-                                    sender
+                                    sender.getLegacyIdentifier()
                             ));
                         } catch (DBusException e) {
                             e.printStackTrace();
@@ -66,7 +68,7 @@ public class JsonDbusReceiveMessageHandler extends JsonReceiveMessageHandler {
                         conn.sendMessage(new Signal.MessageReceived(
                                 objectPath,
                                 message.getTimestamp(),
-                                envelope.isUnidentifiedSender() || !envelope.hasSource() ? content.getSender().getNumber().get() : envelope.getSourceE164().get(),
+                                sender.getLegacyIdentifier(),
                                 message.getGroupContext().isPresent() && message.getGroupContext().get().getGroupV1().isPresent()
                                         ? message.getGroupContext().get().getGroupV1().get().getGroupId() : new byte[0],
                                 message.getBody().isPresent() ? message.getBody().get() : "",
@@ -80,15 +82,15 @@ public class JsonDbusReceiveMessageHandler extends JsonReceiveMessageHandler {
                 if (sync_message.getSent().isPresent()) {
                     SentTranscriptMessage transcript = sync_message.getSent().get();
 
-                    if (!envelope.isUnidentifiedSender() && envelope.hasSource() && (transcript.getDestination().isPresent() || transcript.getMessage().getGroupContext().isPresent())) {
+                    if (transcript.getDestination().isPresent() || transcript.getMessage().getGroupContext().isPresent()) {
                         SignalServiceDataMessage message = transcript.getMessage();
 
                         try {
                             conn.sendMessage(new Signal.SyncMessageReceived(
                                     objectPath,
                                     transcript.getTimestamp(),
-                                    envelope.getSourceAddress().getNumber().get(),
-                                    transcript.getDestination().isPresent() ? transcript.getDestination().get().getNumber().get() : "",
+                                    sender.getLegacyIdentifier(),
+                                    transcript.getDestination().isPresent() ? transcript.getDestination().get().getLegacyIdentifier() : "",
                                     message.getGroupContext().isPresent() && message.getGroupContext().get().getGroupV1().isPresent()
                                             ? message.getGroupContext().get().getGroupV1().get().getGroupId() : new byte[0],
                                     message.getBody().isPresent() ? message.getBody().get() : "",
index 9a75aa1cb055178d8c73e6ec275e6b06633acb12..cb18a8f541f976e87c73ec0a8423341e74d4a332 100644 (file)
@@ -47,8 +47,8 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
     public void handleMessage(SignalServiceEnvelope envelope, SignalServiceContent content, Throwable exception) {
         if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
             SignalServiceAddress source = envelope.getSourceAddress();
-            ContactInfo sourceContact = m.getContact(source.getNumber().get());
-            System.out.println(String.format("Envelope from: %s (device: %d)", (sourceContact == null ? "" : "“" + sourceContact.name + "” ") + source.getNumber().get(), envelope.getSourceDevice()));
+            ContactInfo sourceContact = m.getContact(source.getLegacyIdentifier());
+            System.out.println(String.format("Envelope from: %s (device: %d)", (sourceContact == null ? "" : "“" + sourceContact.name + "” ") + source.getLegacyIdentifier(), envelope.getSourceDevice()));
             if (source.getRelay().isPresent()) {
                 System.out.println("Relayed by: " + source.getRelay().get());
             }
@@ -76,8 +76,8 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             if (content == null) {
                 System.out.println("Failed to decrypt message.");
             } else {
-                ContactInfo sourceContact = m.getContact(content.getSender().getNumber().get());
-                System.out.println(String.format("Sender: %s (device: %d)", (sourceContact == null ? "" : "“" + sourceContact.name + "” ") + content.getSender().getNumber().get(), content.getSenderDevice()));
+                ContactInfo sourceContact = m.getContact(content.getSender().getLegacyIdentifier());
+                System.out.println(String.format("Sender: %s (device: %d)", (sourceContact == null ? "" : "“" + sourceContact.name + "” ") + content.getSender().getLegacyIdentifier(), content.getSenderDevice()));
                 if (content.getDataMessage().isPresent()) {
                     SignalServiceDataMessage message = content.getDataMessage().get();
                     handleSignalServiceDataMessage(message);
@@ -102,8 +102,8 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                     if (syncMessage.getRead().isPresent()) {
                         System.out.println("Received sync read messages list");
                         for (ReadMessage rm : syncMessage.getRead().get()) {
-                            ContactInfo fromContact = m.getContact(rm.getSender().getNumber().get());
-                            System.out.println("From: " + (fromContact == null ? "" : "“" + fromContact.name + "” ") + rm.getSender().getNumber().get() + " Message timestamp: " + DateUtils.formatTimestamp(rm.getTimestamp()));
+                            ContactInfo fromContact = m.getContact(rm.getSender().getLegacyIdentifier());
+                            System.out.println("From: " + (fromContact == null ? "" : "“" + fromContact.name + "” ") + rm.getSender().getLegacyIdentifier() + " Message timestamp: " + DateUtils.formatTimestamp(rm.getTimestamp()));
                         }
                     }
                     if (syncMessage.getRequest().isPresent()) {
@@ -129,14 +129,14 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                         final SentTranscriptMessage sentTranscriptMessage = syncMessage.getSent().get();
                         String to;
                         if (sentTranscriptMessage.getDestination().isPresent()) {
-                            String dest = sentTranscriptMessage.getDestination().get().getNumber().get();
+                            String dest = sentTranscriptMessage.getDestination().get().getLegacyIdentifier();
                             ContactInfo destContact = m.getContact(dest);
                             to = (destContact == null ? "" : "“" + destContact.name + "” ") + dest;
                         } else if (sentTranscriptMessage.getRecipients().size() > 0) {
                             StringBuilder toBuilder = new StringBuilder();
                             for (SignalServiceAddress dest : sentTranscriptMessage.getRecipients()) {
-                                ContactInfo destContact = m.getContact(dest.getNumber().get());
-                                toBuilder.append(destContact == null ? "" : "“" + destContact.name + "” ").append(dest.getNumber().get()).append(" ");
+                                ContactInfo destContact = m.getContact(dest.getLegacyIdentifier());
+                                toBuilder.append(destContact == null ? "" : "“" + destContact.name + "” ").append(dest.getLegacyIdentifier()).append(" ");
                             }
                             to = toBuilder.toString();
                         } else {
@@ -154,7 +154,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                         System.out.println("Blocked numbers:");
                         final BlockedListMessage blockedList = syncMessage.getBlockedList().get();
                         for (SignalServiceAddress address : blockedList.getAddresses()) {
-                            System.out.println(" - " + address.getNumber().get());
+                            System.out.println(" - " + address.getLegacyIdentifier());
                         }
                     }
                     if (syncMessage.getVerified().isPresent()) {
@@ -178,7 +178,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
                     if (syncMessage.getViewOnceOpen().isPresent()) {
                         final ViewOnceOpenMessage viewOnceOpenMessage = syncMessage.getViewOnceOpen().get();
                         System.out.println("Received sync message with view once open message:");
-                        System.out.println(" - Sender:" + viewOnceOpenMessage.getSender().getNumber().get());
+                        System.out.println(" - Sender:" + viewOnceOpenMessage.getSender().getLegacyIdentifier());
                         System.out.println(" - Timestamp:" + viewOnceOpenMessage.getTimestamp());
                     }
                     if (syncMessage.getStickerPackOperations().isPresent()) {
@@ -280,7 +280,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             System.out.println("  Type: " + groupInfo.getType());
             if (groupInfo.getMembers().isPresent()) {
                 for (SignalServiceAddress member : groupInfo.getMembers().get()) {
-                    System.out.println("  Member: " + member.getNumber().get());
+                    System.out.println("  Member: " + member.getLegacyIdentifier());
                 }
             }
             if (groupInfo.getAvatar().isPresent()) {
@@ -332,7 +332,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
             final SignalServiceDataMessage.Reaction reaction = message.getReaction().get();
             System.out.println("Reaction:");
             System.out.println(" - Emoji: " + reaction.getEmoji());
-            System.out.println(" - Target author: " + reaction.getTargetAuthor().getNumber().get());
+            System.out.println(" - Target author: " + reaction.getTargetAuthor().getLegacyIdentifier());
             System.out.println(" - Target timestamp: " + reaction.getTargetSentTimestamp());
             System.out.println(" - Is remove: " + reaction.isRemove());
         }
@@ -340,7 +340,7 @@ public class ReceiveMessageHandler implements Manager.ReceiveMessageHandler {
         if (message.getQuote().isPresent()) {
             SignalServiceDataMessage.Quote quote = message.getQuote().get();
             System.out.println("Quote: (" + quote.getId() + ")");
-            System.out.println(" Author: " + quote.getAuthor().getNumber().get());
+            System.out.println(" Author: " + quote.getAuthor().getLegacyIdentifier());
             System.out.println(" Text: " + quote.getText());
             if (quote.getAttachments().size() > 0) {
                 System.out.println(" Attachments: ");
index 572623e415e011ff958888321ee094d53fa8576c..08bc19a96c90cd623cedcfa617da8717cbff68a6 100644 (file)
@@ -19,7 +19,7 @@ class JsonGroupInfo {
         if (groupInfo.getMembers().isPresent()) {
             this.members = new ArrayList<>(groupInfo.getMembers().get().size());
             for (SignalServiceAddress address : groupInfo.getMembers().get()) {
-                this.members.add(address.getNumber().get());
+                this.members.add(address.getLegacyIdentifier());
             }
         }
         if (groupInfo.getName().isPresent()) {
index 3279d9419482206a9575777ac52bb7a0f664012a..b42699495668899af4a2ad9837c917e6c54bef7b 100644 (file)
@@ -20,7 +20,7 @@ public class JsonMessageEnvelope {
     public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content) {
         if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
             SignalServiceAddress source = envelope.getSourceAddress();
-            this.source = source.getNumber().get();
+            this.source = source.getLegacyIdentifier();
             this.relay = source.getRelay().isPresent() ? source.getRelay().get() : null;
         }
         this.sourceDevice = envelope.getSourceDevice();
@@ -28,7 +28,7 @@ public class JsonMessageEnvelope {
         this.isReceipt = envelope.isReceipt();
         if (content != null) {
             if (envelope.isUnidentifiedSender()) {
-                this.source = content.getSender().getNumber().get();
+                this.source = content.getSender().getLegacyIdentifier();
                 this.sourceDevice = content.getSenderDevice();
             }
             if (content.getDataMessage().isPresent()) {
index d253b197e5a43c700409adc0aab05010cf914669..c6571a939984b2a4a169e8c8676a6d57b8e6cd08 100644 (file)
@@ -10,7 +10,7 @@ class JsonSyncDataMessage extends JsonDataMessage {
     JsonSyncDataMessage(SentTranscriptMessage transcriptMessage) {
         super(transcriptMessage.getMessage());
         if (transcriptMessage.getDestination().isPresent()) {
-            this.destination = transcriptMessage.getDestination().get().getNumber().get();
+            this.destination = transcriptMessage.getDestination().get().getLegacyIdentifier();
         }
     }
 
index 27766bdaacb90775c696f5831a2e7c76b0808db3..31c39a3f338442ef3a388c501dc548d2208b6118 100644 (file)
@@ -28,7 +28,7 @@ class JsonSyncMessage {
         if (syncMessage.getBlockedList().isPresent()) {
             this.blockedNumbers = new ArrayList<>(syncMessage.getBlockedList().get().getAddresses().size());
             for (SignalServiceAddress address : syncMessage.getBlockedList().get().getAddresses()) {
-                this.blockedNumbers.add(address.getNumber().get());
+                this.blockedNumbers.add(address.getLegacyIdentifier());
             }
         }
         if (syncMessage.getRead().isPresent()) {
index 2ce59cdc0fd71dc361f39ff2e3a3964b8b20dbe0..c332a9599602d9cb5c0ce95f543ce29d2b9983f3 100644 (file)
@@ -1510,7 +1510,8 @@ public class Manager implements Closeable {
             if (!(exception instanceof org.whispersystems.libsignal.UntrustedIdentityException)) {
                 File cacheFile = null;
                 try {
-                    cacheFile = getMessageCacheFile(envelope.getSourceE164().get(), now, envelope.getTimestamp());
+                    String source = envelope.getSourceE164().isPresent() ? envelope.getSourceE164().get() : "";
+                    cacheFile = getMessageCacheFile(source, now, envelope.getTimestamp());
                     Files.delete(cacheFile.toPath());
                     // Try to delete directory if empty
                     new File(getMessageCachePath()).delete();