From 892b2f8474f7088db060a2e4d175ff3156008927 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Fri, 22 May 2020 09:58:32 +1000 Subject: [PATCH] add ttl as abstract method so each message can define its own --- ts/global.d.ts | 1 + .../messages/outgoing/content/ContentMessage.ts | 16 +++++++++++++--- .../outgoing/content/DeviceLinkMessage.ts | 4 ++++ .../outgoing/content/EndSessionMessage.ts | 4 ++++ .../messages/outgoing/content/ReceiptMessage.ts | 4 ++++ .../content/SessionEstablishedMessage.ts | 4 ++++ .../outgoing/content/SessionResetMessage.ts | 4 ++++ .../messages/outgoing/content/TypingMessage.ts | 5 +++++ .../outgoing/content/data/ClosedGroupMessage.ts | 4 ++++ .../outgoing/content/data/DeviceUnlinkMessage.ts | 4 ++++ .../content/data/GroupInvitationMessage.ts | 4 ++++ .../outgoing/content/data/RegularMessage.ts | 3 +++ .../outgoing/content/sync/SyncMessage.ts | 4 ++++ 13 files changed, 58 insertions(+), 3 deletions(-) diff --git a/ts/global.d.ts b/ts/global.d.ts index 34564325a..abac2f15f 100644 --- a/ts/global.d.ts +++ b/ts/global.d.ts @@ -52,6 +52,7 @@ interface Window { toggleSpellCheck: any; toggleLinkPreview: any; toggleMediaPermissions: any; + getMessageTTL: () => number; getSettingValue: any; setSettingValue: any; diff --git a/ts/session/messages/outgoing/content/ContentMessage.ts b/ts/session/messages/outgoing/content/ContentMessage.ts index 559268188..65c978e00 100644 --- a/ts/session/messages/outgoing/content/ContentMessage.ts +++ b/ts/session/messages/outgoing/content/ContentMessage.ts @@ -4,11 +4,10 @@ import { SignalService } from '../../../../protobuf'; export abstract class ContentMessage implements Message { public readonly timestamp: number; public readonly identifier: string; - public readonly ttl: number; - constructor(timestamp: number, identifier: string, ttl: number) { + + constructor(timestamp: number, identifier: string) { this.timestamp = timestamp; this.identifier = identifier; - this.ttl = ttl; } public plainTextBuffer(): Uint8Array { @@ -17,8 +16,19 @@ export abstract class ContentMessage implements Message { return this.processPlainTextBuffer(encoded); } + public abstract ttl(): number; protected abstract contentProto(): SignalService.Content; + /** + * If the message is not a message with a specific TTL, + * this value can be used in all child classes + */ + protected getDefaultTTL(): number { + // 1 day default for any other message + return (window.getMessageTTL() || 24) * 60 * 60 * 1000; + + } + private processPlainTextBuffer(buffer: Uint8Array): Uint8Array { const paddedMessageLength = this.getPaddedMessageLength( buffer.byteLength + 1 diff --git a/ts/session/messages/outgoing/content/DeviceLinkMessage.ts b/ts/session/messages/outgoing/content/DeviceLinkMessage.ts index b31e6fea7..b465890b2 100644 --- a/ts/session/messages/outgoing/content/DeviceLinkMessage.ts +++ b/ts/session/messages/outgoing/content/DeviceLinkMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../protobuf'; export class DeviceLinkMessage extends ContentMessage { + public ttl(): number { + return 2 * 60 * 1000; // 2 minutes for linking requests + } + protected contentProto(): SignalService.Content { throw new Error('Not implemented'); } diff --git a/ts/session/messages/outgoing/content/EndSessionMessage.ts b/ts/session/messages/outgoing/content/EndSessionMessage.ts index bb46233a6..6cda04338 100644 --- a/ts/session/messages/outgoing/content/EndSessionMessage.ts +++ b/ts/session/messages/outgoing/content/EndSessionMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../protobuf'; export class EndSessionMessage extends SessionResetMessage { + public ttl(): number { + return this.getDefaultTTL(); + } + protected contentProto(): SignalService.Content { throw new Error('Not implemented'); } diff --git a/ts/session/messages/outgoing/content/ReceiptMessage.ts b/ts/session/messages/outgoing/content/ReceiptMessage.ts index 8cc8a43c6..9df247583 100644 --- a/ts/session/messages/outgoing/content/ReceiptMessage.ts +++ b/ts/session/messages/outgoing/content/ReceiptMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../protobuf'; export class ReceiptMessage extends ContentMessage { + public ttl(): number { + return this.getDefaultTTL(); + } + protected contentProto(): SignalService.Content { return new SignalService.Content({ receiptMessage: this.receiptProto(), diff --git a/ts/session/messages/outgoing/content/SessionEstablishedMessage.ts b/ts/session/messages/outgoing/content/SessionEstablishedMessage.ts index 16e1a8025..61b47d6dc 100644 --- a/ts/session/messages/outgoing/content/SessionEstablishedMessage.ts +++ b/ts/session/messages/outgoing/content/SessionEstablishedMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../protobuf'; export class SessionEstablishedMessage extends ContentMessage { + public ttl(): number { + return 60 * 1000; + } + protected contentProto(): SignalService.Content { throw new Error('Not implemented'); } diff --git a/ts/session/messages/outgoing/content/SessionResetMessage.ts b/ts/session/messages/outgoing/content/SessionResetMessage.ts index 4af9ae611..6b550fe96 100644 --- a/ts/session/messages/outgoing/content/SessionResetMessage.ts +++ b/ts/session/messages/outgoing/content/SessionResetMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../protobuf'; export class SessionResetMessage extends ContentMessage { + public ttl(): number { + return this.getDefaultTTL(); + } + protected contentProto(): SignalService.Content { throw new Error('Not implemented'); } diff --git a/ts/session/messages/outgoing/content/TypingMessage.ts b/ts/session/messages/outgoing/content/TypingMessage.ts index 8efb163b2..a338c7f4b 100644 --- a/ts/session/messages/outgoing/content/TypingMessage.ts +++ b/ts/session/messages/outgoing/content/TypingMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../protobuf'; export abstract class TypingMessage extends ContentMessage { + public ttl(): number { + return 60 * 1000; // 1 minute for typing indicators + } + protected contentProto(): SignalService.Content { return new SignalService.Content({ typingMessage: this.typingProto(), @@ -10,4 +14,5 @@ export abstract class TypingMessage extends ContentMessage { } protected abstract typingProto(): SignalService.TypingMessage; + } diff --git a/ts/session/messages/outgoing/content/data/ClosedGroupMessage.ts b/ts/session/messages/outgoing/content/data/ClosedGroupMessage.ts index 8cc2e16a4..a6667a570 100644 --- a/ts/session/messages/outgoing/content/data/ClosedGroupMessage.ts +++ b/ts/session/messages/outgoing/content/data/ClosedGroupMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../../protobuf'; export class ClosedGroupMessage extends DataMessage { + public ttl(): number { + return this.getDefaultTTL(); + } + protected dataProto(): SignalService.DataMessage { throw new Error('Not implemented'); } diff --git a/ts/session/messages/outgoing/content/data/DeviceUnlinkMessage.ts b/ts/session/messages/outgoing/content/data/DeviceUnlinkMessage.ts index b2120e00d..1c1fa8441 100644 --- a/ts/session/messages/outgoing/content/data/DeviceUnlinkMessage.ts +++ b/ts/session/messages/outgoing/content/data/DeviceUnlinkMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../../protobuf'; export class DeviceUnlinkMessage extends DataMessage { + public ttl(): number { + return 4 * 24 * 60 * 60 * 1000; // 4 days for device unlinking + } + protected dataProto(): SignalService.DataMessage { throw new Error('Not implemented'); } diff --git a/ts/session/messages/outgoing/content/data/GroupInvitationMessage.ts b/ts/session/messages/outgoing/content/data/GroupInvitationMessage.ts index 8b53b0b2b..92c2dc574 100644 --- a/ts/session/messages/outgoing/content/data/GroupInvitationMessage.ts +++ b/ts/session/messages/outgoing/content/data/GroupInvitationMessage.ts @@ -3,6 +3,10 @@ import { SignalService } from '../../../../../protobuf'; export class GroupInvitationMessage extends DataMessage { + public ttl(): number { + return this.getDefaultTTL(); + } + protected dataProto(): SignalService.DataMessage { throw new Error('Not implemented'); } diff --git a/ts/session/messages/outgoing/content/data/RegularMessage.ts b/ts/session/messages/outgoing/content/data/RegularMessage.ts index bfa3387fa..b3326b657 100644 --- a/ts/session/messages/outgoing/content/data/RegularMessage.ts +++ b/ts/session/messages/outgoing/content/data/RegularMessage.ts @@ -4,6 +4,9 @@ import { SignalService } from '../../../../../protobuf'; // this message type is probably to sub divise again. // should handle quote, body, attachmentsPointer, ... @see DataMessage in compiled.d.ts export abstract class RegularMessage extends DataMessage { + public ttl(): number { + return this.getDefaultTTL(); + } protected dataProto(): SignalService.DataMessage { throw new Error('Not implemented'); diff --git a/ts/session/messages/outgoing/content/sync/SyncMessage.ts b/ts/session/messages/outgoing/content/sync/SyncMessage.ts index 70ae7816b..aa16ffe6e 100644 --- a/ts/session/messages/outgoing/content/sync/SyncMessage.ts +++ b/ts/session/messages/outgoing/content/sync/SyncMessage.ts @@ -2,6 +2,9 @@ import { ContentMessage } from '../ContentMessage'; import { SignalService } from '../../../../../protobuf'; export abstract class SyncMessage extends ContentMessage { + public ttl(): number { + return this.getDefaultTTL(); + } protected contentProto(): SignalService.Content { return new SignalService.Content({ @@ -10,4 +13,5 @@ export abstract class SyncMessage extends ContentMessage { } protected abstract syncProto(): SignalService.SyncMessage; + }