SplitTestMiddleware.mjs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import SplitTestHandler from './SplitTestHandler.mjs'
  2. import logger from '@overleaf/logger'
  3. import { expressify } from '@overleaf/promise-utils'
  4. import Errors from '../Errors/Errors.js'
  5. function loadAssignmentsInLocals(splitTestNames) {
  6. return async function (req, res, next) {
  7. try {
  8. for (const splitTestName of splitTestNames) {
  9. await SplitTestHandler.promises.getAssignment(req, res, splitTestName)
  10. }
  11. } catch (error) {
  12. logger.error(
  13. { err: error, splitTestNames },
  14. 'Failed to load split test assignments in express locals in middleware'
  15. )
  16. }
  17. next()
  18. }
  19. }
  20. function ensureSplitTestEnabledForUser(
  21. splitTestName,
  22. enabledVariant = 'enabled'
  23. ) {
  24. return expressify(async function (req, res, next) {
  25. const { variant } = await SplitTestHandler.promises.getAssignment(
  26. req,
  27. res,
  28. splitTestName
  29. )
  30. if (variant !== enabledVariant) {
  31. throw new Errors.ForbiddenError({
  32. message: 'missing split test access',
  33. info: {
  34. splitTestName,
  35. variant,
  36. enabledVariant,
  37. },
  38. })
  39. }
  40. next()
  41. })
  42. }
  43. export default {
  44. loadAssignmentsInLocals,
  45. ensureSplitTestEnabledForUser,
  46. }