SubscriptionRouter.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. const AuthenticationController = require('../Authentication/AuthenticationController')
  2. const PermissionsController = require('../Authorization/PermissionsController')
  3. const SubscriptionController = require('./SubscriptionController')
  4. const SubscriptionGroupController = require('./SubscriptionGroupController')
  5. const TeamInvitesController = require('./TeamInvitesController')
  6. const { RateLimiter } = require('../../infrastructure/RateLimiter')
  7. const RateLimiterMiddleware = require('../Security/RateLimiterMiddleware')
  8. const Settings = require('@overleaf/settings')
  9. const teamInviteRateLimiter = new RateLimiter('team-invite', {
  10. points: 10,
  11. duration: 60,
  12. })
  13. const subscriptionRateLimiter = new RateLimiter('subscription', {
  14. points: 30,
  15. duration: 60,
  16. })
  17. module.exports = {
  18. apply(webRouter, privateApiRouter, publicApiRouter) {
  19. if (!Settings.enableSubscriptions) {
  20. return
  21. }
  22. webRouter.get(
  23. '/user/subscription/plans',
  24. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  25. SubscriptionController.plansPage
  26. )
  27. webRouter.get(
  28. '/user/subscription/plans-3',
  29. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  30. SubscriptionController.plansPageLightDesign
  31. )
  32. webRouter.get(
  33. '/user/subscription',
  34. AuthenticationController.requireLogin(),
  35. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  36. PermissionsController.useCapabilities(),
  37. SubscriptionController.userSubscriptionPage
  38. )
  39. webRouter.get(
  40. '/user/subscription/choose-your-plan',
  41. AuthenticationController.requireLogin(),
  42. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  43. SubscriptionController.interstitialPaymentPage
  44. )
  45. webRouter.get(
  46. '/user/subscription/thank-you',
  47. AuthenticationController.requireLogin(),
  48. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  49. SubscriptionController.successfulSubscription
  50. )
  51. webRouter.get(
  52. '/user/subscription/canceled',
  53. AuthenticationController.requireLogin(),
  54. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  55. SubscriptionController.canceledSubscription
  56. )
  57. webRouter.get(
  58. '/user/subscription/recurly/:pageType',
  59. AuthenticationController.requireLogin(),
  60. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  61. SubscriptionController.redirectToHostedPage
  62. )
  63. webRouter.delete(
  64. '/subscription/group/user',
  65. AuthenticationController.requireLogin(),
  66. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  67. PermissionsController.requirePermission('leave-group-subscription'),
  68. SubscriptionGroupController.removeSelfFromGroup
  69. )
  70. // Team invites
  71. webRouter.get(
  72. '/subscription/invites/:token/',
  73. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  74. PermissionsController.useCapabilities(),
  75. TeamInvitesController.viewInvite
  76. )
  77. webRouter.get(
  78. '/subscription/invites/',
  79. AuthenticationController.requireLogin(),
  80. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  81. PermissionsController.useCapabilities(),
  82. TeamInvitesController.viewInvites
  83. )
  84. webRouter.put(
  85. '/subscription/invites/:token/',
  86. AuthenticationController.requireLogin(),
  87. RateLimiterMiddleware.rateLimit(teamInviteRateLimiter),
  88. PermissionsController.requirePermission('join-subscription'),
  89. TeamInvitesController.acceptInvite
  90. )
  91. // recurly callback
  92. publicApiRouter.post(
  93. '/user/subscription/callback',
  94. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  95. AuthenticationController.requireBasicAuth({
  96. [Settings.apis.recurly.webhookUser]: Settings.apis.recurly.webhookPass,
  97. }),
  98. SubscriptionController.recurlyNotificationParser,
  99. SubscriptionController.recurlyCallback
  100. )
  101. // user changes their account state
  102. webRouter.post(
  103. '/user/subscription/update',
  104. AuthenticationController.requireLogin(),
  105. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  106. SubscriptionController.updateSubscription
  107. )
  108. webRouter.post(
  109. '/user/subscription/cancel-pending',
  110. AuthenticationController.requireLogin(),
  111. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  112. SubscriptionController.cancelPendingSubscriptionChange
  113. )
  114. webRouter.post(
  115. '/user/subscription/cancel',
  116. AuthenticationController.requireLogin(),
  117. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  118. SubscriptionController.cancelSubscription
  119. )
  120. webRouter.post(
  121. '/user/subscription/reactivate',
  122. AuthenticationController.requireLogin(),
  123. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  124. PermissionsController.useCapabilities(),
  125. SubscriptionController.reactivateSubscription
  126. )
  127. webRouter.post(
  128. '/user/subscription/v1/cancel',
  129. AuthenticationController.requireLogin(),
  130. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  131. SubscriptionController.cancelV1Subscription
  132. )
  133. webRouter.put(
  134. '/user/subscription/extend',
  135. AuthenticationController.requireLogin(),
  136. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  137. SubscriptionController.extendTrial
  138. )
  139. webRouter.post(
  140. '/user/subscription/account/email',
  141. AuthenticationController.requireLogin(),
  142. RateLimiterMiddleware.rateLimit(subscriptionRateLimiter),
  143. SubscriptionController.updateAccountEmailAddress
  144. )
  145. },
  146. }