SubscriptionGroupController.coffee 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. removeSelfFromGroup: (req, res)->
  33. adminUserId = req.query.admin_user_id
  34. userToRemove_id = AuthenticationController.getLoggedInUserId(req)
  35. logger.log adminUserId:adminUserId, userToRemove_id:userToRemove_id, "removing user from group subscription after self request"
  36. SubscriptionGroupHandler.removeUserFromGroup adminUserId, userToRemove_id, (err)->
  37. if err?
  38. logger.err err:err, userToRemove_id:userToRemove_id, adminUserId:adminUserId, "error removing self from group"
  39. return res.sendStatus 500
  40. res.send()
  41. renderSubscriptionGroupAdminPage: (req, res)->
  42. user_id = AuthenticationController.getLoggedInUserId(req)
  43. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  44. if !subscription.groupPlan
  45. return res.redirect("/")
  46. SubscriptionGroupHandler.getPopulatedListOfMembers user_id, (err, users)->
  47. res.render "subscriptions/group_admin",
  48. title: 'group_admin'
  49. users: users
  50. subscription: subscription
  51. renderGroupInvitePage: (req, res)->
  52. group_subscription_id = req.params.subscription_id
  53. user_id = AuthenticationController.getLoggedInUserId(req)
  54. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(group_subscription_id)
  55. if !licence?
  56. return ErrorsController.notFound(req, res)
  57. jobs =
  58. partOfGroup: (cb)->
  59. SubscriptionGroupHandler.isUserPartOfGroup user_id, licence.group_subscription_id, cb
  60. subscription: (cb)->
  61. SubscriptionLocator.getUsersSubscription user_id, cb
  62. async.series jobs, (err, results)->
  63. {partOfGroup, subscription} = results
  64. if partOfGroup
  65. return res.redirect("/user/subscription/custom_account")
  66. else
  67. res.render "subscriptions/group/invite",
  68. title: "Group Invitation"
  69. group_subscription_id:group_subscription_id
  70. licenceName:licence.name
  71. has_personal_subscription: subscription?
  72. beginJoinGroup: (req, res)->
  73. subscription_id = req.params.subscription_id
  74. currentUser = AuthenticationController.getSessionUser(req)
  75. if !currentUser?
  76. logger.err {subscription_id}, "error getting current user"
  77. return res.sendStatus 500
  78. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)
  79. if !licence?
  80. return ErrorsController.notFound(req, res)
  81. SubscriptionGroupHandler.sendVerificationEmail subscription_id, licence.name, currentUser.email, (err)->
  82. if err?
  83. res.sendStatus 500
  84. else
  85. res.sendStatus 200
  86. completeJoin: (req, res)->
  87. currentUser = AuthenticationController.getSessionUser(req)
  88. subscription_id = req.params.subscription_id
  89. if !SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)?
  90. return ErrorsController.notFound(req, res)
  91. email = currentUser?.email
  92. logger.log subscription_id:subscription_id, user_id:currentUser?._id, email:email, "starting the completion of joining group"
  93. SubscriptionGroupHandler.processGroupVerification email, subscription_id, req.query?.token, (err)->
  94. if err? and err == "token_not_found"
  95. return res.redirect "/user/subscription/#{subscription_id}/group/invited?expired=true"
  96. else if err?
  97. return res.sendStatus 500
  98. else
  99. logger.log subscription_id:subscription_id, email:email, "user successful completed join of group subscription"
  100. return res.redirect "/user/subscription/#{subscription_id}/group/successful-join"
  101. renderSuccessfulJoinPage: (req, res)->
  102. subscription_id = req.params.subscription_id
  103. licence = SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)
  104. if !SubscriptionDomainHandler.findDomainLicenceBySubscriptionId(subscription_id)?
  105. return ErrorsController.notFound(req, res)
  106. res.render "subscriptions/group/successful_join",
  107. title: "Sucessfully joined group"
  108. licenceName:licence.name
  109. exportGroupCsv: (req, res)->
  110. user_id = AuthenticationController.getLoggedInUserId(req)
  111. logger.log user_id: user_id, "exporting group csv"
  112. SubscriptionLocator.getUsersSubscription user_id, (err, subscription)->
  113. if !subscription.groupPlan
  114. return res.redirect("/")
  115. SubscriptionGroupHandler.getPopulatedListOfMembers user_id, (err, users)->
  116. groupCsv = ""
  117. for user in users
  118. groupCsv += user.email + "\n"
  119. res.header(
  120. "Content-Disposition",
  121. "attachment; filename=Group.csv"
  122. )
  123. res.contentType('text/csv')
  124. res.send(groupCsv)