From f33256d6284cf970564124c628be7b8ce6dd9ba6 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Tue, 18 Feb 2014 23:06:18 -0500 Subject: [PATCH 1/4] fixes error alerts if scroll is triggered during transitions --- public/src/forum/popular.js | 4 ++++ public/src/forum/recent.js | 4 ++++ public/src/forum/unread.js | 3 +++ 3 files changed, 11 insertions(+) diff --git a/public/src/forum/popular.js b/public/src/forum/popular.js index f85e38ccb2..c4817bbd71 100644 --- a/public/src/forum/popular.js +++ b/public/src/forum/popular.js @@ -21,6 +21,10 @@ define(['forum/recent'], function(recent) { }); function loadMoreTopics() { + if(!$('#topics-container').length) { + return; + } + loadingMoreTopics = true; socket.emit('topics.loadMoreFromSet', { set: 'topics:' + $('.nav-pills .active a').html().toLowerCase(), diff --git a/public/src/forum/recent.js b/public/src/forum/recent.js index 15e1d63ceb..8837c41367 100644 --- a/public/src/forum/recent.js +++ b/public/src/forum/recent.js @@ -92,6 +92,10 @@ define(function() { } Recent.loadMoreTopics = function() { + if(!$('#topics-container').length) { + return; + } + loadingMoreTopics = true; socket.emit('topics.loadMoreRecentTopics', { after: $('#topics-container').attr('data-nextstart'), diff --git a/public/src/forum/unread.js b/public/src/forum/unread.js index 4f3024fbab..3ed2baf5cc 100644 --- a/public/src/forum/unread.js +++ b/public/src/forum/unread.js @@ -44,6 +44,9 @@ define(['forum/recent'], function(recent) { }); function loadMoreTopics() { + if(!$('#topics-container').length) { + return; + } loadingMoreTopics = true; socket.emit('topics.loadMoreUnreadTopics', { after: $('#topics-container').attr('data-nextstart') From 6496ad95e8cef514690eb0fb298ec117dd782a47 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 19 Feb 2014 02:07:48 -0500 Subject: [PATCH 2/4] Revert "closes #992" This reverts commit ed4b0461b9ce6559b90391768856c38abc6f89b4. --- public/src/forum/admin/groups.js | 7 ++----- public/templates/admin/groups.tpl | 4 ++-- src/groups.js | 16 +++++++--------- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/public/src/forum/admin/groups.js b/public/src/forum/admin/groups.js index 7d21ee8742..ad530c12a9 100644 --- a/public/src/forum/admin/groups.js +++ b/public/src/forum/admin/groups.js @@ -58,15 +58,14 @@ define(function() { listEl.on('click', 'button[data-action]', function() { var action = this.getAttribute('data-action'), - parent = $(this).parents('li[data-gid]'), - gid = parent.attr('data-gid'), - system = parseInt(parent.attr('data-system'), 10) === 1; + gid = $(this).parents('li[data-gid]').attr('data-gid'); switch (action) { case 'delete': bootbox.confirm('Are you sure you wish to delete this group?', function(confirm) { if (confirm) { socket.emit('admin.groups.delete', gid, function(err, data) { + console.log(err, data); if(err) { return app.alertError(err.message); } @@ -107,8 +106,6 @@ define(function() { detailsModal.attr('data-gid', groupObj.gid); detailsModal.modal('show'); - - $('.hide-if-system')[system ? 'hide' : 'show'](); }); break; } diff --git a/public/templates/admin/groups.tpl b/public/templates/admin/groups.tpl index 6c87898da0..bd21db2b9f 100644 --- a/public/templates/admin/groups.tpl +++ b/public/templates/admin/groups.tpl @@ -5,7 +5,7 @@
    -
  • +
  • {groups.name}

    @@ -69,7 +69,7 @@ -
    \ No newline at end of file +
    diff --git a/src/events.js b/src/events.js index e7ac7356e2..825db1c832 100644 --- a/src/events.js +++ b/src/events.js @@ -13,6 +13,17 @@ var fs = require('fs'), logWithUser(uid, 'changed password'); } + events.logAdminChangeUserPassword = function(adminUid, theirUid) { + user.getMultipleUserFields([adminUid, theirUid], ['username'], function(err, userData) { + if(err) { + return winston.error('Error logging event. ' + err.message); + } + + var msg = userData[0].username + '(uid ' + adminUid + ') changed password of ' + userData[1].username + '(uid ' + theirUid + ')'; + events.log(msg); + }); + } + events.logPasswordReset = function(uid) { logWithUser(uid, 'reset password'); } @@ -53,11 +64,10 @@ var fs = require('fs'), user.getUserField(uid, 'username', function(err, username) { if(err) { - winston.error('Error logging event. ' + err.message); - return; + return winston.error('Error logging event. ' + err.message); } - var msg = '[' + new Date().toUTCString() + '] - ' + username + '(uid ' + uid + ') ' + string; + var msg = username + '(uid ' + uid + ') ' + string; events.log(msg); }); } @@ -65,6 +75,8 @@ var fs = require('fs'), events.log = function(msg) { var logFile = path.join(nconf.get('base_dir'), logFileName); + msg = '[' + new Date().toUTCString() + '] - ' + msg; + fs.appendFile(logFile, msg + '\n', function(err) { if(err) { winston.error('Error logging event. ' + err.message); diff --git a/src/user.js b/src/user.js index 13d3669f2c..a3edb449d1 100644 --- a/src/user.js +++ b/src/user.js @@ -424,27 +424,59 @@ var bcrypt = require('bcryptjs'), }; User.changePassword = function(uid, data, callback) { + if(!data || !data.uid) { + return callback(new Error('invalid-uid')); + } + + function hashAndSetPassword(callback) { + User.hashPassword(data.newPassword, function(err, hash) { + if(err) { + return callback(err); + } + + User.setUserField(data.uid, 'password', hash, function(err) { + if(err) { + return callback(err); + } + + if(parseInt(uid, 10) === parseInt(data.uid, 10)) { + events.logPasswordChange(data.uid); + } else { + events.logAdminChangeUserPassword(uid, data.uid); + } + + callback(); + }); + }); + } + if (!utils.isPasswordValid(data.newPassword)) { return callback(new Error('Invalid password!')); } - User.getUserField(uid, 'password', function(err, currentPassword) { - bcrypt.compare(data.currentPassword, currentPassword, function(err, res) { - if (err) { + if(parseInt(uid, 10) !== parseInt(data.uid, 10)) { + User.isAdministrator(uid, function(err, isAdmin) { + if(err || !isAdmin) { + return callback(err || new Error('not-allowed')); + } + + hashAndSetPassword(callback); + }); + } else { + User.getUserField(uid, 'password', function(err, currentPassword) { + if(err) { return callback(err); } - if (res) { - User.hashPassword(data.newPassword, function(err, hash) { - User.setUserField(uid, 'password', hash); - events.logPasswordChange(uid); - callback(null); - }); - } else { - callback(new Error('Your current password is not correct!')); - } + bcrypt.compare(data.currentPassword, currentPassword, function(err, res) { + if (err || !res) { + return callback(err || new Error('Your current password is not correct!')); + } + + hashAndSetPassword(callback); + }); }); - }); + } }; User.setUserField = function(uid, field, value, callback) { From 7e2823bf3055e7344d6e0dabb6b7ec066c72de16 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Wed, 19 Feb 2014 13:57:09 -0500 Subject: [PATCH 4/4] show recent event data first' --- src/routes/admin.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/routes/admin.js b/src/routes/admin.js index c0afc39b4b..61e15a0f02 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -375,7 +375,10 @@ var nconf = require('nconf'), if(err) { return next(err); } - res.json(200, {eventdata: data.toString()}); + if(data) { + data = data.toString().split('\n').reverse().join('\n'); + } + res.json(200, {eventdata: data}); }); });