Files
overleaf-cep/services/web/app/src/Features/SplitTests/SplitTestMiddleware.js
T
Jakob Ackermann 577497b655 Merge pull request #19842 from overleaf/jpa-ro-mirror-on-client
[misc] add readonly mirror of full project content on the client

GitOrigin-RevId: 940bd93bfd587f83ca383d10fc44579b38fc3e88
2024-08-22 08:05:13 +00:00

50 lines
1.2 KiB
JavaScript

const SplitTestHandler = require('./SplitTestHandler')
const logger = require('@overleaf/logger')
const { expressify } = require('@overleaf/promise-utils')
const Errors = require('../Errors/Errors')
function loadAssignmentsInLocals(splitTestNames) {
return async function (req, res, next) {
try {
for (const splitTestName of splitTestNames) {
await SplitTestHandler.promises.getAssignment(req, res, splitTestName)
}
} catch (error) {
logger.error(
{ err: error, splitTestNames },
'Failed to load split test assignments in express locals in middleware'
)
}
next()
}
}
function ensureSplitTestEnabledForUser(
splitTestName,
enabledVariant = 'enabled'
) {
return expressify(async function (req, res, next) {
const { variant } = await SplitTestHandler.promises.getAssignment(
req,
res,
splitTestName
)
if (variant !== enabledVariant) {
throw new Errors.ForbiddenError({
message: 'missing split test access',
info: {
splitTestName,
variant,
enabledVariant,
},
})
}
next()
})
}
module.exports = {
loadAssignmentsInLocals,
ensureSplitTestEnabledForUser,
}