"use strict"; var groups = require('../../groups'), user = require('../../user'), events = require('../../events'), websockets = require('../index'), async = require('async'), User = {}; User.makeAdmins = function(socket, uids, callback) { toggleAdmin(uids, true, callback); }; User.removeAdmins = function(socket, uids, callback) { toggleAdmin(uids, false, callback); }; function toggleAdmin(uids, isAdmin, callback) { if(!Array.isArray(uids)) { return callback(new Error('[[error:invalid-data]]')); } async.each(uids, function(uid, next) { groups[isAdmin ? 'join' : 'leave']('administrators', uid, next); }, callback); } 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) { toggleBan(uids, User.banUser, callback); }; User.unbanUsers = function(socket, uids, callback) { toggleBan(uids, user.unban, callback); }; function toggleBan(uids, method, callback) { if(!Array.isArray(uids)) { return callback(new Error('[[error:invalid-data]]')); } async.each(uids, method, callback); } User.banUser = function(uid, callback) { user.isAdministrator(uid, function(err, isAdmin) { if (err || isAdmin) { return callback(err || new Error('[[error:cant-ban-other-admins]]')); } user.ban(uid, function(err) { if (err) { return callback(err); } var sockets = websockets.getUserSockets(uid); for(var i=0; i