2018-09-25 09:10:06 -04:00
|
|
|
AuthenticationController = require('../Authentication/AuthenticationController')
|
|
|
|
UserMembershipHandler = require('./UserMembershipHandler')
|
2018-10-11 13:56:14 -04:00
|
|
|
EntityConfigs = require('./UserMembershipEntityConfigs')
|
|
|
|
Errors = require('../Errors/Errors')
|
2018-10-30 10:17:53 -04:00
|
|
|
EmailHelper = require("../Helpers/EmailHelper")
|
2018-09-25 09:10:06 -04:00
|
|
|
logger = require("logger-sharelatex")
|
|
|
|
|
|
|
|
module.exports =
|
2018-10-24 09:50:34 -04:00
|
|
|
index: (req, res, next)->
|
|
|
|
{ entity, entityConfig } = req
|
2018-11-16 04:02:57 -05:00
|
|
|
entity.fetchV1Data (error, entity) ->
|
2018-09-25 09:10:06 -04:00
|
|
|
return next(error) if error?
|
2018-11-16 04:02:57 -05:00
|
|
|
UserMembershipHandler.getUsers entity, entityConfig, (error, users)->
|
|
|
|
return next(error) if error?
|
|
|
|
entityPrimaryKey = entity[entityConfig.fields.primaryKey].toString()
|
|
|
|
entityName = entity[entityConfig.fields.name] if entityConfig.fields.name
|
|
|
|
res.render "user_membership/index",
|
|
|
|
name: entityName
|
|
|
|
users: users
|
|
|
|
groupSize: entity.membersLimit if entityConfig.hasMembersLimit
|
|
|
|
translations: entityConfig.translations
|
|
|
|
paths: entityConfig.pathsFor(entityPrimaryKey)
|
2018-10-24 09:50:34 -04:00
|
|
|
|
|
|
|
add: (req, res, next)->
|
|
|
|
{ entity, entityConfig } = req
|
2018-10-30 10:17:53 -04:00
|
|
|
email = EmailHelper.parseEmail(req.body.email)
|
|
|
|
if !email?
|
|
|
|
return res.status(400).json error:
|
|
|
|
code: 'invalid_email'
|
|
|
|
message: req.i18n.translate('invalid_email')
|
|
|
|
|
2018-09-25 09:10:06 -04:00
|
|
|
|
2018-10-24 09:50:34 -04:00
|
|
|
if entityConfig.readOnly
|
|
|
|
return next(new Errors.NotFoundError("Cannot add users to entity"))
|
2018-09-25 09:10:06 -04:00
|
|
|
|
2018-10-24 09:50:34 -04:00
|
|
|
UserMembershipHandler.addUser entity, entityConfig, email, (error, user)->
|
2018-10-30 10:17:53 -04:00
|
|
|
if error?.alreadyAdded
|
|
|
|
return res.status(400).json error:
|
|
|
|
code: 'user_already_added'
|
|
|
|
message: req.i18n.translate('user_already_added')
|
|
|
|
if error?.userNotFound
|
|
|
|
return res.status(404).json error:
|
|
|
|
code: 'user_not_found'
|
|
|
|
message: req.i18n.translate('user_not_found')
|
2018-09-25 09:10:06 -04:00
|
|
|
return next(error) if error?
|
2018-10-24 09:50:34 -04:00
|
|
|
res.json(user: user)
|
2018-10-11 13:56:14 -04:00
|
|
|
|
2018-10-24 09:50:34 -04:00
|
|
|
remove: (req, res, next)->
|
|
|
|
{ entity, entityConfig } = req
|
|
|
|
userId = req.params.userId
|
2018-09-25 09:10:06 -04:00
|
|
|
|
2018-10-24 09:50:34 -04:00
|
|
|
if entityConfig.readOnly
|
|
|
|
return next(new Errors.NotFoundError("Cannot remove users from entity"))
|
2018-10-11 13:56:14 -04:00
|
|
|
|
2018-10-30 10:17:53 -04:00
|
|
|
loggedInUserId = AuthenticationController.getLoggedInUserId(req)
|
|
|
|
if loggedInUserId == userId
|
|
|
|
return res.status(400).json error:
|
|
|
|
code: 'managers_cannot_remove_self'
|
|
|
|
message: req.i18n.translate('managers_cannot_remove_self')
|
|
|
|
|
2018-10-24 09:50:34 -04:00
|
|
|
UserMembershipHandler.removeUser entity, entityConfig, userId, (error, user)->
|
2018-10-30 10:17:53 -04:00
|
|
|
if error?.isAdmin
|
|
|
|
return res.status(400).json error:
|
|
|
|
code: 'managers_cannot_remove_admin'
|
|
|
|
message: req.i18n.translate('managers_cannot_remove_admin')
|
2018-10-24 09:50:34 -04:00
|
|
|
return next(error) if error?
|
|
|
|
res.send()
|
2018-10-25 11:10:02 -04:00
|
|
|
|
|
|
|
exportCsv: (req, res, next)->
|
|
|
|
{ entity, entityConfig } = req
|
|
|
|
logger.log subscriptionId: entity._id, "exporting csv"
|
|
|
|
UserMembershipHandler.getUsers entity, entityConfig, (error, users)->
|
|
|
|
return next(error) if error?
|
|
|
|
csvOutput = ""
|
|
|
|
for user in users
|
|
|
|
csvOutput += user.email + "\n"
|
|
|
|
res.header(
|
|
|
|
"Content-Disposition",
|
|
|
|
"attachment; filename=Group.csv"
|
|
|
|
)
|
|
|
|
res.contentType('text/csv')
|
|
|
|
res.send(csvOutput)
|
2018-12-06 05:52:54 -05:00
|
|
|
|
|
|
|
new: (req, res, next)->
|
|
|
|
res.render "user_membership/new",
|
|
|
|
entityName: req.params.name
|
|
|
|
entityId: req.params.id
|
|
|
|
|
|
|
|
create: (req, res, next)->
|
|
|
|
entityName = req.params.name
|
|
|
|
entityId = req.params.id
|
|
|
|
entityConfig = EntityConfigs[entityName]
|
|
|
|
unless entityConfig
|
|
|
|
return next(new Errors.NotFoundError("No such entity: #{entityName}"))
|
|
|
|
unless entityConfig.canCreate
|
|
|
|
return next(new Errors.NotFoundError("Cannot create new #{entityName}"))
|
|
|
|
|
|
|
|
UserMembershipHandler.createEntity entityId, entityConfig, (error, entity) ->
|
|
|
|
return next(error) if error?
|
|
|
|
res.redirect entityConfig.pathsFor(entityId).index
|