Merge pull request #4149 from overleaf/ab-user-registration-properties

Track registration sources as user properties

GitOrigin-RevId: 1c1346d092808aff49c89c1659f42674506a919d
This commit is contained in:
Alexandre Bourdin 2021-06-10 10:04:11 +02:00 committed by Copybot
parent 607fb01b0b
commit e2d116e8be
5 changed files with 48 additions and 16 deletions

View file

@ -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,
}

View file

@ -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)
})
})

View file

@ -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()
)
},
}

View file

@ -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()
)
},
}

View file

@ -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(