Fix case where blocked user adds a new linked device.

This commit is contained in:
Mikunj 2020-07-07 14:41:37 +10:00
parent 1b93a210bc
commit 3159baebfa
3 changed files with 31 additions and 9 deletions

View File

@ -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');

View File

@ -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;
}

View File

@ -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;
}