Fix case where blocked user adds a new linked device.

pull/1222/head
Mikunj 5 years ago
parent 1b93a210bc
commit 3159baebfa

@ -224,13 +224,23 @@
return !!(this.id && this.id.match(/^rss:/)); return !!(this.id && this.id.match(/^rss:/));
}, },
isBlocked() { isBlocked() {
if (!this.id || this.isPublic() || this.isRss()) { if (this.isMe()) {
return false; return false;
} }
return this.isPrivate() if (this.isClosedGroup()) {
? BlockedNumberController.isBlocked(this.id) return BlockedNumberController.isGroupBlocked(this.id);
: BlockedNumberController.isGroupBlocked(this.id); }
if (this.isPrivate()) {
const primary = this.getPrimaryDevicePubKey();
return (
BlockedNumberController.isBlocked(primary) ||
BlockedNumberController.isBlocked(this.id)
);
}
return false;
}, },
isMediumGroup() { isMediumGroup() {
return this.get('is_medium_group'); return this.get('is_medium_group');

@ -96,8 +96,12 @@ function unpad(paddedData: ArrayBuffer): ArrayBuffer {
throw new Error('Invalid padding'); throw new Error('Invalid padding');
} }
export function isBlocked(number: string) { export async function isBlocked(number: string) {
return BlockedNumberController.isBlocked(number); const primary = await MultiDeviceProtocol.getPrimaryDevice(number);
return (
BlockedNumberController.isBlocked(primary) ||
BlockedNumberController.isBlocked(number)
);
} }
async function decryptPreKeyWhisperMessage( async function decryptPreKeyWhisperMessage(
@ -151,7 +155,10 @@ async function decryptUnidentifiedSender(
const { sender: source } = error || {}; const { sender: source } = error || {};
if (source) { 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( window.log.info(
'Dropping blocked message with error after sealed sender decryption' 'Dropping blocked message with error after sealed sender decryption'
); );
@ -186,7 +193,9 @@ async function decryptUnidentifiedSender(
envelope.type = SignalService.Envelope.Type.SESSION_REQUEST; 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'); window.log.info('Dropping blocked message after sealed sender decryption');
return null; return null;
} }

@ -30,6 +30,7 @@ import {
import { getEnvelopeId } from './common'; import { getEnvelopeId } from './common';
import { StringUtils } from '../session/utils'; import { StringUtils } from '../session/utils';
import { SignalService } from '../protobuf'; import { SignalService } from '../protobuf';
import { BlockedNumberController } from '../util/blockedNumberController';
// TODO: check if some of these exports no longer needed // TODO: check if some of these exports no longer needed
export { export {
@ -153,7 +154,9 @@ async function handleRequestDetail(
// TODO: 'source' is almost certainly undefined here (sealed sender), // TODO: 'source' is almost certainly undefined here (sealed sender),
// so this check is not appropriate here // 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; return;
} }

Loading…
Cancel
Save