SubscriptionGroupController.coffee 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. SubscriptionGroupHandler = require("./SubscriptionGroupHandler")
  2. logger = require("logger-sharelatex")
  3. SubscriptionLocator = require("./SubscriptionLocator")
  4. ErrorsController = require("../Errors/ErrorController")
  5. SubscriptionDomainHandler = require("./SubscriptionDomainHandler")
  6. AuthenticationController = require('../Authentication/AuthenticationController')
  7. _ = require("underscore")
  8. async = require("async")
  9. module.exports =
  10. addUserToGroup: (req, res)->
  11. adminUserId = AuthenticationController.getLoggedInUserId(req)
  12. newEmail = req.body?.email?.toLowerCase()?.trim()
  13. logger.log adminUserId:adminUserId, newEmail:newEmail, "adding user to group subscription"
  14. SubscriptionGroupHandler.addUserToGroup adminUserId, newEmail, (err, user)->
  15. if err?
  16. logger.err err:err, newEmail:newEmail, adminUserId:adminUserId, "error adding user from group"
  17. return res.sendStatus 500
  18. result =
  19. user:user
  20. if err and err.limitReached
  21. result.limitReached = true
  22. res.json(result)
  23. removeUserFromGroup: (req, res)->
  24. adminUserId = AuthenticationController.getLoggedInUserId(req)
  25. userToRemove_id = req.params.user_id
  26. logger.log adminUserId:adminUserId, userToRemove_id:userToRemove_id, "removing user from group subscription"
  27. SubscriptionGroupHandler.removeUserFromGroup adminUserId, userToRemove_id, (err)->
  28. if err?
  29. logger.err err:err, adminUserId:adminUserId, userToRemove_id:userToRemove_id, "error removing user from group"
  30. return res.sendStatus 500
  31. res.send()
  32. removeEmailInviteFromGroup: (req, res)->
  33. adminUserId = AuthenticationController.getLoggedInUserId(req)
  34. email = req.params.email
  35. logger.log {adminUserId, email}, "removing email invite from group subscription"
  36. SubscriptionGroupHandler.removeEmailInviteFromGroup adminUserId, email, (err)->
  37. return next(error) if error?
  38. res.send()
  39. removeSelfFromGroup: (req, res)->
  40. adminUserId = req.query.admin_user_id
  41. userToRemove_id = AuthenticationController.getLoggedInUserId(req)
  42. logger.log adminUserId:adminUserId, userToRemove_id:userToRemove_id, "removing user from group subscription after self request"
  43. SubscriptionGroupHandler.removeUserFromGroup adminUserId, userToRemove_id, (err)->
  44. if err?
  45. logger.err err:err, userToRemove_id:userToRemove_id, adminUserId:adminUserId, "error removing self from group"
  46. return res.sendStatus 500
  47. res.send()
  48. renderSubscriptionGroupAdminPage: (req, res)->
  49. user_id = AuthenticationController.getLoggedInUserId(req)
  50. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  51. if !subscription?.groupPlan
  52. return res.redirect("/user/subscription")
  53. SubscriptionGroupHandler.getPopulatedListOfMembers user_id, (err, users)->
  54. res.render "subscriptions/group_admin",
  55. title: 'group_admin'
  56. users: users
  57. subscription: subscription
  58. renderGroupInvitePage: (req, res)->
  59. group_subscription_id = req.params.subscription_id
  60. user_id = AuthenticationController.getLoggedInUserId(req)
  61. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(group_subscription_id)
  62. if !licence?
  63. return ErrorsController.notFound(req, res)
  64. jobs =
  65. partOfGroup: (cb)->
  66. SubscriptionGroupHandler.isUserPartOfGroup user_id, licence.group_subscription_id, cb
  67. subscription: (cb)->
  68. SubscriptionLocator.getUsersSubscription user_id, cb
  69. async.series jobs, (err, results)->
  70. {partOfGroup, subscription} = results
  71. if partOfGroup
  72. return res.redirect("/user/subscription/custom_account")
  73. else
  74. res.render "subscriptions/group/invite",
  75. title: "Group Invitation"
  76. group_subscription_id:group_subscription_id
  77. licenceName:licence.name
  78. has_personal_subscription: subscription?
  79. beginJoinGroup: (req, res)->
  80. subscription_id = req.params.subscription_id
  81. currentUser = AuthenticationController.getSessionUser(req)
  82. if !currentUser?
  83. logger.err {subscription_id}, "error getting current user"
  84. return res.sendStatus 500
  85. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)
  86. if !licence?
  87. return ErrorsController.notFound(req, res)
  88. SubscriptionGroupHandler.sendVerificationEmail subscription_id, licence.name, currentUser.email, (err)->
  89. if err?
  90. res.sendStatus 500
  91. else
  92. res.sendStatus 200
  93. completeJoin: (req, res)->
  94. currentUser = AuthenticationController.getSessionUser(req)
  95. subscription_id = req.params.subscription_id
  96. if !SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)?
  97. return ErrorsController.notFound(req, res)
  98. email = currentUser?.email
  99. logger.log subscription_id:subscription_id, user_id:currentUser?._id, email:email, "starting the completion of joining group"
  100. SubscriptionGroupHandler.processGroupVerification email, subscription_id, req.query?.token, (err)->
  101. if err? and err == "token_not_found"
  102. return res.redirect "/user/subscription/#{subscription_id}/group/invited?expired=true"
  103. else if err?
  104. return res.sendStatus 500
  105. else
  106. logger.log subscription_id:subscription_id, email:email, "user successful completed join of group subscription"
  107. return res.redirect "/user/subscription/#{subscription_id}/group/successful-join"
  108. renderSuccessfulJoinPage: (req, res)->
  109. subscription_id = req.params.subscription_id
  110. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)
  111. if !SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)?
  112. return ErrorsController.notFound(req, res)
  113. res.render "subscriptions/group/successful_join",
  114. title: "Sucessfully joined group"
  115. licenceName:licence.name
  116. exportGroupCsv: (req, res)->
  117. user_id = AuthenticationController.getLoggedInUserId(req)
  118. logger.log user_id: user_id, "exporting group csv"
  119. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  120. if !subscription.groupPlan
  121. return res.redirect("/")
  122. SubscriptionGroupHandler.getPopulatedListOfMembers user_id, (err, users)->
  123. groupCsv = ""
  124. for user in users
  125. groupCsv += user.email + "\n"
  126. res.header(
  127. "Content-Disposition",
  128. "attachment; filename=Group.csv"
  129. )
  130. res.contentType('text/csv')
  131. res.send(groupCsv)