AnalyticsRegistrationSourceMiddleware.mjs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import logger from '@overleaf/logger'
  2. import OError from '@overleaf/o-error'
  3. import AnalyticsRegistrationSourceHelper from './AnalyticsRegistrationSourceHelper.mjs'
  4. import SessionManager from '../../Features/Authentication/SessionManager.mjs'
  5. function setSource(medium, source) {
  6. return function (req, res, next) {
  7. if (req.session) {
  8. req.session.required_login_from_product_medium = medium
  9. if (source) {
  10. req.session.required_login_from_product_source = source
  11. }
  12. }
  13. next()
  14. }
  15. }
  16. function clearSource() {
  17. return function (req, res, next) {
  18. AnalyticsRegistrationSourceHelper.clearSource(req.session)
  19. next()
  20. }
  21. }
  22. function setInbound() {
  23. return function setInbound(req, res, next) {
  24. if (req.session.inbound) {
  25. return next() // don't overwrite referrer
  26. }
  27. if (SessionManager.isUserLoggedIn(req.session)) {
  28. return next() // don't store referrer if user is already logged in
  29. }
  30. const referrer = req.header('referrer')
  31. try {
  32. AnalyticsRegistrationSourceHelper.setInbound(
  33. req.session,
  34. req.url,
  35. req.query,
  36. referrer
  37. )
  38. } catch (error) {
  39. // log errors and fail silently
  40. OError.tag(error, 'failed to parse inbound referrer', {
  41. referrer,
  42. })
  43. logger.warn({ error }, error.message)
  44. }
  45. next()
  46. }
  47. }
  48. export default {
  49. setSource,
  50. clearSource,
  51. setInbound,
  52. }