From 58b0e323a36b2718b0cd8cd05fb58ff5f7224ab5 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 5 Sep 2025 16:10:41 +0200 Subject: [PATCH] anonymize all uuids --- website/server/libs/analyticsService.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/website/server/libs/analyticsService.js b/website/server/libs/analyticsService.js index 13bb61beaf..5e61bb0bb3 100644 --- a/website/server/libs/analyticsService.js +++ b/website/server/libs/analyticsService.js @@ -2,6 +2,7 @@ import nconf from 'nconf'; import Amplitude from 'amplitude'; import useragent from 'useragent'; +import validator from 'validator'; import { lookup } from 'ip-location-api'; import { createHash } from 'crypto'; import { @@ -33,6 +34,15 @@ function _hashUUID (uuid) { return createHash('sha256').update(uuid).digest('hex'); } +function _anonymizeProperties (properties) { + return properties.map(userProp => { + if (typeof userProp === 'string' && validator.isEmail(userProp)) { + return _hashUUID(userProp); + } + return userProp; + }); +} + function _lookUpItemName (itemKey) { if (!itemKey) return null; @@ -172,7 +182,15 @@ function _formatDataForAmplitude (data) { }; if (data.user) { - ampData.user_properties = _formatUserData(data.user, data.ipaddress, !consented); + const ipaddress = data.ipaddress || (data.headers && data.headers['x-forwarded-for']); + ampData.user_properties = _formatUserData(data.user, ipaddress, !consented); + } + + if (!consented) { + ampData.event_properties = _anonymizeProperties(ampData.event_properties); + if (ampData.user_properties) { + ampData.user_properties = _anonymizeProperties(ampData.user_properties); + } } const itemName = _lookUpItemName(data.itemKey);