]> nmode's Git Repositories - signal-cli/commitdiff
Ignore decryption failures from blocked contacts
authorAsamK <asamk@gmx.de>
Sat, 15 Jan 2022 15:24:25 +0000 (16:24 +0100)
committerAsamK <asamk@gmx.de>
Sat, 15 Jan 2022 15:24:25 +0000 (16:24 +0100)
graalvm-config-dir/resource-config.json
lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java

index e16270b10b08f69ba2ead2b0d5b2074eb6ce1980..e2f9db0ec4753d3f2ba8b1250ebcb9ea9ba07dfa 100644 (file)
@@ -97,6 +97,9 @@
     {
       "pattern":"\\Qcom/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN\\E"
     }, 
+    {
+      "pattern":"\\Qcom/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR\\E"
+    }, 
     {
       "pattern":"\\Qcom/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT\\E"
     }, 
     {
       "pattern":"\\Qcom/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU\\E"
     }, 
+    {
+      "pattern":"\\Qcom/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA\\E"
+    }, 
     {
       "pattern":"\\Qcom/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI\\E"
     }, 
index 3aaccfdc4157fc52e73979c3d172e10376b131b3..0ef974e00c11f3427db535357ccb276420a62dc0 100644 (file)
@@ -121,18 +121,23 @@ public final class IncomingMessageHandler {
             } catch (ProtocolInvalidKeyIdException | ProtocolInvalidKeyException | ProtocolNoSessionException | ProtocolInvalidMessageException e) {
                 logger.debug("Failed to decrypt incoming message", e);
                 final var sender = account.getRecipientStore().resolveRecipient(e.getSender());
-                final var senderProfile = context.getProfileHelper().getRecipientProfile(sender);
-                final var selfProfile = context.getProfileHelper().getRecipientProfile(account.getSelfRecipientId());
-                if (e.getSenderDevice() != account.getDeviceId()
-                        && senderProfile != null
-                        && senderProfile.getCapabilities().contains(Profile.Capability.senderKey)
-                        && selfProfile != null
-                        && selfProfile.getCapabilities().contains(Profile.Capability.senderKey)) {
-                    logger.debug("Received invalid message, requesting message resend.");
-                    actions.add(new SendRetryMessageRequestAction(sender, e, envelope));
+                if (context.getContactHelper().isContactBlocked(sender)) {
+                    logger.debug("Received invalid message from blocked contact, ignoring.");
                 } else {
-                    logger.debug("Received invalid message, queuing renew session action.");
-                    actions.add(new RenewSessionAction(sender));
+                    final var senderProfile = context.getProfileHelper().getRecipientProfile(sender);
+                    final var selfProfile = context.getProfileHelper()
+                            .getRecipientProfile(account.getSelfRecipientId());
+                    if (e.getSenderDevice() != account.getDeviceId()
+                            && senderProfile != null
+                            && senderProfile.getCapabilities().contains(Profile.Capability.senderKey)
+                            && selfProfile != null
+                            && selfProfile.getCapabilities().contains(Profile.Capability.senderKey)) {
+                        logger.debug("Received invalid message, requesting message resend.");
+                        actions.add(new SendRetryMessageRequestAction(sender, e, envelope));
+                    } else {
+                        logger.debug("Received invalid message, queuing renew session action.");
+                        actions.add(new RenewSessionAction(sender));
+                    }
                 }
                 exception = e;
             } catch (SelfSendException e) {
@@ -188,15 +193,9 @@ public final class IncomingMessageHandler {
             SignalServiceEnvelope envelope, SignalServiceContent content, boolean ignoreAttachments
     ) {
         var actions = new ArrayList<HandleAction>();
-        final RecipientId sender;
-        final int senderDeviceId;
-        if (!envelope.isUnidentifiedSender() && envelope.hasSourceUuid()) {
-            sender = context.getRecipientHelper().resolveRecipient(envelope.getSourceAddress());
-            senderDeviceId = envelope.getSourceDevice();
-        } else {
-            sender = context.getRecipientHelper().resolveRecipient(content.getSender());
-            senderDeviceId = content.getSenderDevice();
-        }
+        final var senderPair = getSender(envelope, content);
+        final var sender = senderPair.first();
+        final var senderDeviceId = senderPair.second();
 
         if (content.getSenderKeyDistributionMessage().isPresent()) {
             final var message = content.getSenderKeyDistributionMessage().get();
@@ -607,4 +606,14 @@ public final class IncomingMessageHandler {
         }
         return actions;
     }
+
+    private Pair<RecipientId, Integer> getSender(SignalServiceEnvelope envelope, SignalServiceContent content) {
+        if (!envelope.isUnidentifiedSender() && envelope.hasSourceUuid()) {
+            return new Pair<>(context.getRecipientHelper().resolveRecipient(envelope.getSourceAddress()),
+                    envelope.getSourceDevice());
+        } else {
+            return new Pair<>(context.getRecipientHelper().resolveRecipient(content.getSender()),
+                    content.getSenderDevice());
+        }
+    }
 }