From 4d0d2727bda1f2f052596afdef0135e4be4dba00 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Tue, 23 Jun 2020 10:51:15 +1000 Subject: [PATCH] Added strict type checking to group id --- .../outgoing/content/data/group/ClosedGroupMessage.ts | 10 ++++++---- ts/session/sending/MessageQueue.ts | 2 +- ts/session/utils/Groups.ts | 10 +++++----- ts/test/session/sending/MessageQueue_test.ts | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts b/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts index ccdb8f121..fda7a7b01 100644 --- a/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts +++ b/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts @@ -2,26 +2,28 @@ import { DataMessage } from '../DataMessage'; import { SignalService } from '../../../../../../protobuf'; import { TextEncoder } from 'util'; import { MessageParams } from '../../../Message'; +import { PubKey } from '../../../../../types'; interface ClosedGroupMessageParams extends MessageParams { - groupId: string; + groupId: string | PubKey; } export abstract class ClosedGroupMessage extends DataMessage { - public readonly groupId: string; + public readonly groupId: PubKey; constructor(params: ClosedGroupMessageParams) { super({ timestamp: params.timestamp, identifier: params.identifier, }); - this.groupId = params.groupId; + const { groupId } = params; + this.groupId = typeof groupId === 'string' ? new PubKey(groupId) : groupId; } protected abstract groupContextType(): SignalService.GroupContext.Type; protected groupContext(): SignalService.GroupContext { - const id = new TextEncoder().encode(this.groupId); + const id = new TextEncoder().encode(this.groupId.key); const type = this.groupContextType(); return new SignalService.GroupContext({ id, type }); diff --git a/ts/session/sending/MessageQueue.ts b/ts/session/sending/MessageQueue.ts index 465dfb91a..cf03ab551 100644 --- a/ts/session/sending/MessageQueue.ts +++ b/ts/session/sending/MessageQueue.ts @@ -139,7 +139,7 @@ export class MessageQueue implements MessageQueueInterface { public async processPending(device: PubKey) { const messages = await this.pendingMessageCache.getForDevice(device); - const isMediumGroup = GroupUtils.isMediumGroup(device.key); + const isMediumGroup = GroupUtils.isMediumGroup(device); const hasSession = await SessionProtocol.hasSession(device); if (!isMediumGroup && !hasSession) { diff --git a/ts/session/utils/Groups.ts b/ts/session/utils/Groups.ts index c3c4cf1b9..adce15790 100644 --- a/ts/session/utils/Groups.ts +++ b/ts/session/utils/Groups.ts @@ -1,11 +1,11 @@ import _ from 'lodash'; -import { PrimaryPubKey } from '../types'; +import { PrimaryPubKey, PubKey } from '../types'; import { MultiDeviceProtocol } from '../protocols'; export async function getGroupMembers( - groupId: string + groupId: PubKey ): Promise> { - const groupConversation = window.ConversationController.get(groupId); + const groupConversation = window.ConversationController.get(groupId.key); const groupMembers = groupConversation ? groupConversation.attributes.members : undefined; @@ -22,8 +22,8 @@ export async function getGroupMembers( return _.uniqWith(primaryDevices, (a, b) => a.isEqual(b)); } -export function isMediumGroup(groupId: string): boolean { - const conversation = window.ConversationController.get(groupId); +export function isMediumGroup(groupId: PubKey): boolean { + const conversation = window.ConversationController.get(groupId.key); if (!conversation) { return false; diff --git a/ts/test/session/sending/MessageQueue_test.ts b/ts/test/session/sending/MessageQueue_test.ts index c0d223ffc..7d3bf5fc3 100644 --- a/ts/test/session/sending/MessageQueue_test.ts +++ b/ts/test/session/sending/MessageQueue_test.ts @@ -43,7 +43,7 @@ describe('MessageQueue', () => { // Message Sender Stubs let sendStub: sinon.SinonStub<[RawMessage, (number | undefined)?]>; // Utils Stubs - let isMediumGroupStub: sinon.SinonStub<[string], boolean>; + let isMediumGroupStub: sinon.SinonStub<[PubKey], boolean>; // Session Protocol Stubs let hasSessionStub: sinon.SinonStub<[PubKey]>; let sendSessionRequestIfNeededStub: sinon.SinonStub<[PubKey], Promise>;