diff --git a/services/web/app/src/Features/Analytics/AnalyticsManager.js b/services/web/app/src/Features/Analytics/AnalyticsManager.js index e37e70c22a..5f50d6fe35 100644 --- a/services/web/app/src/Features/Analytics/AnalyticsManager.js +++ b/services/web/app/src/Features/Analytics/AnalyticsManager.js @@ -9,6 +9,15 @@ const { expressify } = require('@overleaf/promise-utils') const logger = require('@overleaf/logger') const { createHash } = require('crypto') +if ( + Settings.analytics?.enabled && + process.env.NODE_ENV !== 'test' && + !Settings.analytics?.hashedEmailSalt +) { + // This isn't important enough to crash the app, but we want to record the error + logger.error({}, 'Settings.analytics.hashedEmailSalt should be set') +} + const analyticsEventsQueue = Queues.getQueue('analytics-events') const analyticsEditingSessionsQueue = Queues.getQueue( 'analytics-editing-sessions' @@ -218,10 +227,8 @@ function registerEmailChange({ }) { Metrics.analyticsQueue.inc({ status: 'adding', event_type: 'email-change' }) - const salt = Settings.analytics?.hashedEmailSalt ?? '' - const hashedEmail = createHash('sha256') - .update(`${email}${salt}`) + .update(`${email}${Settings.analytics?.hashedEmailSalt}`) .digest('hex') analyticsEmailChangeQueue diff --git a/services/web/test/acceptance/config/settings.test.saas.js b/services/web/test/acceptance/config/settings.test.saas.js index 0ffa1feb96..2a6ff40398 100644 --- a/services/web/test/acceptance/config/settings.test.saas.js +++ b/services/web/test/acceptance/config/settings.test.saas.js @@ -88,6 +88,7 @@ const overrides = { analytics: { enabled: true, + hashedEmailSalt: 'acceptance-test-salt', }, } diff --git a/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js b/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js index 38f8bd7497..053f2ee31f 100644 --- a/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js +++ b/services/web/test/unit/src/Analytics/AnalyticsManagerTests.js @@ -339,7 +339,9 @@ describe('AnalyticsManager', function () { this.analyticsId = 'bccd308c-5d72-426e-a106-662e88557795' this.AnalyticsManager = SandboxedModule.require(MODULE_PATH, { requires: { - '@overleaf/settings': {}, + '@overleaf/settings': { + analytics: { hashedEmailSalt: 'test-salt' }, + }, '../../infrastructure/Queues': { getQueue: queueName => { switch (queueName) {