mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-12 17:05:51 +01:00
better check for group exist, groups with different cases can no longer be created, #2588
This commit is contained in:
@@ -88,6 +88,24 @@ module.exports = function(redisClient, module) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.isObjectFields = function(key, fields, callback) {
|
||||||
|
var multi = redisClient.multi();
|
||||||
|
for (var i=0; i<fields.length; ++i) {
|
||||||
|
multi.hexists(key, fields[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
multi.exec(function(err, results) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i=0; i<results.length; ++i) {
|
||||||
|
results[i] = results[i] === 1;
|
||||||
|
}
|
||||||
|
callback(null, results);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
module.deleteObjectField = function(key, field, callback) {
|
module.deleteObjectField = function(key, field, callback) {
|
||||||
redisClient.hdel(key, field, function(err, res) {
|
redisClient.hdel(key, field, function(err, res) {
|
||||||
callback(err);
|
callback(err);
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ var async = require('async'),
|
|||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.expand) {
|
if (options.expand && uids.length) {
|
||||||
async.map(uids, user.getUserData, next);
|
async.map(uids, user.getUserData, next);
|
||||||
} else {
|
} else {
|
||||||
next(err, uids);
|
next(err, uids);
|
||||||
@@ -405,9 +405,29 @@ var async = require('async'),
|
|||||||
|
|
||||||
Groups.exists = function(name, callback) {
|
Groups.exists = function(name, callback) {
|
||||||
if (Array.isArray(name)) {
|
if (Array.isArray(name)) {
|
||||||
db.isSetMembers('groups', name, callback);
|
var slugs = name.map(function(groupName) {
|
||||||
|
return utils.slugify(groupName);
|
||||||
|
});
|
||||||
|
async.parallel([
|
||||||
|
async.apply(db.isObjectFields, 'groupslug:groupname', slugs),
|
||||||
|
async.apply(db.isSetMembers, 'groups', name)
|
||||||
|
], function(err, results) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(null, results.map(function(pair) {
|
||||||
|
return pair[0] || pair[1];
|
||||||
|
}));
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
db.isSetMember('groups', name, callback);
|
var slug = utils.slugify(name);
|
||||||
|
async.parallel([
|
||||||
|
async.apply(db.isObjectField, 'groupslug:groupname', slug),
|
||||||
|
async.apply(db.isSetMember, 'groups', name)
|
||||||
|
], function(err, results) {
|
||||||
|
callback(err, !err ? (results[0] || results[1]) : null);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user