UserMembershipController.coffee 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. AuthenticationController = require('../Authentication/AuthenticationController')
  2. UserMembershipHandler = require('./UserMembershipHandler')
  3. EntityConfigs = require('./UserMembershipEntityConfigs')
  4. Errors = require('../Errors/Errors')
  5. EmailHelper = require("../Helpers/EmailHelper")
  6. logger = require("logger-sharelatex")
  7. module.exports =
  8. index: (req, res, next)->
  9. { entity, entityConfig } = req
  10. UserMembershipHandler.getUsers entity, entityConfig, (error, users)->
  11. return next(error) if error?
  12. entityPrimaryKey = entity[entityConfig.fields.primaryKey].toString()
  13. entityName = entity[entityConfig.fields.name] if entityConfig.fields.name
  14. res.render "user_membership/index",
  15. name: entityName
  16. users: users
  17. groupSize: entity.membersLimit if entityConfig.hasMembersLimit
  18. translations: entityConfig.translations
  19. paths: entityConfig.pathsFor(entityPrimaryKey)
  20. add: (req, res, next)->
  21. { entity, entityConfig } = req
  22. email = EmailHelper.parseEmail(req.body.email)
  23. if !email?
  24. return res.status(400).json error:
  25. code: 'invalid_email'
  26. message: req.i18n.translate('invalid_email')
  27. if entityConfig.readOnly
  28. return next(new Errors.NotFoundError("Cannot add users to entity"))
  29. UserMembershipHandler.addUser entity, entityConfig, email, (error, user)->
  30. if error?.alreadyAdded
  31. return res.status(400).json error:
  32. code: 'user_already_added'
  33. message: req.i18n.translate('user_already_added')
  34. if error?.userNotFound
  35. return res.status(404).json error:
  36. code: 'user_not_found'
  37. message: req.i18n.translate('user_not_found')
  38. return next(error) if error?
  39. res.json(user: user)
  40. remove: (req, res, next)->
  41. { entity, entityConfig } = req
  42. userId = req.params.userId
  43. if entityConfig.readOnly
  44. return next(new Errors.NotFoundError("Cannot remove users from entity"))
  45. loggedInUserId = AuthenticationController.getLoggedInUserId(req)
  46. if loggedInUserId == userId
  47. return res.status(400).json error:
  48. code: 'managers_cannot_remove_self'
  49. message: req.i18n.translate('managers_cannot_remove_self')
  50. UserMembershipHandler.removeUser entity, entityConfig, userId, (error, user)->
  51. if error?.isAdmin
  52. return res.status(400).json error:
  53. code: 'managers_cannot_remove_admin'
  54. message: req.i18n.translate('managers_cannot_remove_admin')
  55. return next(error) if error?
  56. res.send()
  57. exportCsv: (req, res, next)->
  58. { entity, entityConfig } = req
  59. logger.log subscriptionId: entity._id, "exporting csv"
  60. UserMembershipHandler.getUsers entity, entityConfig, (error, users)->
  61. return next(error) if error?
  62. csvOutput = ""
  63. for user in users
  64. csvOutput += user.email + "\n"
  65. res.header(
  66. "Content-Disposition",
  67. "attachment; filename=Group.csv"
  68. )
  69. res.contentType('text/csv')
  70. res.send(csvOutput)