AnalyticsRouter.mjs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import AuthenticationController from './../Authentication/AuthenticationController.mjs'
  2. import AnalyticsController from './AnalyticsController.mjs'
  3. import AnalyticsProxy from './AnalyticsProxy.mjs'
  4. import { RateLimiter } from '../../infrastructure/RateLimiter.mjs'
  5. import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
  6. const rateLimiters = {
  7. recordEvent: new RateLimiter('analytics-record-event', {
  8. points: 200,
  9. duration: 60,
  10. }),
  11. updateEditingSession: new RateLimiter('analytics-update-editing-session', {
  12. points: 20,
  13. duration: 60,
  14. }),
  15. uniExternalCollabProxy: new RateLimiter(
  16. 'analytics-uni-external-collab-proxy',
  17. { points: 20, duration: 60 }
  18. ),
  19. }
  20. export default {
  21. apply(webRouter, privateApiRouter, publicApiRouter) {
  22. webRouter.post(
  23. '/event/:event([a-z0-9-_]+)',
  24. RateLimiterMiddleware.rateLimit(rateLimiters.recordEvent),
  25. AnalyticsController.recordEvent
  26. )
  27. webRouter.put(
  28. '/editingSession/:projectId',
  29. RateLimiterMiddleware.rateLimit(rateLimiters.updateEditingSession, {
  30. params: ['projectId'],
  31. }),
  32. AnalyticsController.updateEditingSession
  33. )
  34. publicApiRouter.use(
  35. '/analytics/uniExternalCollaboration',
  36. AuthenticationController.requirePrivateApiAuth(),
  37. RateLimiterMiddleware.rateLimit(rateLimiters.uniExternalCollabProxy),
  38. AnalyticsProxy.call('/uniExternalCollaboration')
  39. )
  40. publicApiRouter.post(
  41. '/analytics/register-v-1-salesforce-mapping',
  42. AuthenticationController.requirePrivateApiAuth(),
  43. AnalyticsController.registerSalesforceMapping
  44. )
  45. },
  46. }