From 3159baebfafbce294ac8bd07ea332eb4bddccfd7 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Tue, 7 Jul 2020 14:41:37 +1000 Subject: [PATCH] Fix case where blocked user adds a new linked device. --- js/models/conversations.js | 18 ++++++++++++++---- ts/receiver/contentMessage.ts | 17 +++++++++++++---- ts/receiver/receiver.ts | 5 ++++- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index b98d92c02..150787057 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -224,13 +224,23 @@ return !!(this.id && this.id.match(/^rss:/)); }, isBlocked() { - if (!this.id || this.isPublic() || this.isRss()) { + if (this.isMe()) { return false; } - return this.isPrivate() - ? BlockedNumberController.isBlocked(this.id) - : BlockedNumberController.isGroupBlocked(this.id); + if (this.isClosedGroup()) { + return BlockedNumberController.isGroupBlocked(this.id); + } + + if (this.isPrivate()) { + const primary = this.getPrimaryDevicePubKey(); + return ( + BlockedNumberController.isBlocked(primary) || + BlockedNumberController.isBlocked(this.id) + ); + } + + return false; }, isMediumGroup() { return this.get('is_medium_group'); diff --git a/ts/receiver/contentMessage.ts b/ts/receiver/contentMessage.ts index 46dd9846a..a27dca199 100644 --- a/ts/receiver/contentMessage.ts +++ b/ts/receiver/contentMessage.ts @@ -96,8 +96,12 @@ function unpad(paddedData: ArrayBuffer): ArrayBuffer { throw new Error('Invalid padding'); } -export function isBlocked(number: string) { - return BlockedNumberController.isBlocked(number); +export async function isBlocked(number: string) { + const primary = await MultiDeviceProtocol.getPrimaryDevice(number); + return ( + BlockedNumberController.isBlocked(primary) || + BlockedNumberController.isBlocked(number) + ); } async function decryptPreKeyWhisperMessage( @@ -151,7 +155,10 @@ async function decryptUnidentifiedSender( const { sender: source } = error || {}; if (source) { - if (isBlocked(source.getName())) { + // tslint:disable-next-line: no-shadowed-variable + const blocked = await isBlocked(source.getName()); + if (blocked) { + await BlockedNumberController.block(source.getName()); window.log.info( 'Dropping blocked message with error after sealed sender decryption' ); @@ -186,7 +193,9 @@ async function decryptUnidentifiedSender( envelope.type = SignalService.Envelope.Type.SESSION_REQUEST; } - if (isBlocked(sender.getName())) { + const blocked = await isBlocked(sender.getName()); + if (blocked) { + await BlockedNumberController.block(sender.getName()); window.log.info('Dropping blocked message after sealed sender decryption'); return null; } diff --git a/ts/receiver/receiver.ts b/ts/receiver/receiver.ts index 0fdf69fd4..daeb711fb 100644 --- a/ts/receiver/receiver.ts +++ b/ts/receiver/receiver.ts @@ -30,6 +30,7 @@ import { import { getEnvelopeId } from './common'; import { StringUtils } from '../session/utils'; import { SignalService } from '../protobuf'; +import { BlockedNumberController } from '../util/blockedNumberController'; // TODO: check if some of these exports no longer needed export { @@ -153,7 +154,9 @@ async function handleRequestDetail( // TODO: 'source' is almost certainly undefined here (sealed sender), // so this check is not appropriate here - if (isBlocked(envelope.source)) { + const blocked = await isBlocked(envelope.source); + if (blocked) { + await BlockedNumberController.block(envelope.source); return; }