UserMembershipController.coffee 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. entity.fetchV1Data (error, entity) ->
  11. return next(error) if error?
  12. UserMembershipHandler.getUsers entity, entityConfig, (error, users)->
  13. return next(error) if error?
  14. entityPrimaryKey = entity[entityConfig.fields.primaryKey].toString()
  15. entityName = entity[entityConfig.fields.name] if entityConfig.fields.name
  16. res.render "user_membership/index",
  17. name: entityName
  18. users: users
  19. groupSize: entity.membersLimit if entityConfig.hasMembersLimit
  20. translations: entityConfig.translations
  21. paths: entityConfig.pathsFor(entityPrimaryKey)
  22. add: (req, res, next)->
  23. { entity, entityConfig } = req
  24. email = EmailHelper.parseEmail(req.body.email)
  25. if !email?
  26. return res.status(400).json error:
  27. code: 'invalid_email'
  28. message: req.i18n.translate('invalid_email')
  29. if entityConfig.readOnly
  30. return next(new Errors.NotFoundError("Cannot add users to entity"))
  31. UserMembershipHandler.addUser entity, entityConfig, email, (error, user)->
  32. if error?.alreadyAdded
  33. return res.status(400).json error:
  34. code: 'user_already_added'
  35. message: req.i18n.translate('user_already_added')
  36. if error?.userNotFound
  37. return res.status(404).json error:
  38. code: 'user_not_found'
  39. message: req.i18n.translate('user_not_found')
  40. return next(error) if error?
  41. res.json(user: user)
  42. remove: (req, res, next)->
  43. { entity, entityConfig } = req
  44. userId = req.params.userId
  45. if entityConfig.readOnly
  46. return next(new Errors.NotFoundError("Cannot remove users from entity"))
  47. loggedInUserId = AuthenticationController.getLoggedInUserId(req)
  48. if loggedInUserId == userId
  49. return res.status(400).json error:
  50. code: 'managers_cannot_remove_self'
  51. message: req.i18n.translate('managers_cannot_remove_self')
  52. UserMembershipHandler.removeUser entity, entityConfig, userId, (error, user)->
  53. if error?.isAdmin
  54. return res.status(400).json error:
  55. code: 'managers_cannot_remove_admin'
  56. message: req.i18n.translate('managers_cannot_remove_admin')
  57. return next(error) if error?
  58. res.send()
  59. exportCsv: (req, res, next)->
  60. { entity, entityConfig } = req
  61. logger.log subscriptionId: entity._id, "exporting csv"
  62. UserMembershipHandler.getUsers entity, entityConfig, (error, users)->
  63. return next(error) if error?
  64. csvOutput = ""
  65. for user in users
  66. csvOutput += user.email + "\n"
  67. res.header(
  68. "Content-Disposition",
  69. "attachment; filename=Group.csv"
  70. )
  71. res.contentType('text/csv')
  72. res.send(csvOutput)
  73. new: (req, res, next)->
  74. res.render "user_membership/new",
  75. entityName: req.params.name
  76. entityId: req.params.id
  77. create: (req, res, next)->
  78. entityName = req.params.name
  79. entityId = req.params.id
  80. entityConfig = EntityConfigs[entityName]
  81. unless entityConfig
  82. return next(new Errors.NotFoundError("No such entity: #{entityName}"))
  83. unless entityConfig.canCreate
  84. return next(new Errors.NotFoundError("Cannot create new #{entityName}"))
  85. UserMembershipHandler.createEntity entityId, entityConfig, (error, entity) ->
  86. return next(error) if error?
  87. res.redirect entityConfig.pathsFor(entityId).index