overleaf/services/web/app/coffee/Features/UserMembership/UserMembershipController.coffee
Simon Detheridge f3a10ac221 Merge pull request #1192 from sharelatex/ta-publisher-create
Add Interface to Create Publishers

GitOrigin-RevId: 50af2d1c05821d20b1ec33e8f68a05d824e55c46
2018-12-06 11:10:20 +00:00

100 lines
3.4 KiB
CoffeeScript

AuthenticationController = require('../Authentication/AuthenticationController')
UserMembershipHandler = require('./UserMembershipHandler')
EntityConfigs = require('./UserMembershipEntityConfigs')
Errors = require('../Errors/Errors')
EmailHelper = require("../Helpers/EmailHelper")
logger = require("logger-sharelatex")
module.exports =
index: (req, res, next)->
{ entity, entityConfig } = req
entity.fetchV1Data (error, entity) ->
return next(error) if error?
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)
add: (req, res, next)->
{ entity, entityConfig } = req
email = EmailHelper.parseEmail(req.body.email)
if !email?
return res.status(400).json error:
code: 'invalid_email'
message: req.i18n.translate('invalid_email')
if entityConfig.readOnly
return next(new Errors.NotFoundError("Cannot add users to entity"))
UserMembershipHandler.addUser entity, entityConfig, email, (error, user)->
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')
return next(error) if error?
res.json(user: user)
remove: (req, res, next)->
{ entity, entityConfig } = req
userId = req.params.userId
if entityConfig.readOnly
return next(new Errors.NotFoundError("Cannot remove users from entity"))
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')
UserMembershipHandler.removeUser entity, entityConfig, userId, (error, user)->
if error?.isAdmin
return res.status(400).json error:
code: 'managers_cannot_remove_admin'
message: req.i18n.translate('managers_cannot_remove_admin')
return next(error) if error?
res.send()
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)
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