UNPKG

linagora-rse

Version:
252 lines (202 loc) 7.66 kB
'use strict'; var communityModule = require('../../core/community'); var communityPermission = communityModule.permission; var collaborationConstants = require('../../core/collaboration/constants'); var mongoose = require('mongoose'); var Community = mongoose.model('Community'); const logger = require('../../core/logger'); module.exports.findStreamResource = function(req, res, next) { var uuid = req.params.uuid; Community.getFromActivityStreamID(uuid, function(err, community) { if (err) { return next(new Error('Error while searching the stream resource : ' + err.message)); } if (!community) { return next(); } req.activity_stream = { objectType: 'activitystream', _id: uuid, target: { objectType: 'community', object: community } }; next(); }); }; module.exports.filterWritableTargets = function(req, res, next) { var inReplyTo = req.body.inReplyTo; if (inReplyTo) { return next(); } var targets = req.body.targets; if (!targets || targets.length === 0) { return next(); } var async = require('async'); async.filter(targets, function(item, callback) { Community.getFromActivityStreamID(item.id, function(err, community) { if (err || !community) { return callback(err, false); } communityPermission.canWrite(community, {objectType: 'user', id: req.user.id}, callback); }); }, function(err, results) { if (!results || results.length === 0) { return next(); } if (!req.message_targets) { req.message_targets = []; } req.message_targets = req.message_targets.concat(results); next(); } ); }; module.exports.canJoin = function(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } if (!req.params || !req.params.user_id) { return res.status(400).json({error: {code: 400, message: 'Bad Request', details: 'User_id is missing'}}); } if (req.community.type !== collaborationConstants.COLLABORATION_TYPES.OPEN) { return res.status(403).json({error: 403, message: 'Forbidden', details: 'Can not join community'}); } return next(); }; module.exports.canLeave = function(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } if (!req.params || !req.params.user_id) { return res.status(400).json({error: {code: 400, message: 'Bad Request', details: 'User_id is missing'}}); } if (req.user._id.equals(req.community.creator)) { return res.status(403).json({error: 403, message: 'Forbidden', details: 'Creator can not leave community'}); } return next(); }; function requiresCommunityMember(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } communityModule.member.isMember(req.community, {objectType: 'user', id: req.user._id}, function(err, isMember) { if (err) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Can not define the community membership : ' + err.message}); } if (!isMember) { return res.status(403).json({error: 403, message: 'Forbidden', details: 'User is not community member'}); } return next(); }); } module.exports.requiresCommunityMember = requiresCommunityMember; module.exports.checkUserParamIsNotMember = function(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.params.user_id) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user id'}); } communityModule.member.isMember(req.community, req.params.user_id, function(err, isMember) { if (err) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Can not define the community membership : ' + err.message}); } if (isMember) { return res.status(400).json({error: 400, message: 'Bad request', details: 'User is already member of the community.'}); } return next(); }); }; module.exports.isCreator = function(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } if (!req.user._id.equals(req.community.creator)) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Not the community creator'}); } return next(); }; module.exports.checkUserIdParameterIsCurrentUser = function(req, res, next) { if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } if (!req.params.user_id) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user id'}); } if (!req.user._id.equals(req.params.user_id)) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Parameters do not match'}); } return next(); }; module.exports.canRead = function(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } if (req.community.type === collaborationConstants.COLLABORATION_TYPES.OPEN || req.community.type === collaborationConstants.COLLABORATION_TYPES.RESTRICTED) { return next(); } return requiresCommunityMember(req, res, next); }; module.exports.flagCommunityManager = function(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } communityModule.member.isManager(req.community, req.user, function(err, manager) { if (err) { return res.status(500).json({error: {code: 500, message: 'Error when checking if the user is a manager', details: err.message}}); } req.isCommunityManager = manager; next(); }); }; module.exports.requiresCommunityManager = function(req, res, next) { if (!req.community) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing community'}); } if (!req.user) { return res.status(400).json({error: 400, message: 'Bad request', details: 'Missing user'}); } communityModule.member.isManager(req.community, req.user, function(err, manager) { if (err) { logger.error('Error when checking if the user is a manager', err); return res.status(500).json({ error: { code: 500, message: 'Error when checking if the user is a manager' } }); } if (!manager) { return res.status(403).json({ error: 403, message: 'Forbidden', details: 'User is not community manager' }); } next(); }); };