From 30d67559adb96a4532dfd8b75585064f7fa3dc95 Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Thu, 15 Feb 2024 09:44:11 +0000 Subject: [PATCH] Only validate segmentation values for Mixpanel (#16889) GitOrigin-RevId: 3cb9de7648d1ba1f9faa8720eb57370e224c0c8c --- .../Features/Analytics/AnalyticsManager.js | 23 ++++++------------- .../src/Analytics/AnalyticsManagerTests.js | 4 ++-- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/services/web/app/src/Features/Analytics/AnalyticsManager.js b/services/web/app/src/Features/Analytics/AnalyticsManager.js index 776a15db6f..cc3a6741f4 100644 --- a/services/web/app/src/Features/Analytics/AnalyticsManager.js +++ b/services/web/app/src/Features/Analytics/AnalyticsManager.js @@ -275,25 +275,16 @@ function _isAttributeValueValid(attributeValue) { return _isAttributeValid(attributeValue) || attributeValue instanceof Date } -function _isSegmentationValueValid(attributeValue) { - // spaces and %-escaped values are allowed for segmentation values - return !attributeValue || /^[a-zA-Z0-9-_.:;,/ %]+$/.test(attributeValue) -} - function _isSegmentationValid(segmentation) { - if (!segmentation) { - return true + if (segmentation) { + for (const key of Object.keys(segmentation)) { + if (!_isAttributeValid(key)) { + return false + } + } } - const hasAnyInvalidKey = [...Object.keys(segmentation)].some( - key => !_isAttributeValid(key) - ) - - const hasAnyInvalidValue = [...Object.values(segmentation)].some( - value => !_isSegmentationValueValid(value) - ) - - return !hasAnyInvalidKey && !hasAnyInvalidValue + return true } function getIdsFromSession(session) { diff --git a/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js b/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js index 0eb9468e1a..c21486dad2 100644 --- a/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js +++ b/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js @@ -112,7 +112,7 @@ describe('AnalyticsManager', function () { this.fakeUserId, '789ghi', 'fr', - { key: '' } + { '': 'foo' } ) sinon.assert.called(this.logger.info) sinon.assert.notCalled(this.analyticsEditingSessionQueue.add) @@ -131,7 +131,7 @@ describe('AnalyticsManager', function () { await this.AnalyticsManager.recordEventForUser( this.fakeUserId, 'an_event', - { not_a: 'Valid Segmentation!' } + { 'not_a!': 'Valid Segmentation' } ) sinon.assert.called(this.logger.info) sinon.assert.notCalled(this.analyticsEventsQueue.add)