Files
NodeBB/src/socket.io/admin/user.js

169 lines
3.7 KiB
JavaScript
Raw Normal View History

2014-04-15 02:25:42 -04:00
"use strict";
var groups = require('../../groups'),
user = require('../../user'),
events = require('../../events'),
2014-04-28 22:39:27 -04:00
websockets = require('../index'),
2014-04-15 02:25:42 -04:00
async = require('async'),
User = {};
User.makeAdmins = function(socket, uids, callback) {
if(!Array.isArray(uids)) {
return callback(new Error('[[error:invalid-data]]'));
}
2014-04-15 02:25:42 -04:00
2014-10-06 12:41:56 -04:00
user.getMultipleUserFields(uids, ['banned'], function(err, userData) {
if (err) {
return callback(err);
}
for(var i=0; i<userData.length; i++) {
if (userData[i] && parseInt(userData[i].banned, 10) === 1) {
return callback(new Error('[[error:cant-make-banned-users-admin]]'));
}
}
async.each(uids, function(uid, next) {
groups.join('administrators', uid, next);
}, callback);
});
2014-04-15 02:25:42 -04:00
};
User.removeAdmins = function(socket, uids, callback) {
if(!Array.isArray(uids)) {
return callback(new Error('[[error:invalid-data]]'));
}
if (uids.indexOf(socket.uid.toString()) !== -1) {
return callback(new Error('[[error:cant-remove-self-as-admin]]'));
}
async.eachSeries(uids, function(uid, next) {
groups.getMemberCount('administrators', function(err, count) {
if (err) {
return next(err);
}
if (count === 1) {
return next(new Error('[[error:cant-remove-last-admin]]'));
}
groups.leave('administrators', uid, next);
});
}, callback);
};
2014-04-15 02:25:42 -04:00
User.createUser = function(socket, userData, callback) {
if (!userData) {
return callback(new Error('[[error:invalid-data]]'));
}
user.create(userData, callback);
};
User.banUsers = function(socket, uids, callback) {
2014-05-13 16:44:40 -04:00
toggleBan(uids, User.banUser, callback);
};
User.unbanUsers = function(socket, uids, callback) {
toggleBan(uids, user.unban, callback);
};
2014-05-13 16:45:37 -04:00
function toggleBan(uids, method, callback) {
if(!Array.isArray(uids)) {
return callback(new Error('[[error:invalid-data]]'));
}
2014-05-13 16:44:40 -04:00
async.each(uids, method, callback);
}
2014-05-12 14:51:39 -04:00
User.banUser = function(uid, callback) {
user.isAdministrator(uid, function(err, isAdmin) {
2014-04-15 02:25:42 -04:00
if (err || isAdmin) {
return callback(err || new Error('[[error:cant-ban-other-admins]]'));
}
user.ban(uid, function(err) {
2014-04-15 02:25:42 -04:00
if (err) {
return callback(err);
}
2014-09-04 17:41:00 -04:00
websockets.in('uid_' + uid).emit('event:banned');
2014-04-15 02:25:42 -04:00
websockets.logoutUser(uid);
2014-04-15 02:25:42 -04:00
callback();
});
});
2014-05-12 14:51:39 -04:00
};
2014-04-15 02:25:42 -04:00
2014-08-14 08:34:38 -04:00
User.resetLockouts = function(socket, uids, callback) {
if (!Array.isArray(uids)) {
return callback(new Error('[[error:invalid-data]]'));
}
async.each(uids, user.auth.resetLockout, callback);
};
2014-10-06 13:11:12 -04:00
User.validateEmail = function(socket, uids, callback) {
if (!Array.isArray(uids)) {
return callback(new Error('[[error:invalid-data]]'));
}
uids = uids.filter(function(uid) {
return parseInt(uid, 10);
});
async.each(uids, function(uid, next) {
user.setUserField(uid, 'email:confirmed', 1, next);
}, callback);
};
User.deleteUsers = function(socket, uids, callback) {
if(!Array.isArray(uids)) {
return callback(new Error('[[error:invalid-data]]'));
}
2014-04-15 02:25:42 -04:00
async.each(uids, function(uid, next) {
user.isAdministrator(uid, function(err, isAdmin) {
if (err || isAdmin) {
return callback(err || new Error('[[error:cant-ban-other-admins]]'));
}
2014-04-15 02:25:42 -04:00
user.delete(uid, function(err) {
if (err) {
return next(err);
}
events.logAdminUserDelete(socket.uid, uid);
websockets.logoutUser(uid);
next();
});
});
}, callback);
2014-04-15 02:25:42 -04:00
};
User.search = function(socket, username, callback) {
user.search(username, function(err, data) {
function isAdmin(userData, next) {
user.isAdministrator(userData.uid, function(err, isAdmin) {
if(err) {
return next(err);
}
userData.administrator = isAdmin;
2014-04-15 02:25:42 -04:00
next();
});
}
if (err) {
return callback(err);
}
async.each(data.users, isAdmin, function(err) {
callback(err, data);
});
});
};
module.exports = User;