SubscriptionRouter.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. module.exports = {
  14. apply(webRouter, privateApiRouter, publicApiRouter) {
  15. if (!Settings.enableSubscriptions) {
  16. return
  17. }
  18. webRouter.get('/user/subscription/plans', SubscriptionController.plansPage)
  19. webRouter.get(
  20. '/user/subscription',
  21. AuthenticationController.requireLogin(),
  22. SubscriptionController.userSubscriptionPage
  23. )
  24. webRouter.get(
  25. '/user/subscription/new',
  26. AuthenticationController.requireLogin(),
  27. SubscriptionController.paymentPage
  28. )
  29. webRouter.get(
  30. '/user/subscription/choose-your-plan',
  31. AuthenticationController.requireLogin(),
  32. SubscriptionController.interstitialPaymentPage
  33. )
  34. webRouter.get(
  35. '/user/subscription/thank-you',
  36. AuthenticationController.requireLogin(),
  37. SubscriptionController.successfulSubscription
  38. )
  39. webRouter.get(
  40. '/user/subscription/canceled',
  41. AuthenticationController.requireLogin(),
  42. SubscriptionController.canceledSubscription
  43. )
  44. webRouter.get(
  45. '/user/subscription/recurly/:pageType',
  46. AuthenticationController.requireLogin(),
  47. SubscriptionController.redirectToHostedPage
  48. )
  49. webRouter.delete(
  50. '/subscription/group/user',
  51. AuthenticationController.requireLogin(),
  52. PermissionsController.requirePermission('leave-group-subscription'),
  53. SubscriptionGroupController.removeSelfFromGroup
  54. )
  55. // Team invites
  56. webRouter.get(
  57. '/subscription/invites/:token/',
  58. TeamInvitesController.viewInvite
  59. )
  60. webRouter.put(
  61. '/subscription/invites/:token/',
  62. AuthenticationController.requireLogin(),
  63. RateLimiterMiddleware.rateLimit(teamInviteRateLimiter),
  64. PermissionsController.requirePermission('join-subscription'),
  65. TeamInvitesController.acceptInvite
  66. )
  67. // recurly callback
  68. publicApiRouter.post(
  69. '/user/subscription/callback',
  70. AuthenticationController.requireBasicAuth({
  71. [Settings.apis.recurly.webhookUser]: Settings.apis.recurly.webhookPass,
  72. }),
  73. SubscriptionController.recurlyNotificationParser,
  74. SubscriptionController.recurlyCallback
  75. )
  76. // user changes their account state
  77. webRouter.post(
  78. '/user/subscription/create',
  79. AuthenticationController.requireLogin(),
  80. PermissionsController.requirePermission('start-subscription'),
  81. SubscriptionController.createSubscription
  82. )
  83. webRouter.post(
  84. '/user/subscription/update',
  85. AuthenticationController.requireLogin(),
  86. SubscriptionController.updateSubscription
  87. )
  88. webRouter.post(
  89. '/user/subscription/cancel-pending',
  90. AuthenticationController.requireLogin(),
  91. SubscriptionController.cancelPendingSubscriptionChange
  92. )
  93. webRouter.post(
  94. '/user/subscription/cancel',
  95. AuthenticationController.requireLogin(),
  96. SubscriptionController.cancelSubscription
  97. )
  98. webRouter.post(
  99. '/user/subscription/reactivate',
  100. AuthenticationController.requireLogin(),
  101. SubscriptionController.reactivateSubscription
  102. )
  103. webRouter.post(
  104. '/user/subscription/v1/cancel',
  105. AuthenticationController.requireLogin(),
  106. SubscriptionController.cancelV1Subscription
  107. )
  108. webRouter.put(
  109. '/user/subscription/extend',
  110. AuthenticationController.requireLogin(),
  111. SubscriptionController.extendTrial
  112. )
  113. webRouter.get(
  114. '/user/subscription/upgrade-annual',
  115. AuthenticationController.requireLogin(),
  116. SubscriptionController.renderUpgradeToAnnualPlanPage
  117. )
  118. webRouter.post(
  119. '/user/subscription/upgrade-annual',
  120. AuthenticationController.requireLogin(),
  121. SubscriptionController.processUpgradeToAnnualPlan
  122. )
  123. webRouter.post(
  124. '/user/subscription/account/email',
  125. AuthenticationController.requireLogin(),
  126. SubscriptionController.updateAccountEmailAddress
  127. )
  128. },
  129. }