diff --git a/SignalServiceKit/src/Messages/OWSBlockingManager.h b/SignalServiceKit/src/Messages/OWSBlockingManager.h index 2c2892580..0c2720626 100644 --- a/SignalServiceKit/src/Messages/OWSBlockingManager.h +++ b/SignalServiceKit/src/Messages/OWSBlockingManager.h @@ -31,6 +31,7 @@ extern NSString *const kNSNotificationName_BlockListDidChange; - (void)removeBlockedGroupId:(NSData *)groupId; - (BOOL)isRecipientIdBlocked:(NSString *)recipientId; +- (BOOL)isGroupIdBlocked:(NSData *)groupId; - (BOOL)isThreadBlocked:(TSThread *)thread; - (void)syncBlockList; diff --git a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m index 94d2efec7..b8c9b7a79 100644 --- a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m +++ b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m @@ -80,7 +80,7 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - Blocking -- (BOOL)isEnvelopeBlocked:(SSKProtoEnvelope *)envelope +- (BOOL)isEnvelopeSenderBlocked:(SSKProtoEnvelope *)envelope { OWSAssert(envelope); @@ -121,7 +121,7 @@ NS_ASSUME_NONNULL_BEGIN DDLogInfo(@"%@ decrypting envelope: %@", self.logTag, [self descriptionForEnvelope:envelope]); OWSAssert(envelope.source.length > 0); - if ([self isEnvelopeBlocked:envelope]) { + if ([self isEnvelopeSenderBlocked:envelope]) { DDLogInfo(@"%@ ignoring blocked envelope: %@", self.logTag, envelope.source); failureBlock(); return; diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 8358d6475..a24e60379 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -158,13 +158,30 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - Blocking -- (BOOL)isEnvelopeBlocked:(SSKProtoEnvelope *)envelope +- (BOOL)isEnvelopeSenderBlocked:(SSKProtoEnvelope *)envelope { OWSAssert(envelope); return [_blockingManager isRecipientIdBlocked:envelope.source]; } +- (BOOL)isDataMessageBlocked:(SSKProtoDataMessage *)dataMessage envelope:(SSKProtoEnvelope *)envelope +{ + OWSAssert(dataMessage); + OWSAssert(envelope); + + if (dataMessage.group) { + return [self.blockingManager isGroupIdBlocked:dataMessage.group.id]; + } else { + BOOL senderBlocked = [self isEnvelopeSenderBlocked:envelope]; + + // If the envelopeSender was blocked, we never should have gotten as far as decrypting the dataMessage. + OWSAssert(!senderBlocked); + + return senderBlocked; + } +} + #pragma mark - message handling - (void)processEnvelope:(SSKProtoEnvelope *)envelope @@ -184,7 +201,7 @@ NS_ASSUME_NONNULL_BEGIN } OWSAssert(envelope.source.length > 0); - OWSAssert(![self isEnvelopeBlocked:envelope]); + OWSAssert(![self isEnvelopeSenderBlocked:envelope]); switch (envelope.type) { case SSKProtoEnvelopeTypeCiphertext: @@ -343,6 +360,16 @@ NS_ASSUME_NONNULL_BEGIN OWSAssert(dataMessage); OWSAssert(transaction); + if ([self isDataMessageBlocked:dataMessage envelope:envelope]) { + NSString *logMessage = [NSString stringWithFormat:@"Ignoring blocked message from sender: %@", envelope.source]; + if (dataMessage.group) { + logMessage = + [logMessage stringByAppendingString:[NSString stringWithFormat:@" in group: %@", dataMessage.group.id]]; + } + DDLogError(@"%@", logMessage); + return; + } + if (dataMessage.hasTimestamp) { if (dataMessage.timestamp <= 0) { DDLogError(@"%@ Ignoring message with invalid data message timestamp: %@", self.logTag, envelope.source);