TeamInvitesController.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /* eslint-disable
  2. max-len,
  3. no-unused-vars,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * DS207: Consider shorter variations of null checks
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. const settings = require('@overleaf/settings')
  14. const logger = require('logger-sharelatex')
  15. const TeamInvitesHandler = require('./TeamInvitesHandler')
  16. const SessionManager = require('../Authentication/SessionManager')
  17. const SubscriptionLocator = require('./SubscriptionLocator')
  18. const ErrorController = require('../Errors/ErrorController')
  19. const EmailHelper = require('../Helpers/EmailHelper')
  20. module.exports = {
  21. createInvite(req, res, next) {
  22. const teamManagerId = SessionManager.getLoggedInUserId(req.session)
  23. const subscription = req.entity
  24. const email = EmailHelper.parseEmail(req.body.email)
  25. if (email == null) {
  26. return res.status(422).json({
  27. error: {
  28. code: 'invalid_email',
  29. message: req.i18n.translate('invalid_email'),
  30. },
  31. })
  32. }
  33. return TeamInvitesHandler.createInvite(
  34. teamManagerId,
  35. subscription,
  36. email,
  37. function (err, inviteUserData) {
  38. if (err != null) {
  39. if (err.alreadyInTeam) {
  40. return res.status(400).json({
  41. error: {
  42. code: 'user_already_added',
  43. message: req.i18n.translate('user_already_added'),
  44. },
  45. })
  46. }
  47. if (err.limitReached) {
  48. return res.status(400).json({
  49. error: {
  50. code: 'group_full',
  51. message: req.i18n.translate('group_full'),
  52. },
  53. })
  54. }
  55. return next(err)
  56. }
  57. return res.json({ user: inviteUserData })
  58. }
  59. )
  60. },
  61. viewInvite(req, res, next) {
  62. const { token } = req.params
  63. const userId = SessionManager.getLoggedInUserId(req.session)
  64. return TeamInvitesHandler.getInvite(
  65. token,
  66. function (err, invite, teamSubscription) {
  67. if (err != null) {
  68. return next(err)
  69. }
  70. if (!invite) {
  71. return ErrorController.notFound(req, res, next)
  72. }
  73. return SubscriptionLocator.getUsersSubscription(
  74. userId,
  75. function (err, personalSubscription) {
  76. if (err != null) {
  77. return next(err)
  78. }
  79. const hasIndividualRecurlySubscription =
  80. personalSubscription != null &&
  81. personalSubscription.planCode.match(/(free|trial)/) == null &&
  82. personalSubscription.groupPlan === false &&
  83. personalSubscription.recurlySubscription_id != null &&
  84. personalSubscription.recurlySubscription_id !== ''
  85. return res.render('subscriptions/team/invite', {
  86. inviterName: invite.inviterName,
  87. inviteToken: invite.token,
  88. hasIndividualRecurlySubscription,
  89. appName: settings.appName,
  90. expired: req.query.expired,
  91. })
  92. }
  93. )
  94. }
  95. )
  96. },
  97. acceptInvite(req, res, next) {
  98. const { token } = req.params
  99. const userId = SessionManager.getLoggedInUserId(req.session)
  100. return TeamInvitesHandler.acceptInvite(
  101. token,
  102. userId,
  103. function (err, results) {
  104. if (err != null) {
  105. return next(err)
  106. }
  107. return res.sendStatus(204)
  108. }
  109. )
  110. },
  111. revokeInvite(req, res, next) {
  112. const subscription = req.entity
  113. const email = EmailHelper.parseEmail(req.params.email)
  114. const teamManagerId = SessionManager.getLoggedInUserId(req.session)
  115. if (email == null) {
  116. return res.sendStatus(400)
  117. }
  118. return TeamInvitesHandler.revokeInvite(
  119. teamManagerId,
  120. subscription,
  121. email,
  122. function (err, results) {
  123. if (err != null) {
  124. return next(err)
  125. }
  126. return res.sendStatus(204)
  127. }
  128. )
  129. },
  130. }