Merge branch 'master' into styleguide

This commit is contained in:
Julian Lam
2017-02-24 11:45:04 -05:00
15 changed files with 698 additions and 137 deletions

View File

@@ -1,6 +1,6 @@
'use strict';
var async = require('async');
var async = require('async');
var groups = require('../groups');
var meta = require('../meta');
@@ -77,7 +77,7 @@ function isOwner(next) {
isAdmin: async.apply(user.isAdministrator, socket.uid),
isOwner: async.apply(groups.ownership.isOwner, socket.uid, data.groupName),
}, function (err, results) {
if (err || (!isOwner && !results.isAdmin)) {
if (err || (!results.isOwner && !results.isAdmin)) {
return callback(err || new Error('[[error:no-privileges]]'));
}
next(socket, data, callback);
@@ -141,22 +141,25 @@ SocketGroups.issueMassInvite = isOwner(function (socket, data, callback) {
if (!data || !data.usernames || !data.groupName) {
return callback(new Error('[[error:invalid-data]]'));
}
var usernames = data.usernames.split(',');
var usernames = String(data.usernames).split(',');
usernames = usernames.map(function (username) {
return username && username.trim();
});
user.getUidsByUsernames(usernames, function (err, uids) {
if (err) {
return callback(err);
}
uids = uids.filter(function (uid) {
return !!uid && parseInt(uid, 10);
});
async.eachSeries(uids, function (uid, next) {
groups.invite(data.groupName, uid, next);
}, callback);
});
async.waterfall([
function (next) {
user.getUidsByUsernames(usernames, next);
},
function (uids, next) {
uids = uids.filter(function (uid) {
return !!uid && parseInt(uid, 10);
});
async.eachSeries(uids, function (uid, next) {
groups.invite(data.groupName, uid, next);
}, next);
},
], callback);
});
SocketGroups.rescindInvite = isOwner(function (socket, data, callback) {
@@ -181,12 +184,14 @@ SocketGroups.kick = isOwner(function (socket, data, callback) {
return callback(new Error('[[error:cant-kick-self]]'));
}
groups.ownership.isOwner(data.uid, data.groupName, function (err, isOwner) {
if (err) {
return callback(err);
}
groups.kick(data.uid, data.groupName, isOwner, callback);
});
async.waterfall([
function (next) {
groups.ownership.isOwner(data.uid, data.groupName, next);
},
function (isOwner, next) {
groups.kick(data.uid, data.groupName, isOwner, next);
},
], callback);
});
SocketGroups.create = function (socket, data, callback) {
@@ -198,32 +203,19 @@ SocketGroups.create = function (socket, data, callback) {
return callback(new Error('[[error:invalid-group-name]]'));
}
data.ownerUid = socket.uid;
groups.create(data, callback);
};
SocketGroups.delete = function (socket, data, callback) {
SocketGroups.delete = isOwner(function (socket, data, callback) {
if (data.groupName === 'administrators' ||
data.groupName === 'registered-users' ||
data.groupName === 'Global Moderators') {
return callback(new Error('[[error:not-allowed]]'));
}
async.parallel({
isOwner: async.apply(groups.ownership.isOwner, socket.uid, data.groupName),
isAdmin: async.apply(user.isAdministrator, socket.uid),
}, function (err, checks) {
if (err) {
return callback(err);
}
if (!checks.isOwner && !checks.isAdmin) {
return callback(new Error('[[error:no-privileges]]'));
}
groups.destroy(data.groupName, callback);
});
};
groups.destroy(data.groupName, callback);
});
SocketGroups.search = function (socket, data, callback) {
data.options = data.options || {};
@@ -241,7 +233,7 @@ SocketGroups.search = function (socket, data, callback) {
SocketGroups.loadMore = function (socket, data, callback) {
if (!data.sort || !utils.isNumber(data.after) || parseInt(data.after, 10) < 0) {
return callback();
return callback(new Error('[[error:invalid-data]]'));
}
var groupsPerPage = 9;
@@ -260,13 +252,17 @@ SocketGroups.loadMoreMembers = function (socket, data, callback) {
return callback(new Error('[[error:invalid-data]]'));
}
data.after = parseInt(data.after, 10);
user.getUsersFromSet('group:' + data.groupName + ':members', socket.uid, data.after, data.after + 9, function (err, users) {
if (err) {
return callback(err);
}
callback(null, { users: users, nextStart: data.after + 10 });
});
async.waterfall([
function (next) {
user.getUsersFromSet('group:' + data.groupName + ':members', socket.uid, data.after, data.after + 9, next);
},
function (users, next) {
next(null, {
users: users,
nextStart: data.after + 10,
});
},
], callback);
};
SocketGroups.cover = {};