From 7455393208b08c12ea8226c44d35d65aeec9cd2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Alby?= Date: Thu, 23 Sep 2021 11:02:39 +0200 Subject: [PATCH] Merge pull request #5153 from overleaf/ta-registration-properties Rework Referrer-From User Property GitOrigin-RevId: f1b91616e2a9b93f3c3944890d96e735c563c237 --- .../AnalyticsRegistrationSourceHelper.js | 42 +++++++++++++++---- .../AnalyticsRegistrationSourceMiddleware.js | 8 +++- .../Collaborators/CollaboratorsRouter.js | 10 ++++- .../src/Features/Templates/TemplatesRouter.js | 6 ++- services/web/app/src/router.js | 10 ++++- 5 files changed, 62 insertions(+), 14 deletions(-) diff --git a/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceHelper.js b/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceHelper.js index fa31d62234..b2152be5b5 100644 --- a/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceHelper.js +++ b/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceHelper.js @@ -5,6 +5,8 @@ const AnalyticsManager = require('./AnalyticsManager') function clearSource(session) { if (session) { delete session.required_login_for + delete session.required_login_from_product_medium + delete session.required_login_from_product_source } } @@ -30,7 +32,6 @@ function parseReferrer(referrer, url) { if (!referrer) { return { medium: 'direct', - detail: 'none', } } @@ -38,7 +39,7 @@ function parseReferrer(referrer, url) { const referrerValues = { medium: parsedReferrer.medium, - detail: parsedReferrer.referer, + source: parsedReferrer.referer || 'other', } if (referrerValues.medium === 'unknown') { @@ -46,7 +47,7 @@ function parseReferrer(referrer, url) { const referrerHostname = new URL(referrer).hostname if (referrerHostname) { referrerValues.medium = 'link' - referrerValues.detail = referrerHostname + referrerValues.source = referrerHostname } } catch (error) { // ignore referrer parsing errors @@ -78,12 +79,30 @@ function addUserProperties(userId, session) { return } - if (session.referal_id) { + if (session.required_login_from_product_medium) { + AnalyticsManager.setUserPropertyForUser( + userId, + `registered-from-product-medium`, + session.required_login_from_product_medium + ) + if (session.required_login_from_product_source) { + AnalyticsManager.setUserPropertyForUser( + userId, + `registered-from-product-source`, + session.required_login_from_product_source + ) + } + } else if (session.referal_id) { AnalyticsManager.setUserPropertyForUser( userId, `registered-from-bonus-scheme`, true ) + AnalyticsManager.setUserPropertyForUser( + userId, + `registered-from-product-medium`, + 'bonus-scheme' + ) } if (session.required_login_for) { @@ -95,12 +114,21 @@ function addUserProperties(userId, session) { } if (session.inbound) { - if (session.inbound.referrer) { + if (session.inbound.referrer && session.inbound.referrer.medium) { AnalyticsManager.setUserPropertyForUser( userId, - `registered-from-referrer-${session.inbound.referrer.medium}`, - session.inbound.referrer.detail || 'other' + `registered-from-referrer-medium`, + `${session.inbound.referrer.medium + .charAt(0) + .toUpperCase()}${session.inbound.referrer.medium.slice(1)}` ) + if (session.inbound.referrer.source) { + AnalyticsManager.setUserPropertyForUser( + userId, + `registered-from-referrer-source`, + session.inbound.referrer.source + ) + } } if (session.inbound.utm) { diff --git a/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceMiddleware.js b/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceMiddleware.js index 19b7c96619..7c1b631cc4 100644 --- a/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceMiddleware.js +++ b/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceMiddleware.js @@ -3,10 +3,14 @@ const OError = require('@overleaf/o-error') const AnalyticsRegistrationSourceHelper = require('./AnalyticsRegistrationSourceHelper') const SessionManager = require('../../Features/Authentication/SessionManager') -function setSource(source) { +function setSource(medium, source) { return function (req, res, next) { if (req.session) { - req.session.required_login_for = source + req.session.required_login_for = medium + req.session.required_login_from_product_medium = medium + if (source) { + req.session.required_login_from_product_source = source + } } next() } diff --git a/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js b/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js index 1e3682e804..5634f79fd9 100644 --- a/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js +++ b/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js @@ -113,7 +113,10 @@ module.exports = { webRouter.get( '/project/:Project_id/invite/token/:token', - AnalyticsRegistrationSourceMiddleware.setSource('project-invite'), + AnalyticsRegistrationSourceMiddleware.setSource( + 'collaboration', + 'project-invite' + ), AuthenticationController.requireLogin(), CollaboratorsInviteController.viewInvite, AnalyticsRegistrationSourceMiddleware.clearSource() @@ -121,7 +124,10 @@ module.exports = { webRouter.post( '/project/:Project_id/invite/token/:token/accept', - AnalyticsRegistrationSourceMiddleware.setSource('project-invite'), + AnalyticsRegistrationSourceMiddleware.setSource( + 'collaboration', + 'project-invite' + ), AuthenticationController.requireLogin(), CollaboratorsInviteController.acceptInvite, AnalyticsRegistrationSourceMiddleware.clearSource() diff --git a/services/web/app/src/Features/Templates/TemplatesRouter.js b/services/web/app/src/Features/Templates/TemplatesRouter.js index 31b3caf26c..3d6b28d103 100644 --- a/services/web/app/src/Features/Templates/TemplatesRouter.js +++ b/services/web/app/src/Features/Templates/TemplatesRouter.js @@ -8,7 +8,11 @@ module.exports = { apply(app) { app.get( '/project/new/template/:Template_version_id', - AnalyticsRegistrationSourceMiddleware.setSource('template'), + (req, res, next) => + AnalyticsRegistrationSourceMiddleware.setSource( + 'template', + req.params.Template_version_id + )(req, res, next), TemplatesMiddleware.saveTemplateDataInSession, AuthenticationController.requireLogin(), TemplatesController.getV1Template, diff --git a/services/web/app/src/router.js b/services/web/app/src/router.js index 758cd39b8a..8fff0b2ef2 100644 --- a/services/web/app/src/router.js +++ b/services/web/app/src/router.js @@ -1137,7 +1137,10 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) { maxRequests: 15, timeInterval: 60, }), - AnalyticsRegistrationSourceMiddleware.setSource('link-sharing'), + AnalyticsRegistrationSourceMiddleware.setSource( + 'collaboration', + 'link-sharing' + ), TokenAccessController.tokenAccessPage, AnalyticsRegistrationSourceMiddleware.clearSource() ) @@ -1149,7 +1152,10 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) { maxRequests: 15, timeInterval: 60, }), - AnalyticsRegistrationSourceMiddleware.setSource('link-sharing'), + AnalyticsRegistrationSourceMiddleware.setSource( + 'collaboration', + 'link-sharing' + ), TokenAccessController.tokenAccessPage, AnalyticsRegistrationSourceMiddleware.clearSource() )