AnalyticsRouter.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const AuthenticationController = require('./../Authentication/AuthenticationController')
  2. const AnalyticsController = require('./AnalyticsController')
  3. const AnalyticsProxy = require('./AnalyticsProxy')
  4. const { RateLimiter } = require('../../infrastructure/RateLimiter')
  5. const RateLimiterMiddleware = require('../Security/RateLimiterMiddleware')
  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. module.exports = {
  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. },
  41. }