From aa689a7a293ae02315015a37ef02512a34c66783 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 13 Jan 2014 12:01:42 -0500 Subject: [PATCH] fixed active users socket calls in ACP --- public/src/forum/admin/index.js | 37 ++++++++++++++++++--------------- src/socket.io/admin.js | 12 +++++++++++ src/socket.io/index.js | 10 ++++++++- src/socket.io/meta.js | 2 +- 4 files changed, 42 insertions(+), 19 deletions(-) diff --git a/public/src/forum/admin/index.js b/public/src/forum/admin/index.js index 92bfbe2f2c..d35712c215 100644 --- a/public/src/forum/admin/index.js +++ b/public/src/forum/admin/index.js @@ -2,25 +2,11 @@ define(function() { var Admin = {}; Admin.init = function() { - ajaxify.register_events(['api:get_all_rooms']); + ajaxify.register_events(['api:meta.rooms.getAll']); app.enterRoom('admin'); - socket.emit('api:meta.rooms.getAll', function(data) { - - var active_users = document.getElementById('active_users'), - total = 0; - active_users.innerHTML = ''; - - for (var room in data) { - if (room !== '') { - var count = data[room].length; - total += count; - active_users.innerHTML = active_users.innerHTML + "
" + room + " " + count + " active user" + (count > 1 ? "s" : "") + "
"; - } - } - - document.getElementById('connections').innerHTML = total; - }); + socket.emit('api:meta.rooms.getAll', Admin.updateRoomUsage); + socket.on('event:meta.rooms.update', Admin.updateRoomUsage); $('#logout-link').on('click', function() { $.post(RELATIVE_PATH + '/logout', { @@ -31,5 +17,22 @@ define(function() { }) }; + Admin.updateRoomUsage = function(data) { + console.log('room usage updating', data); + var active_users = document.getElementById('active_users'), + total = 0; + active_users.innerHTML = ''; + + for (var room in data) { + if (room !== '') { + var count = data[room].length; + total += count; + active_users.innerHTML = active_users.innerHTML + "
" + room + " " + count + " active user" + (count > 1 ? "s" : "") + "
"; + } + } + + document.getElementById('connections').innerHTML = total; + }; + return Admin; }); diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 90924d8b01..86d4e46ce5 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -10,9 +10,21 @@ var groups = require('../groups'), }, async = require('async'), + winston = require('winston'), SocketAdmin = {}; +SocketAdmin.before = function(sessionData, next) { + // Verify administrative privileges + user.isAdministrator(sessionData.uid, function(err, isAdmin) { + if (isAdmin) { + next(); + } else { + winston.warn('[socket.io] Call to admin method blocked (accessed by uid ' + sessionData.uid + ')'); + } + }); +}; + /* Topics */ SocketAdmin.topics = {}; diff --git a/src/socket.io/index.js b/src/socket.io/index.js index a4a9625d30..e17c3acd34 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -130,6 +130,7 @@ Sockets.init = function() { } else { // Deconstruct the message var parts = payload.name.slice(4).split('.'), + namespace = parts.slice(0, 1), methodToCall = parts.reduce(function(prev, cur) { if (prev !== null && prev[cur]) { return prev[cur]; @@ -157,8 +158,15 @@ Sockets.init = function() { } socketArgs.push(sessionData); + // Call the requested method + if (Namespaces[namespace].before) { + Namespaces[namespace].before(sessionData, function() { + methodToCall.apply(Namespaces, socketArgs); + }); + } else { + methodToCall.apply(Namespaces, socketArgs); + } // winston.info('[socket.io] Executing: ' + payload.name); - methodToCall.apply(Namespaces, socketArgs); } else { winston.warn('[socket.io] Unrecognized message: ' + payload.name); } diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index ee48554579..e46de7d83a 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -88,7 +88,7 @@ SocketMeta.rooms.enter = function(data, sessionData) { module.parent.exports.updateRoomBrowsingText(data.enter); if (data.enter != 'admin') { - sessionData.server.sockets.in('admin').emit('api:get_all_rooms', sessionData.server.sockets.manager.rooms); + sessionData.server.sockets.in('admin').emit('event:meta.rooms.update', sessionData.server.sockets.manager.rooms); } };