diff --git a/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceMiddleware.js b/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceMiddleware.js new file mode 100644 index 0000000000..5f80636032 --- /dev/null +++ b/services/web/app/src/Features/Analytics/AnalyticsRegistrationSourceMiddleware.js @@ -0,0 +1,27 @@ +function setSource(source) { + return function (req, res, next) { + if (req.session) { + req.session.required_login_for = source + } + next() + } +} + +function clearSource() { + return function (req, res, next) { + doClearSource(req.session) + next() + } +} + +function doClearSource(session) { + if (session) { + delete session.required_login_for + } +} + +module.exports = { + setSource, + clearSource, + doClearSource, +} diff --git a/services/web/app/src/Features/Authentication/AuthenticationController.js b/services/web/app/src/Features/Authentication/AuthenticationController.js index fe2edd9119..5b76c77f15 100644 --- a/services/web/app/src/Features/Authentication/AuthenticationController.js +++ b/services/web/app/src/Features/Authentication/AuthenticationController.js @@ -18,6 +18,7 @@ const UrlHelper = require('../Helpers/UrlHelper') const AsyncFormHelper = require('../Helpers/AsyncFormHelper') const _ = require('lodash') const UserAuditLogHandler = require('../User/UserAuditLogHandler') +const AnalyticsRegistrationSourceMiddleware = require('../Analytics/AnalyticsRegistrationSourceMiddleware') const { acceptsJson, } = require('../../infrastructure/RequestContentTypeDetection') @@ -115,6 +116,7 @@ const AuthenticationController = { return next(err) } AuthenticationController._clearRedirectFromSession(req) + AnalyticsRegistrationSourceMiddleware.doClearSource(req.session) AsyncFormHelper.redirect(req, res, redir) }) }) diff --git a/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js b/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js index c562357e37..1e3682e804 100644 --- a/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js +++ b/services/web/app/src/Features/Collaborators/CollaboratorsRouter.js @@ -5,6 +5,7 @@ const PrivilegeLevels = require('../Authorization/PrivilegeLevels') const CollaboratorsInviteController = require('./CollaboratorsInviteController') const RateLimiterMiddleware = require('../Security/RateLimiterMiddleware') const CaptchaMiddleware = require('../Captcha/CaptchaMiddleware') +const AnalyticsRegistrationSourceMiddleware = require('../Analytics/AnalyticsRegistrationSourceMiddleware') const { Joi, validate } = require('../../infrastructure/Validation') module.exports = { @@ -112,14 +113,18 @@ module.exports = { webRouter.get( '/project/:Project_id/invite/token/:token', + AnalyticsRegistrationSourceMiddleware.setSource('project-invite'), AuthenticationController.requireLogin(), - CollaboratorsInviteController.viewInvite + CollaboratorsInviteController.viewInvite, + AnalyticsRegistrationSourceMiddleware.clearSource() ) webRouter.post( '/project/:Project_id/invite/token/:token/accept', + AnalyticsRegistrationSourceMiddleware.setSource('project-invite'), AuthenticationController.requireLogin(), - CollaboratorsInviteController.acceptInvite + 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 b8614eec73..567e0edfa9 100644 --- a/services/web/app/src/Features/Templates/TemplatesRouter.js +++ b/services/web/app/src/Features/Templates/TemplatesRouter.js @@ -1,17 +1,8 @@ -/* eslint-disable - max-len, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ const AuthenticationController = require('../Authentication/AuthenticationController') const TemplatesController = require('./TemplatesController') const TemplatesMiddleware = require('./TemplatesMiddleware') const RateLimiterMiddleware = require('../Security/RateLimiterMiddleware') +const AnalyticsRegistrationSourceMiddleware = require('../Analytics/AnalyticsRegistrationSourceMiddleware') module.exports = { apply(app) { @@ -22,15 +13,17 @@ module.exports = { TemplatesController.getV1Template ) - return app.post( + app.post( '/project/new/template', + AnalyticsRegistrationSourceMiddleware.setSource('template'), AuthenticationController.requireLogin(), RateLimiterMiddleware.rateLimit({ endpointName: 'create-project-from-template', maxRequests: 20, timeInterval: 60, }), - TemplatesController.createProjectFromV1Template + TemplatesController.createProjectFromV1Template, + AnalyticsRegistrationSourceMiddleware.clearSource() ) }, } diff --git a/services/web/app/src/router.js b/services/web/app/src/router.js index 110c787d39..6fffb6ecae 100644 --- a/services/web/app/src/router.js +++ b/services/web/app/src/router.js @@ -48,6 +48,7 @@ const TemplatesRouter = require('./Features/Templates/TemplatesRouter') const InstitutionsController = require('./Features/Institutions/InstitutionsController') const UserMembershipRouter = require('./Features/UserMembership/UserMembershipRouter') const SystemMessageController = require('./Features/SystemMessages/SystemMessageController') +const AnalyticsRegistrationSourceMiddleware = require('./Features/Analytics/AnalyticsRegistrationSourceMiddleware') const { Joi, validate } = require('./infrastructure/Validation') const { renderUnsupportedBrowserPage, @@ -1121,7 +1122,9 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) { maxRequests: 15, timeInterval: 60, }), - TokenAccessController.tokenAccessPage + AnalyticsRegistrationSourceMiddleware.setSource('link-sharing'), + TokenAccessController.tokenAccessPage, + AnalyticsRegistrationSourceMiddleware.clearSource() ) webRouter.get( @@ -1131,7 +1134,9 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) { maxRequests: 15, timeInterval: 60, }), - TokenAccessController.tokenAccessPage + AnalyticsRegistrationSourceMiddleware.setSource('link-sharing'), + TokenAccessController.tokenAccessPage, + AnalyticsRegistrationSourceMiddleware.clearSource() ) webRouter.post(