From 1d268da50bb6946adc446e2bd2f9b6d0b8f28a91 Mon Sep 17 00:00:00 2001
From: Scott Nonnenberg <scott@signal.org>
Date: Mon, 21 Mar 2022 16:17:55 -0700
Subject: [PATCH] Drop stories and their replies if feature flag is disabled

---
 ts/textsecure/MessageReceiver.ts | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/ts/textsecure/MessageReceiver.ts b/ts/textsecure/MessageReceiver.ts
index e1dfa880df..12794d9ea1 100644
--- a/ts/textsecure/MessageReceiver.ts
+++ b/ts/textsecure/MessageReceiver.ts
@@ -54,6 +54,7 @@ import { QualifiedAddress } from '../types/QualifiedAddress';
 import type { UUIDStringType } from '../types/UUID';
 import { UUID, UUIDKind } from '../types/UUID';
 import * as Errors from '../types/errors';
+import { isEnabled } from '../RemoteConfig';
 
 import { SignalService as Proto } from '../protobuf';
 import type { UnprocessedType } from '../textsecure.d';
@@ -1859,6 +1860,16 @@ export default class MessageReceiver
     const logId = this.getEnvelopeId(envelope);
     log.info('MessageReceiver.handleDataMessage', logId);
 
+    const isStoriesEnabled =
+      isEnabled('desktop.stories') && isEnabled('desktop.internalUser');
+    if (!isStoriesEnabled && msg.storyContext) {
+      log.info(
+        `MessageReceiver.handleDataMessage/${logId}: Dropping incoming dataMessage with storyContext field`
+      );
+      this.removeFromCache(envelope);
+      return undefined;
+    }
+
     let p: Promise<void> = Promise.resolve();
     // eslint-disable-next-line no-bitwise
     const destination = envelope.sourceUuid;
@@ -2049,8 +2060,20 @@ export default class MessageReceiver
       await this.handleTypingMessage(envelope, content.typingMessage);
       return;
     }
+
+    const isStoriesEnabled =
+      isEnabled('desktop.stories') && isEnabled('desktop.internalUser');
     if (content.storyMessage) {
-      await this.handleStoryMessage(envelope, content.storyMessage);
+      if (isStoriesEnabled) {
+        await this.handleStoryMessage(envelope, content.storyMessage);
+        return;
+      }
+
+      const logId = this.getEnvelopeId(envelope);
+      log.info(
+        `innerHandleContentMessage/${logId}: Dropping incoming message with storyMessage field`
+      );
+      this.removeFromCache(envelope);
       return;
     }