"use strict"; var groups = require('../groups'), meta = require('../meta'), plugins = require('../plugins'), widgets = require('../widgets'), user = require('../user'), topics = require('../topics'), categories = require('../categories'), CategoryTools = require('../categoryTools'), logger = require('../logger'), admin = { user: require('../admin/user'), categories: require('../admin/categories') }, async = require('async'), winston = require('winston'), index = require('./index'), SocketAdmin = {}; SocketAdmin.before = function(socket, next) { // Verify administrative privileges user.isAdministrator(socket.uid, function(err, isAdmin) { if (isAdmin) { next(); } else { winston.warn('[socket.io] Call to admin method blocked (accessed by uid ' + socket.uid + ')'); } }); }; SocketAdmin.restart = function(socket, data, callback) { meta.restart(); }; /* Topics */ SocketAdmin.topics = {}; SocketAdmin.topics.getMore = function(socket, data, callback) { if(!data) { return callback(new Error('invalid data')); } var start = parseInt(data.after, 10), end = start + parseInt(data.limit, 10); topics.getAllTopics(start, end, callback); }; /* User */ SocketAdmin.user = {}; SocketAdmin.user.makeAdmin = function(socket, theirid) { admin.user.makeAdmin(socket.uid, theirid, socket); }; SocketAdmin.user.removeAdmin = function(socket, theirid) { admin.user.removeAdmin(socket.uid, theirid, socket); }; SocketAdmin.user.createUser = function(socket, user, callback) { if(!user) { return callback(new Error('invalid data')); } admin.user.createUser(socket.uid, user, callback); }; SocketAdmin.user.banUser = function(socket, theirid) { admin.user.banUser(socket.uid, theirid, socket, function(isBanned) { if(isBanned) { var sockets = index.getUserSockets(theirid); for(var i=0; i