From d234dbdca23764fb9a34496b87f8fc82b8ac7703 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 14:57:03 -0500 Subject: [PATCH 01/48] first set of changes --- src/socket.io/index.js | 127 ++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 72 deletions(-) diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 664f11dd5b..73eb9ca8eb 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -23,10 +23,13 @@ var SocketIO = require('socket.io'), /* === */ var users = {}, - userSockets = {}, - rooms = {}, io; + +Sockets.userSockets = {}; +Sockets.rooms = {}; + + Sockets.init = function() { io = socketioWildcard(SocketIO).listen(global.server, { @@ -35,6 +38,8 @@ Sockets.init = function() { 'browser client minification': true }); + Sockets.server = io; + fs.readdir(__dirname, function(err, files) { files.splice(files.indexOf('index.js'), 1); @@ -59,8 +64,10 @@ Sockets.init = function() { uid = users[sessionID] = 0; } - userSockets[uid] = userSockets[uid] || []; - userSockets[uid].push(socket); + socket.uid = uid; + + Sockets.userSockets[uid] = Sockets.userSockets[uid] || []; + Sockets.userSockets[uid].push(socket); /* Need to save some state for the logger & maybe some other modules later on */ socket.state = { @@ -93,14 +100,14 @@ Sockets.init = function() { socket.on('disconnect', function() { - var index = (userSockets[uid] || []).indexOf(socket); + var index = (Sockets.userSockets[uid] || []).indexOf(socket); if (index !== -1) { - userSockets[uid].splice(index, 1); + Sockets.userSockets[uid].splice(index, 1); } - if (userSockets[uid] && userSockets[uid].length === 0) { + if (Sockets.userSockets[uid] && Sockets.userSockets[uid].length === 0) { delete users[sessionID]; - delete userSockets[uid]; + delete Sockets.userSockets[uid]; if (uid) { db.sortedSetRemove('users:online', uid, function(err, data) { }); @@ -111,12 +118,12 @@ Sockets.init = function() { emitOnlineUserCount(); - for (var roomName in rooms) { - if (rooms.hasOwnProperty(roomName)) { + for (var roomName in Sockets.rooms) { + if (Sockets.rooms.hasOwnProperty(roomName)) { socket.leave(roomName); - if (rooms[roomName][socket.id]) { - delete rooms[roomName][socket.id]; + if (Sockets.rooms[roomName][socket.id]) { + delete Sockets.rooms[roomName][socket.id]; } updateRoomBrowsingText(roomName); @@ -125,72 +132,48 @@ Sockets.init = function() { }); socket.on('*', function(payload, callback) { - // Ignore all non-api messages - if (payload.name.substr(0, 4) !== 'api:') { - return; - } 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]; - } else { - return null; - } - }, Namespaces); - - if (methodToCall !== null) { - var sessionData = { - uid: uid, - socket: socket, - rooms: rooms, - server: io, - userSockets: userSockets - }, - socketArgs = []; - - // Construct the arguments that'll get passed into each socket method - if (payload.args.length) { - socketArgs = socketArgs.concat(payload.args); - } - if (callback !== undefined) { - socketArgs.push(callback); + function callMethod(method) { + method.call(socket, args[0]?args[0]:null, function(err, result) { + if(callback) { + callback(err?{message:err.message}:null, result); } - socketArgs.push(sessionData); - - // Call the requested method - if (Namespaces[namespace].before) { - Namespaces[namespace].before(sessionData, function() { - try { - methodToCall.apply(Namespaces, socketArgs); - } catch (e) { - winston.error(e.message); - } - }); + }); + } + + + var parts = payload.name.split('.'), + namespace = parts.slice(0, 1), + methodToCall = parts.reduce(function(prev, cur) { + if (prev !== null && prev[cur]) { + return prev[cur]; } else { - try { - methodToCall.apply(Namespaces, socketArgs); - } catch (e) { - winston.error(e.message); - } + return null; } - // winston.info('[socket.io] Executing: ' + payload.name); + }, Namespaces); + + if (methodToCall !== null) { + + if (Namespaces[namespace].before) { + Namespaces[namespace].before(socket, function() { + callMethod(methodToCall); + }); } else { - winston.warn('[socket.io] Unrecognized message: ' + payload.name); + callMethod(methodToCall); } + } else { + winston.warn('[socket.io] Unrecognized message: ' + payload.name); } }); }); }; Sockets.logoutUser = function(uid) { - if(userSockets[uid] && userSockets[uid].length) { - for(var i=0; i< userSockets[uid].length; ++i) { - userSockets[uid][i].emit('event:disconnect'); - userSockets[uid][i].disconnect(); + if(Sockets.userSockets[uid] && Sockets.userSockets[uid].length) { + for(var i=0; i< Sockets.userSockets[uid].length; ++i) { + Sockets.userSockets[uid][i].emit('event:disconnect'); + Sockets.userSockets[uid][i].disconnect(); - if(!userSockets[uid]) { + if(!Sockets.userSockets[uid]) { return; } } @@ -211,18 +194,18 @@ Sockets.in = function(room) { }; Sockets.getConnectedClients = function() { - return userSockets; + return Sockets.userSockets; }; Sockets.getOnlineAnonCount = function () { - return userSockets[0] ? userSockets[0].length : 0; + return Sockets.userSockets[0] ? Sockets.userSockets[0].length : 0; }; /* Helpers */ Sockets.isUserOnline = isUserOnline; function isUserOnline(uid) { - return !!userSockets[uid] && userSockets[uid].length > 0; + return !!Sockets.userSockets[uid] && Sockets.userSockets[uid].length > 0; } Sockets.updateRoomBrowsingText = updateRoomBrowsingText; @@ -251,7 +234,7 @@ function updateRoomBrowsingText(roomName) { return anonCount; } - var uids = getUidsInRoom(rooms[roomName]), + var uids = getUidsInRoom(Sockets.rooms[roomName]), anonymousCount = getAnonymousCount(roomName); if (uids.length === 0) { @@ -287,8 +270,8 @@ function emitTopicPostStats(callback) { Sockets.emitOnlineUserCount = emitOnlineUserCount; function emitOnlineUserCount(callback) { - var anon = userSockets[0] ? userSockets[0].length : 0; - var registered = Object.keys(userSockets).length; + var anon = Sockets.userSockets[0] ? Sockets.userSockets[0].length : 0; + var registered = Object.keys(Sockets.userSockets).length; if (anon) { registered = registered - 1; } From 4184574164668d83c82b609840c05d483fd8b7c7 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:00:49 -0500 Subject: [PATCH 02/48] WIP admin.js socket underping --- public/src/forum/admin/categories.js | 12 ++++- src/socket.io/admin.js | 77 ++++++++++++++-------------- 2 files changed, 48 insertions(+), 41 deletions(-) diff --git a/public/src/forum/admin/categories.js b/public/src/forum/admin/categories.js index c7404f3279..627ab1df35 100644 --- a/public/src/forum/admin/categories.js +++ b/public/src/forum/admin/categories.js @@ -223,7 +223,10 @@ define(['uploader'], function(uploader) { clearTimeout(searchDelay); searchDelay = setTimeout(function() { - socket.emit('api:admin.categories.search', searchEl.value, cid, function(err, results) { + socket.emit('api:admin.categories.search', { + username: searchEl.value, + cid: cid + }, function(err, results) { var numResults = results.length, resultObj; for(var x=0;x 0) { - admin.user.makeAdmin(sessionData.uid, theirid, sessionData.socket); - } +SocketAdmin.user.makeAdmin = function(socket, theirid) { + admin.user.makeAdmin(socket.uid, theirid, socket); }; -SocketAdmin.user.removeAdmin = function(theirid, sessionData) { - if (sessionData.uid && sessionData.uid > 0) { - admin.user.removeAdmin(sessionData.uid, theirid, sessionData.socket); - } +SocketAdmin.user.removeAdmin = function(socket, theirid) { + admin.user.removeAdmin(socket.uid, theirid, socket); }; -SocketAdmin.user.createUser = function(user, callback, sessionData) { - if (sessionData.uid && sessionData.uid > 0) { - admin.user.createUser(sessionData.uid, user, callback); - } +SocketAdmin.user.createUser = function(socket, user, callback) { + admin.user.createUser(socket.uid, user, callback); }; -SocketAdmin.user.banUser = function(theirid, sessionData) { - if (sessionData.uid && sessionData.uid > 0) { - admin.user.banUser(sessionData.uid, theirid, sessionData.socket, function(isBanned) { - if(isBanned) { - if(sessionData.userSockets[theirid]) { - for(var i=0; i Date: Thu, 16 Jan 2014 15:10:37 -0500 Subject: [PATCH 03/48] removed api: from client side socket calls --- public/src/app.js | 12 +++---- public/src/forum/account.js | 8 ++--- public/src/forum/accountedit.js | 8 ++--- public/src/forum/accountsettings.js | 2 +- public/src/forum/admin/categories.js | 14 ++++---- public/src/forum/admin/footer.js | 2 +- public/src/forum/admin/groups.js | 14 ++++---- public/src/forum/admin/index.js | 4 +-- public/src/forum/admin/plugins.js | 4 +-- public/src/forum/admin/settings.js | 4 +-- public/src/forum/admin/themes.js | 6 ++-- public/src/forum/admin/topics.js | 14 ++++---- public/src/forum/admin/users.js | 14 ++++---- public/src/forum/category.js | 6 ++-- public/src/forum/footer.js | 4 +-- public/src/forum/home.js | 12 +++---- public/src/forum/recent.js | 4 +-- public/src/forum/register.js | 8 ++--- public/src/forum/reset.js | 2 +- public/src/forum/reset_code.js | 10 +++--- public/src/forum/topic.js | 52 ++++++++++++++-------------- public/src/forum/unread.js | 6 ++-- public/src/forum/users.js | 8 ++--- public/src/modules/chat.js | 8 ++--- public/src/modules/composer.js | 16 ++++----- public/src/modules/notifications.js | 8 ++--- 26 files changed, 125 insertions(+), 125 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index e467343a39..65c3c7c61f 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -36,7 +36,7 @@ var socket, app.uid = data.uid; app.showLoginMessage(); - socket.emit('api:meta.updateHeader', { + socket.emit('meta.updateHeader', { fields: ['username', 'picture', 'userslug'] }, app.updateHeader); }); @@ -77,14 +77,14 @@ var socket, } app.enterRoom(room, true); - socket.emit('api:meta.reconnected'); + socket.emit('meta.reconnected'); setTimeout(function() { reconnectEl.removeClass('active').addClass("hide"); }, 3000); } - socket.emit('api:meta.updateHeader', { + socket.emit('meta.updateHeader', { fields: ['username', 'picture', 'userslug'] }, app.updateHeader); }); @@ -235,7 +235,7 @@ var socket, return; } - socket.emit('api:meta.rooms.enter', { + socket.emit('meta.rooms.enter', { 'enter': room, 'leave': app.currentRoom }); @@ -251,7 +251,7 @@ var socket, uids.push(this.getAttribute('data-uid')); }); - socket.emit('api:user.get_online_users', uids, function (users) { + socket.emit('user.get_online_users', uids, function (users) { jQuery('a.username-field').each(function () { if (this.processed === true) return; @@ -449,7 +449,7 @@ var socket, url = a.pathname.slice(1); } - socket.emit('api:meta.buildTitle', url, function(title, numNotifications) { + socket.emit('meta.buildTitle', url, function(title, numNotifications) { titleObj.titles[0] = (numNotifications > 0 ? '(' + numNotifications + ') ' : '') + title; app.alternatingTitle(''); }); diff --git a/public/src/forum/account.js b/public/src/forum/account.js index 8354461fe4..10ec2cd3b9 100644 --- a/public/src/forum/account.js +++ b/public/src/forum/account.js @@ -35,7 +35,7 @@ define(['forum/accountheader'], function(header) { } followBtn.on('click', function() { - socket.emit('api:user.follow', { + socket.emit('user.follow', { uid: theirid }, function(success) { if (success) { @@ -50,7 +50,7 @@ define(['forum/accountheader'], function(header) { }); unfollowBtn.on('click', function() { - socket.emit('api:user.unfollow', { + socket.emit('user.unfollow', { uid: theirid }, function(success) { if (success) { @@ -72,9 +72,9 @@ define(['forum/accountheader'], function(header) { ajaxify.go($(this).attr('topic-url')); }); - socket.on('api:user.isOnline', Account.handleUserOnline); + socket.on('user.isOnline', Account.handleUserOnline); - socket.emit('api:user.isOnline', theirid, Account.handleUserOnline); + socket.emit('user.isOnline', theirid, Account.handleUserOnline); socket.on('event:new_post', function(data) { var html = templates.prepare(templates['account'].blocks['posts']).parse(data); diff --git a/public/src/forum/accountedit.js b/public/src/forum/accountedit.js index 8b213ca868..1f80904a3f 100644 --- a/public/src/forum/accountedit.js +++ b/public/src/forum/accountedit.js @@ -24,7 +24,7 @@ define(['forum/accountheader', 'uploader'], function(header, uploader) { signature: $('#inputSignature').val() }; - socket.emit('api:user.updateProfile', userData, function(err, data) { + socket.emit('user.updateProfile', userData, function(err, data) { if (data.success) { app.alertSuccess('Your profile has been updated successfully!'); if (data.picture) { @@ -108,7 +108,7 @@ define(['forum/accountheader', 'uploader'], function(header, uploader) { uploadedPicture = imageUrlOnServer; - socket.emit('api:meta.updateHeader', { + socket.emit('meta.updateHeader', { fields: ['username', 'picture', 'userslug'] }, app.updateHeader); }); @@ -174,7 +174,7 @@ define(['forum/accountheader', 'uploader'], function(header, uploader) { $('#changePasswordBtn').on('click', function() { if (passwordvalid && passwordsmatch && currentPassword.val()) { - socket.emit('api:user.changePassword', { + socket.emit('user.changePassword', { 'currentPassword': currentPassword.val(), 'newPassword': password.val() }, function(err) { @@ -206,7 +206,7 @@ define(['forum/accountheader', 'uploader'], function(header, uploader) { type: type }; - socket.emit('api:user.changePicture', userData, function(success) { + socket.emit('user.changePicture', userData, function(success) { if (!success) { app.alertError('There was an error changing picture!'); } diff --git a/public/src/forum/accountsettings.js b/public/src/forum/accountsettings.js index 8746c1c5b3..c87a9c8da1 100644 --- a/public/src/forum/accountsettings.js +++ b/public/src/forum/accountsettings.js @@ -10,7 +10,7 @@ define(['forum/accountheader'], function(header) { showemail: $('#showemailCheckBox').is(':checked') ? 1 : 0 }; - socket.emit('api:user.saveSettings', settings, function(err) { + socket.emit('user.saveSettings', settings, function(err) { if (!err) { app.alertSuccess('Settings saved!'); } else { diff --git a/public/src/forum/admin/categories.js b/public/src/forum/admin/categories.js index 627ab1df35..0cff58bef2 100644 --- a/public/src/forum/admin/categories.js +++ b/public/src/forum/admin/categories.js @@ -13,7 +13,7 @@ define(['uploader'], function(uploader) { } function save() { - socket.emit('api:admin.categories.update', modified_categories); + socket.emit('admin.categories.update', modified_categories); modified_categories = {}; } @@ -86,7 +86,7 @@ define(['uploader'], function(uploader) { order: $('.admin-categories #entry-container').children().length + 1 }; - socket.emit('api:admin.categories.create', category, function(err, data) { + socket.emit('admin.categories.create', category, function(err, data) { if (!err) { app.alert({ alert_id: 'category_created', @@ -223,7 +223,7 @@ define(['uploader'], function(uploader) { clearTimeout(searchDelay); searchDelay = setTimeout(function() { - socket.emit('api:admin.categories.search', { + socket.emit('admin.categories.search', { username: searchEl.value, cid: cid }, function(err, results) { @@ -257,7 +257,7 @@ define(['uploader'], function(uploader) { privilege = this.getAttribute('data-priv'); e.preventDefault(); - socket.emit('api:admin.categories.setPrivilege', { + socket.emit('admin.categories.setPrivilege', { cid: cid, uid: uid, privilege: privilege, @@ -275,7 +275,7 @@ define(['uploader'], function(uploader) { }); // User Groups and privileges - socket.emit('api:admin.categories.groupsList', cid, function(err, results) { + socket.emit('admin.categories.groupsList', cid, function(err, results) { var groupsFrag = document.createDocumentFragment(), numResults = results.length, trEl = document.createElement('tr'), @@ -303,7 +303,7 @@ define(['uploader'], function(uploader) { gid = btnEl.parents('tr[data-gid]').attr('data-gid'), privilege = this.getAttribute('data-gpriv'); e.preventDefault(); - socket.emit('api:admin.categories.setGroupPrivilege', cid, gid, privilege, !btnEl.hasClass('active'), function(err) { + socket.emit('admin.categories.setGroupPrivilege', cid, gid, privilege, !btnEl.hasClass('active'), function(err) { if (!err) { btnEl.toggleClass('active'); } @@ -317,7 +317,7 @@ define(['uploader'], function(uploader) { var modalEl = $('#category-permissions-modal'), readMembers = modalEl.find('#category-permissions-read'), writeMembers = modalEl.find('#category-permissions-write'); - socket.emit('api:admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) { + socket.emit('admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) { var readLength = privilegeList['+r'].length, writeLength = privilegeList['+w'].length, readFrag = document.createDocumentFragment(), diff --git a/public/src/forum/admin/footer.js b/public/src/forum/admin/footer.js index 8a7008711e..ea0fedbd56 100644 --- a/public/src/forum/admin/footer.js +++ b/public/src/forum/admin/footer.js @@ -15,6 +15,6 @@ jQuery('document').ready(function() { }, false); }); -socket.emit('api:admin.config.get', function(config) { +socket.emit('admin.config.get', function(config) { app.config = config; }); diff --git a/public/src/forum/admin/groups.js b/public/src/forum/admin/groups.js index 078e3a4eab..a39feb563d 100644 --- a/public/src/forum/admin/groups.js +++ b/public/src/forum/admin/groups.js @@ -29,7 +29,7 @@ define(function() { errorEl = $('#create-modal-error'), errorText; - socket.emit('api:admin.groups.create', submitObj, function(err, data) { + socket.emit('admin.groups.create', submitObj, function(err, data) { if (err) { switch (err) { case 'group-exists': @@ -63,14 +63,14 @@ define(function() { case 'delete': bootbox.confirm('Are you sure you wish to delete this group?', function(confirm) { if (confirm) { - socket.emit('api:admin.groups.delete', gid, function(err, data) { + socket.emit('admin.groups.delete', gid, function(err, data) { if (data === 'OK') ajaxify.go('admin/groups'); }); } }); break; case 'members': - socket.emit('api:admin.groups.get', gid, function(err, groupObj) { + socket.emit('admin.groups.get', gid, function(err, groupObj) { var formEl = detailsModal.find('form'), nameEl = formEl.find('#change-group-name'), descEl = formEl.find('#change-group-desc'), @@ -120,7 +120,7 @@ define(function() { foundUserImg = foundUser.getElementsByTagName('img')[0]; foundUserLabel = foundUser.getElementsByTagName('span')[0]; - socket.emit('api:admin.user.search', searchText, function(err, results) { + socket.emit('admin.user.search', searchText, function(err, results) { if (!err && results && results.length > 0) { var numResults = results.length, resultsSlug = document.createDocumentFragment(), @@ -152,7 +152,7 @@ define(function() { }); if (members.indexOf(uid) === -1) { - socket.emit('api:admin.groups.join', { + socket.emit('admin.groups.join', { gid: gid, uid: uid }, function(err, data) { @@ -167,7 +167,7 @@ define(function() { var uid = this.getAttribute('data-uid'), gid = detailsModal.attr('data-gid'); - socket.emit('api:admin.groups.leave', { + socket.emit('admin.groups.leave', { gid: gid, uid: uid }, function(err, data) { @@ -183,7 +183,7 @@ define(function() { descEl = formEl.find('#change-group-desc'), gid = detailsModal.attr('data-gid'); - socket.emit('api:admin.groups.update', { + socket.emit('admin.groups.update', { gid: gid, values: { name: nameEl.val(), diff --git a/public/src/forum/admin/index.js b/public/src/forum/admin/index.js index d35712c215..78a24f17d4 100644 --- a/public/src/forum/admin/index.js +++ b/public/src/forum/admin/index.js @@ -2,10 +2,10 @@ define(function() { var Admin = {}; Admin.init = function() { - ajaxify.register_events(['api:meta.rooms.getAll']); + ajaxify.register_events(['meta.rooms.getAll']); app.enterRoom('admin'); - socket.emit('api:meta.rooms.getAll', Admin.updateRoomUsage); + socket.emit('meta.rooms.getAll', Admin.updateRoomUsage); socket.on('event:meta.rooms.update', Admin.updateRoomUsage); $('#logout-link').on('click', function() { diff --git a/public/src/forum/admin/plugins.js b/public/src/forum/admin/plugins.js index ce2b510ff2..3f8de8ebd8 100644 --- a/public/src/forum/admin/plugins.js +++ b/public/src/forum/admin/plugins.js @@ -8,10 +8,10 @@ define(function() { if (numPlugins > 0) { pluginsList.on('click', 'button[data-action="toggleActive"]', function() { pluginID = $(this).parents('li').attr('data-plugin-id'); - socket.emit('api:admin.plugins.toggle', pluginID); + socket.emit('admin.plugins.toggle', pluginID); }); - socket.on('api:admin.plugins.toggle', function(status) { + socket.on('admin.plugins.toggle', function(status) { pluginTgl = document.querySelector('.plugins li[data-plugin-id="' + status.id + '"] button'); pluginTgl.innerHTML = ' ' + (status.active ? 'Dea' : 'A') + 'ctivate'; diff --git a/public/src/forum/admin/settings.js b/public/src/forum/admin/settings.js index d294b9311b..03325086d7 100644 --- a/public/src/forum/admin/settings.js +++ b/public/src/forum/admin/settings.js @@ -70,7 +70,7 @@ define(['uploader'], function(uploader) { value = fields[x].value; } - socket.emit('api:admin.config.set', { + socket.emit('admin.config.set', { key: key, value: value }, function(data) { @@ -119,7 +119,7 @@ define(['uploader'], function(uploader) { }; Settings.remove = function(key) { - socket.emit('api:admin.config.remove', key); + socket.emit('admin.config.remove', key); }; return Settings; diff --git a/public/src/forum/admin/themes.js b/public/src/forum/admin/themes.js index 2a613ffc96..38092f89e7 100644 --- a/public/src/forum/admin/themes.js +++ b/public/src/forum/admin/themes.js @@ -23,7 +23,7 @@ define(function() { cssSrc = parentEl.attr('data-css'), themeId = parentEl.attr('data-theme'); - socket.emit('api:admin.themes.set', { + socket.emit('admin.themes.set', { type: themeType, id: themeId, src: cssSrc @@ -47,7 +47,7 @@ define(function() { revertEl.addEventListener('click', function() { bootbox.confirm('Are you sure you wish to remove the custom theme and restore the NodeBB default theme?', function(confirm) { if (confirm) { - socket.emit('api:admin.themes.set', { + socket.emit('admin.themes.set', { type: 'local', id: 'nodebb-theme-cerulean' }, function(err) { @@ -64,7 +64,7 @@ define(function() { }, false); // Installed Themes - socket.emit('api:admin.themes.getInstalled', function(themes) { + socket.emit('admin.themes.getInstalled', function(themes) { var instListEl = document.getElementById('installed_themes'), themeFrag = document.createDocumentFragment(), liEl = document.createElement('li'); diff --git a/public/src/forum/admin/topics.js b/public/src/forum/admin/topics.js index 2b923f3583..e5490445e9 100644 --- a/public/src/forum/admin/topics.js +++ b/public/src/forum/admin/topics.js @@ -15,11 +15,11 @@ define(function() { switch (action) { case 'pin': if (!$this.hasClass('active')) { - socket.emit('api:topics.pin', { + socket.emit('topics.pin', { tid: tid }, Topics.pin); } else { - socket.emit('api:topics.unpin', { + socket.emit('topics.unpin', { tid: tid }, Topics.unpin); } @@ -27,11 +27,11 @@ define(function() { case 'lock': if (!$this.hasClass('active')) { - socket.emit('api:topics.lock', { + socket.emit('topics.lock', { tid: tid }, Topics.lock); } else { - socket.emit('api:topics.unlock', { + socket.emit('topics.unlock', { tid: tid }, Topics.unlock); } @@ -39,11 +39,11 @@ define(function() { case 'delete': if (!$this.hasClass('active')) { - socket.emit('api:topics.delete', { + socket.emit('topics.delete', { tid: tid }, Topics.setDeleted); } else { - socket.emit('api:topics.restore', { + socket.emit('topics.restore', { tid: tid }, Topics.restore); } @@ -63,7 +63,7 @@ define(function() { var lastTid = parseInt(topics[topics.length - 1].getAttribute('data-tid')); this.innerHTML = ' Retrieving topics'; - socket.emit('api:admin.topics.getMore', { + socket.emit('admin.topics.getMore', { limit: 10, after: lastTid }, function(topics) { diff --git a/public/src/forum/admin/users.js b/public/src/forum/admin/users.js index a1083f9660..d95228b9a3 100644 --- a/public/src/forum/admin/users.js +++ b/public/src/forum/admin/users.js @@ -68,14 +68,14 @@ define(function() { if (!isAdmin) { if (isBanned) { - socket.emit('api:admin.user.unbanUser', uid); + socket.emit('admin.user.unbanUser', uid); banBtn.removeClass('btn-warning'); parent.attr('data-banned', 0); updateUserAdminButtons(); } else { bootbox.confirm('Do you really want to ban "' + parent.attr('data-username') + '"?', function(confirm) { if (confirm) { - socket.emit('api:admin.user.banUser', uid); + socket.emit('admin.user.banUser', uid); banBtn.addClass('btn-warning'); parent.attr('data-banned', 1); updateUserAdminButtons(); @@ -103,7 +103,7 @@ define(function() { }); } else if (!isAdmin) { - socket.emit('api:admin.user.makeAdmin', uid); + socket.emit('admin.user.makeAdmin', uid); adminBtn.attr('value', 'UnMake Admin').html('Remove Admin'); parent.attr('data-admin', 1); updateUserBanButtons(); @@ -111,7 +111,7 @@ define(function() { } else if(uid !== yourid) { bootbox.confirm('Do you really want to remove this user as admin "' + parent.attr('data-username') + '"?', function(confirm) { if (confirm) { - socket.emit('api:admin.user.removeAdmin', uid); + socket.emit('admin.user.removeAdmin', uid); adminBtn.attr('value', 'Make Admin').html('Make Admin'); parent.attr('data-admin', 0); updateUserBanButtons(); @@ -147,7 +147,7 @@ define(function() { password: password }; - socket.emit('api:admin.user.createUser', user, function(err, data) { + socket.emit('admin.user.createUser', user, function(err, data) { if(err) { return errorEl.html('Error

' + err + '

').removeClass('hide'); } @@ -188,7 +188,7 @@ define(function() { jQuery('.fa-spinner').removeClass('none'); - socket.emit('api:admin.user.search', username, function(err, data) { + socket.emit('admin.user.search', username, function(err, data) { if(err) { return app.alertError(err.message); } @@ -242,7 +242,7 @@ define(function() { if (set) { loadingMoreUsers = true; - socket.emit('api:user.loadMore', { + socket.emit('user.loadMore', { set: set, after: $('#users-container').children().length }, function(data) { diff --git a/public/src/forum/category.js b/public/src/forum/category.js index c76c6871dc..baee8ade4f 100644 --- a/public/src/forum/category.js +++ b/public/src/forum/category.js @@ -40,7 +40,7 @@ define(['composer'], function(composer) { socket.on('event:new_topic', Category.onNewTopic); - socket.emit('api:categories.getRecentReplies', cid, renderRecentReplies); + socket.emit('categories.getRecentReplies', cid, renderRecentReplies); $(window).off('scroll').on('scroll', function (ev) { var bottom = ($(document).height() - $(window).height()) * 0.9; @@ -81,7 +81,7 @@ define(['composer'], function(composer) { } topic.hide().fadeIn('slow'); - socket.emit('api:categories.getRecentReplies', templates.get('category_id'), renderRecentReplies); + socket.emit('categories.getRecentReplies', templates.get('category_id'), renderRecentReplies); addActiveUser(data); @@ -129,7 +129,7 @@ define(['composer'], function(composer) { } loadingMoreTopics = true; - socket.emit('api:categories.loadMore', { + socket.emit('categories.loadMore', { cid: cid, after: $('#topics-container').children('.category-item').length }, function (data) { diff --git a/public/src/forum/footer.js b/public/src/forum/footer.js index 766d56f0dc..c4b447f7ca 100644 --- a/public/src/forum/footer.js +++ b/public/src/forum/footer.js @@ -1,6 +1,6 @@ define(['notifications', 'chat'], function(Notifications, Chat) { - socket.emit('api:meta.updateHeader', { + socket.emit('meta.updateHeader', { fields: ['username', 'picture', 'userslug'] }, app.updateHeader); @@ -14,5 +14,5 @@ define(['notifications', 'chat'], function(Notifications, Chat) { } socket.on('event:unread.updateCount', updateUnreadCount); - socket.emit('api:user.getUnreadCount', updateUnreadCount); + socket.emit('user.getUnreadCount', updateUnreadCount); }); \ No newline at end of file diff --git a/public/src/forum/home.js b/public/src/forum/home.js index 017435464e..2988a0c695 100644 --- a/public/src/forum/home.js +++ b/public/src/forum/home.js @@ -4,21 +4,21 @@ define(function() { home.init = function() { ajaxify.register_events([ - 'api:user.count', - 'post.stats', - 'api:user.getActiveUsers' + 'user.count', + 'meta.getUsageStats', + 'user.getActiveUsers' ]); - socket.emit('api:user.count', function(data) { + socket.emit('user.count', function(data) { $('#stats_users').html(utils.makeNumberHumanReadable(data.count)).attr('title', data.count); }); - socket.emit('api:meta.getUsageStats', function(data) { + socket.emit('meta.getUsageStats', function(data) { $('#stats_topics').html(utils.makeNumberHumanReadable(data.topics)).attr('title', data.topics); $('#stats_posts').html(utils.makeNumberHumanReadable(data.posts)).attr('title', data.posts); }); - socket.emit('api:user.getActiveUsers', function(data) { + socket.emit('user.getActiveUsers', function(data) { $('#stats_online').html(data.users); }); } diff --git a/public/src/forum/recent.js b/public/src/forum/recent.js index c883c9c54b..c784593592 100644 --- a/public/src/forum/recent.js +++ b/public/src/forum/recent.js @@ -84,7 +84,7 @@ define(function() { var html = templates.prepare(templates['recent'].blocks['topics']).parse({ topics: topics }); - + translator.translate(html, function(translatedHTML) { var container = $('#topics-container'); @@ -99,7 +99,7 @@ define(function() { Recent.loadMoreTopics = function() { Recent.loadingMoreTopics = true; - socket.emit('api:topics.loadMoreRecentTopics', { + socket.emit('topics.loadMoreRecentTopics', { after: $('#topics-container').children('li').length, term: active }, function(data) { diff --git a/public/src/forum/register.js b/public/src/forum/register.js index 3e839c6f58..f49bfa3e7e 100644 --- a/public/src/forum/register.js +++ b/public/src/forum/register.js @@ -42,7 +42,7 @@ define(function() { if (!utils.isEmailValid(emailEl.val())) { showError(email_notify, 'Invalid email address.'); } else { - socket.emit('api:user.emailExists', { + socket.emit('user.emailExists', { email: emailEl.val() }, function(exists) { if (exists === true) { @@ -71,7 +71,7 @@ define(function() { } else if (!utils.isUserNameValid(username.val()) || !utils.slugify(username.val())) { showError(username_notify, 'Invalid username!'); } else { - socket.emit('api:user.exists', { + socket.emit('user.exists', { username: username.val() }); } @@ -123,9 +123,9 @@ define(function() { validatePasswordConfirm(); }); - ajaxify.register_events(['api:user.exists', 'api:user.emailExists']); + ajaxify.register_events(['user.exists', 'user.emailExists']); - socket.on('api:user.exists', function(data) { + socket.on('user.exists', function(data) { if (data.exists === true) { showError(username_notify, 'Username already taken!'); } else { diff --git a/public/src/forum/reset.js b/public/src/forum/reset.js index 2d2b797a4b..095f3d8557 100644 --- a/public/src/forum/reset.js +++ b/public/src/forum/reset.js @@ -8,7 +8,7 @@ define(function() { document.getElementById('reset').onclick = function() { if (inputEl.value.length > 0 && inputEl.value.indexOf('@') !== -1) { - socket.emit('api:user.reset.send', { + socket.emit('user.reset.send', { email: inputEl.value }); } else { diff --git a/public/src/forum/reset_code.js b/public/src/forum/reset_code.js index 46c7dd9c0a..7eb6c718a4 100644 --- a/public/src/forum/reset_code.js +++ b/public/src/forum/reset_code.js @@ -21,7 +21,7 @@ define(function() { noticeEl.querySelector('p').innerHTML = 'The two passwords you\'ve entered do not match.'; noticeEl.style.display = 'block'; } else { - socket.emit('api:user.reset.commit', { + socket.emit('user.reset.commit', { code: reset_code, password: password.value }); @@ -29,13 +29,13 @@ define(function() { }, false); // Enable the form if the code is valid - socket.emit('api:user.reset.valid', { + socket.emit('user.reset.valid', { code: reset_code }); - ajaxify.register_events(['api:user.reset.valid', 'api:user.reset.commit']); - socket.on('api:user.reset.valid', function(data) { + ajaxify.register_events(['user.reset.valid', 'user.reset.commit']); + socket.on('user.reset.valid', function(data) { if ( !! data.valid) resetEl.disabled = false; else { var formEl = document.getElementById('reset-form'); @@ -45,7 +45,7 @@ define(function() { } }) - socket.on('api:user.reset.commit', function(data) { + socket.on('user.reset.commit', function(data) { if (data.status === 'ok') { $('#error').hide(); $('#notice').hide(); diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index 17f80def3f..379eb38b96 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -52,14 +52,14 @@ define(['composer'], function(composer) { if (thread_state.deleted !== '1') { bootbox.confirm('Are you sure you want to delete this thread?', function(confirm) { if (confirm) { - socket.emit('api:topics.delete', { + socket.emit('topics.delete', { tid: tid }, null); } }); } else { bootbox.confirm('Are you sure you want to restore this thread?', function(confirm) { - if (confirm) socket.emit('api:topics.restore', { + if (confirm) socket.emit('topics.restore', { tid: tid }, null); }); @@ -69,11 +69,11 @@ define(['composer'], function(composer) { $('.lock_thread').on('click', function(e) { if (thread_state.locked !== '1') { - socket.emit('api:topics.lock', { + socket.emit('topics.lock', { tid: tid }, null); } else { - socket.emit('api:topics.unlock', { + socket.emit('topics.unlock', { tid: tid }, null); } @@ -82,11 +82,11 @@ define(['composer'], function(composer) { $('.pin_thread').on('click', function(e) { if (thread_state.pinned !== '1') { - socket.emit('api:topics.pin', { + socket.emit('topics.pin', { tid: tid }, null); } else { - socket.emit('api:topics.unpin', { + socket.emit('topics.unpin', { tid: tid }, null); } @@ -102,7 +102,7 @@ define(['composer'], function(composer) { var loadingEl = document.getElementById('categories-loading'); if (loadingEl) { - socket.emit('api:categories.get', function(data) { + socket.emit('categories.get', function(data) { // Render categories var categoriesFrag = document.createDocumentFragment(), categoryEl = document.createElement('li'), @@ -145,7 +145,7 @@ define(['composer'], function(composer) { $(moveThreadModal).find('.modal-header button').fadeOut(250); commitEl.innerHTML = 'Moving '; - socket.emit('api:topics.move', { + socket.emit('topics.move', { tid: tid, cid: targetCid }, function(data) { @@ -192,7 +192,7 @@ define(['composer'], function(composer) { forkCommit.on('click', createTopicFromPosts); function createTopicFromPosts() { - socket.emit('api:topics.createTopicFromPosts', { + socket.emit('topics.createTopicFromPosts', { title: forkModal.find('#fork-title').val(), pids: pids }, function(err) { @@ -298,12 +298,12 @@ define(['composer'], function(composer) { } }; - socket.emit('api:topics.followCheck', tid, function(state) { + socket.emit('topics.followCheck', tid, function(state) { set_follow_state(state, true); }); if (followEl[0]) { followEl[0].addEventListener('click', function() { - socket.emit('api:topics.follow', tid, function(data) { + socket.emit('topics.follow', tid, function(data) { if (data.status && data.status === 'ok') set_follow_state(data.follow); else { app.alert({ @@ -375,7 +375,7 @@ define(['composer'], function(composer) { username = '@' + post.attr('data-username'); } - socket.emit('api:posts.getRawPost', {pid: pid}, function(data) { + socket.emit('posts.getRawPost', {pid: pid}, function(data) { quoted = '> ' + data.post.replace(/\n/g, '\n> ') + '\n\n'; @@ -389,12 +389,12 @@ define(['composer'], function(composer) { var uid = $(this).parents('li').attr('data-uid'); if ($(this).attr('data-favourited') == 'false') { - socket.emit('api:posts.favourite', { + socket.emit('posts.favourite', { pid: pid, room_id: app.currentRoom }); } else { - socket.emit('api:posts.unfavourite', { + socket.emit('posts.unfavourite', { pid: pid, room_id: app.currentRoom }); @@ -441,7 +441,7 @@ define(['composer'], function(composer) { if (confirmDel) { if(deleteAction) { - socket.emit('api:posts.delete', { + socket.emit('posts.delete', { pid: pid, tid: tid }, function(err) { @@ -450,7 +450,7 @@ define(['composer'], function(composer) { } }); } else { - socket.emit('api:posts.restore', { + socket.emit('posts.restore', { pid: pid, tid: tid }, function(err) { @@ -488,7 +488,7 @@ define(['composer'], function(composer) { }); moveBtn.on('click', function() { - socket.emit('api:topics.movePost', {pid: pid, tid: topicId.val()}, function(err) { + socket.emit('topics.movePost', {pid: pid, tid: topicId.val()}, function(err) { if(err) { return app.alertError(err.message); } @@ -515,15 +515,15 @@ define(['composer'], function(composer) { }); ajaxify.register_events([ - 'event:rep_up', 'event:rep_down', 'event:new_post', 'api:get_users_in_room', + 'event:rep_up', 'event:rep_down', 'event:new_post', 'get_users_in_room', 'event:topic_deleted', 'event:topic_restored', 'event:topic:locked', 'event:topic_unlocked', 'event:topic_pinned', 'event:topic_unpinned', 'event:topic_moved', 'event:post_edited', 'event:post_deleted', 'event:post_restored', - 'api:posts.favourite' + 'posts.favourite' ]); - socket.on('api:get_users_in_room', function(data) { + socket.on('get_users_in_room', function(data) { if(data) { var activeEl = $('.thread_active_users'); @@ -689,7 +689,7 @@ define(['composer'], function(composer) { }); - socket.on('api:posts.favourite', function(data) { + socket.on('posts.favourite', function(data) { if (data.status === 'ok' && data.pid) { var favBtn = $('li[data-pid="' + data.pid + '"] .favourite'); if(favBtn.length) { @@ -700,7 +700,7 @@ define(['composer'], function(composer) { } }); - socket.on('api:posts.unfavourite', function(data) { + socket.on('posts.unfavourite', function(data) { if (data.status === 'ok' && data.pid) { var favBtn = $('li[data-pid="' + data.pid + '"] .favourite'); if(favBtn.length) { @@ -861,7 +861,7 @@ define(['composer'], function(composer) { favEl = postEl.find('.favourite'), replyEl = postEl.find('.post_reply'); - socket.emit('api:posts.getPrivileges', pid, function(privileges) { + socket.emit('posts.getPrivileges', pid, function(privileges) { if (privileges.editable) { if (!postEl.hasClass('deleted')) { toggle_post_tools(pid, false); @@ -1056,7 +1056,7 @@ define(['composer'], function(composer) { .fadeIn('slow'); for (var x = 0, numPosts = data.posts.length; x < numPosts; x++) { - socket.emit('api:posts.getPrivileges', data.posts[x].pid, function(privileges) { + socket.emit('posts.getPrivileges', data.posts[x].pid, function(privileges) { toggle_mod_tools(privileges.pid, privileges.editable); }); } @@ -1087,7 +1087,7 @@ define(['composer'], function(composer) { } function updatePostCount() { - socket.emit('api:topics.postcount', templates.get('topic_id'), function(err, postcount) { + socket.emit('topics.postcount', templates.get('topic_id'), function(err, postcount) { if(!err) { Topic.postCount = postcount; $('#topic-post-count').html(Topic.postCount); @@ -1109,7 +1109,7 @@ define(['composer'], function(composer) { indicatorEl.fadeIn(); } - socket.emit('api:topics.loadMore', { + socket.emit('topics.loadMore', { tid: tid, after: parseInt($('#post-container .post-row.infiniteloaded').last().attr('data-index'), 10) + 1 }, function (data) { diff --git a/public/src/forum/unread.js b/public/src/forum/unread.js index 3abafa1521..bec5388f27 100644 --- a/public/src/forum/unread.js +++ b/public/src/forum/unread.js @@ -8,7 +8,7 @@ define(function() { ajaxify.register_events([ 'event:new_topic', 'event:new_post', - 'api:topics.markAllRead' + 'topics.markAllRead' ]); var newTopicCount = 0, @@ -55,7 +55,7 @@ define(function() { $('#mark-allread-btn').on('click', function() { var btn = $(this); - socket.emit('api:topics.markAllRead', {}, function(success) { + socket.emit('topics.markAllRead', {}, function(success) { if (success) { btn.remove(); $('#topics-container').empty(); @@ -91,7 +91,7 @@ define(function() { function loadMoreTopics() { loadingMoreTopics = true; - socket.emit('api:topics.loadMoreUnreadTopics', { + socket.emit('topics.loadMoreUnreadTopics', { after: parseInt($('#topics-container').attr('data-next-start'), 10) }, function(data) { if (data.topics && data.topics.length) { diff --git a/public/src/forum/users.js b/public/src/forum/users.js index 23f2a2c27c..72f58fd17d 100644 --- a/public/src/forum/users.js +++ b/public/src/forum/users.js @@ -47,7 +47,7 @@ define(function() { jQuery('#user-notfound-notify').html(''); setTimeout(function() { - socket.emit('api:admin.user.search', username, function(err, data) { + socket.emit('admin.user.search', username, function(err, data) { if(err) { return app.alert(err.message); } @@ -80,10 +80,10 @@ define(function() { }, 250); }); - socket.on('api:user.isOnline', function(data) { + socket.on('user.isOnline', function(data) { if(getActiveSection() == 'online' && !loadingMoreUsers) { startLoading('users:online', 0, true); - socket.emit('api:user.getOnlineAnonCount', {} , function(anonCount) { + socket.emit('user.getOnlineAnonCount', {} , function(anonCount) { if(parseInt(anonCount, 10) > 0) { $('#users-container .anon-user').removeClass('hide'); $('#online_anon_count').html(anonCount); @@ -123,7 +123,7 @@ define(function() { function startLoading(set, after, emptyContainer) { loadingMoreUsers = true; - socket.emit('api:user.loadMore', { + socket.emit('user.loadMore', { set: set, after: after }, function(data) { diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 7184dca42d..3efb695d66 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -13,7 +13,7 @@ define(['taskbar', 'string'], function(taskbar, S) { return; } - socket.emit('api:modules.chats.list', function(chats) { + socket.emit('modules.chats.list', function(chats) { var chatsFrag = document.createDocumentFragment(), chatEl = document.createElement('li'), numChats = chats.length, @@ -90,7 +90,7 @@ define(['taskbar', 'string'], function(taskbar, S) { } function checkStatus(chatModal, callback) { - socket.emit('api:user.isOnline', chatModal.touid, function(data) { + socket.emit('user.isOnline', chatModal.touid, function(data) { if(data.online !== chatModal.online) { if(data.online) { module.appendChatMessage(chatModal, chatModal.username + ' is currently online.\n', data.timestamp); @@ -191,7 +191,7 @@ define(['taskbar', 'string'], function(taskbar, S) { } function getChatMessages(chatModal, callback) { - socket.emit('api:modules.chats.get', {touid:chatModal.touid}, function(messages) { + socket.emit('modules.chats.get', {touid:chatModal.touid}, function(messages) { for(var i = 0; i 0) { titleEl.val(postData.title); titleEl.prop('readOnly', true); - socket.emit('api:modules.composer.editCheck', postData.pid, function(editCheck) { + socket.emit('modules.composer.editCheck', postData.pid, function(editCheck) { if (editCheck.titleEditable) { postContainer.find('input').prop('readonly', false); } @@ -434,7 +434,7 @@ define(['taskbar'], function(taskbar) { // Still here? Let's post. if (parseInt(postData.cid) > 0) { - socket.emit('api:topics.post', { + socket.emit('topics.post', { 'title' : titleEl.val(), 'content' : bodyEl.val(), 'category_id' : postData.cid @@ -442,14 +442,14 @@ define(['taskbar'], function(taskbar) { composer.discard(post_uuid); }); } else if (parseInt(postData.tid) > 0) { - socket.emit('api:posts.reply', { + socket.emit('posts.reply', { 'topic_id' : postData.tid, 'content' : bodyEl.val() }, function() { composer.discard(post_uuid); }); } else if (parseInt(postData.pid) > 0) { - socket.emit('api:posts.edit', { + socket.emit('posts.edit', { pid: postData.pid, content: bodyEl.val(), title: titleEl.val() @@ -568,12 +568,12 @@ define(['taskbar'], function(taskbar) { dropDiv.hide(); if(file.type.match('image.*')) { - uploadFile('api:posts.uploadImage', post_uuid, fileData); + uploadFile('posts.uploadImage', post_uuid, fileData); } else { if(file.size > parseInt(config.maximumFileSize, 10) * 1024) { return composerAlert('File too big', 'Maximum allowed file size is ' + config.maximumFileSize + 'kbs'); } - uploadFile('api:posts.uploadFile', post_uuid, fileData); + uploadFile('posts.uploadFile', post_uuid, fileData); } }); @@ -582,7 +582,7 @@ define(['taskbar'], function(taskbar) { function uploadFile(method, post_uuid, img) { - var linkStart = method === 'api:posts.uploadImage' ? '!' : '', + var linkStart = method === 'posts.uploadImage' ? '!' : '', postContainer = $('#cmp-uuid-' + post_uuid), textarea = postContainer.find('textarea'), text = textarea.val(), diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js index 250bf6e77d..171e5f32f7 100644 --- a/public/src/modules/notifications.js +++ b/public/src/modules/notifications.js @@ -11,7 +11,7 @@ define(function() { notifTrigger.addEventListener('click', function(e) { e.preventDefault(); if (notifContainer.className.indexOf('open') === -1) { - socket.emit('api:notifications.get', null, function(data) { + socket.emit('notifications.get', null, function(data) { var notifFrag = document.createDocumentFragment(), notifEl = document.createElement('li'), numRead = data.read.length, @@ -51,7 +51,7 @@ define(function() { notifIcon.toggleClass('active', false); } - socket.emit('api:modules.notifications.mark_all_read', null, function() { + socket.emit('modules.notifications.mark_all_read', null, function() { notifIcon.toggleClass('active', false); app.refreshTitle(); @@ -78,7 +78,7 @@ define(function() { } if (target) { var nid = parseInt(target.getAttribute('data-nid')); - if (nid > 0) socket.emit('api:modules.notifications.mark_read', nid); + if (nid > 0) socket.emit('modules.notifications.mark_read', nid); } }); @@ -95,7 +95,7 @@ define(function() { localStorage.setItem('notifications:count', count); }; - socket.emit('api:notifications.getCount', function(err, count) { + socket.emit('notifications.getCount', function(err, count) { if (!err) { updateNotifCount(count); } else { From c215e61541dc589b6dd3875dd558ddf6f4038ad9 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:13:22 -0500 Subject: [PATCH 04/48] fixed up admin.js --- public/src/forum/admin/categories.js | 7 ++++- src/socket.io/admin.js | 38 ++++++++++++++-------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/public/src/forum/admin/categories.js b/public/src/forum/admin/categories.js index 0cff58bef2..8f2a18c69b 100644 --- a/public/src/forum/admin/categories.js +++ b/public/src/forum/admin/categories.js @@ -303,7 +303,12 @@ define(['uploader'], function(uploader) { gid = btnEl.parents('tr[data-gid]').attr('data-gid'), privilege = this.getAttribute('data-gpriv'); e.preventDefault(); - socket.emit('admin.categories.setGroupPrivilege', cid, gid, privilege, !btnEl.hasClass('active'), function(err) { + socket.emit('admin.categories.setGroupPrivilege', { + cid: cid, + gid: gid, + privilege: privilege, + set: !btnEl.hasClass('active') + }, function(err) { if (!err) { btnEl.toggleClass('active'); } diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index bcc647b1c2..555c9308d3 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -150,7 +150,7 @@ SocketAdmin.categories.setPrivilege = function(socket, data, callback) { } }; -SocketAdmin.categories.getPrivilegeSettings = function(cid, callback) { +SocketAdmin.categories.getPrivilegeSettings = function(socket, cid, callback) { async.parallel({ "+r": function(next) { groups.getByGroupName('cid:' + cid + ':privileges:+r', { expand: true }, function(err, groupObj) { @@ -182,15 +182,15 @@ SocketAdmin.categories.getPrivilegeSettings = function(cid, callback) { }); }; -SocketAdmin.categories.setGroupPrivilege = function(cid, gid, privilege, set, callback) { - if (set) { - groups.joinByGroupName('cid:' + cid + ':privileges:' + privilege, gid, callback); +SocketAdmin.categories.setGroupPrivilege = function(socket, data, callback) { + if (data.set) { + groups.joinByGroupName('cid:' + data.cid + ':privileges:' + data.privilege, data.gid, callback); } else { - groups.leaveByGroupName('cid:' + cid + ':privileges:' + privilege, gid, callback); + groups.leaveByGroupName('cid:' + data.cid + ':privileges:' + data.privilege, data.gid, callback); } }; -SocketAdmin.categories.groupsList = function(cid, callback) { +SocketAdmin.categories.groupsList = function(socket, cid, callback) { groups.list({expand:false}, function(err, data){ async.map(data, function(groupObj, next) { CategoryTools.groupPrivileges(cid, groupObj.gid, function(err, privileges) { @@ -213,7 +213,7 @@ SocketAdmin.categories.groupsList = function(cid, callback) { SocketAdmin.themes = {}; SocketAdmin.plugins = {}; -SocketAdmin.themes.getInstalled = function(callback) { +SocketAdmin.themes.getInstalled = function(socket, data, callback) { meta.themes.get(function(err, themeArr) { callback(themeArr); }); @@ -221,9 +221,9 @@ SocketAdmin.themes.getInstalled = function(callback) { SocketAdmin.themes.set = meta.themes.set; -SocketAdmin.plugins.toggle = function(plugin_id, sessionData) { +SocketAdmin.plugins.toggle = function(socket, plugin_id) { plugins.toggleActive(plugin_id, function(status) { - sessionData.socket.emit('api:admin.plugins.toggle', status); + socket.emit('api:admin.plugins.toggle', status); }); }; @@ -231,7 +231,7 @@ SocketAdmin.plugins.toggle = function(plugin_id, sessionData) { SocketAdmin.config = {}; -SocketAdmin.config.get = function(callback, sessionData) { +SocketAdmin.config.get = function(socket, data, callback) { meta.configs.list(function(err, config) { if (!err) { callback(config); @@ -239,7 +239,7 @@ SocketAdmin.config.get = function(callback, sessionData) { }); }; -SocketAdmin.config.set = function(data, callback, sessionData) { +SocketAdmin.config.set = function(socket, data, callback) { meta.configs.set(data.key, data.value, function(err) { if (!err) { callback({ @@ -252,11 +252,11 @@ SocketAdmin.config.set = function(data, callback, sessionData) { }); } - logger.monitorConfig({io: sessionData.server}, data); + logger.monitorConfig({io: socket.server}, data); }); }; -SocketAdmin.config.remove = function(key) { +SocketAdmin.config.remove = function(socket, key) { meta.configs.remove(key); }; @@ -264,19 +264,19 @@ SocketAdmin.config.remove = function(key) { SocketAdmin.groups = {}; -SocketAdmin.groups.create = function(data, callback) { +SocketAdmin.groups.create = function(socket, data, callback) { groups.create(data.name, data.description, function(err, groupObj) { callback(err ? err.message : null, groupObj || undefined); }); }; -SocketAdmin.groups.delete = function(gid, callback) { +SocketAdmin.groups.delete = function(socket, gid, callback) { groups.destroy(gid, function(err) { callback(err ? err.message : null, err ? null : 'OK'); }); }; -SocketAdmin.groups.get = function(gid, callback) { +SocketAdmin.groups.get = function(socket, gid, callback) { groups.get(gid, { expand: true }, function(err, groupObj) { @@ -284,15 +284,15 @@ SocketAdmin.groups.get = function(gid, callback) { }); }; -SocketAdmin.groups.join = function(data, callback) { +SocketAdmin.groups.join = function(socket, data, callback) { groups.join(data.gid, data.uid, callback); }; -SocketAdmin.groups.leave = function(data, callback) { +SocketAdmin.groups.leave = function(socket, data, callback) { groups.leave(data.gid, data.uid, callback); }; -SocketAdmin.groups.update = function(data, callback) { +SocketAdmin.groups.update = function(socket, data, callback) { groups.update(data.gid, data.values, function(err) { callback(err ? err.message : null); }); From 69a9570186db99edec8a56fd18194827cebd0204 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:16:12 -0500 Subject: [PATCH 05/48] migrated catefories.js to new socketAL format --- src/socket.io/categories.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/socket.io/categories.js b/src/socket.io/categories.js index e00e61c1e5..b670f1ff8d 100644 --- a/src/socket.io/categories.js +++ b/src/socket.io/categories.js @@ -2,13 +2,13 @@ var categories = require('../categories'), SocketCategories = {}; -SocketCategories.getRecentReplies = function(tid, callback, sessionData) { - categories.getRecentReplies(tid, sessionData.uid, 4, function(err, replies) { +SocketCategories.getRecentReplies = function(socket, tid, callback) { + categories.getRecentReplies(tid, socket.uid, 4, function(err, replies) { callback(replies); }); }; -SocketCategories.get = function(callback) { +SocketCategories.get = function(socket, data, callback) { categories.getAllCategories(0, function(err, categories) { if(callback) { callback(categories); @@ -16,11 +16,11 @@ SocketCategories.get = function(callback) { }); }; -SocketCategories.loadMore = function(data, callback, sessionData) { +SocketCategories.loadMore = function(socket, data, callback) { var start = data.after, end = start + 9; - categories.getCategoryTopics(data.cid, start, end, sessionData.uid, function(topics) { + categories.getCategoryTopics(data.cid, start, end, socket.uid, function(topics) { callback({ topics: topics }); From accde93fff286d92136e48df1abb8912f6b3ab70 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 15:17:25 -0500 Subject: [PATCH 06/48] removed api: from server --- src/favourites.js | 4 ++-- src/socket.io/admin.js | 8 ++++---- src/socket.io/index.js | 10 +++++----- src/socket.io/modules.js | 2 +- src/socket.io/topics.js | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/favourites.js b/src/favourites.js index cf19918d94..aba04ae89b 100644 --- a/src/favourites.js +++ b/src/favourites.js @@ -46,7 +46,7 @@ var db = require('./database'), }); } - socket.emit('api:posts.favourite', { + socket.emit('posts.favourite', { status: 'ok', pid: pid }); @@ -83,7 +83,7 @@ var db = require('./database'), }); } - socket.emit('api:posts.unfavourite', { + socket.emit('posts.unfavourite', { status: 'ok', pid: pid }); diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index bcc647b1c2..39867f14b5 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -119,14 +119,14 @@ SocketAdmin.categories.search = function(socket, data, callback) { if (!err) { userObj.privileges = privileges; } else { - winston.error('[socket api:admin.categories.search] Could not retrieve permissions'); + winston.error('[socket admin.categories.search] Could not retrieve permissions'); } next(null, userObj); }); }, function(err, data) { if (!callback) { - socket.emit('api:admin.categories.search', data); + socket.emit('admin.categories.search', data); } else { callback(null, data); } @@ -197,7 +197,7 @@ SocketAdmin.categories.groupsList = function(cid, callback) { if (!err) { groupObj.privileges = privileges; } else { - winston.error('[socket api:admin.categories.groupsList] Could not retrieve permissions'); + winston.error('[socket admin.categories.groupsList] Could not retrieve permissions'); } next(null, groupObj); @@ -223,7 +223,7 @@ SocketAdmin.themes.set = meta.themes.set; SocketAdmin.plugins.toggle = function(plugin_id, sessionData) { plugins.toggleActive(plugin_id, function(status) { - sessionData.socket.emit('api:admin.plugins.toggle', status); + sessionData.socket.emit('admin.plugins.toggle', status); }); }; diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 73eb9ca8eb..821f9887b8 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -94,7 +94,7 @@ Sockets.init = function() { }); } - io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid)); + io.sockets.in('global').emit('user.isOnline', isUserOnline(uid)); }); }); @@ -114,7 +114,7 @@ Sockets.init = function() { } } - io.sockets.in('global').emit('api:user.isOnline', isUserOnline(uid)); + io.sockets.in('global').emit('user.isOnline', isUserOnline(uid)); emitOnlineUserCount(); @@ -238,11 +238,11 @@ function updateRoomBrowsingText(roomName) { anonymousCount = getAnonymousCount(roomName); if (uids.length === 0) { - io.sockets.in(roomName).emit('api:get_users_in_room', { users: [], anonymousCount: anonymousCount }); + io.sockets.in(roomName).emit('get_users_in_room', { users: [], anonymousCount: anonymousCount }); } else { user.getMultipleUserFields(uids, ['uid', 'username', 'userslug', 'picture'], function(err, users) { if(!err) { - io.sockets.in(roomName).emit('api:get_users_in_room', { users: users, anonymousCount: anonymousCount }); + io.sockets.in(roomName).emit('get_users_in_room', { users: users, anonymousCount: anonymousCount }); } }); } @@ -284,7 +284,7 @@ function emitOnlineUserCount(callback) { if (callback) { callback(returnObj); } else { - io.sockets.emit('api:user.active.get', returnObj); + io.sockets.emit('user.active.get', returnObj); } } diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index a85a38bb2d..5b6ea68f7a 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -137,7 +137,7 @@ SocketModules.chats.send = function(data, sessionData) { SocketModules.chats.list = function(callback, sessionData) { Messaging.getRecentChats(sessionData.uid, function(err, uids) { if (err) { - winston.warn('[(socket) api:chats.list] Problem retrieving chats: ' + err.message); + winston.warn('[(socket) chats.list] Problem retrieving chats: ' + err.message); } callback(uids || []); diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index 43e8b8e127..6405fc9a01 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -86,7 +86,7 @@ SocketTopics.delete = function(data, callback, sessionData) { if (!err) { module.parent.exports.emitTopicPostStats(); if (callback) { - callback('api:topic.delete', { + callback('topic.delete', { status: 'ok', tid: data.tid }); @@ -104,7 +104,7 @@ SocketTopics.restore = function(data, callback, sessionData) { module.parent.exports.emitTopicPostStats(); if (callback) { - callback('api:topic.restore', { + callback('topic.restore', { status: 'ok', tid: data.tid }); @@ -220,7 +220,7 @@ SocketTopics.loadMoreRecentTopics = function(data, callback, sessionData) { if (!err) { callback(latestTopics); } else { - winston.error('[socket api:topics.loadMoreRecentTopics] ' + err.message); + winston.error('[socket topics.loadMoreRecentTopics] ' + err.message); } }); }; From 2235dbd2a0ba5bd78a852ec3504f9c478e060d42 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:19:07 -0500 Subject: [PATCH 07/48] migrating meta.js to new socketAL format --- src/socket.io/meta.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index dbba311fab..2a44d0b5fe 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -10,9 +10,9 @@ var meta = require('../meta'), SocketMeta = {}; -SocketMeta.reconnected = function(sessionData) { - var uid = sessionData.uid, - sessionID = sessionData.socket.id; +SocketMeta.reconnected = function(socket) { + var uid = socket.uid, + sessionID = socket.id; if (uid) { topics.pushUnreadCount(uid); @@ -28,17 +28,17 @@ SocketMeta.reconnected = function(sessionData) { } }; -SocketMeta.buildTitle = function(text, callback) { +SocketMeta.buildTitle = function(socket, text, callback) { meta.title.build(text, function(err, title) { callback(title); }); }; -SocketMeta.updateHeader = function(data, callback, sessionData) { - if (sessionData.uid) { - user.getUserFields(sessionData.uid, data.fields, function(err, fields) { +SocketMeta.updateHeader = function(socket, data, callback) { + if (socket.uid) { + user.getUserFields(socket.uid, data.fields, function(err, fields) { if (!err && fields) { - fields.uid = sessionData.uid; + fields.uid = socket.uid; callback(fields); } }); @@ -57,7 +57,7 @@ SocketMeta.updateHeader = function(data, callback, sessionData) { } }; -SocketMeta.getUsageStats = function(callback) { +SocketMeta.getUsageStats = function(socket, data, callback) { module.parent.exports.emitTopicPostStats(callback); }; @@ -65,19 +65,19 @@ SocketMeta.getUsageStats = function(callback) { SocketMeta.rooms = {}; -SocketMeta.rooms.enter = function(data, sessionData) { +SocketMeta.rooms.enter = function(socket, data) { if (data.leave !== null) { - sessionData.socket.leave(data.leave); + socket.leave(data.leave); } - sessionData.socket.join(data.enter); - sessionData.rooms[data.enter] = sessionData.rooms[data.enter] || {}; + socket.join(data.enter); + socket.rooms[data.enter] = socket.rooms[data.enter] || {}; - if (sessionData.uid) { - sessionData.rooms[data.enter][sessionData.socket.id] = sessionData.uid; + if (socket.uid) { + socket.rooms[data.enter][socket.id] = socket.uid; - if (data.leave && sessionData.rooms[data.leave] && sessionData.rooms[data.leave][sessionData.socket.id] && data.enter !== data.leave) { - delete sessionData.rooms[data.leave][sessionData.socket.id]; + if (data.leave && socket.rooms[data.leave] && socket.rooms[data.leave][socket.id] && data.enter !== data.leave) { + delete socket.rooms[data.leave][socket.id]; } } @@ -88,12 +88,12 @@ SocketMeta.rooms.enter = function(data, sessionData) { module.parent.exports.updateRoomBrowsingText(data.enter); if (data.enter != 'admin') { - sessionData.server.sockets.in('admin').emit('event:meta.rooms.update', sessionData.server.sockets.manager.rooms); + socket.server.sockets.in('admin').emit('event:meta.rooms.update', socket.server.sockets.manager.rooms); } }; -SocketMeta.rooms.getAll = function(callback, sessionData) { - callback(sessionData.server.sockets.manager.rooms); +SocketMeta.rooms.getAll = function(socket, data, callback) { + callback(socket.server.sockets.manager.rooms); }; /* Exports */ From 8bb24fa034924216fc1c3d8e27676b6fda59c29a Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 15:25:04 -0500 Subject: [PATCH 08/48] fixed update header --- public/src/app.js | 2 ++ src/socket.io/user.js | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 65c3c7c61f..330f89f524 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -122,6 +122,8 @@ var socket, setTimeout(app.logout, 1000); }); + socket.on('meta.updateHeader', app.updateHeader); + app.enterRoom('global'); } }, diff --git a/src/socket.io/user.js b/src/socket.io/user.js index d81779ad50..a9cf5ee59f 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -6,7 +6,7 @@ var user = require('../user'), SocketUser.exists = function(data, sessionData) { if (data.username) { user.exists(utils.slugify(data.username), function(exists) { - sessionData.socket.emit('api:user.exists', { + sessionData.socket.emit('user.exists', { exists: exists }); }); @@ -60,7 +60,7 @@ SocketUser.changePicture = function(data, callback, sessionData) { user.getUserFields(sessionData.uid, ['picture'], function(err, fields) { if (!err && fields) { fields.uid = sessionData.uid; - sessionData.socket.emit('api:updateHeader', fields); + sessionData.socket.emit('meta.updateHeader', fields); callback(true); } else { callback(false); From be3284e05e4aacebdd5fbfdc666aec0972ee03ec Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:28:21 -0500 Subject: [PATCH 09/48] migrating modules.js to new socketAL style --- src/socket.io/modules.js | 48 ++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 5b6ea68f7a..fe1c423999 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -18,8 +18,8 @@ var posts = require('../posts'), SocketModules.composer = {}; -SocketModules.composer.push = function(data, callback, sessionData) { - if (parseInt(sessionData.uid, 10) > 0 || parseInt(meta.config.allowGuestPosting, 10) === 1) { +SocketModules.composer.push = function(socket, data, callback) { + if (parseInt(socket.uid, 10) > 0 || parseInt(meta.config.allowGuestPosting, 10) === 1) { if (parseInt(data.pid, 10) > 0) { async.parallel([ @@ -46,7 +46,7 @@ SocketModules.composer.push = function(data, callback, sessionData) { } }; -SocketModules.composer.editCheck = function(pid, callback) { +SocketModules.composer.editCheck = function(socket, pid, callback) { posts.getPostField(pid, 'tid', function(err, tid) { postTools.isMain(pid, tid, function(err, isMain) { callback({ @@ -60,9 +60,9 @@ SocketModules.composer.editCheck = function(pid, callback) { SocketModules.chats = {}; -SocketModules.chats.get = function(data, callback, sessionData) { +SocketModules.chats.get = function(socket, data, callback) { var touid = data.touid; - Messaging.getMessages(sessionData.uid, touid, function(err, messages) { + Messaging.getMessages(socket.uid, touid, function(err, messages) { if (err) { return callback(null); } @@ -71,16 +71,16 @@ SocketModules.chats.get = function(data, callback, sessionData) { }); }; -SocketModules.chats.send = function(data, sessionData) { +SocketModules.chats.send = function(socket, data) { var touid = data.touid; - if (touid === sessionData.uid || sessionData.uid === 0) { + if (touid === socket.uid || socket.uid === 0) { return; } var msg = S(data.message).stripTags().s; - user.getMultipleUserFields([sessionData.uid, touid], ['username'], function(err, usersData) { + user.getMultipleUserFields([socket.uid, touid], ['username'], function(err, usersData) { if(err) { return; } @@ -91,23 +91,23 @@ SocketModules.chats.send = function(data, sessionData) { notifText = 'New message from ' + username + ''; if (!module.parent.exports.isUserOnline(touid)) { - notifications.create(notifText, 'javascript:app.openChat('' + username + '', ' + sessionData.uid + ');', 'notification_' + sessionData.uid + '_' + touid, function(nid) { + notifications.create(notifText, 'javascript:app.openChat('' + username + '', ' + socket.uid + ');', 'notification_' + socket.uid + '_' + touid, function(nid) { notifications.push(nid, [touid], function(success) { }); }); } - Messaging.parse(msg, sessionData.uid, sessionData.uid, toUsername, function(parsed) { - Messaging.addMessage(sessionData.uid, touid, msg, function(err, message) { + Messaging.parse(msg, socket.uid, socket.uid, toUsername, function(parsed) { + Messaging.addMessage(socket.uid, touid, msg, function(err, message) { var numSockets = 0, x; - if (sessionData.userSockets[touid]) { - numSockets = sessionData.userSockets[touid].length; + if (socket.userSockets[touid]) { + numSockets = socket.userSockets[touid].length; for (x = 0; x < numSockets; ++x) { - sessionData.userSockets[touid][x].emit('event:chats.receive', { - fromuid: sessionData.uid, + socket.userSockets[touid][x].emit('event:chats.receive', { + fromuid: socket.uid, username: username, // todo this isnt very nice, but can't think of a better way atm message: parsed.replace("chat-user-you'>You", "'>" + username), @@ -116,12 +116,12 @@ SocketModules.chats.send = function(data, sessionData) { } } - if (sessionData.userSockets[sessionData.uid]) { + if (socket.userSockets[socket.uid]) { - numSockets = sessionData.userSockets[sessionData.uid].length; + numSockets = socket.userSockets[socket.uid].length; for (x = 0; x < numSockets; ++x) { - sessionData.userSockets[sessionData.uid][x].emit('event:chats.receive', { + socket.userSockets[socket.uid][x].emit('event:chats.receive', { fromuid: touid, username: toUsername, message: parsed, @@ -134,8 +134,8 @@ SocketModules.chats.send = function(data, sessionData) { }); }; -SocketModules.chats.list = function(callback, sessionData) { - Messaging.getRecentChats(sessionData.uid, function(err, uids) { +SocketModules.chats.list = function(socket, data, callback) { + Messaging.getRecentChats(socket.uid, function(err, uids) { if (err) { winston.warn('[(socket) chats.list] Problem retrieving chats: ' + err.message); } @@ -148,12 +148,12 @@ SocketModules.chats.list = function(callback, sessionData) { SocketModules.notifications = {}; -SocketModules.notifications.mark_read = function(nid, sessionData) { - notifications.mark_read(nid, sessionData.uid); +SocketModules.notifications.mark_read = function(socket, nid) { + notifications.mark_read(nid, socket.uid); }; -SocketModules.notifications.mark_all_read = function(data, callback, sessionData) { - notifications.mark_all_read(sessionData.uid, function(err) { +SocketModules.notifications.mark_all_read = function(socket, data, callback) { + notifications.mark_all_read(socket.uid, function(err) { if (!err) { callback(); } From 35aa06c2306aa17a7fc31566c8dfff296a16dfac Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:31:57 -0500 Subject: [PATCH 10/48] migrating notifications to new socketAL format --- src/socket.io/notifications.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/socket.io/notifications.js b/src/socket.io/notifications.js index 6f8085311b..995eb1826b 100644 --- a/src/socket.io/notifications.js +++ b/src/socket.io/notifications.js @@ -2,14 +2,14 @@ var user = require('../user'), SocketNotifs = {}; -SocketNotifs.get = function(data, callback, sessionData) { - user.notifications.get(sessionData.uid, function(notifs) { +SocketNotifs.get = function(socket, data, callback) { + user.notifications.get(socket.uid, function(notifs) { callback(notifs); }); }; -SocketNotifs.getCount = function(callback, sessionData) { - user.notifications.getUnreadCount(sessionData.uid, function(err, count) { +SocketNotifs.getCount = function(socket, callback) { + user.notifications.getUnreadCount(socket.uid, function(err, count) { callback(err ? err.message : null, count); }); }; From 42d6880ac4f86593d7ef6d2d574e6972ae4db0b3 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:34:43 -0500 Subject: [PATCH 11/48] migrating posts to new socketAL format --- src/socket.io/posts.js | 66 +++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index 950bcff8c8..a1040fc413 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -6,9 +6,9 @@ var posts = require('../posts'), SocketPosts = {}; -SocketPosts.reply = function(data, callback, sessionData) { - if (sessionData.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { - sessionData.socket.emit('event:alert', { +SocketPosts.reply = function(socket, data, callback) { + if (socket.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { + socket.emit('event:alert', { title: 'Reply Unsuccessful', message: 'You don't seem to be logged in, so you cannot reply.', type: 'danger', @@ -17,21 +17,21 @@ SocketPosts.reply = function(data, callback, sessionData) { return; } - topics.reply(data.topic_id, sessionData.uid, data.content, function(err, postData) { + topics.reply(data.topic_id, socket.uid, data.content, function(err, postData) { if(err) { if (err.message === 'content-too-short') { - module.parent.exports.emitContentTooShortAlert(sessionData.socket); + module.parent.exports.emitContentTooShortAlert(socket); } else if (err.message === 'too-many-posts') { - module.parent.exports.emitTooManyPostsAlert(sessionData.socket); + module.parent.exports.emitTooManyPostsAlert(socket); } else if (err.message === 'reply-error') { - sessionData.socket.emit('event:alert', { + socket.emit('event:alert', { title: 'Reply Unsuccessful', message: 'Your reply could not be posted at this time. Please try again later.', type: 'warning', timeout: 2000 }); } else if (err.message === 'no-privileges') { - sessionData.socket.emit('event:alert', { + socket.emit('event:alert', { title: 'Unable to post', message: 'You do not have posting privileges in this category.', type: 'danger', @@ -45,7 +45,7 @@ SocketPosts.reply = function(data, callback, sessionData) { module.parent.exports.emitTopicPostStats(); - sessionData.socket.emit('event:alert', { + socket.emit('event:alert', { title: 'Reply Successful', message: 'You have successfully replied. Click here to view your reply.', type: 'success', @@ -54,32 +54,32 @@ SocketPosts.reply = function(data, callback, sessionData) { var socketData = { posts: [postData] }; - sessionData.server.sockets.in('topic_' + postData.tid).emit('event:new_post', socketData); - sessionData.server.sockets.in('recent_posts').emit('event:new_post', socketData); - sessionData.server.sockets.in('user/' + postData.uid).emit('event:new_post', socketData); + socket.server.sockets.in('topic_' + postData.tid).emit('event:new_post', socketData); + socket.server.sockets.in('recent_posts').emit('event:new_post', socketData); + socket.server.sockets.in('user/' + postData.uid).emit('event:new_post', socketData); callback(); } }); }; -SocketPosts.favourite = function(data, sessionData) { - favourites.favourite(data.pid, data.room_id, sessionData.uid, sessionData.socket); +SocketPosts.favourite = function(socket, data) { + favourites.favourite(data.pid, data.room_id, socket.uid, socket); }; -SocketPosts.unfavourite = function(data, sessionData) { - favourites.unfavourite(data.pid, data.room_id, sessionData.uid, sessionData.socket); +SocketPosts.unfavourite = function(socket, data) { + favourites.unfavourite(data.pid, data.room_id, socket.uid, socket); }; -SocketPosts.uploadImage = function(data, callback) { +SocketPosts.uploadImage = function(socket, data, callback) { posts.uploadPostImage(data, callback); }; -SocketPosts.uploadFile = function(data, callback) { +SocketPosts.uploadFile = function(socket, data, callback) { posts.uploadPostFile(data, callback); }; -SocketPosts.getRawPost = function(data, callback) { +SocketPosts.getRawPost = function(socket, data, callback) { posts.getPostField(data.pid, 'content', function(err, raw) { callback({ post: raw @@ -87,9 +87,9 @@ SocketPosts.getRawPost = function(data, callback) { }); }; -SocketPosts.edit = function(data, callback, sessionData) { - if(!sessionData.uid) { - sessionData.socket.emit('event:alert', { +SocketPosts.edit = function(socket, data, callback) { + if(!socket.uid) { + socket.emit('event:alert', { title: 'Can't edit', message: 'Guests can't edit posts!', type: 'warning', @@ -97,19 +97,19 @@ SocketPosts.edit = function(data, callback, sessionData) { }); return; } else if (!data.title || data.title.length < parseInt(meta.config.minimumTitleLength, 10)) { - topics.emitTitleTooShortAlert(sessionData.socket); + topics.emitTitleTooShortAlert(socket); return; } else if (!data.content || data.content.length < parseInt(meta.config.minimumPostLength, 10)) { - module.parent.exports.emitContentTooShortAlert(sessionData.socket); + module.parent.exports.emitContentTooShortAlert(socket); return; } - postTools.edit(sessionData.uid, data.pid, data.title, data.content, data.images); + postTools.edit(socket.uid, data.pid, data.title, data.content, data.images); callback(); }; -SocketPosts.delete = function(data, callback, sessionData) { - postTools.delete(sessionData.uid, data.pid, function(err) { +SocketPosts.delete = function(socket, data, callback) { + postTools.delete(socket.uid, data.pid, function(err) { if(err) { return callback(err); @@ -117,30 +117,30 @@ SocketPosts.delete = function(data, callback, sessionData) { module.parent.exports.emitTopicPostStats(); - sessionData.server.sockets.in('topic_' + data.tid).emit('event:post_deleted', { + socket.server.sockets.in('topic_' + data.tid).emit('event:post_deleted', { pid: data.pid }); callback(null); }); }; -SocketPosts.restore = function(data, callback, sessionData) { - postTools.restore(sessionData.uid, data.pid, function(err) { +SocketPosts.restore = function(socket, data, callback) { + postTools.restore(socket.uid, data.pid, function(err) { if(err) { return callback(err); } module.parent.exports.emitTopicPostStats(); - sessionData.server.sockets.in('topic_' + data.tid).emit('event:post_restored', { + socket.server.sockets.in('topic_' + data.tid).emit('event:post_restored', { pid: data.pid }); callback(null); }); }; -SocketPosts.getPrivileges = function(pid, callback, sessionData) { - postTools.privileges(pid, sessionData.uid, function(privileges) { +SocketPosts.getPrivileges = function(socket, pid, callback) { + postTools.privileges(pid, socket.uid, function(privileges) { privileges.pid = parseInt(pid); callback(privileges); }); From adf4a5c407135285bdc8052a68f865492dda29c5 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 15:46:37 -0500 Subject: [PATCH 12/48] user.js changes --- src/socket.io/index.js | 2 +- src/socket.io/user.js | 85 +++++++++++++++++++++--------------------- src/user.js | 2 +- 3 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 821f9887b8..c36a80531e 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -64,7 +64,7 @@ Sockets.init = function() { uid = users[sessionID] = 0; } - socket.uid = uid; + socket.uid = parseInt(uid, 10); Sockets.userSockets[uid] = Sockets.userSockets[uid] || []; Sockets.userSockets[uid].push(socket); diff --git a/src/socket.io/user.js b/src/socket.io/user.js index a9cf5ee59f..6340fca0f4 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -3,40 +3,40 @@ var user = require('../user'), SocketUser = {}; -SocketUser.exists = function(data, sessionData) { - if (data.username) { +SocketUser.exists = function(socket, data, callback) { + if (data && data.username) { user.exists(utils.slugify(data.username), function(exists) { - sessionData.socket.emit('user.exists', { + socket.emit('user.exists', { exists: exists }); }); } }; -SocketUser.count = function(callback) { +SocketUser.count = function(socket, data, callback) { user.count(callback); }; -SocketUser.emailExists = function(data, callback, sessionData) { - user.email.exists(undefined, data.email, callback); +SocketUser.emailExists = function(socket, data, callback) { + user.email.exists(data.email, callback); }; // Password Reset SocketUser.reset = {}; -SocketUser.reset.send = function(data, sessionData) { - user.reset.send(sessionData.socket, data.email); +SocketUser.reset.send = function(socket, data, callback) { + user.reset.send(socket, data.email); }; -SocketUser.reset.valid = function(data, sessionData) { - user.reset.validate(sessionData.socket, data.code); +SocketUser.reset.valid = function(socket, data, callback) { + user.reset.validate(socket, data.code); }; -SocketUser.reset.commit = function(data, sessionData) { - user.reset.commit(sessionData.socket, data.code, data.password); +SocketUser.reset.commit = function(socket, data, callback) { + user.reset.commit(socket, data.code, data.password); }; -SocketUser.isOnline = function(uid, callback) { +SocketUser.isOnline = function(socket, uid, callback) { callback({ online: module.parent.exports.isUserOnline(uid), uid: uid, @@ -44,23 +44,23 @@ SocketUser.isOnline = function(uid, callback) { }); }; -SocketUser.changePassword = function(data, callback, sessionData) { - user.changePassword(sessionData.uid, data, callback); +SocketUser.changePassword = function(socket, data, callback) { + user.changePassword(socket.uid, data, callback); }; -SocketUser.updateProfile = function(data, callback, sessionData) { - user.updateProfile(sessionData.uid, data, callback); +SocketUser.updateProfile = function(socket, data, callback) { + user.updateProfile(socket.uid, data, callback); }; -SocketUser.changePicture = function(data, callback, sessionData) { +SocketUser.changePicture = function(socket, data, callback) { var type = data.type; function updateHeader() { - user.getUserFields(sessionData.uid, ['picture'], function(err, fields) { + user.getUserFields(socket.uid, ['picture'], function(err, fields) { if (!err && fields) { - fields.uid = sessionData.uid; - sessionData.socket.emit('meta.updateHeader', fields); + fields.uid = socket.uid; + socket.emit('meta.updateHeader', fields); callback(true); } else { callback(false); @@ -69,13 +69,13 @@ SocketUser.changePicture = function(data, callback, sessionData) { } if (type === 'gravatar') { - user.getUserField(sessionData.uid, 'gravatarpicture', function(err, gravatar) { - user.setUserField(sessionData.uid, 'picture', gravatar); + user.getUserField(socket.uid, 'gravatarpicture', function(err, gravatar) { + user.setUserField(socket.uid, 'picture', gravatar); updateHeader(); }); } else if (type === 'uploaded') { - user.getUserField(sessionData.uid, 'uploadedpicture', function(err, uploadedpicture) { - user.setUserField(sessionData.uid, 'picture', uploadedpicture); + user.getUserField(socket.uid, 'uploadedpicture', function(err, uploadedpicture) { + user.setUserField(socket.uid, 'picture', uploadedpicture); updateHeader(); }); } else { @@ -83,21 +83,21 @@ SocketUser.changePicture = function(data, callback, sessionData) { } }; -SocketUser.follow = function(data, callback, sessionData) { - if (sessionData.uid) { - user.follow(sessionData.uid, data.uid, callback); +SocketUser.follow = function(socket, data, callback) { + if (socket.uid) { + user.follow(socket.uid, data.uid, callback); } }; -SocketUser.unfollow = function(data, callback, sessionData) { - if (sessionData.uid) { - user.unfollow(sessionData.uid, data.uid, callback); +SocketUser.unfollow = function(socket, data, callback) { + if (socket.uid) { + user.unfollow(socket.uid, data.uid, callback); } }; -SocketUser.saveSettings = function(data, callback, sessionData) { - if (sessionData.uid) { - user.setUserFields(sessionData.uid, { +SocketUser.saveSettings = function(socket, data, callback) { + if (socket.uid) { + user.setUserFields(socket.uid, { showemail: data.showemail }, function(err, result) { callback(err); @@ -105,35 +105,36 @@ SocketUser.saveSettings = function(data, callback, sessionData) { } }; -SocketUser.get_online_users = function(data, callback) { +SocketUser.get_online_users = function(socket, data, callback) { var returnData = []; for (var i = 0; i < data.length; ++i) { var uid = data[i]; - if (module.parent.exports.isUserOnline(uid)) + if (module.parent.exports.isUserOnline(uid)) { returnData.push(uid); - else + } else { returnData.push(0); + } } callback(returnData); }; -SocketUser.getOnlineAnonCount = function(data, callback) { +SocketUser.getOnlineAnonCount = function(socket, data, callback) { callback(module.parent.exports.getOnlineAnonCount()); }; -SocketUser.getUnreadCount = function(callback, sessionData) { - topics.getUnreadTids(sessionData.uid, 0, 19, function(err, tids) { +SocketUser.getUnreadCount = function(socket, data, callback) { + topics.getUnreadTids(socket.uid, 0, 19, function(err, tids) { callback(tids.length); }); }; -SocketUser.getActiveUsers = function(callback) { +SocketUser.getActiveUsers = function(socket, data, callback) { module.parent.exports.emitOnlineUserCount(callback); }; -SocketUser.loadMore = function(data, callback) { +SocketUser.loadMore = function(socket, data, callback) { var start = data.after, end = start + 19; diff --git a/src/user.js b/src/user.js index b66c923f75..38d6dbd0c3 100644 --- a/src/user.js +++ b/src/user.js @@ -932,7 +932,7 @@ var bcrypt = require('bcrypt'), }); }); }, - exists: function(socket, email, callback) { + exists: function(email, callback) { User.getUidByEmail(email, function(err, exists) { callback(!!exists); }); From 97eff9c8a16cbc61a6b655a197b42938ba2f058d Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 15:57:13 -0500 Subject: [PATCH 13/48] fixing index call and meta.js --- src/socket.io/index.js | 2 +- src/socket.io/meta.js | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/socket.io/index.js b/src/socket.io/index.js index c36a80531e..fc240a98c5 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -133,7 +133,7 @@ Sockets.init = function() { socket.on('*', function(payload, callback) { function callMethod(method) { - method.call(socket, args[0]?args[0]:null, function(err, result) { + method.call(null, socket, payload.args.length ? payload.args[0] : null, function(err, result) { if(callback) { callback(err?{message:err.message}:null, result); } diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 2a44d0b5fe..52cbae9f74 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -7,6 +7,7 @@ var meta = require('../meta'), nconf = require('nconf'), gravatar = require('gravatar'), winston = require('winston'), + server = require('./'), SocketMeta = {}; @@ -71,13 +72,13 @@ SocketMeta.rooms.enter = function(socket, data) { } socket.join(data.enter); - socket.rooms[data.enter] = socket.rooms[data.enter] || {}; + server.rooms[data.enter] = server.rooms[data.enter] || {}; if (socket.uid) { - socket.rooms[data.enter][socket.id] = socket.uid; + server.rooms[data.enter][socket.id] = socket.uid; - if (data.leave && socket.rooms[data.leave] && socket.rooms[data.leave][socket.id] && data.enter !== data.leave) { - delete socket.rooms[data.leave][socket.id]; + if (data.leave && server.rooms[data.leave] && server.rooms[data.leave][socket.id] && data.enter !== data.leave) { + delete server.rooms[data.leave][socket.id]; } } @@ -88,12 +89,12 @@ SocketMeta.rooms.enter = function(socket, data) { module.parent.exports.updateRoomBrowsingText(data.enter); if (data.enter != 'admin') { - socket.server.sockets.in('admin').emit('event:meta.rooms.update', socket.server.sockets.manager.rooms); + server.in('admin').emit('event:meta.rooms.update', socket.manager.rooms); } }; SocketMeta.rooms.getAll = function(socket, data, callback) { - callback(socket.server.sockets.manager.rooms); + callback(server.manager.rooms); }; /* Exports */ From 220b40ff9c554b23180992a682b0513a16b35255 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 16:10:23 -0500 Subject: [PATCH 14/48] topics.js --- src/socket.io/topics.js | 216 +++++++++++++++++++++++++--------------- src/threadTools.js | 5 +- 2 files changed, 136 insertions(+), 85 deletions(-) diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index 6405fc9a01..de652f0658 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -1,12 +1,11 @@ var topics = require('../topics'), threadTools = require('../threadTools'), - + index = require('./index'), SocketTopics = {}; -SocketTopics.post = function(data, callback, sessionData) { - var socket = sessionData.socket; +SocketTopics.post = function(socket, data, callback) { - if (sessionData.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { + if (socket.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { socket.emit('event:alert', { title: 'Post Unsuccessful', message: 'You don't seem to be logged in, so you cannot reply.', @@ -16,7 +15,7 @@ SocketTopics.post = function(data, callback, sessionData) { return; } - topics.post(sessionData.uid, data.title, data.content, data.category_id, function(err, result) { + topics.post(socket.uid, data.title, data.content, data.category_id, function(err, result) { if(err) { if (err.message === 'title-too-short') { module.parent.exports.emitAlert(socket, 'Title too short', 'Please enter a longer title. At least ' + meta.config.minimumTitleLength + ' characters.'); @@ -45,9 +44,9 @@ SocketTopics.post = function(data, callback, sessionData) { } if (result) { - sessionData.server.sockets.in('category_' + data.category_id).emit('event:new_topic', result.topicData); - sessionData.server.sockets.in('recent_posts').emit('event:new_topic', result.topicData); - sessionData.server.sockets.in('user/' + sessionData.uid).emit('event:new_post', { + index.server.sockets.in('category_' + data.category_id).emit('event:new_topic', result.topicData); + index.server.sockets.in('recent_posts').emit('event:new_topic', result.topicData); + index.server.sockets.in('user/' + socket.uid).emit('event:new_post', { posts: result.postData }); @@ -64,90 +63,131 @@ SocketTopics.post = function(data, callback, sessionData) { }); }; -SocketTopics.postcount = function(tid, callback) { +SocketTopics.postcount = function(socket, tid, callback) { topics.getTopicField(tid, 'postcount', callback); }; -SocketTopics.markAllRead = function(data, callback, sessionData) { - topics.markAllRead(sessionData.uid, function(err, success) { +SocketTopics.markAllRead = function(socket, data, callback) { + topics.markAllRead(socket.uid, function(err, success) { if (!err && success) { callback(true); - sessionData.server.sockets.in('uid_' + sessionData.uid).emit('event:unread.updateCount', 0); + index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', 0); } else { callback(false); } }); }; -SocketTopics.delete = function(data, callback, sessionData) { - threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { - if (!err && privileges.editable) { - threadTools.delete(data.tid, sessionData.uid, function(err) { - if (!err) { - module.parent.exports.emitTopicPostStats(); - if (callback) { - callback('topic.delete', { - status: 'ok', - tid: data.tid - }); - } - } - }); +SocketTopics.delete = function(socket, data, callback) { + threadTools.privileges(data.tid, socket.uid, function(err, privileges) { + if(err) { + return callback(err); } + + if(!privileges.editable) { + return callback(new Error('not-allowed')); + } + + threadTools.delete(data.tid, socket.uid, function(err) { + if(err) { + return callback(err); + } + + module.parent.exports.emitTopicPostStats(); + + + callback(null, 'topic.delete', { + status: 'ok', + tid: data.tid + }); + }); }); }; -SocketTopics.restore = function(data, callback, sessionData) { - threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { - if (!err && privileges.editable) { - threadTools.restore(data.tid, sessionData.uid, function(err) { - module.parent.exports.emitTopicPostStats(); - - if (callback) { - callback('topic.restore', { - status: 'ok', - tid: data.tid - }); - } - }); +SocketTopics.restore = function(socket, data, callback) { + threadTools.privileges(data.tid, socket.uid, function(err, privileges) { + if(err) { + return callback(err); + } + + if(!privileges.editable) { + return callback(new Error('not-allowed')); } + + threadTools.restore(data.tid, socket.uid, function(err) { + if(err) { + return callback(err); + } + + module.parent.exports.emitTopicPostStats(); + + callback(null, 'topic.restore', { + status: 'ok', + tid: data.tid + }); + }); + }); }; -SocketTopics.lock = function(data, callback, sessionData) { - threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { - if (!err && privileges.editable) { - threadTools.lock(data.tid, callback); +SocketTopics.lock = function(socket, data, callback) { + threadTools.privileges(data.tid, socket.uid, function(err, privileges) { + if(err) { + return callback(err); } + + if (!privileges.editable) { + return callback(new Error('not-allowed')); + } + + threadTools.lock(data.tid, callback); }); }; -SocketTopics.unlock = function(data, callback, sessionData) { - threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { - if (!err && privileges.editable) { - threadTools.unlock(data.tid, callback); +SocketTopics.unlock = function(socket, data, callback) { + threadTools.privileges(data.tid, socket.uid, function(err, privileges) { + if(err) { + return callback(err); } + + if (!privileges.editable) { + return callback(new Error('not-allowed')); + } + + threadTools.unlock(data.tid, callback); }); }; -SocketTopics.pin = function(data, callback, sessionData) { +SocketTopics.pin = function(socket, data, callback) { threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { - if (!err && privileges.editable) { - threadTools.pin(data.tid, callback); + if(err) { + return callback(err); } + + if (!privileges.editable) { + return callback(new Error('not-allowed')); + } + + threadTools.pin(data.tid, callback); }); }; -SocketTopics.unpin = function(data, callback, sessionData) { - threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { - if (!err && privileges.editable) { - threadTools.unpin(data.tid, callback); +SocketTopics.unpin = function(socket, data, callback) { + threadTools.privileges(data.tid, socket.uid, function(err, privileges) { + if(err) { + return callback(err); + } + + if (!privileges.editable) { + return callback(new Error('not-allowed')); } + + threadTools.unpin(data.tid, callback); }); }; -SocketTopics.createTopicFromPosts = function(data, callback, sessionData) { - if(!sessionData.uid) { +SocketTopics.createTopicFromPosts = function(socket, data, callback) { + if(!socket.uid) { socket.emit('event:alert', { title: 'Can't fork', message: 'Guests can't fork topics!', @@ -157,13 +197,13 @@ SocketTopics.createTopicFromPosts = function(data, callback, sessionData) { return; } - topics.createTopicFromPosts(sessionData.uid, data.title, data.pids, function(err, data) { - callback(err?{message:err.message}:null, data); + topics.createTopicFromPosts(socket.uid, data.title, data.pids, function(err, data) { + callback(err, data); }); }; -SocketTopics.movePost = function(data, callback, sessionData) { - if(!sessionData.uid) { +SocketTopics.movePost = function(socket, data, callback) { + if(!socket.uid) { socket.emit('event:alert', { title: 'Can't fork', message: 'Guests can't fork topics!', @@ -174,24 +214,34 @@ SocketTopics.movePost = function(data, callback, sessionData) { } topics.movePostToTopic(data.pid, data.tid, function(err, data) { - callback(err?{message:err.message}:null, data); + callback(err, data); }); }; -SocketTopics.move = function(data, callback, sessionData) { - threadTools.move(data.tid, data.cid, callback, sessionData); +SocketTopics.move = function(socket, data, callback) { + threadTools.move(data.tid, data.cid, function(err) { + if(err) { + return callback(err); + } + + index.server.sockets.in('topic_' + data.tid).emit('event:topic_moved', { + tid: tid + }); + }); }; -SocketTopics.followCheck = function(tid, callback, sessionData) { - threadTools.isFollowing(tid, sessionData.uid, function(following) { +SocketTopics.followCheck = function(socket, tid, callback) { + threadTools.isFollowing(tid, socket.uid, function(following) { callback(following); }); }; -SocketTopics.follow = function(tid, callback, sessionData) { - if (sessionData.uid && sessionData.uid > 0) { - threadTools.toggleFollow(tid, sessionData.uid, function(follow) { - if (follow.status === 'ok') callback(follow); +SocketTopics.follow = function(socket, tid, callback) { + if (socket.uid) { + threadTools.toggleFollow(tid, socket.uid, function(follow) { + if (follow.status === 'ok') { + callback(follow); + } }); } else { callback({ @@ -201,36 +251,40 @@ SocketTopics.follow = function(tid, callback, sessionData) { } }; -SocketTopics.loadMore = function(data, callback, sessionData) { +SocketTopics.loadMore = function(socket, data, callback) { var start = data.after, end = start + 9; - topics.getTopicPosts(data.tid, start, end, sessionData.uid, function(err, posts) { - callback({ + topics.getTopicPosts(data.tid, start, end, socket.uid, function(err, posts) { + if(err) { + return callback(err); + + } + callback(null, { posts: posts }); }); }; -SocketTopics.loadMoreRecentTopics = function(data, callback, sessionData) { +SocketTopics.loadMoreRecentTopics = function(socket, data, callback) { var start = data.after, end = start + 9; - topics.getLatestTopics(sessionData.uid, start, end, data.term, function(err, latestTopics) { - if (!err) { - callback(latestTopics); - } else { - winston.error('[socket topics.loadMoreRecentTopics] ' + err.message); + topics.getLatestTopics(socket.uid, start, end, data.term, function(err, latestTopics) { + if(err) { + return callback(err); } + + callback(null, latestTopics); }); }; -SocketTopics.loadMoreUnreadTopics = function(data, callback, sessionData) { +SocketTopics.loadMoreUnreadTopics = function(socket, data, callback) { var start = data.after, end = start + 9; - topics.getUnreadTopics(sessionData.uid, start, end, function(unreadTopics) { - callback(unreadTopics); + topics.getUnreadTopics(socket.uid, start, end, function(unreadTopics) { + callback(null, unreadTopics); }); }; diff --git a/src/threadTools.js b/src/threadTools.js index 6d4fe41abe..aa1ce99dba 100644 --- a/src/threadTools.js +++ b/src/threadTools.js @@ -167,7 +167,7 @@ var winston = require('winston'), } } - ThreadTools.move = function(tid, cid, callback, sessionData) { + ThreadTools.move = function(tid, cid, callback) { topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) { var oldCid = topicData.cid; @@ -197,9 +197,6 @@ var winston = require('winston'), status: 'ok' }); - sessionData.server.sockets.in('topic_' + tid).emit('event:topic_moved', { - tid: tid - }); }); }); }); From 71f1f7137a12da29c59556e8225a310c42b71f70 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 16:11:23 -0500 Subject: [PATCH 15/48] fixes --- src/socket.io/meta.js | 10 +++++----- src/socket.io/notifications.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 52cbae9f74..1b2f49b792 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -72,13 +72,13 @@ SocketMeta.rooms.enter = function(socket, data) { } socket.join(data.enter); - server.rooms[data.enter] = server.rooms[data.enter] || {}; + socket.manager.rooms[data.enter] = socket.manager.rooms[data.enter] || {}; if (socket.uid) { - server.rooms[data.enter][socket.id] = socket.uid; + socket.manager.rooms[data.enter][socket.id] = socket.uid; - if (data.leave && server.rooms[data.leave] && server.rooms[data.leave][socket.id] && data.enter !== data.leave) { - delete server.rooms[data.leave][socket.id]; + if (data.leave && socket.manager.rooms[data.leave] && socket.manager.rooms[data.leave][socket.id] && data.enter !== data.leave) { + delete socket.manager.rooms[data.leave][socket.id]; } } @@ -94,7 +94,7 @@ SocketMeta.rooms.enter = function(socket, data) { }; SocketMeta.rooms.getAll = function(socket, data, callback) { - callback(server.manager.rooms); + callback(socket.manager.rooms); }; /* Exports */ diff --git a/src/socket.io/notifications.js b/src/socket.io/notifications.js index 995eb1826b..3c4d7c352a 100644 --- a/src/socket.io/notifications.js +++ b/src/socket.io/notifications.js @@ -8,7 +8,7 @@ SocketNotifs.get = function(socket, data, callback) { }); }; -SocketNotifs.getCount = function(socket, callback) { +SocketNotifs.getCount = function(socket, data, callback) { user.notifications.getUnreadCount(socket.uid, function(err, count) { callback(err ? err.message : null, count); }); From 3177fdfa74c82c6fcf7be0e2a3662a7259fe7126 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 16:26:47 -0500 Subject: [PATCH 16/48] partially fixed acp active users --- public/src/forum/admin/index.js | 4 ++-- src/socket.io/meta.js | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/src/forum/admin/index.js b/public/src/forum/admin/index.js index 78a24f17d4..f5a1125cfa 100644 --- a/public/src/forum/admin/index.js +++ b/public/src/forum/admin/index.js @@ -17,8 +17,8 @@ define(function() { }) }; - Admin.updateRoomUsage = function(data) { - console.log('room usage updating', data); + Admin.updateRoomUsage = function(err, data) { + console.log(arguments); var active_users = document.getElementById('active_users'), total = 0; active_users.innerHTML = ''; diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 1b2f49b792..f07b079cef 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -72,13 +72,13 @@ SocketMeta.rooms.enter = function(socket, data) { } socket.join(data.enter); - socket.manager.rooms[data.enter] = socket.manager.rooms[data.enter] || {}; + server.rooms[data.enter] = server.rooms[data.enter] || {}; if (socket.uid) { - socket.manager.rooms[data.enter][socket.id] = socket.uid; + server.rooms[data.enter][socket.id] = socket.uid; - if (data.leave && socket.manager.rooms[data.leave] && socket.manager.rooms[data.leave][socket.id] && data.enter !== data.leave) { - delete socket.manager.rooms[data.leave][socket.id]; + if (data.leave && server.rooms[data.leave] && server.rooms[data.leave][socket.id] && data.enter !== data.leave) { + delete server.rooms[data.leave][socket.id]; } } @@ -89,12 +89,12 @@ SocketMeta.rooms.enter = function(socket, data) { module.parent.exports.updateRoomBrowsingText(data.enter); if (data.enter != 'admin') { - server.in('admin').emit('event:meta.rooms.update', socket.manager.rooms); + server.in('admin').emit('event:meta.rooms.update', server.rooms); } }; SocketMeta.rooms.getAll = function(socket, data, callback) { - callback(socket.manager.rooms); + callback(null, server.rooms); }; /* Exports */ From 0b132cadcfa667f0fcb3b932574d5961c02bdc27 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 16:50:41 -0500 Subject: [PATCH 17/48] user fixes --- src/socket.io/index.js | 4 ++-- src/socket.io/user.js | 6 +----- src/user.js | 29 ++++++++++++++--------------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/socket.io/index.js b/src/socket.io/index.js index fc240a98c5..8781156188 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -139,8 +139,8 @@ Sockets.init = function() { } }); } - - +console.log('derp'); +console.log(payload, callback); var parts = payload.name.split('.'), namespace = parts.slice(0, 1), methodToCall = parts.reduce(function(prev, cur) { diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 6340fca0f4..8d4e8b3da4 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -5,11 +5,7 @@ var user = require('../user'), SocketUser.exists = function(socket, data, callback) { if (data && data.username) { - user.exists(utils.slugify(data.username), function(exists) { - socket.emit('user.exists', { - exists: exists - }); - }); + user.exists(utils.slugify(data.username), callback); } }; diff --git a/src/user.js b/src/user.js index 38d6dbd0c3..ce68d70836 100644 --- a/src/user.js +++ b/src/user.js @@ -46,7 +46,10 @@ var bcrypt = require('bcrypt'), } }, function(next) { - User.exists(userslug, function(exists) { + User.exists(userslug, function(err, exists) { + if (err) { + return next(err); + } next(exists ? new Error('Username taken!') : null); }); }, @@ -193,9 +196,7 @@ var bcrypt = require('bcrypt'), function isSignatureValid(next) { if (data.signature !== undefined && data.signature.length > meta.config.maximumSignatureLength) { - next({ - error: 'Signature can\'t be longer than ' + meta.config.maximumSignatureLength + ' characters!' - }, false); + next(new Error('Signature can\'t be longer than ' + meta.config.maximumSignatureLength + ' characters!'), false); } else { next(null, true); } @@ -217,9 +218,7 @@ var bcrypt = require('bcrypt'), } if (!available) { - next({ - error: 'Email not available!' - }, false); + next(new Error('Email not available!'), false); } else { next(null, true); } @@ -237,16 +236,16 @@ var bcrypt = require('bcrypt'), } if(!utils.isUserNameValid(data.username) || !userslug) { - return next({ - error: 'Invalid Username!' - }, false); + return next(new Error('Invalid Username!'), false); } - User.exists(userslug, function(exists) { + User.exists(userslug, function(err, exists) { + if(err) { + return next(err); + } + if(exists) { - next({ - error: 'Username not available!' - }, false); + next(new Error('Username not available!'), false); } else { next(null, true); } @@ -667,7 +666,7 @@ var bcrypt = require('bcrypt'), User.exists = function(userslug, callback) { User.getUidByUserslug(userslug, function(err, exists) { - callback( !! exists); + callback(err, !! exists); }); }; From 7470c1bbd9ad1aef1a10c07b46ec906e3265bb82 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 17:07:34 -0500 Subject: [PATCH 18/48] more fixes --- public/src/forum/home.js | 21 +++++++++++++++------ src/socket.io/index.js | 14 +++++++------- src/user.js | 4 ++-- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/public/src/forum/home.js b/public/src/forum/home.js index 2988a0c695..c38568bd6c 100644 --- a/public/src/forum/home.js +++ b/public/src/forum/home.js @@ -9,18 +9,27 @@ define(function() { 'user.getActiveUsers' ]); - socket.emit('user.count', function(data) { + socket.emit('user.count', updateUserCount); + socket.on('user.count', updateUserCount); + + function updateUserCount(err, data) { $('#stats_users').html(utils.makeNumberHumanReadable(data.count)).attr('title', data.count); - }); + } + + socket.emit('meta.getUsageStats', updateUsageStats); + socket.on('meta.getUsageStats', updateUsageStats); - socket.emit('meta.getUsageStats', function(data) { + function updateUsageStats(err, data) { $('#stats_topics').html(utils.makeNumberHumanReadable(data.topics)).attr('title', data.topics); $('#stats_posts').html(utils.makeNumberHumanReadable(data.posts)).attr('title', data.posts); - }); + } + + socket.emit('user.getActiveUsers', updateActiveUsers); + socket.on('user.getActiveUsers', updateActiveUsers); - socket.emit('user.getActiveUsers', function(data) { + function updateActiveUsers(err, data) { $('#stats_online').html(data.users); - }); + } } return home; diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 8781156188..8c27bbaa14 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -139,8 +139,8 @@ Sockets.init = function() { } }); } -console.log('derp'); -console.log(payload, callback); + + var parts = payload.name.split('.'), namespace = parts.slice(0, 1), methodToCall = parts.reduce(function(prev, cur) { @@ -182,7 +182,7 @@ Sockets.logoutUser = function(uid) { Sockets.emitUserCount = function() { db.getObjectField('global', 'userCount', function(err, count) { - io.sockets.emit('user.count', { + io.sockets.emit('user.count', err?{message:err.message}:null, { count: count }); }); @@ -261,9 +261,9 @@ function emitTopicPostStats(callback) { }; if (!callback) { - io.sockets.emit('post.stats', stats); + io.sockets.emit('post.stats', null, stats); } else { - callback(stats); + callback(null, stats); } }); } @@ -282,9 +282,9 @@ function emitOnlineUserCount(callback) { }; if (callback) { - callback(returnObj); + callback(null, returnObj); } else { - io.sockets.emit('user.active.get', returnObj); + io.sockets.emit('user.getActiveUsers', null, returnObj); } } diff --git a/src/user.js b/src/user.js index ce68d70836..8c12611149 100644 --- a/src/user.js +++ b/src/user.js @@ -673,10 +673,10 @@ var bcrypt = require('bcrypt'), User.count = function(callback) { db.getObjectField('global', 'userCount', function(err, count) { if(err) { - return; + return callback(err); } - callback({ + callback(null, { count: count ? count : 0 }); }); From 1ec21c2bfd3b1f1a51493ac59bfd0d61b5f294ff Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 17:11:27 -0500 Subject: [PATCH 19/48] metatitle --- public/src/app.js | 3 ++- src/socket.io/meta.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 330f89f524..233d734264 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -421,6 +421,7 @@ var socket, interval: undefined, titles: [] }; + app.alternatingTitle = function (title) { if (typeof title !== 'string') { return; @@ -451,7 +452,7 @@ var socket, url = a.pathname.slice(1); } - socket.emit('meta.buildTitle', url, function(title, numNotifications) { + socket.emit('meta.buildTitle', url, function(err, title, numNotifications) { titleObj.titles[0] = (numNotifications > 0 ? '(' + numNotifications + ') ' : '') + title; app.alternatingTitle(''); }); diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index f07b079cef..58e0bea56d 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -31,7 +31,7 @@ SocketMeta.reconnected = function(socket) { SocketMeta.buildTitle = function(socket, text, callback) { meta.title.build(text, function(err, title) { - callback(title); + callback(err, title); }); }; From e5c8caf5ffb4b2b8bcb9ba9488f3e43e7789bca5 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 17:15:00 -0500 Subject: [PATCH 20/48] more fixes --- public/src/app.js | 2 +- public/src/forum/register.js | 23 ++++++++++++----------- src/socket.io/meta.js | 12 +++++++++--- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 233d734264..2cc6f99f1e 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -458,7 +458,7 @@ var socket, }); }; - app.updateHeader = function(data) { + app.updateHeader = function(err, data) { $('#search-button').off().on('click', function(e) { e.stopPropagation(); $('#search-fields').removeClass('hide').show(); diff --git a/public/src/forum/register.js b/public/src/forum/register.js index f49bfa3e7e..58f340b54c 100644 --- a/public/src/forum/register.js +++ b/public/src/forum/register.js @@ -45,7 +45,7 @@ define(function() { socket.emit('user.emailExists', { email: emailEl.val() }, function(exists) { - if (exists === true) { + if (exists) { showError(email_notify, 'Email address already taken!'); } else { showSuccess(email_notify, successIcon); @@ -73,6 +73,16 @@ define(function() { } else { socket.emit('user.exists', { username: username.val() + }, function(err, exists) { + if(err) { + return app.alertError(err.message); + } + + if (exists) { + showError(username_notify, 'Username already taken!'); + } else { + showSuccess(username_notify, successIcon); + } }); } } @@ -80,6 +90,7 @@ define(function() { username.on('keyup', function() { jQuery('#yourUsername').html(this.value.length > 0 ? this.value : 'username'); }); + username.on('blur', function() { validateUsername(); }); @@ -123,16 +134,6 @@ define(function() { validatePasswordConfirm(); }); - ajaxify.register_events(['user.exists', 'user.emailExists']); - - socket.on('user.exists', function(data) { - if (data.exists === true) { - showError(username_notify, 'Username already taken!'); - } else { - showSuccess(username_notify, successIcon); - } - }); - function validateForm() { validationError = false; diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 58e0bea56d..b0a6e90f59 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -38,13 +38,19 @@ SocketMeta.buildTitle = function(socket, text, callback) { SocketMeta.updateHeader = function(socket, data, callback) { if (socket.uid) { user.getUserFields(socket.uid, data.fields, function(err, fields) { - if (!err && fields) { + if(err) { + return callback(err); + } + + if (fields) { fields.uid = socket.uid; - callback(fields); + callback(null, fields); + } else { + callback([]); } }); } else { - callback({ + callback(null, { uid: 0, username: "Anonymous User", email: '', From 765402a2a0aa984d6f013afa6f84edaf831affb1 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 17:22:11 -0500 Subject: [PATCH 21/48] fixed ACP online count --- public/src/forum/admin/index.js | 2 +- src/socket.io/meta.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/forum/admin/index.js b/public/src/forum/admin/index.js index f5a1125cfa..fada97e28e 100644 --- a/public/src/forum/admin/index.js +++ b/public/src/forum/admin/index.js @@ -25,7 +25,7 @@ define(function() { for (var room in data) { if (room !== '') { - var count = data[room].length; + var count = $(data[room]).length; total += count; active_users.innerHTML = active_users.innerHTML + "
" + room + " " + count + " active user" + (count > 1 ? "s" : "") + "
"; } diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index b0a6e90f59..03d731fd81 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -95,7 +95,7 @@ SocketMeta.rooms.enter = function(socket, data) { module.parent.exports.updateRoomBrowsingText(data.enter); if (data.enter != 'admin') { - server.in('admin').emit('event:meta.rooms.update', server.rooms); + server.in('admin').emit('event:meta.rooms.update', null, server.rooms); } }; From 8b1ed1297ba2e8f448035d420c94f812a4a63be2 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 17:25:14 -0500 Subject: [PATCH 22/48] linting --- src/socket.io/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 8c27bbaa14..7b0e6f3268 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -134,7 +134,7 @@ Sockets.init = function() { socket.on('*', function(payload, callback) { function callMethod(method) { method.call(null, socket, payload.args.length ? payload.args[0] : null, function(err, result) { - if(callback) { + if (callback) { callback(err?{message:err.message}:null, result); } }); From afe97233aade254c84a938de82f57c7f3e9235d7 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 17:32:33 -0500 Subject: [PATCH 23/48] more fixes --- public/src/forum/register.js | 6 +++++- src/socket.io/admin.js | 3 ++- src/user.js | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/public/src/forum/register.js b/public/src/forum/register.js index 58f340b54c..aa8fc66b59 100644 --- a/public/src/forum/register.js +++ b/public/src/forum/register.js @@ -44,7 +44,11 @@ define(function() { } else { socket.emit('user.emailExists', { email: emailEl.val() - }, function(exists) { + }, function(err, exists) { + if(err) { + return app.alertError(err.message); + } + if (exists) { showError(email_notify, 'Email address already taken!'); } else { diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 0a6523fcb4..1fc9e91fac 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -15,6 +15,7 @@ var groups = require('../groups'), async = require('async'), winston = require('winston'), + index = require('./index'), SocketAdmin = {}; @@ -252,7 +253,7 @@ SocketAdmin.config.set = function(socket, data, callback) { }); } - logger.monitorConfig({io: socket.server}, data); + logger.monitorConfig({io: index.server}, data); }); }; diff --git a/src/user.js b/src/user.js index 8c12611149..da0257b870 100644 --- a/src/user.js +++ b/src/user.js @@ -933,7 +933,7 @@ var bcrypt = require('bcrypt'), }, exists: function(email, callback) { User.getUidByEmail(email, function(err, exists) { - callback(!!exists); + callback(err, !!exists); }); }, confirm: function(code, callback) { From e061978bd5e4ef38fec038ad490326c8f9764188 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 17:52:46 -0500 Subject: [PATCH 24/48] more fixes --- public/src/forum/account.js | 2 +- public/src/forum/accountedit.js | 10 +++++----- public/src/forum/users.js | 2 +- public/src/modules/chat.js | 2 +- src/socket.io/user.js | 32 +++++++++++++++++--------------- src/user.js | 12 ++++-------- 6 files changed, 29 insertions(+), 31 deletions(-) diff --git a/public/src/forum/account.js b/public/src/forum/account.js index 10ec2cd3b9..0b49d71cb4 100644 --- a/public/src/forum/account.js +++ b/public/src/forum/account.js @@ -85,7 +85,7 @@ define(['forum/accountheader'], function(header) { }); }; - Account.handleUserOnline = function(data) { + Account.handleUserOnline = function(err, data) { var onlineStatus = $('.account-online-status'); if (data.online) { diff --git a/public/src/forum/accountedit.js b/public/src/forum/accountedit.js index 1f80904a3f..d12b98f634 100644 --- a/public/src/forum/accountedit.js +++ b/public/src/forum/accountedit.js @@ -36,7 +36,7 @@ define(['forum/accountheader', 'uploader'], function(header, uploader) { gravatarPicture = data.gravatarpicture; } } else { - app.alertError('There was an error updating your profile! ' + err.error); + app.alertError('There was an error updating your profile! ' + err.message); } }); return false; @@ -186,7 +186,7 @@ define(['forum/accountheader', 'uploader'], function(header, uploader) { passwordvalid = false; if (err) { - app.alertError(err.error); + app.alertError(err.message); return; } @@ -206,9 +206,9 @@ define(['forum/accountheader', 'uploader'], function(header, uploader) { type: type }; - socket.emit('user.changePicture', userData, function(success) { - if (!success) { - app.alertError('There was an error changing picture!'); + socket.emit('user.changePicture', userData, function(err) { + if(err) { + app.alertError(err.message); } }); } diff --git a/public/src/forum/users.js b/public/src/forum/users.js index 72f58fd17d..611c71436f 100644 --- a/public/src/forum/users.js +++ b/public/src/forum/users.js @@ -80,7 +80,7 @@ define(function() { }, 250); }); - socket.on('user.isOnline', function(data) { + socket.on('user.isOnline', function(err, data) { if(getActiveSection() == 'online' && !loadingMoreUsers) { startLoading('users:online', 0, true); socket.emit('user.getOnlineAnonCount', {} , function(anonCount) { diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 3efb695d66..68bb927523 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -90,7 +90,7 @@ define(['taskbar', 'string'], function(taskbar, S) { } function checkStatus(chatModal, callback) { - socket.emit('user.isOnline', chatModal.touid, function(data) { + socket.emit('user.isOnline', chatModal.touid, function(err, data) { if(data.online !== chatModal.online) { if(data.online) { module.appendChatMessage(chatModal, chatModal.username + ' is currently online.\n', data.timestamp); diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 8d4e8b3da4..6a4d1f4382 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -33,7 +33,7 @@ SocketUser.reset.commit = function(socket, data, callback) { }; SocketUser.isOnline = function(socket, uid, callback) { - callback({ + callback(null, { online: module.parent.exports.isUserOnline(uid), uid: uid, timestamp: Date.now() @@ -54,29 +54,31 @@ SocketUser.changePicture = function(socket, data, callback) { function updateHeader() { user.getUserFields(socket.uid, ['picture'], function(err, fields) { - if (!err && fields) { + if(err) { + return callback(err); + } + + if (fields) { fields.uid = socket.uid; - socket.emit('meta.updateHeader', fields); - callback(true); - } else { - callback(false); + socket.emit('meta.updateHeader', null, fields); } + + callback(null); }); } if (type === 'gravatar') { - user.getUserField(socket.uid, 'gravatarpicture', function(err, gravatar) { - user.setUserField(socket.uid, 'picture', gravatar); - updateHeader(); - }); + type = 'gravatarpicture'; } else if (type === 'uploaded') { - user.getUserField(socket.uid, 'uploadedpicture', function(err, uploadedpicture) { - user.setUserField(socket.uid, 'picture', uploadedpicture); - updateHeader(); - }); + type = 'uploadedpicture'; } else { - callback(false); + return callback(new Error('invalid-image-type')); } + + user.getUserField(socket.uid, type, function(err, picture) { + user.setUserField(socket.uid, 'picture', picture); + updateHeader(); + }); }; SocketUser.follow = function(socket, data, callback) { diff --git a/src/user.js b/src/user.js index da0257b870..47f60cd88e 100644 --- a/src/user.js +++ b/src/user.js @@ -347,13 +347,11 @@ var bcrypt = require('bcrypt'), User.changePassword = function(uid, data, callback) { if (!utils.isPasswordValid(data.newPassword)) { - return callback({ - error: 'Invalid password!' - }); + return callback(new Error('Invalid password!')); } - User.getUserField(uid, 'password', function(err, user_password) { - bcrypt.compare(data.currentPassword, user_password, function(err, res) { + User.getUserField(uid, 'password', function(err, currentPassword) { + bcrypt.compare(data.currentPassword, currentPassword, function(err, res) { if (err) { return callback(err); } @@ -365,9 +363,7 @@ var bcrypt = require('bcrypt'), callback(null); }); } else { - callback({ - error: 'Your current password is not correct!' - }); + callback(new Error('Your current password is not correct!')); } }); }); From 39b631a3a8f3dc6d78bc779e37f6f01b06bdb93c Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 18:06:19 -0500 Subject: [PATCH 25/48] more fixes --- public/src/app.js | 2 +- public/src/forum/account.js | 28 ++++++++++++++-------------- public/src/forum/accountsettings.js | 7 +++---- public/src/forum/admin/footer.js | 11 ++++++++++- public/src/forum/admin/settings.js | 23 ++++++++++++----------- src/socket.io/admin.js | 24 ++++++++++-------------- src/socket.io/user.js | 8 +++----- src/user.js | 26 ++++++++------------------ 8 files changed, 61 insertions(+), 68 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 2cc6f99f1e..bce01992af 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -253,7 +253,7 @@ var socket, uids.push(this.getAttribute('data-uid')); }); - socket.emit('user.get_online_users', uids, function (users) { + socket.emit('user.getOnlineUsers', uids, function (err, users) { jQuery('a.username-field').each(function () { if (this.processed === true) return; diff --git a/public/src/forum/account.js b/public/src/forum/account.js index 0b49d71cb4..d3c639cf66 100644 --- a/public/src/forum/account.js +++ b/public/src/forum/account.js @@ -37,14 +37,14 @@ define(['forum/accountheader'], function(header) { followBtn.on('click', function() { socket.emit('user.follow', { uid: theirid - }, function(success) { - if (success) { - followBtn.addClass('hide'); - unfollowBtn.removeClass('hide'); - app.alertSuccess('You are now following ' + username + '!'); - } else { - app.alertError('There was an error following' + username + '!'); + }, function(err) { + if(err) { + return app.alertError('There was an error following' + username + '!'); } + + followBtn.addClass('hide'); + unfollowBtn.removeClass('hide'); + app.alertSuccess('You are now following ' + username + '!'); }); return false; }); @@ -52,14 +52,14 @@ define(['forum/accountheader'], function(header) { unfollowBtn.on('click', function() { socket.emit('user.unfollow', { uid: theirid - }, function(success) { - if (success) { - followBtn.removeClass('hide'); - unfollowBtn.addClass('hide'); - app.alertSuccess('You are no longer following ' + username + '!'); - } else { - app.alertError('There was an error unfollowing ' + username + '!'); + }, function(err) { + if(err) { + return app.alertError('There was an error unfollowing ' + username + '!'); } + + followBtn.removeClass('hide'); + unfollowBtn.addClass('hide'); + app.alertSuccess('You are no longer following ' + username + '!'); }); return false; }); diff --git a/public/src/forum/accountsettings.js b/public/src/forum/accountsettings.js index c87a9c8da1..db21bb4efa 100644 --- a/public/src/forum/accountsettings.js +++ b/public/src/forum/accountsettings.js @@ -11,11 +11,10 @@ define(['forum/accountheader'], function(header) { }; socket.emit('user.saveSettings', settings, function(err) { - if (!err) { - app.alertSuccess('Settings saved!'); - } else { - app.alertError('There was an error saving settings!'); + if (err) { + return app.alertError('There was an error saving settings!'); } + app.alertSuccess('Settings saved!'); }); return false; }); diff --git a/public/src/forum/admin/footer.js b/public/src/forum/admin/footer.js index ea0fedbd56..f81e23d110 100644 --- a/public/src/forum/admin/footer.js +++ b/public/src/forum/admin/footer.js @@ -15,6 +15,15 @@ jQuery('document').ready(function() { }, false); }); -socket.emit('admin.config.get', function(config) { +socket.emit('admin.config.get', function(err, config) { + if(err) { + return app.alert({ + alert_id: 'config_status', + timeout: 2500, + title: 'Error', + message: 'NodeBB encountered a problem getting config', + type: 'danger' + }); + } app.config = config; }); diff --git a/public/src/forum/admin/settings.js b/public/src/forum/admin/settings.js index 03325086d7..777b82bb9f 100644 --- a/public/src/forum/admin/settings.js +++ b/public/src/forum/admin/settings.js @@ -73,17 +73,9 @@ define(['uploader'], function(uploader) { socket.emit('admin.config.set', { key: key, value: value - }, function(data) { - if (data.status === 'ok') { - app.alert({ - alert_id: 'config_status', - timeout: 2500, - title: 'Changes Saved', - message: 'Your changes to the NodeBB configuration have been saved.', - type: 'success' - }); - } else { - app.alert({ + }, function(err) { + if(err) { + return app.alert({ alert_id: 'config_status', timeout: 2500, title: 'Changes Not Saved', @@ -91,6 +83,15 @@ define(['uploader'], function(uploader) { type: 'danger' }); } + + app.alert({ + alert_id: 'config_status', + timeout: 2500, + title: 'Changes Saved', + message: 'Your changes to the NodeBB configuration have been saved.', + type: 'success' + }); + }); } }); diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 1fc9e91fac..33e188b4c5 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -233,26 +233,22 @@ SocketAdmin.plugins.toggle = function(socket, plugin_id) { SocketAdmin.config = {}; SocketAdmin.config.get = function(socket, data, callback) { - meta.configs.list(function(err, config) { - if (!err) { - callback(config); - } - }); + meta.configs.list(callback); }; SocketAdmin.config.set = function(socket, data, callback) { meta.configs.set(data.key, data.value, function(err) { - if (!err) { - callback({ - status: 'ok' - }); - - plugins.fireHook('action:config.set', { - key: data.key, - value: data.value - }); + if(err) { + return callback(err); } + callback(null); + + plugins.fireHook('action:config.set', { + key: data.key, + value: data.value + }); + logger.monitorConfig({io: index.server}, data); }); }; diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 6a4d1f4382..1237f418b9 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -97,13 +97,11 @@ SocketUser.saveSettings = function(socket, data, callback) { if (socket.uid) { user.setUserFields(socket.uid, { showemail: data.showemail - }, function(err, result) { - callback(err); - }); + }, callback); } }; -SocketUser.get_online_users = function(socket, data, callback) { +SocketUser.getOnlineUsers = function(socket, data, callback) { var returnData = []; for (var i = 0; i < data.length; ++i) { @@ -115,7 +113,7 @@ SocketUser.get_online_users = function(socket, data, callback) { } } - callback(returnData); + callback(null, returnData); }; SocketUser.getOnlineAnonCount = function(socket, data, callback) { diff --git a/src/user.js b/src/user.js index 47f60cd88e..b17e612ba9 100644 --- a/src/user.js +++ b/src/user.js @@ -537,31 +537,21 @@ var bcrypt = require('bcrypt'), User.follow = function(uid, followid, callback) { db.setAdd('following:' + uid, followid, function(err, data) { - if (!err) { - db.setAdd('followers:' + followid, uid, function(err, data) { - if (!err) { - callback(true); - } else { - console.log(err); - callback(false); - } - }); - } else { - console.log(err); - callback(false); + if(err) { + return callback(err); } + + db.setAdd('followers:' + followid, uid, callback); }); }; User.unfollow = function(uid, unfollowid, callback) { db.setRemove('following:' + uid, unfollowid, function(err, data) { - if (!err) { - db.setRemove('followers:' + unfollowid, uid, function(err, data) { - callback(data); - }); - } else { - console.log(err); + if(err) { + return callback(err); } + + db.setRemove('followers:' + unfollowid, uid, callback); }); }; From 4366c11ec0c4e9731abc7c42c491009b3b4e5bbc Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 18:10:38 -0500 Subject: [PATCH 26/48] users.js fix --- public/src/forum/footer.js | 2 +- public/src/forum/users.js | 2 +- src/socket.io/user.js | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/public/src/forum/footer.js b/public/src/forum/footer.js index c4b447f7ca..1bcdac57bf 100644 --- a/public/src/forum/footer.js +++ b/public/src/forum/footer.js @@ -8,7 +8,7 @@ define(['notifications', 'chat'], function(Notifications, Chat) { Chat.prepareDOM(); translator.prepareDOM(); - function updateUnreadCount(count) { + function updateUnreadCount(err, count) { $('#unread-count').toggleClass('unread-count', count > 0); $('#unread-count').attr('data-content', count > 20 ? '20+' : count); } diff --git a/public/src/forum/users.js b/public/src/forum/users.js index 611c71436f..28bc10a67b 100644 --- a/public/src/forum/users.js +++ b/public/src/forum/users.js @@ -83,7 +83,7 @@ define(function() { socket.on('user.isOnline', function(err, data) { if(getActiveSection() == 'online' && !loadingMoreUsers) { startLoading('users:online', 0, true); - socket.emit('user.getOnlineAnonCount', {} , function(anonCount) { + socket.emit('user.getOnlineAnonCount', {} , function(err, anonCount) { if(parseInt(anonCount, 10) > 0) { $('#users-container .anon-user').removeClass('hide'); $('#online_anon_count').html(anonCount); diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 1237f418b9..b629d1a648 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -117,12 +117,12 @@ SocketUser.getOnlineUsers = function(socket, data, callback) { }; SocketUser.getOnlineAnonCount = function(socket, data, callback) { - callback(module.parent.exports.getOnlineAnonCount()); + callback(null, module.parent.exports.getOnlineAnonCount()); }; SocketUser.getUnreadCount = function(socket, data, callback) { topics.getUnreadTids(socket.uid, 0, 19, function(err, tids) { - callback(tids.length); + callback(err, tids?tids.length:0); }); }; @@ -135,13 +135,13 @@ SocketUser.loadMore = function(socket, data, callback) { end = start + 19; user.getUsers(data.set, start, end, function(err, data) { - if (err) { - winston.err(err); - } else { - callback({ - users: data - }); + if(err) { + return callback(err); } + + callback(null, { + users: data + }); }); }; From ddb9a4a60e0090580e92f9d3b553dc477e10776a Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 18:12:31 -0500 Subject: [PATCH 27/48] fixed user load more --- public/src/forum/admin/users.js | 4 ++-- public/src/forum/users.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/src/forum/admin/users.js b/public/src/forum/admin/users.js index d95228b9a3..802431735c 100644 --- a/public/src/forum/admin/users.js +++ b/public/src/forum/admin/users.js @@ -245,8 +245,8 @@ define(function() { socket.emit('user.loadMore', { set: set, after: $('#users-container').children().length - }, function(data) { - if (data.users.length) { + }, function(err, data) { + if (data && data.users.length) { onUsersLoaded(data.users); } loadingMoreUsers = false; diff --git a/public/src/forum/users.js b/public/src/forum/users.js index 28bc10a67b..de00f3bc38 100644 --- a/public/src/forum/users.js +++ b/public/src/forum/users.js @@ -126,8 +126,8 @@ define(function() { socket.emit('user.loadMore', { set: set, after: after - }, function(data) { - if (data.users.length) { + }, function(err, data) { + if (data && data.users.length) { onUsersLoaded(data.users, emptyContainer); $('#load-more-users-btn').removeClass('disabled'); } else { From ba8e98520cde9d98859d205d7b57912ba45cee9a Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 18:18:42 -0500 Subject: [PATCH 28/48] added data checks to user calls --- src/socket.io/user.js | 68 +++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/src/socket.io/user.js b/src/socket.io/user.js index b629d1a648..0888f57eed 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -14,22 +14,30 @@ SocketUser.count = function(socket, data, callback) { }; SocketUser.emailExists = function(socket, data, callback) { - user.email.exists(data.email, callback); + if(data && data.email) { + user.email.exists(data.email, callback); + } }; // Password Reset SocketUser.reset = {}; SocketUser.reset.send = function(socket, data, callback) { - user.reset.send(socket, data.email); + if(data && data.email) { + user.reset.send(socket, data.email); + } }; SocketUser.reset.valid = function(socket, data, callback) { - user.reset.validate(socket, data.code); + if(data && data.code) { + user.reset.validate(socket, data.code); + } }; SocketUser.reset.commit = function(socket, data, callback) { - user.reset.commit(socket, data.code, data.password); + if(data && data.code && data.password) { + user.reset.commit(socket, data.code, data.password); + } }; SocketUser.isOnline = function(socket, uid, callback) { @@ -41,14 +49,21 @@ SocketUser.isOnline = function(socket, uid, callback) { }; SocketUser.changePassword = function(socket, data, callback) { - user.changePassword(socket.uid, data, callback); + if(data) { + user.changePassword(socket.uid, data, callback); + } }; SocketUser.updateProfile = function(socket, data, callback) { - user.updateProfile(socket.uid, data, callback); + if(data) { + user.updateProfile(socket.uid, data, callback); + } }; SocketUser.changePicture = function(socket, data, callback) { + if(!data) { + return; + } var type = data.type; @@ -82,19 +97,19 @@ SocketUser.changePicture = function(socket, data, callback) { }; SocketUser.follow = function(socket, data, callback) { - if (socket.uid) { + if (socket.uid && data) { user.follow(socket.uid, data.uid, callback); } }; SocketUser.unfollow = function(socket, data, callback) { - if (socket.uid) { + if (socket.uid && data) { user.unfollow(socket.uid, data.uid, callback); } }; SocketUser.saveSettings = function(socket, data, callback) { - if (socket.uid) { + if (socket.uid && data) { user.setUserFields(socket.uid, { showemail: data.showemail }, callback); @@ -103,13 +118,14 @@ SocketUser.saveSettings = function(socket, data, callback) { SocketUser.getOnlineUsers = function(socket, data, callback) { var returnData = []; - - for (var i = 0; i < data.length; ++i) { - var uid = data[i]; - if (module.parent.exports.isUserOnline(uid)) { - returnData.push(uid); - } else { - returnData.push(0); + if(data) { + for (var i = 0; i < data.length; ++i) { + var uid = data[i]; + if (module.parent.exports.isUserOnline(uid)) { + returnData.push(uid); + } else { + returnData.push(0); + } } } @@ -131,18 +147,20 @@ SocketUser.getActiveUsers = function(socket, data, callback) { }; SocketUser.loadMore = function(socket, data, callback) { - var start = data.after, - end = start + 19; + if(data) { + var start = data.after, + end = start + 19; - user.getUsers(data.set, start, end, function(err, data) { - if(err) { - return callback(err); - } + user.getUsers(data.set, start, end, function(err, data) { + if(err) { + return callback(err); + } - callback(null, { - users: data + callback(null, { + users: data + }); }); - }); + } }; /* Exports */ From 6da6baa213ebe23d518cda0ac68719abc8abfdb9 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 18:50:45 -0500 Subject: [PATCH 29/48] more crash fixes to socketS --- src/socket.io/index.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 8c27bbaa14..91e7dea07a 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -140,8 +140,11 @@ Sockets.init = function() { }); } + if(!payload.name) { + return winston.warn('[socket.io] Empty method name'); + } - var parts = payload.name.split('.'), + var parts = payload.name.toString().split('.'), namespace = parts.slice(0, 1), methodToCall = parts.reduce(function(prev, cur) { if (prev !== null && prev[cur]) { @@ -151,17 +154,16 @@ Sockets.init = function() { } }, Namespaces); - if (methodToCall !== null) { + if(!methodToCall) { + return winston.warn('[socket.io] Unrecognized message: ' + payload.name); + } - if (Namespaces[namespace].before) { - Namespaces[namespace].before(socket, function() { - callMethod(methodToCall); - }); - } else { + if (Namespaces[namespace].before) { + Namespaces[namespace].before(socket, function() { callMethod(methodToCall); - } + }); } else { - winston.warn('[socket.io] Unrecognized message: ' + payload.name); + callMethod(methodToCall); } }); }); From cbb630fd6b9e36755b9f904165eb2ef56fc04494 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 19:57:28 -0500 Subject: [PATCH 30/48] fixed categories.js socket callbacks --- public/src/forum/category.js | 8 ++++---- public/src/forum/topic.js | 2 +- src/socket.io/categories.js | 12 +++--------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/public/src/forum/category.js b/public/src/forum/category.js index baee8ade4f..e4d36d78f4 100644 --- a/public/src/forum/category.js +++ b/public/src/forum/category.js @@ -132,16 +132,16 @@ define(['composer'], function(composer) { socket.emit('categories.loadMore', { cid: cid, after: $('#topics-container').children('.category-item').length - }, function (data) { - if (data.topics.length) { + }, function (err, data) { + if (!err && data.topics.length) { Category.onTopicsLoaded(data.topics); } loadingMoreTopics = false; }); } - function renderRecentReplies(posts) { - if (!posts || posts.length === 0) { + function renderRecentReplies(err, posts) { + if (err || !posts || posts.length === 0) { return; } diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index 379eb38b96..a198127c3b 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -102,7 +102,7 @@ define(['composer'], function(composer) { var loadingEl = document.getElementById('categories-loading'); if (loadingEl) { - socket.emit('categories.get', function(data) { + socket.emit('categories.get', function(err, data) { // Render categories var categoriesFrag = document.createDocumentFragment(), categoryEl = document.createElement('li'), diff --git a/src/socket.io/categories.js b/src/socket.io/categories.js index b670f1ff8d..43c5a002b8 100644 --- a/src/socket.io/categories.js +++ b/src/socket.io/categories.js @@ -3,17 +3,11 @@ var categories = require('../categories'), SocketCategories = {}; SocketCategories.getRecentReplies = function(socket, tid, callback) { - categories.getRecentReplies(tid, socket.uid, 4, function(err, replies) { - callback(replies); - }); + categories.getRecentReplies(tid, socket.uid, 4, callback); }; SocketCategories.get = function(socket, data, callback) { - categories.getAllCategories(0, function(err, categories) { - if(callback) { - callback(categories); - } - }); + categories.getAllCategories(0, callback); }; SocketCategories.loadMore = function(socket, data, callback) { @@ -21,7 +15,7 @@ SocketCategories.loadMore = function(socket, data, callback) { end = start + 9; categories.getCategoryTopics(data.cid, start, end, socket.uid, function(topics) { - callback({ + callback(null, { topics: topics }); }); From 426d3e871fb71dc2dcf9f208d76af4550b348c1f Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 19:58:57 -0500 Subject: [PATCH 31/48] more fixes --- public/src/forum/admin/topics.js | 72 ++++++++++-------- public/src/forum/topic.js | 42 +++++----- public/src/forum/unread.js | 24 +++--- src/socket.io/topics.js | 127 +++++++++---------------------- src/threadTools.js | 59 +++++++------- src/topics.js | 19 +++-- 6 files changed, 143 insertions(+), 200 deletions(-) diff --git a/public/src/forum/admin/topics.js b/public/src/forum/admin/topics.js index e5490445e9..0d863f4550 100644 --- a/public/src/forum/admin/topics.js +++ b/public/src/forum/admin/topics.js @@ -15,37 +15,25 @@ define(function() { switch (action) { case 'pin': if (!$this.hasClass('active')) { - socket.emit('topics.pin', { - tid: tid - }, Topics.pin); + socket.emit('topics.pin', tid, Topics.pin); } else { - socket.emit('topics.unpin', { - tid: tid - }, Topics.unpin); + socket.emit('topics.unpin', tid, Topics.unpin); } break; case 'lock': if (!$this.hasClass('active')) { - socket.emit('topics.lock', { - tid: tid - }, Topics.lock); + socket.emit('topics.lock', tid, Topics.lock); } else { - socket.emit('topics.unlock', { - tid: tid - }, Topics.unlock); + socket.emit('topics.unlock', tid, Topics.unlock); } break; case 'delete': if (!$this.hasClass('active')) { - socket.emit('topics.delete', { - tid: tid - }, Topics.setDeleted); + socket.emit('topics.delete', tid, Topics.setDeleted); } else { - socket.emit('topics.restore', { - tid: tid - }, Topics.restore); + socket.emit('topics.restore', tid, Topics.restore); } break; @@ -116,8 +104,12 @@ define(function() { } } - Topics.setDeleted = function(response) { - if (response.status === 'ok') { + Topics.setDeleted = function(err, response) { + if(err) { + return app.alert(err.message); + } + + if (response && response.tid) { var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]'); $(btnEl).addClass('active'); @@ -125,8 +117,12 @@ define(function() { } }; - Topics.restore = function(response) { - if (response.status === 'ok') { + Topics.restore = function(err, response) { + if(err) { + return app.alert(err.message); + } + + if (response && response.tid) { var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]'); $(btnEl).removeClass('active'); @@ -134,16 +130,24 @@ define(function() { } }; - Topics.lock = function(response) { - if (response.status === 'ok') { + Topics.lock = function(err, response) { + if(err) { + return app.alert(err.message); + } + + if (response && response.tid) { var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]'); $(btnEl).addClass('active'); } }; - Topics.unlock = function(response) { - if (response.status === 'ok') { + Topics.unlock = function(err, response) { + if(err) { + return app.alert(err.message); + } + + if (response && response.tid) { var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]'); $(btnEl).removeClass('active'); @@ -151,16 +155,24 @@ define(function() { }; - Topics.unpin = function(response) { - if (response.status === 'ok') { + Topics.unpin = function(err, response) { + if(err) { + return app.alert(err.message); + } + + if (response && response.tid) { var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]'); $(btnEl).removeClass('active'); } }; - Topics.pin = function(response) { - if (response.status === 'ok') { + Topics.pin = function(err, response) { + if(err) { + return app.alert(err.message); + } + + if (response && response.tid) { var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]'); $(btnEl).addClass('active'); diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index 379eb38b96..6a621551bb 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -52,16 +52,14 @@ define(['composer'], function(composer) { if (thread_state.deleted !== '1') { bootbox.confirm('Are you sure you want to delete this thread?', function(confirm) { if (confirm) { - socket.emit('topics.delete', { - tid: tid - }, null); + socket.emit('topics.delete', tid); } }); } else { bootbox.confirm('Are you sure you want to restore this thread?', function(confirm) { - if (confirm) socket.emit('topics.restore', { - tid: tid - }, null); + if (confirm) { + socket.emit('topics.restore', tid); + } }); } return false; @@ -69,26 +67,18 @@ define(['composer'], function(composer) { $('.lock_thread').on('click', function(e) { if (thread_state.locked !== '1') { - socket.emit('topics.lock', { - tid: tid - }, null); + socket.emit('topics.lock', tid); } else { - socket.emit('topics.unlock', { - tid: tid - }, null); + socket.emit('topics.unlock', tid); } return false; }); $('.pin_thread').on('click', function(e) { if (thread_state.pinned !== '1') { - socket.emit('topics.pin', { - tid: tid - }, null); + socket.emit('topics.pin', tid); } else { - socket.emit('topics.unpin', { - tid: tid - }, null); + socket.emit('topics.unpin', tid); } return false; }); @@ -629,45 +619,47 @@ define(['composer'], function(composer) { }); socket.on('event:topic_deleted', function(data) { - if (data.tid === tid && data.status === 'ok') { + if (data && data.tid === tid) { set_locked_state(true); set_delete_state(true); } }); socket.on('event:topic_restored', function(data) { - if (data.tid === tid && data.status === 'ok') { + if (data && data.tid === tid) { set_locked_state(false); set_delete_state(false); } }); socket.on('event:topic_locked', function(data) { - if (data.tid === tid && data.status === 'ok') { + if (data && data.tid === tid) { set_locked_state(true, 1); } }); socket.on('event:topic_unlocked', function(data) { - if (data.tid === tid && data.status === 'ok') { + if (data && data.tid === tid) { set_locked_state(false, 1); } }); socket.on('event:topic_pinned', function(data) { - if (data.tid === tid && data.status === 'ok') { + if (data && data.tid === tid) { set_pinned_state(true, 1); } }); socket.on('event:topic_unpinned', function(data) { - if (data.tid === tid && data.status === 'ok') { + if (data && data.tid === tid) { set_pinned_state(false, 1); } }); socket.on('event:topic_moved', function(data) { - if (data && data.tid > 0) ajaxify.go('topic/' + data.tid); + if (data && data.tid > 0) { + ajaxify.go('topic/' + data.tid); + } }); socket.on('event:post_edited', function(data) { diff --git a/public/src/forum/unread.js b/public/src/forum/unread.js index bec5388f27..57fadb557a 100644 --- a/public/src/forum/unread.js +++ b/public/src/forum/unread.js @@ -55,19 +55,19 @@ define(function() { $('#mark-allread-btn').on('click', function() { var btn = $(this); - socket.emit('topics.markAllRead', {}, function(success) { - if (success) { - btn.remove(); - $('#topics-container').empty(); - $('#category-no-topics').removeClass('hidden'); - app.alertSuccess('All topics marked as read!'); - $('#numUnreadBadge') - .removeClass('badge-important') - .addClass('badge-inverse') - .html('0'); - } else { - app.alertError('There was an error marking topics read!'); + socket.emit('topics.markAllRead', function(err) { + if(err) { + return app.alertError('There was an error marking topics read!'); } + + btn.remove(); + $('#topics-container').empty(); + $('#category-no-topics').removeClass('hidden'); + app.alertSuccess('All topics marked as read!'); + $('#numUnreadBadge') + .removeClass('badge-important') + .addClass('badge-inverse') + .html('0'); }); }); diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index de652f0658..f15638b3ea 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -5,7 +5,11 @@ var topics = require('../topics'), SocketTopics.post = function(socket, data, callback) { - if (socket.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { + if(!data) { + return callback(new Error('Invalid data')); + } + + if (!socket.uid && !parseInt(meta.config.allowGuestPosting, 10)) { socket.emit('event:alert', { title: 'Post Unsuccessful', message: 'You don't seem to be logged in, so you cannot reply.', @@ -58,7 +62,7 @@ SocketTopics.post = function(socket, data, callback) { type: 'success', timeout: 2000 }); - callback(); + callback(null); } }); }; @@ -68,122 +72,59 @@ SocketTopics.postcount = function(socket, tid, callback) { }; SocketTopics.markAllRead = function(socket, data, callback) { - topics.markAllRead(socket.uid, function(err, success) { - if (!err && success) { - callback(true); - index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', 0); - } else { - callback(false); - } - }); -}; - -SocketTopics.delete = function(socket, data, callback) { - threadTools.privileges(data.tid, socket.uid, function(err, privileges) { + topics.markAllRead(socket.uid, function(err) { if(err) { return callback(err); } - if(!privileges.editable) { - return callback(new Error('not-allowed')); - } + index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', 0); - threadTools.delete(data.tid, socket.uid, function(err) { - if(err) { - return callback(err); - } - - module.parent.exports.emitTopicPostStats(); - - - callback(null, 'topic.delete', { - status: 'ok', - tid: data.tid - }); - }); + callback(null); }); }; -SocketTopics.restore = function(socket, data, callback) { - threadTools.privileges(data.tid, socket.uid, function(err, privileges) { - if(err) { - return callback(err); - } - - if(!privileges.editable) { - return callback(new Error('not-allowed')); - } - - threadTools.restore(data.tid, socket.uid, function(err) { - if(err) { - return callback(err); - } - - module.parent.exports.emitTopicPostStats(); - - callback(null, 'topic.restore', { - status: 'ok', - tid: data.tid - }); - }); - - }); -}; +function doTopicAction(action, socket, tid, callback) { + if(!tid) { + return callback(new Error('Invalid tid')); + } -SocketTopics.lock = function(socket, data, callback) { - threadTools.privileges(data.tid, socket.uid, function(err, privileges) { + threadTools.privileges(tid, socket.uid, function(err, privileges) { if(err) { return callback(err); } - if (!privileges.editable) { + if(!privileges || !privileges.editable) { return callback(new Error('not-allowed')); } - threadTools.lock(data.tid, callback); - }); -}; - -SocketTopics.unlock = function(socket, data, callback) { - threadTools.privileges(data.tid, socket.uid, function(err, privileges) { - if(err) { - return callback(err); + if(threadTools[action]) { + threadTools[action](tid, socket.uid, callback); } - - if (!privileges.editable) { - return callback(new Error('not-allowed')); - } - - threadTools.unlock(data.tid, callback); }); -}; +} -SocketTopics.pin = function(socket, data, callback) { - threadTools.privileges(data.tid, sessionData.uid, function(err, privileges) { - if(err) { - return callback(err); - } +SocketTopics.delete = function(socket, tid, callback) { + doTopicAction('delete', socket, tid, callback); +}; - if (!privileges.editable) { - return callback(new Error('not-allowed')); - } +SocketTopics.restore = function(socket, tid, callback) { + doTopicAction('restore', socket, tid, callback); +}; - threadTools.pin(data.tid, callback); - }); +SocketTopics.lock = function(socket, tid, callback) { + doTopicAction('lock', socket, tid, callback); }; -SocketTopics.unpin = function(socket, data, callback) { - threadTools.privileges(data.tid, socket.uid, function(err, privileges) { - if(err) { - return callback(err); - } +SocketTopics.unlock = function(socket, tid, callback) { + doTopicAction('unlock', socket, tid, callback); +}; - if (!privileges.editable) { - return callback(new Error('not-allowed')); - } +SocketTopics.pin = function(socket, tid, callback) { + doTopicAction('pin', socket, tid, callback); +}; - threadTools.unpin(data.tid, callback); - }); +SocketTopics.unpin = function(socket, tid, callback) { + doTopicAction('unpin', socket, tid, callback); }; SocketTopics.createTopicFromPosts = function(socket, data, callback) { diff --git a/src/threadTools.js b/src/threadTools.js index aa1ce99dba..8ba6ee7e71 100644 --- a/src/threadTools.js +++ b/src/threadTools.js @@ -66,13 +66,16 @@ var winston = require('winston'), events.logTopicDelete(uid, tid); + websockets.emitTopicPostStats(); + websockets.in('topic_' + tid).emit('event:topic_deleted', { - tid: tid, - status: 'ok' + tid: tid }); if (callback) { - callback(null); + callback(null, { + tid: tid + }); } } @@ -83,9 +86,10 @@ var winston = require('winston'), events.logTopicRestore(uid, tid); + websockets.emitTopicPostStats(); + websockets.in('topic_' + tid).emit('event:topic_restored', { - tid: tid, - status: 'ok' + tid: tid }); topics.getTopicField(tid, 'title', function(err, title) { @@ -93,75 +97,69 @@ var winston = require('winston'), }); if(callback) { - callback(null); + callback(null, { + tid:tid + }); } } - ThreadTools.lock = function(tid, callback) { + ThreadTools.lock = function(tid, uid, callback) { topics.setTopicField(tid, 'locked', 1); websockets.in('topic_' + tid).emit('event:topic_locked', { - tid: tid, - status: 'ok' + tid: tid }); if (callback) { - callback({ - status: 'ok', + callback(null, { tid: tid }); } } - ThreadTools.unlock = function(tid, callback) { + ThreadTools.unlock = function(tid, uid, callback) { topics.setTopicField(tid, 'locked', 0); websockets.in('topic_' + tid).emit('event:topic_unlocked', { - tid: tid, - status: 'ok' + tid: tid }); if (callback) { - callback({ - status: 'ok', + callback(null, { tid: tid }); } } - ThreadTools.pin = function(tid, callback) { + ThreadTools.pin = function(tid, uid, callback) { topics.setTopicField(tid, 'pinned', 1); topics.getTopicField(tid, 'cid', function(err, cid) { db.sortedSetAdd('categories:' + cid + ':tid', Math.pow(2, 53), tid); }); websockets.in('topic_' + tid).emit('event:topic_pinned', { - tid: tid, - status: 'ok' + tid: tid }); if (callback) { - callback({ - status: 'ok', + callback(null, { tid: tid }); } } - ThreadTools.unpin = function(tid, callback) { + ThreadTools.unpin = function(tid, uid, callback) { topics.setTopicField(tid, 'pinned', 0); topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) { db.sortedSetAdd('categories:' + topicData.cid + ':tid', topicData.lastposttime, tid); }); websockets.in('topic_' + tid).emit('event:topic_unpinned', { - tid: tid, - status: 'ok' + tid: tid }); if (callback) { - callback({ - status: 'ok', + callback(null, { tid: tid }); } @@ -175,9 +173,7 @@ var winston = require('winston'), db.sortedSetAdd('categories:' + cid + ':tid', topicData.lastposttime, tid, function(err, result) { if(err) { - return callback({ - status: 'error' - }); + return callback(err); } topics.setTopicField(tid, 'cid', cid); @@ -193,10 +189,7 @@ var winston = require('winston'), categories.incrementCategoryFieldBy(oldCid, 'topic_count', -1); categories.incrementCategoryFieldBy(cid, 'topic_count', 1); - callback({ - status: 'ok' - }); - + callback(null); }); }); }); diff --git a/src/topics.js b/src/topics.js index f2e245d72a..fb754cdf78 100644 --- a/src/topics.js +++ b/src/topics.js @@ -75,19 +75,24 @@ var async = require('async'), return callback(new Error('no-privileges')); } else if (!cid) { return callback(new Error('invalid-cid')); - } else if (!title || title.length < parseInt(meta.config.minimumTitleLength, 10)) { + } + + if (title) { + title = title.trim(); + } + + if (!title || title.length < parseInt(meta.config.minimumTitleLength, 10)) { return callback(new Error('title-too-short'), null); } else if(title.length > parseInt(meta.config.maximumTitleLength, 10)) { return callback(new Error('title-too-long'), null); - } else if (!content || content.length < meta.config.miminumPostLength) { - return callback(new Error('content-too-short'), null); } if (content) { content = content.trim(); } - if (title) { - title = title.trim(); + + if (!content || content.length < meta.config.miminumPostLength) { + return callback(new Error('content-too-short'), null); } user.getUserField(uid, 'lastposttime', function(err, lastposttime) { @@ -888,7 +893,7 @@ var async = require('async'), Topics.markAllRead = function(uid, callback) { db.getSetMembers('topics:tid', function(err, tids) { if (err) { - return callback(err, null); + return callback(err); } if (tids && tids.length) { @@ -897,7 +902,7 @@ var async = require('async'), } } - callback(null, true); + callback(null); }); } From bc48ba874d2cb94bf4577c01651aad5862df8d47 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 20:14:09 -0500 Subject: [PATCH 32/48] fixed module.js callback format --- public/src/modules/chat.js | 6 ++-- public/src/modules/composer.js | 6 ++-- public/src/modules/notifications.js | 14 +++++---- src/socket.io/modules.js | 45 +++++++++++------------------ 4 files changed, 31 insertions(+), 40 deletions(-) diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 68bb927523..82855d0d9f 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -13,13 +13,13 @@ define(['taskbar', 'string'], function(taskbar, S) { return; } - socket.emit('modules.chats.list', function(chats) { + socket.emit('modules.chats.list', function(err, chats) { var chatsFrag = document.createDocumentFragment(), chatEl = document.createElement('li'), numChats = chats.length, x, userObj; - if (numChats > 0) { + if (!err && numChats > 0) { for(x=0;x 0) { titleEl.val(postData.title); titleEl.prop('readOnly', true); - socket.emit('modules.composer.editCheck', postData.pid, function(editCheck) { - if (editCheck.titleEditable) { + socket.emit('modules.composer.editCheck', postData.pid, function(err, editCheck) { + if (!err && editCheck.titleEditable) { postContainer.find('input').prop('readonly', false); } }); diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js index 171e5f32f7..c5e172f165 100644 --- a/public/src/modules/notifications.js +++ b/public/src/modules/notifications.js @@ -51,13 +51,15 @@ define(function() { notifIcon.toggleClass('active', false); } - socket.emit('modules.notifications.mark_all_read', null, function() { - notifIcon.toggleClass('active', false); - app.refreshTitle(); + socket.emit('modules.notifications.mark_all_read', null, function(err) { + if (!err) { + notifIcon.toggleClass('active', false); + app.refreshTitle(); - // Update favicon + local count - Tinycon.setBubble(0); - localStorage.setItem('notifications:count', 0); + // Update favicon + local count + Tinycon.setBubble(0); + localStorage.setItem('notifications:count', 0); + } }); }); } diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index fe1c423999..8cbbda3095 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -11,6 +11,7 @@ var posts = require('../posts'), async = require('async'), S = require('string'), winston = require('winston'), + server = require('./'), SocketModules = {}; @@ -32,7 +33,7 @@ SocketModules.composer.push = function(socket, data, callback) { }); } ], function(err, results) { - callback({ + callback(err, { title: results[1], pid: data.pid, body: results[0].content @@ -40,7 +41,7 @@ SocketModules.composer.push = function(socket, data, callback) { }); } } else { - callback({ + callback(null, { error: 'no-uid' }); } @@ -48,8 +49,12 @@ SocketModules.composer.push = function(socket, data, callback) { SocketModules.composer.editCheck = function(socket, pid, callback) { posts.getPostField(pid, 'tid', function(err, tid) { + if (err) { + return callback(err); + } + postTools.isMain(pid, tid, function(err, isMain) { - callback({ + callback(err, { titleEditable: isMain }); }); @@ -62,13 +67,7 @@ SocketModules.chats = {}; SocketModules.chats.get = function(socket, data, callback) { var touid = data.touid; - Messaging.getMessages(socket.uid, touid, function(err, messages) { - if (err) { - return callback(null); - } - - callback(messages); - }); + Messaging.getMessages(socket.uid, touid, callback); }; SocketModules.chats.send = function(socket, data) { @@ -102,11 +101,11 @@ SocketModules.chats.send = function(socket, data) { var numSockets = 0, x; - if (socket.userSockets[touid]) { - numSockets = socket.userSockets[touid].length; + if (server.userSockets[touid]) { + numSockets = server.userSockets[touid].length; for (x = 0; x < numSockets; ++x) { - socket.userSockets[touid][x].emit('event:chats.receive', { + server.userSockets[touid][x].emit('event:chats.receive', { fromuid: socket.uid, username: username, // todo this isnt very nice, but can't think of a better way atm @@ -116,12 +115,12 @@ SocketModules.chats.send = function(socket, data) { } } - if (socket.userSockets[socket.uid]) { + if (server.userSockets[socket.uid]) { - numSockets = socket.userSockets[socket.uid].length; + numSockets = server.userSockets[socket.uid].length; for (x = 0; x < numSockets; ++x) { - socket.userSockets[socket.uid][x].emit('event:chats.receive', { + server.userSockets[socket.uid][x].emit('event:chats.receive', { fromuid: touid, username: toUsername, message: parsed, @@ -135,13 +134,7 @@ SocketModules.chats.send = function(socket, data) { }; SocketModules.chats.list = function(socket, data, callback) { - Messaging.getRecentChats(socket.uid, function(err, uids) { - if (err) { - winston.warn('[(socket) chats.list] Problem retrieving chats: ' + err.message); - } - - callback(uids || []); - }); + Messaging.getRecentChats(socket.uid, callback); }; /* Notifications */ @@ -153,11 +146,7 @@ SocketModules.notifications.mark_read = function(socket, nid) { }; SocketModules.notifications.mark_all_read = function(socket, data, callback) { - notifications.mark_all_read(socket.uid, function(err) { - if (!err) { - callback(); - } - }); + notifications.mark_all_read(socket.uid, callback); }; module.exports = SocketModules; \ No newline at end of file From 111776d8781465579404a8e016549c880e1bf6e2 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 16 Jan 2014 20:29:11 -0500 Subject: [PATCH 33/48] notifications socket callbacks --- public/src/modules/notifications.js | 4 ++-- src/socket.io/notifications.js | 10 ++++------ src/user.js | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js index c5e172f165..8994ba008a 100644 --- a/public/src/modules/notifications.js +++ b/public/src/modules/notifications.js @@ -11,14 +11,14 @@ define(function() { notifTrigger.addEventListener('click', function(e) { e.preventDefault(); if (notifContainer.className.indexOf('open') === -1) { - socket.emit('notifications.get', null, function(data) { + socket.emit('notifications.get', null, function(err, data) { var notifFrag = document.createDocumentFragment(), notifEl = document.createElement('li'), numRead = data.read.length, numUnread = data.unread.length, x; notifList.innerHTML = ''; - if ((data.read.length + data.unread.length) > 0) { + if (!err && (data.read.length + data.unread.length) > 0) { for (x = 0; x < numUnread; x++) { notifEl.setAttribute('data-nid', data.unread[x].nid); notifEl.className = 'unread'; diff --git a/src/socket.io/notifications.js b/src/socket.io/notifications.js index 3c4d7c352a..3c41f33d5d 100644 --- a/src/socket.io/notifications.js +++ b/src/socket.io/notifications.js @@ -1,17 +1,15 @@ +"use strict"; + var user = require('../user'), SocketNotifs = {}; SocketNotifs.get = function(socket, data, callback) { - user.notifications.get(socket.uid, function(notifs) { - callback(notifs); - }); + user.notifications.get(socket.uid, callback); }; SocketNotifs.getCount = function(socket, data, callback) { - user.notifications.getUnreadCount(socket.uid, function(err, count) { - callback(err ? err.message : null, count); - }); + user.notifications.getUnreadCount(socket.uid, callback); }; module.exports = SocketNotifs; \ No newline at end of file diff --git a/src/user.js b/src/user.js index b17e612ba9..09155e17f7 100644 --- a/src/user.js +++ b/src/user.js @@ -1016,7 +1016,7 @@ var bcrypt = require('bcrypt'), notifications.read.length = maxNotifs - notifications.unread.length; } - callback(notifications); + callback(err, notifications); }); }, getAll: function(uid, limit, before, callback) { From ae76bb3928742c556d8fc3f2020240b1da8fce2b Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 20:53:32 -0500 Subject: [PATCH 34/48] lots of err first fixeS --- public/src/forum/recent.js | 5 ++- public/src/forum/topic.js | 42 ++++++++++++--------- public/src/forum/unread.js | 6 ++- public/templates/unread.tpl | 2 +- src/categories.js | 11 ++---- src/routes/api.js | 20 +++++++--- src/socket.io/topics.js | 73 ++++++++++++++++++------------------- src/threadTools.js | 61 +++++++++++++------------------ src/topics.js | 61 ++++++++++++++++++------------- 9 files changed, 148 insertions(+), 133 deletions(-) diff --git a/public/src/forum/recent.js b/public/src/forum/recent.js index c784593592..7a7dbc26f1 100644 --- a/public/src/forum/recent.js +++ b/public/src/forum/recent.js @@ -102,7 +102,10 @@ define(function() { socket.emit('topics.loadMoreRecentTopics', { after: $('#topics-container').children('li').length, term: active - }, function(data) { + }, function(err, data) { + if(err) { + return app.alertError(err.message); + } if (data.topics && data.topics.length) { Recent.onTopicsLoaded(data.topics); } diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index b0bb81eddc..035c44de09 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -138,18 +138,10 @@ define(['composer'], function(composer) { socket.emit('topics.move', { tid: tid, cid: targetCid - }, function(data) { + }, function(err) { moveThreadModal.modal('hide'); - if (data.status === 'ok') { - app.alert({ - 'alert_id': 'thread_move', - type: 'success', - title: 'Topic Successfully Moved', - message: 'This topic has been successfully moved to ' + targetCatLabel, - timeout: 5000 - }); - } else { - app.alert({ + if(err) { + return app.alert({ 'alert_id': 'thread_move', type: 'danger', title: 'Unable to Move Topic', @@ -157,6 +149,14 @@ define(['composer'], function(composer) { timeout: 5000 }); } + + app.alert({ + 'alert_id': 'thread_move', + type: 'success', + title: 'Topic Successfully Moved', + message: 'This topic has been successfully moved to ' + targetCatLabel, + timeout: 5000 + }); }); } }); @@ -288,15 +288,15 @@ define(['composer'], function(composer) { } }; - socket.emit('topics.followCheck', tid, function(state) { + socket.emit('topics.followCheck', tid, function(err, state) { set_follow_state(state, true); }); + if (followEl[0]) { followEl[0].addEventListener('click', function() { - socket.emit('topics.follow', tid, function(data) { - if (data.status && data.status === 'ok') set_follow_state(data.follow); - else { - app.alert({ + socket.emit('topics.follow', tid, function(err, state) { + if(err) { + return app.alert({ type: 'danger', alert_id: 'topic_follow', title: 'Please Log In', @@ -304,6 +304,8 @@ define(['composer'], function(composer) { timeout: 5000 }); } + + set_follow_state(state); }); }, false); } @@ -1104,9 +1106,13 @@ define(['composer'], function(composer) { socket.emit('topics.loadMore', { tid: tid, after: parseInt($('#post-container .post-row.infiniteloaded').last().attr('data-index'), 10) + 1 - }, function (data) { + }, function (err, data) { + if(err) { + return app.alertError(err.message); + } + infiniteLoaderActive = false; - if (data.posts.length) { + if (data && data.posts && data.posts.length) { indicatorEl.attr('done', '0'); createNewPosts(data, true); } else { diff --git a/public/src/forum/unread.js b/public/src/forum/unread.js index 57fadb557a..aa70690165 100644 --- a/public/src/forum/unread.js +++ b/public/src/forum/unread.js @@ -93,7 +93,11 @@ define(function() { loadingMoreTopics = true; socket.emit('topics.loadMoreUnreadTopics', { after: parseInt($('#topics-container').attr('data-next-start'), 10) - }, function(data) { + }, function(err, data) { + if(err) { + return app.alertError(err.message); + } + if (data.topics && data.topics.length) { onTopicsLoaded(data.topics); $('#topics-container').attr('data-next-start', data.nextStart); diff --git a/public/templates/unread.tpl b/public/templates/unread.tpl index 1054e6d03b..142945b20e 100644 --- a/public/templates/unread.tpl +++ b/public/templates/unread.tpl @@ -15,7 +15,7 @@
-
+
  • diff --git a/src/categories.js b/src/categories.js index 939073ffcb..6312ff835e 100644 --- a/src/categories.js +++ b/src/categories.js @@ -86,9 +86,7 @@ var db = require('./database.js'), }; function getTopics(next) { - topics.getTopicsByTids(tids, current_user, function(topicsData) { - next(null, topicsData); - }, category_id); + topics.getTopicsByTids(tids, category_id, current_user, next); } function getModerators(next) { @@ -126,9 +124,9 @@ var db = require('./database.js'), Categories.getCategoryTopics = function(cid, start, stop, uid, callback) { Categories.getTopicIds(cid, start, stop, function(err, tids) { - topics.getTopicsByTids(tids, uid, function(topicsData) { - callback(topicsData); - }, cid); + topics.getTopicsByTids(tids, cid, uid, function(err, topicsData) { + callback(err, topicsData); + }); }); }; @@ -137,7 +135,6 @@ var db = require('./database.js'), }; - Categories.getAllCategories = function(current_user, callback) { db.getListRange('categories:cid', 0, -1, function(err, cids) { if(err) { diff --git a/src/routes/api.js b/src/routes/api.js index 0c32a1c435..6c6c85addd 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -176,16 +176,24 @@ var path = require('path'), }); }); - app.get('/unread', function (req, res) { + app.get('/unread', function (req, res, next) { var uid = (req.user) ? req.user.uid : 0; - topics.getUnreadTopics(uid, 0, 19, function (data) { + topics.getUnreadTopics(uid, 0, 19, function (err, data) { + if(err) { + return next(err); + } + res.json(data); }); }); - app.get('/unread/total', function (req, res) { + app.get('/unread/total', function (req, res, next) { var uid = (req.user) ? req.user.uid : 0; - topics.getTotalUnread(uid, function (data) { + topics.getTotalUnread(uid, function (err, data) { + if(err) { + return next(err); + } + res.json(data); }); }); @@ -273,9 +281,9 @@ var path = require('path'), return callback(err, null); } - topics.getTopicsByTids(tids, 0, function (topics) { + topics.getTopicsByTids(tids, 0, 0, function (topics) { callback(null, topics); - }, 0); + }); }); } diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index f15638b3ea..d8eb132a0c 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -138,9 +138,11 @@ SocketTopics.createTopicFromPosts = function(socket, data, callback) { return; } - topics.createTopicFromPosts(socket.uid, data.title, data.pids, function(err, data) { - callback(err, data); - }); + if(!data || !data.title || !data.pids || !Array.isArray(data.pids)) { + return callback(new Error('invalid data')); + } + + topics.createTopicFromPosts(socket.uid, data.title, data.pids, callback); }; SocketTopics.movePost = function(socket, data, callback) { @@ -154,79 +156,74 @@ SocketTopics.movePost = function(socket, data, callback) { return; } - topics.movePostToTopic(data.pid, data.tid, function(err, data) { - callback(err, data); - }); + if(!data || !data.pid || !data.tid) { + return callback(new Error('invalid data')); + } + + topics.movePostToTopic(data.pid, data.tid, callback); }; SocketTopics.move = function(socket, data, callback) { + + if(!data || !data.tid || !data.cid) { + return callback(new Error('invalid data')); + } + threadTools.move(data.tid, data.cid, function(err) { if(err) { return callback(err); } index.server.sockets.in('topic_' + data.tid).emit('event:topic_moved', { - tid: tid + tid: data.tid }); + + callback(null); }); }; SocketTopics.followCheck = function(socket, tid, callback) { - threadTools.isFollowing(tid, socket.uid, function(following) { - callback(following); - }); + threadTools.isFollowing(tid, socket.uid, callback); }; SocketTopics.follow = function(socket, tid, callback) { - if (socket.uid) { - threadTools.toggleFollow(tid, socket.uid, function(follow) { - if (follow.status === 'ok') { - callback(follow); - } - }); - } else { - callback({ - status: 'error', - error: 'not-logged-in' - }); + if(!socket.uid) { + return callback(new Error('not-logged-in')); } + + + threadTools.toggleFollow(tid, socket.uid, callback); }; SocketTopics.loadMore = function(socket, data, callback) { + if(!data || !data.tid) { + return callback(new Error('invalid data')); + } + var start = data.after, end = start + 9; topics.getTopicPosts(data.tid, start, end, socket.uid, function(err, posts) { - if(err) { - return callback(err); - - } - callback(null, { - posts: posts - }); + callback(err, {posts: posts}); }); }; SocketTopics.loadMoreRecentTopics = function(socket, data, callback) { + if(!data || !data.term) { + return callback(new Error('invalid data')); + } + var start = data.after, end = start + 9; - topics.getLatestTopics(socket.uid, start, end, data.term, function(err, latestTopics) { - if(err) { - return callback(err); - } - - callback(null, latestTopics); - }); + topics.getLatestTopics(socket.uid, start, end, data.term, callback); }; SocketTopics.loadMoreUnreadTopics = function(socket, data, callback) { var start = data.after, end = start + 9; - topics.getUnreadTopics(socket.uid, start, end, function(unreadTopics) { - callback(null, unreadTopics); - }); + topics.getUnreadTopics(socket.uid, start, end, callback); }; module.exports = SocketTopics; \ No newline at end of file diff --git a/src/threadTools.js b/src/threadTools.js index 8ba6ee7e71..d0ccd20e50 100644 --- a/src/threadTools.js +++ b/src/threadTools.js @@ -195,49 +195,40 @@ var winston = require('winston'), }); } - ThreadTools.isFollowing = function(tid, current_user, callback) { - db.isSetMember('tid:' + tid + ':followers', current_user, function(err, following) { - callback(following); - }); + ThreadTools.isFollowing = function(tid, uid, callback) { + db.isSetMember('tid:' + tid + ':followers', uid, callback); } - ThreadTools.toggleFollow = function(tid, current_user, callback) { - ThreadTools.isFollowing(tid, current_user, function(following) { - if (!following) { - db.setAdd('tid:' + tid + ':followers', current_user, function(err, success) { - if (callback) { - if (!err) { - callback({ - status: 'ok', - follow: true - }); - } else callback({ - status: 'error' - }); - } - }); - } else { - db.setRemove('tid:' + tid + ':followers', current_user, function(err, success) { - if (callback) { - if (!err) { - callback({ - status: 'ok', - follow: false - }); - } else callback({ - status: 'error' - }); - } - }); + ThreadTools.toggleFollow = function(tid, uid, callback) { + ThreadTools.isFollowing(tid, uid, function(err, following) { + if(err) { + return callback(err); } + + db[following?'setRemove':'setAdd']('tid:' + tid + ':followers', uid, function(err, success) { + if (callback) { + if(err) { + return callback(err); + } + + callback(null, !following); + } + }); }); } ThreadTools.getFollowers = function(tid, callback) { db.getSetMembers('tid:' + tid + ':followers', function(err, followers) { - callback(err, followers.map(function(follower) { - return parseInt(follower, 10); - })); + if(err) { + return callback(err); + } + + if(followers) { + followers = followers.map(function(follower) { + return parseInt(follower, 10); + }); + } + callback(null, followers); }); } diff --git a/src/topics.js b/src/topics.js index fb754cdf78..f648dbeb17 100644 --- a/src/topics.js +++ b/src/topics.js @@ -454,7 +454,7 @@ var async = require('async'), } }); }, function(tids) { - Topics.getTopicsByTids(tids, current_user, function(topicData) { + Topics.getTopicsByTids(tids, 0, current_user, function(err, topicData) { latestTopics.topics = topicData; callback(err, latestTopics); }); @@ -476,8 +476,9 @@ var async = require('async'), function(callback) { db.getSortedSetRevRange('topics:recent', start, stop, function(err, tids) { - if (err) + if (err) { return callback(err); + } if (tids && !tids.length) { done = true; @@ -499,7 +500,7 @@ var async = require('async'), }); }, function(err) { - callback({ + callback(null, { count: unreadTids.length }); } @@ -569,19 +570,22 @@ var async = require('async'), 'show_topic_button': 'hidden', 'show_markallread_button': 'show', 'no_topics_message': 'hidden', - 'topic_row_size': 'col-md-12', 'topics': [] }; function noUnreadTopics() { unreadTopics.no_topics_message = 'show'; unreadTopics.show_markallread_button = 'hidden'; - callback(unreadTopics); + callback(null, unreadTopics); } function sendUnreadTopics(topicIds) { - Topics.getTopicsByTids(topicIds, uid, function(topicData) { + Topics.getTopicsByTids(topicIds, 0, uid, function(err, topicData) { + if(err) { + return callback(err); + } + unreadTopics.topics = topicData; unreadTopics.nextStart = stop + 1; if (!topicData || topicData.length === 0) { @@ -591,13 +595,13 @@ var async = require('async'), unreadTopics.show_markallread_button = 'hidden'; } - callback(unreadTopics); + callback(null, unreadTopics); }); } Topics.getUnreadTids(uid, start, stop, function(err, unreadTids) { if (err) { - return callback([]); + return callback(err); } if (unreadTids.length) { @@ -634,13 +638,12 @@ var async = require('async'), }); }; - Topics.getTopicsByTids = function(tids, current_user, callback, category_id) { + Topics.getTopicsByTids = function(tids, cid, current_user, callback) { var retrieved_topics = []; if (!Array.isArray(tids) || tids.length === 0) { - callback(retrieved_topics); - return; + return callback(null, retrieved_topics); } function getTopicInfo(topicData, callback) { @@ -664,19 +667,19 @@ var async = require('async'), // temporary. I don't think this call should belong here function getPrivileges(next) { - categoryTools.privileges(category_id, current_user, function(err, user_privs) { - next(err, user_privs); - }); + categoryTools.privileges(cid, current_user, next); } function getCategoryInfo(next) { - categories.getCategoryFields(topicData.cid, ['name', 'slug', 'icon'], function(err, categoryData) { - next(err, categoryData); - }); + categories.getCategoryFields(topicData.cid, ['name', 'slug', 'icon'], next); } async.parallel([getUserInfo, hasReadTopic, getTeaserInfo, getPrivileges, getCategoryInfo], function(err, results) { - callback({ + if(err) { + return callback(err); + } + + callback(null, { username: results[0].username, userslug: results[0].userslug, picture: results[0].picture, @@ -694,13 +697,20 @@ var async = require('async'), return !deleted || (deleted && topicInfo.privileges.view_deleted) || topicData.uid === current_user; } - function loadTopic(tid, callback) { + function loadTopic(tid, next) { Topics.getTopicData(tid, function(err, topicData) { + if(err) { + return next(err); + } + if (!topicData) { - return callback(null); + return next(); } - getTopicInfo(topicData, function(topicInfo) { + getTopicInfo(topicData, function(err, topicInfo) { + if(err) { + return next(err); + } topicData['pin-icon'] = parseInt(topicData.pinned, 10) === 1 ? 'fa-thumb-tack' : 'none'; topicData['lock-icon'] = parseInt(topicData.locked, 10) === 1 ? 'fa-lock' : 'none'; @@ -720,18 +730,17 @@ var async = require('async'), topicData.teaser_pid = topicInfo.teaserInfo.pid; topicData.teaser_timestamp = topicInfo.teaserInfo.timestamp ? (new Date(parseInt(topicInfo.teaserInfo.timestamp, 10)).toISOString()) : ''; - if (isTopicVisible(topicData, topicInfo)) + if (isTopicVisible(topicData, topicInfo)) { retrieved_topics.push(topicData); + } - callback(null); + next(null); }); }); } async.eachSeries(tids, loadTopic, function(err) { - if (!err) { - callback(retrieved_topics); - } + callback(err, retrieved_topics); }); } From 31d353ab0e2f78661751368c8cfff9afb925e210 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 21:19:29 -0500 Subject: [PATCH 35/48] more fixes --- public/src/forum/reset.js | 35 ++++-------- public/src/forum/reset_code.js | 29 +++++----- public/templates/reset_code.tpl | 2 +- src/socket.io/topics.js | 2 +- src/socket.io/user.js | 6 +-- src/topics.js | 2 +- src/user.js | 96 +++++++++++++-------------------- 7 files changed, 69 insertions(+), 103 deletions(-) diff --git a/public/src/forum/reset.js b/public/src/forum/reset.js index 095f3d8557..810b39077d 100644 --- a/public/src/forum/reset.js +++ b/public/src/forum/reset.js @@ -10,6 +10,17 @@ define(function() { if (inputEl.value.length > 0 && inputEl.value.indexOf('@') !== -1) { socket.emit('user.reset.send', { email: inputEl.value + }, function(err, data) { + if(err) { + return app.alertError(err.message); + } + + var submitEl = document.getElementById('reset'); + + jQuery('#error').hide(); + jQuery('#success').show(); + jQuery('#success p').html('An email has been dispatched to "' + data.email + '" with instructions on setting a new password.'); + inputEl.value = ''; }); } else { jQuery('#success').hide(); @@ -17,30 +28,6 @@ define(function() { errorTextEl.innerHTML = 'Please enter a valid email'; } }; - - ajaxify.register_events(['user.send_reset']); - - socket.on('user.send_reset', function(data) { - var submitEl = document.getElementById('reset'); - - if (data.status === 'ok') { - jQuery('#error').hide(); - jQuery('#success').show(); - jQuery('#success p').html('An email has been dispatched to "' + data.email + '" with instructions on setting a new password.'); - inputEl.value = ''; - } else { - jQuery('#success').hide(); - jQuery(errorEl).show(); - switch (data.message) { - case 'invalid-email': - errorTextEl.innerHTML = 'The email you put in (' + data.email + ') is not registered with us. Please try again.'; - break; - case 'send-failed': - errorTextEl.innerHTML = 'There was a problem sending the reset code. Please try again later.'; - break; - } - } - }); }; return ResetPassword; diff --git a/public/src/forum/reset_code.js b/public/src/forum/reset_code.js index 7eb6c718a4..ccb9e5c5a6 100644 --- a/public/src/forum/reset_code.js +++ b/public/src/forum/reset_code.js @@ -24,6 +24,14 @@ define(function() { socket.emit('user.reset.commit', { code: reset_code, password: password.value + }, function(err) { + if(err) { + return app.alert(err.message); + } + + $('#error').hide(); + $('#notice').hide(); + $('#success').show(); }); } }, false); @@ -31,26 +39,19 @@ define(function() { // Enable the form if the code is valid socket.emit('user.reset.valid', { code: reset_code - }); - + }, function(err, data) { + if(err) { + return app.alertError(err.message); + } - ajaxify.register_events(['user.reset.valid', 'user.reset.commit']); - socket.on('user.reset.valid', function(data) { - if ( !! data.valid) resetEl.disabled = false; - else { + if ( !! data.valid) { + resetEl.disabled = false; + } else { var formEl = document.getElementById('reset-form'); // Show error message $('#error').show(); formEl.parentNode.removeChild(formEl); } - }) - - socket.on('user.reset.commit', function(data) { - if (data.status === 'ok') { - $('#error').hide(); - $('#notice').hide(); - $('#success').show(); - } }); }; diff --git a/public/templates/reset_code.tpl b/public/templates/reset_code.tpl index 6931f6c346..c3590746d4 100644 --- a/public/templates/reset_code.tpl +++ b/public/templates/reset_code.tpl @@ -30,7 +30,7 @@

    - +
diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index d8eb132a0c..d79bb1b8a6 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -77,7 +77,7 @@ SocketTopics.markAllRead = function(socket, data, callback) { return callback(err); } - index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', 0); + index.server.sockets.in('uid_' + socket.uid).emit('event:unread.updateCount', null, 0); callback(null); }); diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 0888f57eed..81df38e33a 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -24,19 +24,19 @@ SocketUser.reset = {}; SocketUser.reset.send = function(socket, data, callback) { if(data && data.email) { - user.reset.send(socket, data.email); + user.reset.send(socket, data.email, callback); } }; SocketUser.reset.valid = function(socket, data, callback) { if(data && data.code) { - user.reset.validate(socket, data.code); + user.reset.validate(socket, data.code, callback); } }; SocketUser.reset.commit = function(socket, data, callback) { if(data && data.code && data.password) { - user.reset.commit(socket, data.code, data.password); + user.reset.commit(socket, data.code, data.password, callback); } }; diff --git a/src/topics.js b/src/topics.js index f648dbeb17..bbe0115535 100644 --- a/src/topics.js +++ b/src/topics.js @@ -624,7 +624,7 @@ var async = require('async'), async.each(uids, function(uid, next) { Topics.getUnreadTids(uid, 0, 19, function(err, tids) { - websockets.in('uid_' + uid).emit('event:unread.updateCount', tids.length); + websockets.in('uid_' + uid).emit('event:unread.updateCount', null, tids.length); next(); }); }, function(err) { diff --git a/src/user.js b/src/user.js index 09155e17f7..6683de6d3a 100644 --- a/src/user.js +++ b/src/user.js @@ -770,92 +770,72 @@ var bcrypt = require('bcrypt'), User.reset = { validate: function(socket, code, callback) { - if (typeof callback !== 'function') { - callback = null; - } - db.getObjectField('reset:uid', code, function(err, uid) { if (err) { - return callback(false); + return callback(err); } if (uid !== null) { db.getObjectField('reset:expiry', code, function(err, expiry) { if (err) { - return callback(false); + return callback(err); } if (expiry >= +Date.now() / 1000 | 0) { - if (!callback) { - socket.emit('user:reset.valid', { - valid: true - }); - } else { - callback(true); - } + callback(null, true); } else { // Expired, delete from db db.deleteObjectField('reset:uid', code); db.deleteObjectField('reset:expiry', code); - if (!callback) { - socket.emit('user:reset.valid', { - valid: false - }); - } else { - callback(false); - } + callback(null, false); } }); } else { - if (!callback) { - socket.emit('user:reset.valid', { - valid: false - }); - } else { - callback(false); - } + callback(null, false); } }); }, - send: function(socket, email) { + send: function(socket, email, callback) { User.getUidByEmail(email, function(err, uid) { - if (uid !== null) { - // Generate a new reset code - var reset_code = utils.generateUUID(); - db.setObjectField('reset:uid', reset_code, uid); - db.setObjectField('reset:expiry', reset_code, (60 * 60) + new Date() / 1000 | 0); // Active for one hour + if(err) { + return callback(err); + } - var reset_link = nconf.get('url') + 'reset/' + reset_code; + if(!uid) { + return callback(new Error('invalid-email')); + } else if(parseInt(uid, 10) !== socket.uid) { + return callback(new Error('invalid-user')); + } - Emailer.send('reset', uid, { - 'site_title': (meta.config['title'] || 'NodeBB'), - 'reset_link': reset_link, + // Generate a new reset code + var reset_code = utils.generateUUID(); + db.setObjectField('reset:uid', reset_code, uid); + db.setObjectField('reset:expiry', reset_code, (60 * 60) + new Date() / 1000 | 0); // Active for one hour - subject: 'Password Reset Requested - ' + (meta.config['title'] || 'NodeBB') + '!', - template: 'reset', - uid: uid - }); + var reset_link = nconf.get('url') + 'reset/' + reset_code; - socket.emit('user.send_reset', { - status: "ok", - message: "code-sent", - email: email - }); - } else { - socket.emit('user.send_reset', { - status: "error", - message: "invalid-email", - email: email - }); - } + Emailer.send('reset', uid, { + 'site_title': (meta.config['title'] || 'NodeBB'), + 'reset_link': reset_link, + + subject: 'Password Reset Requested - ' + (meta.config['title'] || 'NodeBB') + '!', + template: 'reset', + uid: uid + }); + + callback(null); }); }, - commit: function(socket, code, password) { - this.validate(socket, code, function(validated) { + commit: function(socket, code, password, callback) { + this.validate(socket, code, function(err, validated) { + if(err) { + return callback(err); + } + if (validated) { db.getObjectField('reset:uid', code, function(err, uid) { if (err) { - return; + return callback(err); } User.hashPassword(password, function(err, hash) { @@ -866,9 +846,7 @@ var bcrypt = require('bcrypt'), db.deleteObjectField('reset:uid', code); db.deleteObjectField('reset:expiry', code); - socket.emit('user:reset.commit', { - status: 'ok' - }); + callback(null); }); } }); From 9e6f7fa960377a23ee1fa21b4de8eae2df938b24 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 21:19:57 -0500 Subject: [PATCH 36/48] reset --- public/src/forum/reset_code.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/forum/reset_code.js b/public/src/forum/reset_code.js index ccb9e5c5a6..2eb4b49f28 100644 --- a/public/src/forum/reset_code.js +++ b/public/src/forum/reset_code.js @@ -39,12 +39,12 @@ define(function() { // Enable the form if the code is valid socket.emit('user.reset.valid', { code: reset_code - }, function(err, data) { + }, function(err, valid) { if(err) { return app.alertError(err.message); } - if ( !! data.valid) { + if (valid) { resetEl.disabled = false; } else { var formEl = document.getElementById('reset-form'); From b3816b98a120bd414886799d199deea119599b16 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 22:06:23 -0500 Subject: [PATCH 37/48] more post fixes --- public/src/forum/topic.js | 43 +++++++++++---------- public/src/modules/composer.js | 7 ++-- src/favourites.js | 2 - src/postTools.js | 12 ++++-- src/posts.js | 38 +++++++++---------- src/socket.io/modules.js | 16 ++++---- src/socket.io/posts.js | 68 ++++++++++++++++++++++------------ src/topics.js | 6 +-- 8 files changed, 106 insertions(+), 86 deletions(-) diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index 035c44de09..b93060dd09 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -367,9 +367,14 @@ define(['composer'], function(composer) { username = '@' + post.attr('data-username'); } - socket.emit('posts.getRawPost', {pid: pid}, function(data) { - - quoted = '> ' + data.post.replace(/\n/g, '\n> ') + '\n\n'; + socket.emit('posts.getRawPost', pid, function(err, post) { + if(err) { + return app.alert(err.message); + } + var quoted = ''; + if(post) { + quoted = '> ' + post.replace(/\n/g, '\n> ') + '\n\n'; + } composer.newReply(tid, topic_name, username + ' said:\n' + quoted); }); @@ -428,30 +433,20 @@ define(['composer'], function(composer) { $('#post-container').on('click', '.delete', function(e) { var pid = $(this).parents('li').attr('data-pid'), postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]')), - deleteAction = !postEl.hasClass('deleted') ? true : false, - confirmDel = confirm((deleteAction ? 'Delete' : 'Restore') + ' this post?'); + action = !postEl.hasClass('deleted') ? 'delete' : 'restore'; - if (confirmDel) { - if(deleteAction) { - socket.emit('posts.delete', { - pid: pid, - tid: tid - }, function(err) { - if(err) { - return app.alertError('Can\'t delete post!'); - } - }); - } else { - socket.emit('posts.restore', { + bootbox.confirm('Are you sure you want to ' + action + ' this post?', function(confirm) { + if (confirm) { + socket.emit('posts.' + action, { pid: pid, tid: tid }, function(err) { if(err) { - return app.alertError('Can\'t restore post!'); + return app.alertError('Can\'t ' + action + ' post!'); } }); } - } + }); }); $('#post-container').on('click', '.move', function(e) { @@ -684,7 +679,7 @@ define(['composer'], function(composer) { }); socket.on('posts.favourite', function(data) { - if (data.status === 'ok' && data.pid) { + if (data && data.pid) { var favBtn = $('li[data-pid="' + data.pid + '"] .favourite'); if(favBtn.length) { favBtn.addClass('btn-warning') @@ -695,7 +690,7 @@ define(['composer'], function(composer) { }); socket.on('posts.unfavourite', function(data) { - if (data.status === 'ok' && data.pid) { + if (data && data.pid) { var favBtn = $('li[data-pid="' + data.pid + '"] .favourite'); if(favBtn.length) { favBtn.removeClass('btn-warning') @@ -855,7 +850,11 @@ define(['composer'], function(composer) { favEl = postEl.find('.favourite'), replyEl = postEl.find('.post_reply'); - socket.emit('posts.getPrivileges', pid, function(privileges) { + socket.emit('posts.getPrivileges', pid, function(err, privileges) { + if(err) { + return app.alert(err.message); + } + if (privileges.editable) { if (!postEl.hasClass('deleted')) { toggle_post_tools(pid, false); diff --git a/public/src/modules/composer.js b/public/src/modules/composer.js index e4a0f2436d..4700e4865e 100644 --- a/public/src/modules/composer.js +++ b/public/src/modules/composer.js @@ -45,9 +45,10 @@ define(['taskbar'], function(taskbar) { composer.editPost = function(pid) { if(allowed()) { - socket.emit('modules.composer.push', { - pid: pid - }, function(err, threadData) { + socket.emit('modules.composer.push', pid, function(err, threadData) { + if(err) { + return app.alertError(err.message); + } push({ pid: pid, title: threadData.title, diff --git a/src/favourites.js b/src/favourites.js index aba04ae89b..77e9606084 100644 --- a/src/favourites.js +++ b/src/favourites.js @@ -47,7 +47,6 @@ var db = require('./database'), } socket.emit('posts.favourite', { - status: 'ok', pid: pid }); } @@ -84,7 +83,6 @@ var db = require('./database'), } socket.emit('posts.unfavourite', { - status: 'ok', pid: pid }); } diff --git a/src/postTools.js b/src/postTools.js index 64939d67fe..aca3214ded 100644 --- a/src/postTools.js +++ b/src/postTools.js @@ -51,7 +51,11 @@ var winston = require('winston'), } // [getThreadPrivileges, isOwnPost, hasEnoughRep] }, function(err, results) { - callback({ + if(err) { + return callback(err); + } + + callback(null, { read: results.topicPrivs.read, editable: results.topicPrivs.editable || results.isOwner || results.hasEnoughRep, view_deleted: results.topicPrivs.view_deleted || results.isOwner || results.hasEnoughRep @@ -111,7 +115,7 @@ var winston = require('winston'), }); }; - PostTools.privileges(pid, uid, function(privileges) { + PostTools.privileges(pid, uid, function(err, privileges) { if (privileges.editable) { plugins.fireHook('filter:post.save', content, function(err, parsedContent) { if (!err) content = parsedContent; @@ -169,7 +173,7 @@ var winston = require('winston'), return callback(new Error('Post already deleted!')); } - PostTools.privileges(pid, uid, function(privileges) { + PostTools.privileges(pid, uid, function(err, privileges) { if (privileges.editable) { success(); } @@ -223,7 +227,7 @@ var winston = require('winston'), return callback(new Error('Post already restored')); } - PostTools.privileges(pid, uid, function(privileges) { + PostTools.privileges(pid, uid, function(err, privileges) { if (privileges.editable) { success(); } diff --git a/src/posts.js b/src/posts.js index 42165f2b47..bf3be7bfdb 100644 --- a/src/posts.js +++ b/src/posts.js @@ -368,41 +368,41 @@ var db = require('./database'), Posts.uploadPostImage = function(image, callback) { if(meta.config.imgurClientID) { - if(!image) { + if(!image || !image.data) { return callback('invalid image', null); } require('./imgur').upload(meta.config.imgurClientID, image.data, 'base64', function(err, data) { if(err) { - callback(err.message, null); - } else { - callback(null, { - url: data.link, - name: image.name - }); + return callback(err); } + + callback(null, { + url: data.link, + name: image.name + }); }); } else if (meta.config.allowFileUploads) { Posts.uploadPostFile(image, callback); } else { - callback('Uploads are disabled!'); + callback(new Error('Uploads are disabled!')); } } Posts.uploadPostFile = function(file, callback) { if(!meta.config.allowFileUploads) { - return callback('File uploads are not allowed'); + return callback(new Error('File uploads are not allowed')); } - if(!file) { - return callback('invalid file'); + if(!file || !file.data) { + return callback(new Error('invalid file')); } var buffer = new Buffer(file.data, 'base64'); if(buffer.length > parseInt(meta.config.maximumFileSize, 10) * 1024) { - return callback('File too big'); + return callback(new Error('File too big')); } var filename = 'upload-' + utils.generateUUID() + path.extname(file.name); @@ -410,13 +410,13 @@ var db = require('./database'), fs.writeFile(uploadPath, buffer, function (err) { if(err) { - callback(err.message, null); - } else { - callback(null, { - url: nconf.get('upload_url') + filename, - name: file.name - }); + return callback(err); } + + callback(null, { + url: nconf.get('upload_url') + filename, + name: file.name + }); }); } @@ -427,7 +427,7 @@ var db = require('./database'), } async.filter(pids, function(pid, next) { - postTools.privileges(pid, 0, function(privileges) { + postTools.privileges(pid, 0, function(err, privileges) { next(privileges.read); }); }, function(pids) { diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 8cbbda3095..f871ea7c70 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -19,31 +19,29 @@ var posts = require('../posts'), SocketModules.composer = {}; -SocketModules.composer.push = function(socket, data, callback) { - if (parseInt(socket.uid, 10) > 0 || parseInt(meta.config.allowGuestPosting, 10) === 1) { - if (parseInt(data.pid, 10) > 0) { +SocketModules.composer.push = function(socket, pid, callback) { + if (socket.uid || parseInt(meta.config.allowGuestPosting, 10)) { + if (parseInt(pid, 10) > 0) { async.parallel([ function(next) { - posts.getPostFields(data.pid, ['content'], next); + posts.getPostFields(pid, ['content'], next); }, function(next) { - topics.getTitleByPid(data.pid, function(title) { + topics.getTitleByPid(pid, function(title) { next(null, title); }); } ], function(err, results) { callback(err, { title: results[1], - pid: data.pid, + pid: pid, body: results[0].content }); }); } } else { - callback(null, { - error: 'no-uid' - }); + callback(new Error('no-uid')); } }; diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index a1040fc413..0baed5d0b4 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -3,11 +3,12 @@ var posts = require('../posts'), topics = require('../topics'), favourites = require('../favourites'), postTools = require('../postTools'), + index = require('./index'), SocketPosts = {}; SocketPosts.reply = function(socket, data, callback) { - if (socket.uid < 1 && parseInt(meta.config.allowGuestPosting, 10) === 0) { + if (!socket.uid && !parseInt(meta.config.allowGuestPosting, 10)) { socket.emit('event:alert', { title: 'Reply Unsuccessful', message: 'You don't seem to be logged in, so you cannot reply.', @@ -17,6 +18,10 @@ SocketPosts.reply = function(socket, data, callback) { return; } + if(!data || !data.topic_id || !data.content) { + return callback(new Error('invalid data')); + } + topics.reply(data.topic_id, socket.uid, data.content, function(err, postData) { if(err) { if (err.message === 'content-too-short') { @@ -38,7 +43,7 @@ SocketPosts.reply = function(socket, data, callback) { timeout: 7500 }); } - return; + return callback(err); } if (postData) { @@ -54,37 +59,40 @@ SocketPosts.reply = function(socket, data, callback) { var socketData = { posts: [postData] }; - socket.server.sockets.in('topic_' + postData.tid).emit('event:new_post', socketData); - socket.server.sockets.in('recent_posts').emit('event:new_post', socketData); - socket.server.sockets.in('user/' + postData.uid).emit('event:new_post', socketData); + index.server.sockets.in('topic_' + postData.tid).emit('event:new_post', socketData); + index.server.sockets.in('recent_posts').emit('event:new_post', socketData); + index.server.sockets.in('user/' + postData.uid).emit('event:new_post', socketData); callback(); } - }); }; SocketPosts.favourite = function(socket, data) { - favourites.favourite(data.pid, data.room_id, socket.uid, socket); + if(data && data.pid && data.room_id) { + favourites.favourite(data.pid, data.room_id, socket.uid, socket); + } }; SocketPosts.unfavourite = function(socket, data) { - favourites.unfavourite(data.pid, data.room_id, socket.uid, socket); + if(data && data.pid && data.room_id) { + favourites.unfavourite(data.pid, data.room_id, socket.uid, socket); + } }; SocketPosts.uploadImage = function(socket, data, callback) { - posts.uploadPostImage(data, callback); + if(data) { + posts.uploadPostImage(data, callback); + } }; SocketPosts.uploadFile = function(socket, data, callback) { - posts.uploadPostFile(data, callback); + if(data) { + posts.uploadPostFile(data, callback); + } }; -SocketPosts.getRawPost = function(socket, data, callback) { - posts.getPostField(data.pid, 'content', function(err, raw) { - callback({ - post: raw - }); - }); +SocketPosts.getRawPost = function(socket, pid, callback) { + posts.getPostField(pid, 'content', callback); }; SocketPosts.edit = function(socket, data, callback) { @@ -96,6 +104,8 @@ SocketPosts.edit = function(socket, data, callback) { timeout: 2000 }); return; + } else if(!data || !data.pid || !data.title || !data.content) { + return callback(new Error('invalid data')); } else if (!data.title || data.title.length < parseInt(meta.config.minimumTitleLength, 10)) { topics.emitTitleTooShortAlert(socket); return; @@ -104,11 +114,15 @@ SocketPosts.edit = function(socket, data, callback) { return; } - postTools.edit(socket.uid, data.pid, data.title, data.content, data.images); + postTools.edit(socket.uid, data.pid, data.title, data.content); callback(); }; SocketPosts.delete = function(socket, data, callback) { + if(!data) { + return callback(new Error('invalid data')); + } + postTools.delete(socket.uid, data.pid, function(err) { if(err) { @@ -117,14 +131,18 @@ SocketPosts.delete = function(socket, data, callback) { module.parent.exports.emitTopicPostStats(); - socket.server.sockets.in('topic_' + data.tid).emit('event:post_deleted', { + index.server.sockets.in('topic_' + data.tid).emit('event:post_deleted', { pid: data.pid }); - callback(null); + callback(); }); }; SocketPosts.restore = function(socket, data, callback) { + if(!data) { + return callback(new Error('invalid data')); + } + postTools.restore(socket.uid, data.pid, function(err) { if(err) { return callback(err); @@ -132,17 +150,21 @@ SocketPosts.restore = function(socket, data, callback) { module.parent.exports.emitTopicPostStats(); - socket.server.sockets.in('topic_' + data.tid).emit('event:post_restored', { + index.server.sockets.in('topic_' + data.tid).emit('event:post_restored', { pid: data.pid }); - callback(null); + + callback(); }); }; SocketPosts.getPrivileges = function(socket, pid, callback) { - postTools.privileges(pid, socket.uid, function(privileges) { + postTools.privileges(pid, socket.uid, function(err, privileges) { + if(err) { + return callback(err); + } privileges.pid = parseInt(pid); - callback(privileges); + callback(null, privileges); }); }; diff --git a/src/topics.js b/src/topics.js index bbe0115535..44713da623 100644 --- a/src/topics.js +++ b/src/topics.js @@ -262,7 +262,7 @@ var async = require('async'), }); function move(pid, next) { - postTools.privileges(pid, uid, function(privileges) { + postTools.privileges(pid, uid, function(err, privileges) { if(privileges.editable) { Topics.movePostToTopic(pid, tid, next); } else { @@ -384,9 +384,7 @@ var async = require('async'), } function getPrivileges(next) { - postTools.privileges(tid, current_user, function(privData) { - next(null, privData); - }); + postTools.privileges(tid, current_user, next); } async.parallel([getFavouritesData, addUserInfoToPosts, getPrivileges], function(err, results) { From b7f0c90bf76e168656181ba02faf52f09be5a4d8 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 22:44:34 -0500 Subject: [PATCH 38/48] more fixes --- public/src/app.js | 34 +++++++--------------------------- public/src/forum/topic.js | 5 ++++- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index bce01992af..99b4b29615 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -250,42 +250,22 @@ var socket, var uids = []; jQuery('.post-row').each(function () { - uids.push(this.getAttribute('data-uid')); + var uid = $(this).attr('data-uid'); + if(uids.indexOf(uid) === -1) { + uids.push(uid); + } }); socket.emit('user.getOnlineUsers', uids, function (err, users) { - jQuery('a.username-field').each(function () { - if (this.processed === true) - return; - - var el = jQuery(this), - uid = el.parents('li').attr('data-uid'); - - if (uid && jQuery.inArray(uid, users) !== -1) { - el.find('i').remove(); - el.prepend(''); - } else { - el.find('i').remove(); - el.prepend(''); - } - - el.processed = true; - }); - jQuery('button .username-field').each(function () { - //DRY FAIL - if (this.processed === true) - return; - + jQuery('button .username-field').each(function (index, element) { var el = jQuery(this), uid = el.parents('li').attr('data-uid'); if (uid && jQuery.inArray(uid, users) !== -1) { - el.parent().addClass('btn-success'); + el.parent().addClass('btn-success').removeClass('btn-danger'); } else { - el.parent().addClass('btn-danger'); + el.parent().addClass('btn-danger').removeClass('btn-success'); } - - el.processed = true; }); }); }; diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index b93060dd09..74b3c3e6af 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -1049,7 +1049,10 @@ define(['composer'], function(composer) { .fadeIn('slow'); for (var x = 0, numPosts = data.posts.length; x < numPosts; x++) { - socket.emit('posts.getPrivileges', data.posts[x].pid, function(privileges) { + socket.emit('posts.getPrivileges', data.posts[x].pid, function(err, privileges) { + if(err) { + return app.alertError(err.message); + } toggle_mod_tools(privileges.pid, privileges.editable); }); } From b062af2c4b8089176cee4ae2fc6bd9ca9c6eb9b5 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Thu, 16 Jan 2014 23:46:08 -0500 Subject: [PATCH 39/48] fixed user pwd reset --- public/src/forum/reset.js | 2 +- src/user.js | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/public/src/forum/reset.js b/public/src/forum/reset.js index 810b39077d..a04b3d31e5 100644 --- a/public/src/forum/reset.js +++ b/public/src/forum/reset.js @@ -19,7 +19,7 @@ define(function() { jQuery('#error').hide(); jQuery('#success').show(); - jQuery('#success p').html('An email has been dispatched to "' + data.email + '" with instructions on setting a new password.'); + jQuery('#success p').html('An email has been dispatched to "' + inputEl.value + '" with instructions on setting a new password.'); inputEl.value = ''; }); } else { diff --git a/src/user.js b/src/user.js index 6683de6d3a..9a6e1dc133 100644 --- a/src/user.js +++ b/src/user.js @@ -803,8 +803,6 @@ var bcrypt = require('bcrypt'), if(!uid) { return callback(new Error('invalid-email')); - } else if(parseInt(uid, 10) !== socket.uid) { - return callback(new Error('invalid-user')); } // Generate a new reset code From cfaa6556d6aaf9ee84ef3e67fcd9077c61c9644c Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Fri, 17 Jan 2014 00:07:02 -0500 Subject: [PATCH 40/48] pass err --- src/socket.io/admin.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 33e188b4c5..7395ec800a 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -87,11 +87,7 @@ SocketAdmin.user.search = function(socket, username, callback) { } async.each(data, isAdmin, function(err) { - if(err) { - return callback({message: err.message}); - } - - callback(null, data); + callback(err, data); }); }); }; From 7e9d3444872826be84ea1b83cc1b92faaade33bc Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 17 Jan 2014 08:04:23 -0500 Subject: [PATCH 41/48] patching translator to ignore non-js files --- public/src/translator.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/public/src/translator.js b/public/src/translator.js index 8dd8671599..60994696b6 100644 --- a/public/src/translator.js +++ b/public/src/translator.js @@ -177,16 +177,24 @@ isServer = true; var utils = require('./utils.js'), + Meta = require('../../src/meta'), path = require('path'), fs = require('fs'), - Meta = require('../../src/meta'); + winston = require('winston'); - utils.walk(path.join(__dirname, '../../', 'public/language/' + (Meta.config.defaultLang || 'en')), function (err, data) { + utils.walk(path.join(__dirname, '../language', (Meta.config.defaultLang || 'en')), function (err, data) { var loaded = data.length; for (var d in data) { if (data.hasOwnProperty(d)) { - files.loaded[path.basename(data[d]).replace('.json', '')] = require(data[d]); + // Only load .json files + if (path.extname(data[d]) === '.json') { + files.loaded[path.basename(data[d]).replace('.json', '')] = require(data[d]); + } else { + if (process.env.NODE_ENV === 'development') { + winston.warn('[translator] Skipping language file: ' + path.relative(path.join(__dirname, '../language'), data[d])); + } + } } } }); From 253913f8d9b07e2239bb8b73c4e5788309b873f1 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 17 Jan 2014 08:12:30 -0500 Subject: [PATCH 42/48] hiding fork button on xs/sm devices (default motd) --- src/routes/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/api.js b/src/routes/api.js index 6c6c85addd..59bc61264c 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -67,7 +67,7 @@ var path = require('path'), data.motd_class = (parseInt(meta.config.show_motd, 10) === 1 || meta.config.show_motd === undefined) ? '' : ' none'; data.motd_class += (meta.config.motd && meta.config.motd.length > 0 ? '' : ' default'); - data.motd = require('marked')(meta.config.motd || "\n\n# NodeBB v" + pkg.version + "\nWelcome to NodeBB, the discussion platform of the future."); + data.motd = require('marked')(meta.config.motd || "\n\n# NodeBB v" + pkg.version + "\nWelcome to NodeBB, the discussion platform of the future."); res.json(data); }); }); From beec96416fdb1912052490ba41ba46dd4e90f742 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 17 Jan 2014 08:53:23 -0500 Subject: [PATCH 43/48] added translation to default MOTD --- public/language/cs/global.json | 8 +++++++- public/language/de/global.json | 8 +++++++- public/language/en/global.json | 8 +++++++- public/language/es/global.json | 10 ++++++++-- public/language/fr/global.json | 8 +++++++- public/language/it/global.json | 8 +++++++- src/routes/api.js | 15 ++++++++++++++- 7 files changed, 57 insertions(+), 8 deletions(-) diff --git a/public/language/cs/global.json b/public/language/cs/global.json index fae988616c..3c8ac5a7a8 100644 --- a/public/language/cs/global.json +++ b/public/language/cs/global.json @@ -27,5 +27,11 @@ "header.profile": "Můj profil", "notifications.loading": "Načítání upozornění", - "chats.loading": "Načítání grafů" + "chats.loading": "Načítání grafů", + + "motd.welcome": "Vítejte na NodeBB, diskusní platformou budoucnosti.", + "motd.get": "Získat NodeBB", + "motd.fork": "Fork", + "motd.like": "To se mi líbí", + "motd.follow": "Sledovat" } diff --git a/public/language/de/global.json b/public/language/de/global.json index 51dd759117..925597bc57 100644 --- a/public/language/de/global.json +++ b/public/language/de/global.json @@ -27,5 +27,11 @@ "header.profile": "Profil", "notifications.loading": "Benachrichtigungen laden", - "chats.loading": "Nachrichten werden geladen" + "chats.loading": "Nachrichten werden geladen", + + "motd.welcome": "Willkommen auf NodeBB, der Diskussionsplattform der Zukunft.", + "motd.get": "Bekommen NodeBB", + "motd.fork": "Fork", + "motd.like": "Gefällt mir", + "motd.follow": "Folgen" } diff --git a/public/language/en/global.json b/public/language/en/global.json index 7fb54239af..6c41d49b2a 100644 --- a/public/language/en/global.json +++ b/public/language/en/global.json @@ -27,5 +27,11 @@ "header.profile": "Profile", "notifications.loading": "Loading Notifications", - "chats.loading": "Loading Chats" + "chats.loading": "Loading Chats", + + "motd.welcome": "Welcome to NodeBB, the discussion platform of the future.", + "motd.get": "Get NodeBB", + "motd.fork": "Fork", + "motd.like": "Like", + "motd.follow": "Follow" } diff --git a/public/language/es/global.json b/public/language/es/global.json index ab14fef5fd..706e856015 100644 --- a/public/language/es/global.json +++ b/public/language/es/global.json @@ -8,7 +8,7 @@ "404.message": "Al parecer lo que estas buscando no existe. Te recomendamos que vuelvas al inicio.", "500.title": "Error Interno.", "500.message": "Ooops! Algo salio mal!, No te alarmes. Nuestros simios hiperinteligentes lo solucionarán", - + "register": "Registrarse", "login": "Conectarse", @@ -27,5 +27,11 @@ "header.profile": "Perfil", "notifications.loading": "Cargando Notificaciones", - "chats.loading": "Cargando Chats" + "chats.loading": "Cargando Chats", + + "motd.welcome": "Bienvenido a NodeBB, la plataforma de debate sobre el futuro.", + "motd.get": "Obtener", + "motd.fork": "Fork", + "motd.like": "Me gusta", + "motd.follow": "Seguir" } \ No newline at end of file diff --git a/public/language/fr/global.json b/public/language/fr/global.json index e454103779..402f455708 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -27,5 +27,11 @@ "header.profile": "Profile", "notifications.loading": "Chargement des Notifications", - "chats.loading": "Chargement des Chats" + "chats.loading": "Chargement des Chats", + + "motd.welcome": "Bienvenue à NodeBB, la plate-forme de discussion sur l'avenir.", + "motd.get": "Obtenir NodeBB", + "motd.fork": "Fork", + "motd.like": "J'aime", + "motd.follow": "Suivre" } diff --git a/public/language/it/global.json b/public/language/it/global.json index eefc575898..9a79189a9c 100644 --- a/public/language/it/global.json +++ b/public/language/it/global.json @@ -27,5 +27,11 @@ "header.profile": "Profilo", "notifications.loading": "Caricamento delle Notifiche", - "chats.loading": "Caricamento delle Chat" + "chats.loading": "Caricamento delle Chat", + + "motd.welcome": "Benvenuti al NodeBB, la piattaforma di discussione del futuro.", + "motd.get": "Ottenere NodeBB", + "motd.fork": "Fork", + "motd.like": "Mi piace", + "motd.follow": "Segui" } \ No newline at end of file diff --git a/src/routes/api.js b/src/routes/api.js index 59bc61264c..9953d19567 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -12,6 +12,7 @@ var path = require('path'), categories = require('../categories'), categoryTools = require('../categoryTools') utils = require('../../public/src/utils'), + translator = require('../../public/src/translator'), pkg = require('../../package.json'), meta = require('../meta'); @@ -51,10 +52,12 @@ var path = require('path'), app.get('/home', function (req, res) { var uid = (req.user) ? req.user.uid : 0; categories.getAllCategories(uid, function (err, data) { + // Remove disabled categories data.categories = data.categories.filter(function (category) { return (!category.disabled || parseInt(category.disabled, 10) === 0); }); + // Retrieve category information for / function iterator(category, callback) { categories.getRecentReplies(category.cid, uid, parseInt(category.numRecentReplies, 10), function (err, posts) { category.posts = posts; @@ -64,10 +67,20 @@ var path = require('path'), } async.each(data.categories, iterator, function (err) { + // Assemble the MOTD + var motdString; + if (!meta.config.motd) { + // Construct default MOTD + translator.mget(['global:motd.welcome', 'global:motd.get', 'global:motd.fork', 'global:motd.like', 'global:motd.follow'], function(err, strings) { + motdString = '\n\n# NodeBB v' + pkg.version + '\n' + strings[0]; + }); + } else { + motdString = meta.config.motd; + } data.motd_class = (parseInt(meta.config.show_motd, 10) === 1 || meta.config.show_motd === undefined) ? '' : ' none'; data.motd_class += (meta.config.motd && meta.config.motd.length > 0 ? '' : ' default'); - data.motd = require('marked')(meta.config.motd || "\n\n# NodeBB v" + pkg.version + "\nWelcome to NodeBB, the discussion platform of the future."); + data.motd = require('marked')(motdString); res.json(data); }); }); From 13ae2e94010d46263f24a09776105b0c142f489a Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 17 Jan 2014 08:54:34 -0500 Subject: [PATCH 44/48] fixed global:motd.get in es --- public/language/es/global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/language/es/global.json b/public/language/es/global.json index 706e856015..3df91a2b43 100644 --- a/public/language/es/global.json +++ b/public/language/es/global.json @@ -30,7 +30,7 @@ "chats.loading": "Cargando Chats", "motd.welcome": "Bienvenido a NodeBB, la plataforma de debate sobre el futuro.", - "motd.get": "Obtener", + "motd.get": "Obtener NodeBB", "motd.fork": "Fork", "motd.like": "Me gusta", "motd.follow": "Seguir" From a802dc4b68eda3bbc281072b36e83de7d12ac787 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Fri, 17 Jan 2014 12:42:19 -0500 Subject: [PATCH 45/48] admin.js socket fixes --- public/src/forum/admin/categories.js | 40 +++++---- public/src/forum/admin/groups.js | 7 +- public/src/forum/admin/themes.js | 6 +- public/src/forum/admin/topics.js | 7 +- public/src/forum/admin/users.js | 17 ++-- src/admin/user.js | 7 +- src/meta.js | 2 +- src/socket.io/admin.js | 117 ++++++++++++++++++--------- 8 files changed, 140 insertions(+), 63 deletions(-) diff --git a/public/src/forum/admin/categories.js b/public/src/forum/admin/categories.js index 8f2a18c69b..327e29968f 100644 --- a/public/src/forum/admin/categories.js +++ b/public/src/forum/admin/categories.js @@ -87,22 +87,25 @@ define(['uploader'], function(uploader) { }; socket.emit('admin.categories.create', category, function(err, data) { - if (!err) { - app.alert({ - alert_id: 'category_created', - title: 'Created', - message: 'Category successfully created!', - type: 'success', - timeout: 2000 - }); - - var html = templates.prepare(templates['admin/categories'].blocks['categories']).parse({ - categories: [data] - }); - $('#entry-container').append(html); - - $('#new-category-modal').modal('hide'); + if(err) { + return app.alertError(err.message); } + + app.alert({ + alert_id: 'category_created', + title: 'Created', + message: 'Category successfully created!', + type: 'success', + timeout: 2000 + }); + + var html = templates.prepare(templates['admin/categories'].blocks['categories']).parse({ + categories: [data] + }); + + $('#entry-container').append(html); + $('#new-category-modal').modal('hide'); + }); } @@ -227,6 +230,10 @@ define(['uploader'], function(uploader) { username: searchEl.value, cid: cid }, function(err, results) { + if(err) { + return app.alertError(err.message); + } + var numResults = results.length, resultObj; for(var x=0;x 0) { var html = templates.prepare(templates['admin/topics'].blocks['topics']).parse({ topics: topics diff --git a/public/src/forum/admin/users.js b/public/src/forum/admin/users.js index 802431735c..e890329118 100644 --- a/public/src/forum/admin/users.js +++ b/public/src/forum/admin/users.js @@ -126,16 +126,19 @@ define(function() { } function handleUserCreate() { + var errorEl = $('#create-modal-error'); $('#createUser').on('click', function() { $('#create-modal').modal('show'); + $('#create-modal form')[0].reset(); + errorEl.addClass('hide'); }); $('#create-modal-go').on('click', function() { var username = $('#create-user-name').val(), email = $('#create-user-email').val(), password = $('#create-user-password').val(), - passwordAgain = $('#create-user-password-again').val(), - errorEl = $('#create-modal-error'); + passwordAgain = $('#create-user-password-again').val(); + if(password !== passwordAgain) { return errorEl.html('Error

Passwords must match!

').removeClass('hide'); @@ -147,13 +150,15 @@ define(function() { password: password }; - socket.emit('admin.user.createUser', user, function(err, data) { + socket.emit('admin.user.createUser', user, function(err) { if(err) { - return errorEl.html('Error

' + err + '

').removeClass('hide'); + return errorEl.html('Error

' + err.message + '

').removeClass('hide'); } $('#create-modal').modal('hide'); + $('#create-modal').on('hidden.bs.modal', function() { + ajaxify.go('admin/users'); + }); app.alertSuccess('User created!'); - ajaxify.go('admin/users'); }); }); @@ -191,7 +196,7 @@ define(function() { socket.emit('admin.user.search', username, function(err, data) { if(err) { return app.alertError(err.message); - } + }console.log(data) var html = templates.prepare(templates['admin/users'].blocks['users']).parse({ users: data diff --git a/src/admin/user.js b/src/admin/user.js index 1c9453b9fb..f295f78916 100644 --- a/src/admin/user.js +++ b/src/admin/user.js @@ -6,11 +6,16 @@ var utils = require('../../public/src/utils'), UserAdmin.createUser = function(uid, userData, callback) { user.isAdministrator(uid, function(err, isAdmin) { + if(err) { + return callback(err); + } + if (isAdmin) { user.create(userData.username, userData.password, userData.email, function(err) { if(err) { - return callback(err.message); + return callback(err); } + callback(null); }); } else { diff --git a/src/meta.js b/src/meta.js index 8af0917d8c..1eec18351e 100644 --- a/src/meta.js +++ b/src/meta.js @@ -122,7 +122,7 @@ var fs = require('fs'), 'theme:templates': '', 'theme:src': '' }; - +console.log(themeData); switch(data.type) { case 'local': async.waterfall([ diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 7395ec800a..320f0d4a64 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -35,9 +35,11 @@ SocketAdmin.before = function(socket, next) { SocketAdmin.topics = {}; SocketAdmin.topics.getMore = function(socket, data, callback) { - topics.getAllTopics(data.limit, data.after, function(err, topics) { - callback(JSON.stringify(topics)); - }); + if(!data) { + return callback(new Error('invalid data')); + } + + topics.getAllTopics(data.limit, data.after, callback); }; /* User */ @@ -53,15 +55,18 @@ SocketAdmin.user.removeAdmin = function(socket, theirid) { }; 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) { - if(socket.userSockets[theirid]) { - for(var i=0; i Date: Fri, 17 Jan 2014 12:49:21 -0500 Subject: [PATCH 46/48] fixed category sockets --- public/src/forum/category.js | 6 +++++- src/categories.js | 8 +++++--- src/socket.io/categories.js | 8 ++++++-- tests/categories.js | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/public/src/forum/category.js b/public/src/forum/category.js index e4d36d78f4..56ea94b6e4 100644 --- a/public/src/forum/category.js +++ b/public/src/forum/category.js @@ -133,7 +133,11 @@ define(['composer'], function(composer) { cid: cid, after: $('#topics-container').children('.category-item').length }, function (err, data) { - if (!err && data.topics.length) { + if(err) { + return app.alertError(err.message); + } + + if (data && data.topics.length) { Category.onTopicsLoaded(data.topics); } loadingMoreTopics = false; diff --git a/src/categories.js b/src/categories.js index 6312ff835e..465ee43d81 100644 --- a/src/categories.js +++ b/src/categories.js @@ -124,9 +124,11 @@ var db = require('./database.js'), Categories.getCategoryTopics = function(cid, start, stop, uid, callback) { Categories.getTopicIds(cid, start, stop, function(err, tids) { - topics.getTopicsByTids(tids, cid, uid, function(err, topicsData) { - callback(err, topicsData); - }); + if(err) { + return callback(err); + } + + topics.getTopicsByTids(tids, cid, uid, callback); }); }; diff --git a/src/socket.io/categories.js b/src/socket.io/categories.js index 43c5a002b8..545635750d 100644 --- a/src/socket.io/categories.js +++ b/src/socket.io/categories.js @@ -11,11 +11,15 @@ SocketCategories.get = function(socket, data, callback) { }; SocketCategories.loadMore = function(socket, data, callback) { + if(!data) { + return callback(new Error('invalid data')); + } + var start = data.after, end = start + 9; - categories.getCategoryTopics(data.cid, start, end, socket.uid, function(topics) { - callback(null, { + categories.getCategoryTopics(data.cid, start, end, socket.uid, function(err, topics) { + callback(err, { topics: topics }); }); diff --git a/tests/categories.js b/tests/categories.js index 070a71e884..009d195e92 100644 --- a/tests/categories.js +++ b/tests/categories.js @@ -44,7 +44,7 @@ describe('Categories', function() { describe('.getCategoryTopics', function() { it('should return a list of topics', function(done) { - Categories.getCategoryTopics(categoryObj.cid, 0, 10, 0, function(topics) { + Categories.getCategoryTopics(categoryObj.cid, 0, 10, 0, function(err, topics) { assert(Array.isArray(topics)); assert(topics.every(function(topic) { return topic instanceof Object; From a34775a6c275100c6f6d92b0aa2bdb6f7349022a Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Fri, 17 Jan 2014 12:52:04 -0500 Subject: [PATCH 47/48] meta fixes --- src/socket.io/meta.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index 03d731fd81..9c8d2b8ed8 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -30,12 +30,14 @@ SocketMeta.reconnected = function(socket) { }; SocketMeta.buildTitle = function(socket, text, callback) { - meta.title.build(text, function(err, title) { - callback(err, title); - }); + meta.title.build(text, callback); }; SocketMeta.updateHeader = function(socket, data, callback) { + if(!data) { + return callback(new Error('invalid data')); + } + if (socket.uid) { user.getUserFields(socket.uid, data.fields, function(err, fields) { if(err) { @@ -46,7 +48,7 @@ SocketMeta.updateHeader = function(socket, data, callback) { fields.uid = socket.uid; callback(null, fields); } else { - callback([]); + callback(null, []); } }); } else { @@ -73,6 +75,10 @@ SocketMeta.getUsageStats = function(socket, data, callback) { SocketMeta.rooms = {}; SocketMeta.rooms.enter = function(socket, data) { + if(!data) { + return callback(new Error('invalid data')); + } + if (data.leave !== null) { socket.leave(data.leave); } From e884ff1f59b1850431c0f484880695df37d011f3 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Fri, 17 Jan 2014 12:55:38 -0500 Subject: [PATCH 48/48] modules fixes --- src/socket.io/modules.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index f871ea7c70..22d8458e23 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -33,7 +33,11 @@ SocketModules.composer.push = function(socket, pid, callback) { }); } ], function(err, results) { - callback(err, { + if(err) { + return callback(err); + } + + callback(null, { title: results[1], pid: pid, body: results[0].content @@ -64,11 +68,17 @@ SocketModules.composer.editCheck = function(socket, pid, callback) { SocketModules.chats = {}; SocketModules.chats.get = function(socket, data, callback) { - var touid = data.touid; - Messaging.getMessages(socket.uid, touid, callback); + if(!data) { + return callback(new Error('invalid data')); + } + + Messaging.getMessages(socket.uid, data.touid, callback); }; SocketModules.chats.send = function(socket, data) { + if(!data) { + return callback(new Error('invalid data')); + } var touid = data.touid; if (touid === socket.uid || socket.uid === 0) {