diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index 9956c659c6..f7682aae1c 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -169,10 +169,9 @@ define('forum/account/edit', ['forum/account/header', 'translator', 'components' confirmBtn.html(''); confirmBtn.prop('disabled', true); - socket.emit('user.checkPassword', { - uid: parseInt(ajaxify.data.uid, 10), + socket.emit('user.deleteAccount', { password: $('#confirm-password').val(), - }, function (err, ok) { + }, function (err) { function restoreButton() { translator.translate('[[modules:bootbox.confirm]]', function (confirmText) { confirmBtn.text(confirmText); @@ -183,19 +182,10 @@ define('forum/account/edit', ['forum/account/header', 'translator', 'components' if (err) { restoreButton(); return app.alertError(err.message); - } else if (!ok) { - restoreButton(); - return app.alertError('[[error:invalid-password]]'); } confirmBtn.html(''); - socket.emit('user.deleteAccount', {}, function (err) { - if (err) { - return app.alertError(err.message); - } - - window.location.href = config.relative_path + '/'; - }); + window.location.href = config.relative_path + '/'; }); return false; diff --git a/src/meta/themes.js b/src/meta/themes.js index 0f22993c3f..d011bed707 100644 --- a/src/meta/themes.js +++ b/src/meta/themes.js @@ -104,9 +104,9 @@ Themes.get = function (callback) { // Minor adjustments for API output configObj.type = 'local'; if (configObj.screenshot) { - configObj.screenshot_url = 'css/previews/' + encodeURIComponent(configObj.id); + configObj.screenshot_url = nconf.get('relative_path') + '/css/previews/' + encodeURIComponent(configObj.id); } else { - configObj.screenshot_url = 'assets/images/themes/default.png'; + configObj.screenshot_url = nconf.get('relative_path') + '/assets/images/themes/default.png'; } next(null, configObj); } catch (err) { diff --git a/src/socket.io/user.js b/src/socket.io/user.js index 2534b156b0..5401ccca44 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -36,6 +36,11 @@ SocketUser.deleteAccount = function (socket, data, callback) { } async.waterfall([ + function (next) { + user.isPasswordCorrect(socket.uid, data.password, function (err, ok) { + next(err || !ok ? new Error('[[error:invalid-password]]') : undefined); + }); + }, function (next) { user.isAdministrator(socket.uid, next); }, @@ -56,7 +61,15 @@ SocketUser.deleteAccount = function (socket, data, callback) { }); next(); }, - ], callback); + ], function (err) { + if (err) { + return setTimeout(function () { + callback(err); + }, 2500); + } + + callback(); + }); }; SocketUser.emailExists = function (socket, data, callback) { diff --git a/src/socket.io/user/profile.js b/src/socket.io/user/profile.js index fa76573a54..821dc77dd6 100644 --- a/src/socket.io/user/profile.js +++ b/src/socket.io/user/profile.js @@ -109,13 +109,6 @@ module.exports = function (SocketUser) { ], callback); } - SocketUser.checkPassword = function (socket, data, callback) { - isPrivilegedOrSelfAndPasswordMatch(socket.uid, data, function (err) { - // Return a bool (without delayed response to prevent brute-force checking of password validity) - setTimeout(callback.bind(null, null, !err), 1000); - }); - }; - SocketUser.changePassword = function (socket, data, callback) { if (!socket.uid) { return callback(new Error('[[error:invalid-uid]]')); diff --git a/src/views/admin/partials/theme_list.tpl b/src/views/admin/partials/theme_list.tpl index aede3d71d0..26a226b803 100644 --- a/src/views/admin/partials/theme_list.tpl +++ b/src/views/admin/partials/theme_list.tpl @@ -1,7 +1,7 @@