updating all group lib methods, and their callers -- #1252

v1.18.x
Julian Lam 11 years ago
parent befaa56ad0
commit 7b4f596aba

@ -21,17 +21,15 @@ var async = require('async'),
UserAdmin.makeAdmin = function(uid, theirid, socket) {
user.isAdministrator(uid, function(err, isAdmin) {
if (isAdmin) {
groups.getGidFromName('administrators', function(err, gid) {
groups.join(gid, theirid, function(err) {
if (!err) {
socket.emit('event:alert', {
title: 'User Modified',
message: 'This user is now an administrator!',
type: 'success',
timeout: 2000
});
}
});
groups.join('administrators', theirid, function(err) {
if (!err) {
socket.emit('event:alert', {
title: 'User Modified',
message: 'This user is now an administrator!',
type: 'success',
timeout: 2000
});
}
});
} else {
socket.emit('event:alert', {
@ -47,18 +45,16 @@ var async = require('async'),
UserAdmin.removeAdmin = function(uid, theirid, socket) {
user.isAdministrator(uid, function(err, isAdmin) {
if (isAdmin) {
groups.getGidFromName('administrators', function(err, gid) {
groups.leave(gid, theirid, function(err) {
if (!err) {
groups.leave('administrators', theirid, function(err) {
if (!err) {
socket.emit('event:alert', {
title: 'User Modified',
message: 'This user is no longer an administrator!',
type: 'success',
timeout: 2000
});
}
});
socket.emit('event:alert', {
title: 'User Modified',
message: 'This user is no longer an administrator!',
type: 'success',
timeout: 2000
});
}
});
}
});

@ -182,7 +182,7 @@ var db = require('./database'),
};
Categories.getModerators = function(cid, callback) {
Groups.getByGroupName('cid:' + cid + ':privileges:mods', {}, function(err, groupObj) {
Groups.get('cid:' + cid + ':privileges:mods', {}, function(err, groupObj) {
if (!err) {
if (groupObj.members && groupObj.members.length) {
user.getMultipleUserFields(groupObj.members, ['uid', 'username', 'userslug', 'picture'], function(err, moderators) {

@ -1,3 +1,5 @@
"use strict";
var Groups = require('./groups'),
User = require('./user'),
@ -16,19 +18,9 @@ CategoryTools.privileges = function(cid, uid, callback) {
var key = 'cid:' + cid + ':privileges:+r';
Groups.exists(key, function(err, exists) {
if (exists) {
async.parallel({
isMember: function(next) {
Groups.isMemberByGroupName(uid, key, next);
},
isEmpty: function(next) {
Groups.isEmptyByGroupName(key, next);
}
}, next);
Groups.isMember(uid, key, next);
} else {
next(null, {
isMember: false,
isEmpty: true
});
next(null, true);
}
});
},
@ -36,19 +28,9 @@ CategoryTools.privileges = function(cid, uid, callback) {
var key = 'cid:' + cid + ':privileges:+w';
Groups.exists(key, function(err, exists) {
if (exists) {
async.parallel({
isMember: function(next) {
Groups.isMemberByGroupName(uid, key, next);
},
isEmpty: function(next) {
Groups.isEmptyByGroupName(key, next);
}
}, next);
Groups.isMember(uid, key, next);
} else {
next(null, {
isMember: false,
isEmpty: true
});
next(null, true);
}
});
},
@ -56,19 +38,9 @@ CategoryTools.privileges = function(cid, uid, callback) {
var key = 'cid:' + cid + ':privileges:g+r';
Groups.exists(key, function(err, exists) {
if (exists) {
async.parallel({
isMember: function(next) {
Groups.isMemberOfGroupAny(uid, key, next);
},
isEmpty: function(next) {
Groups.isEmptyByGroupName(key, next);
}
}, next);
Groups.isMemberOfGroupList(uid, key, next);
} else {
next(null, {
isMember: false,
isEmpty: true
});
next(null, true);
}
});
},
@ -76,19 +48,9 @@ CategoryTools.privileges = function(cid, uid, callback) {
var key = 'cid:' + cid + ':privileges:g+w';
Groups.exists(key, function(err, exists) {
if (exists) {
async.parallel({
isMember: function(next) {
Groups.isMemberOfGroupAny(uid, key, next);
},
isEmpty: function(next) {
Groups.isEmptyByGroupName(key, next);
}
}, next);
Groups.isMemberOfGroupList(uid, key, next);
} else {
next(null, {
isMember: false,
isEmpty: true
});
next(null, true);
}
});
},
@ -100,25 +62,17 @@ CategoryTools.privileges = function(cid, uid, callback) {
}
}, function(err, privileges) {
callback(err, !privileges ? null : {
"+r": privileges['+r'].isMember,
"+w": privileges['+w'].isMember,
"g+r": privileges['g+r'].isMember,
"g+w": privileges['g+w'].isMember,
"+r": privileges['+r'],
"+w": privileges['+w'],
"g+r": privileges['g+r'],
"g+w": privileges['g+w'],
read: (
(
(privileges['+r'].isMember || privileges['+r'].isEmpty) &&
(privileges['g+r'].isMember || privileges['g+r'].isEmpty)
) ||
privileges.moderator ||
privileges.admin
privileges['+r'] || privileges['g+r'] ||
privileges.moderator || privileges.admin
),
write: (
(
(privileges['+w'].isMember || privileges['+w'].isEmpty) &&
(privileges['g+w'].isMember || privileges['g+w'].isEmpty)
) ||
privileges.moderator ||
privileges.admin
privileges['+w'] || privileges['g+w'] ||
privileges.moderator || privileges.admin
),
editable: privileges.moderator || privileges.admin,
view_deleted: privileges.moderator || privileges.admin,
@ -134,16 +88,9 @@ CategoryTools.groupPrivileges = function(cid, gid, callback) {
var key = 'cid:' + cid + ':privileges:g+r';
Groups.exists(key, function(err, exists) {
if (exists) {
async.parallel({
isMember: function(next) {
Groups.isMemberByGroupName(gid, key, next);
}
}, next);
Groups.isMember(gid, key, next);
} else {
next(null, {
isMember: false,
isEmpty: true
});
next(null, false);
}
});
},
@ -151,23 +98,16 @@ CategoryTools.groupPrivileges = function(cid, gid, callback) {
var key = 'cid:' + cid + ':privileges:g+w';
Groups.exists(key, function(err, exists) {
if (exists) {
async.parallel({
isMember: function(next) {
Groups.isMemberByGroupName(gid, key, next);
}
}, next);
Groups.isMember(gid, key, next);
} else {
next(null, {
isMember: false,
isEmpty: true
});
next(null, false);
}
});
}
}, function(err, privileges) {
callback(err, !privileges ? null : {
"g+r": privileges['g+r'].isMember,
"g+w": privileges['g+w'].isMember
"g+r": privileges['g+r'],
"g+w": privileges['g+w']
});
});
};

@ -3,10 +3,7 @@
(function(Groups) {
/* REMOVED
Groups.getGidFromName
Groups.joinByGroupName
Groups.leaveByGroupName
Groups.prune
group lists need to be updated to contain... groups!
*/
var async = require('async'),
@ -87,118 +84,30 @@
});
};
// Not checked
Groups.getByGroupName = function(groupName, options, callback) {
Groups.getGidFromName(groupName, function(err, gid) {
if (err || !gid) {
callback(new Error('gid-not-found'));
} else {
Groups.get(gid, options, callback);
}
});
};
// Not checked
Groups.getMemberships = function(uid, callback) {
if (!uid) {
return callback(new Error('no-uid-specified'));
}
db.getObjectValues('group:gid', function(err, gids) {
async.filter(gids, function(gid, next) {
Groups.isMember(uid, gid, function(err, isMember) {
next(isMember);
});
}, function(gids) {
async.map(gids, function(gid, next) {
Groups.get(gid, {}, next);
}, callback);
});
});
};
// Not checked
Groups.isDeleted = function(gid, callback) {
db.getObjectField('gid:' + gid, 'deleted', function(err, deleted) {
callback(err, parseInt(deleted, 10) === 1);
});
};
Groups.isMember = function(uid, groupName, callback) {
db.isSetMember('group:' + groupName + ':members', uid, callback);
};
// Not checked
Groups.isMemberByGroupName = function(uid, groupName, callback) {
Groups.getGidFromName(groupName, function(err, gid) {
if (err || !gid) {
callback(null, false);
} else {
Groups.isMemberOfGroupList = function(uid, groupListKey, callback) {
db.getSetMembers('group:' + groupListKey + ':members', function(err, gids) {
async.some(gids, function(gid, next) {
Groups.isMember(uid, gid, function(err, isMember) {
callback(err, !!isMember);
});
}
});
};
// Not checked
Groups.isMemberOfGroupAny = function(uid, groupListKey, callback) {
Groups.getGidFromName(groupListKey, function(err, gid) {
if (err || !gid) {
return callback(new Error('error-checking-group'));
}
db.getSetMembers('gid:' + gid + ':members', function(err, gids) {
async.some(gids, function(gid, next) {
Groups.isMember(uid, gid, function(err, isMember) {
if (!err && isMember) {
next(true);
} else {
next(false);
}
});
}, function(result) {
callback(null, result);
if (!err && isMember) {
next(true);
} else {
next(false);
}
});
}, function(result) {
callback(null, result);
});
});
};
// Not checked
Groups.isEmpty = function(gid, callback) {
db.setCount('gid:' + gid + ':members', function(err, numMembers) {
callback(err, numMembers === 0);
});
};
// Not checked
Groups.isEmptyByGroupName = function(groupName, callback) {
Groups.getGidFromName(groupName, function(err, gid) {
if (err || !gid) {
callback(new Error('gid-not-found'));
} else {
Groups.isEmpty(gid, callback);
}
});
};
// Not checked
Groups.exists = function(name, callback) {
async.parallel({
exists: function(next) {
db.isObjectField('group:gid', name, next);
},
deleted: function(next) {
Groups.getGidFromName(name, function(err, gid) {
Groups.isDeleted(gid, next);
});
}
}, function(err, results) {
callback(err, !results ? null : (results.exists && !results.deleted));
});
db.isSetMember('groups', name, callback);
};
// Not checked
Groups.create = function(name, description, callback) {
if (name.length === 0) {
return callback(new Error('name-too-short'));
@ -210,24 +119,16 @@
Groups.exists(name, function (err, exists) {
if (!exists) {
db.incrObjectField('global', 'nextGid', function (err, gid) {
db.setObjectField('group:gid', name, gid, function(err) {
var groupData = {
gid: gid,
name: name,
description: description,
deleted: '0',
hidden: '0',
system: system ? '1' : '0'
};
db.setObject('gid:' + gid, groupData, function(err) {
Groups.get(gid, {}, callback);
});
});
var groupData = {
name: name,
description: description,
deleted: '0',
hidden: '0',
system: system ? '1' : '0'
};
db.setObject('group:' + name, groupData, function(err) {
Groups.get(name, {}, callback);
});
} else {
callback(new Error('group-exists'));
@ -235,36 +136,34 @@
});
};
// Not checked
Groups.hide = function(gid, callback) {
Groups.update(gid, {
Groups.hide = function(groupName, callback) {
Groups.update(groupName, {
hidden: '1'
}, callback);
};
// Not checked
Groups.update = function(gid, values, callback) {
db.exists('gid:' + gid, function (err, exists) {
Groups.update = function(groupName, values, callback) {
db.exists('group:' + groupName, function (err, exists) {
if (!err && exists) {
// If the group was renamed, check for dupes, fix the assoc. hash
// If the group was renamed, check for dupes
if (values.name) {
Groups.exists(values.name, function(err, exists) {
if (!exists) {
Groups.get(gid, {}, function(err, groupObj) {
db.rename('group:' + groupName, 'group:' + values.name, function(err) {
if (err) {
return callback(new Error('group-not-found'));
return callback(new Error('could-not-rename-group'));
}
db.deleteObjectField('group:gid', groupObj.name);
db.setObjectField('group:gid', values.name, gid);
db.setObject('gid:' + gid, values, callback);
db.setRemove('groups', groupName);
db.setAdd('groups', values.name);
db.setObject('group:' + values.name, values, callback);
});
} else {
callback(new Error('group-exists'));
}
});
} else {
db.setObject('gid:' + gid, values, callback);
db.setObject('group:' + groupName, values, callback);
}
} else {
if (callback) {

@ -290,24 +290,14 @@ var async = require('async'),
function (next) {
// Check if an administrator needs to be created
var Groups = require('./groups');
Groups.getGidFromName('administrators', function (err, gid) {
if (err) {
return next(err.message);
}
if (gid) {
Groups.get(gid, {}, function (err, groupObj) {
if (groupObj.count > 0) {
winston.info('Administrator found, skipping Admin setup');
next();
} else {
install.createAdmin(next);
}
});
} else {
install.createAdmin(next);
}
Groups.get('administrators', {}, function (err, groupObj) {
if (groupObj.memberCount > 0) {
winston.info('Administrator found, skipping Admin setup');
next();
} else {
install.createAdmin(next);
}
});
});
},
function (next) {
@ -417,7 +407,7 @@ var async = require('async'),
return callback(new Error('invalid-values'));
}
Groups.joinByGroupName('administrators', uid, callback);
Groups.join('administrators', uid, callback);
});
},
retryPassword = function (originalResults) {

@ -198,16 +198,16 @@ SocketAdmin.categories.setPrivilege = function(socket, data, callback) {
};
if (set) {
groups.joinByGroupName('cid:' + cid + ':privileges:' + privilege, uid, cb);
groups.join('cid:' + cid + ':privileges:' + privilege, uid, cb);
} else {
groups.leaveByGroupName('cid:' + cid + ':privileges:' + privilege, uid, cb);
groups.leave('cid:' + cid + ':privileges:' + privilege, uid, cb);
}
};
SocketAdmin.categories.getPrivilegeSettings = function(socket, cid, callback) {
async.parallel({
"+r": function(next) {
groups.getByGroupName('cid:' + cid + ':privileges:+r', { expand: true }, function(err, groupObj) {
groups.get('cid:' + cid + ':privileges:+r', { expand: true }, function(err, groupObj) {
if (!err) {
next.apply(this, arguments);
} else {
@ -218,7 +218,7 @@ SocketAdmin.categories.getPrivilegeSettings = function(socket, cid, callback) {
});
},
"+w": function(next) {
groups.getByGroupName('cid:' + cid + ':privileges:+w', { expand: true }, function(err, groupObj) {
groups.get('cid:' + cid + ':privileges:+w', { expand: true }, function(err, groupObj) {
if (!err) {
next.apply(this, arguments);
} else {
@ -229,7 +229,7 @@ SocketAdmin.categories.getPrivilegeSettings = function(socket, cid, callback) {
});
},
"mods": function(next) {
groups.getByGroupName('cid:' + cid + ':privileges:mods', { expand: true }, function(err, groupObj) {
groups.get('cid:' + cid + ':privileges:mods', { expand: true }, function(err, groupObj) {
if (!err) {
next.apply(this, arguments);
} else {
@ -259,9 +259,9 @@ SocketAdmin.categories.setGroupPrivilege = function(socket, data, callback) {
}
if (data.set) {
groups.joinByGroupName('cid:' + data.cid + ':privileges:' + data.privilege, data.gid, callback);
groups.join('cid:' + data.cid + ':privileges:' + data.privilege, data.gid, callback);
} else {
groups.leaveByGroupName('cid:' + data.cid + ':privileges:' + data.privilege, data.gid, callback);
groups.leave('cid:' + data.cid + ':privileges:' + data.privilege, data.gid, callback);
}
};

@ -1,11 +0,0 @@
var Groups = require('../groups'),
SocketGroups = {};
SocketGroups.getMemberships = function(socket, data, callback) {
if (data && data.uid) {
Groups.getMemberships(data.uid, callback);
}
};
module.exports = SocketGroups;

@ -256,7 +256,7 @@ SocketPosts.flag = function(socket, pid, callback) {
},
function(topicSlug, next) {
path = nconf.get('relative_path') + '/topic/' + topicSlug + '#' + pid;
groups.getByGroupName('administrators', {}, next);
groups.get('administrators', {}, next);
},
function(adminGroup, next) {
notifications.create({

@ -334,28 +334,6 @@ Upgrade.upgrade = function(callback) {
next();
}
},
function(next) {
thisSchemaDate = Date.UTC(2014, 2, 19);
if (schemaDate < thisSchemaDate) {
async.map(['administrators', 'registered-users'], Groups.getGidFromName, function(err, gids) {
async.each(gids, function(gid, next) {
db.setObjectField('gid:' + gid, 'system', '1', next);
}, function(err) {
if (err) {
winston.error('[2014/3/19] Problem setting "system" flag for system groups.');
next();
} else {
winston.info('[2014/3/19] Setting "system" flag for system groups');
Upgrade.update(thisSchemaDate, next);
}
});
});
} else {
winston.info('[2014/3/19] Setting "system" flag for system groups - skipped');
next();
}
},
function(next) {
thisSchemaDate = Date.UTC(2014, 2, 19, 20);
@ -400,11 +378,22 @@ Upgrade.upgrade = function(callback) {
}
], next);
}, function(err) {
// Delete the old mapping key
// Clean-up
async.series([
function(next) {
// Mapping
db.delete('group:gid', next);
},
function(next) {
// Incrementor
db.deleteObjectField('global', 'nextGid', next);
},
function(next) {
// Set 'administrators' and 'registered-users' as system groups
db.setObjectField('group:administrators', 'system', '1');
db.setObjectField('group:registered-users', 'system', '1');
next();
},
function(next) {
// Delete empty groups
Groups.list({ showAllGroups: true }, function(err, groups) {

@ -295,11 +295,11 @@ var bcrypt = require('bcryptjs'),
};
User.isModerator = function(uid, cid, callback) {
groups.isMemberByGroupName(uid, 'cid:' + cid + ':privileges:mods', callback);
groups.isMember(uid, 'cid:' + cid + ':privileges:mods', callback);
};
User.isAdministrator = function(uid, callback) {
groups.isMemberByGroupName(uid, 'administrators', callback);
groups.isMember(uid, 'administrators', callback);
};
User.isOnline = function(uid, callback) {

@ -117,7 +117,7 @@ module.exports = function(User) {
db.sortedSetAdd('users:postcount', 0, uid);
db.sortedSetAdd('users:reputation', 0, uid);
groups.joinByGroupName('registered-users', uid);
groups.join('registered-users', uid);
if (password) {
User.hashPassword(password, function(err, hash) {

Loading…
Cancel
Save