"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'), db = require('../database'), admin = { user: require('../admin/user'), categories: require('../admin/categories') }, async = require('async'), winston = require('winston'), index = require('./index'), SocketAdmin = { topics: {}, user: {}, categories: {}, themes: {}, plugins: {}, widgets: {}, config: {}, groups: {}, settings: {} }; 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(); }; SocketAdmin.getVisitorCount = function(socket, data, callback) { var terms = { day: 86400000, week: 604800000, month: 2592000000 }; var now = Date.now(); async.parallel({ day: function(next) { db.sortedSetCount('ip:recent', now - terms.day, now, next); }, week: function(next) { db.sortedSetCount('ip:recent', now - terms.week, now, next); }, month: function(next) { db.sortedSetCount('ip:recent', now - terms.month, now, next); }, alltime: function(next) { db.sortedSetCount('ip:recent', 0, now, next); } }, callback); }; SocketAdmin.fireEvent = function(socket, data, callback) { index.server.sockets.emit(data.name, data.payload || {}); }; /* 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