diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index d287d2693d..128ec3668e 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -170,6 +170,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], if (err) { app.alertError(err.message); } + app.logout(); }); } }); diff --git a/public/src/sockets.js b/public/src/sockets.js index 1d606407f7..461c148be7 100644 --- a/public/src/sockets.js +++ b/public/src/sockets.js @@ -30,8 +30,6 @@ app.isConnected = false; socket.on('event:banned', onEventBanned); - socket.on('event:logout', app.logout); - socket.on('event:alert', app.alert); function onConnect() { diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js index d8dd551cf0..e8e2fe9eda 100644 --- a/src/socket.io/admin/user.js +++ b/src/socket.io/admin/user.js @@ -180,26 +180,27 @@ User.deleteUsers = function(socket, uids, callback) { } async.each(uids, function(uid, next) { - user.isAdministrator(uid, function(err, isAdmin) { - if (err || isAdmin) { - return callback(err || new Error('[[error:cant-delete-other-admins]]')); - } - - user.delete(uid, function(err) { - if (err) { - return next(err); + async.waterfall([ + function (next) { + user.isAdministrator(uid, next); + }, + function (isAdmin, next) { + if (isAdmin) { + return next(new Error('[[error:cant-delete-other-admins]]')); } + user.delete(uid, next); + }, + function (next) { events.log({ type: 'user-delete', uid: socket.uid, targetUid: uid, ip: socket.ip }); - next(); - }); - }); + } + ], next); }, callback); }; diff --git a/src/socket.io/user.js b/src/socket.io/user.js index ca7245c21c..d97bad7222 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -1,21 +1,20 @@ 'use strict'; -var async = require('async'), +var async = require('async'); - user = require('../user'), - topics = require('../topics'), - notifications = require('../notifications'), - messaging = require('../messaging'), - plugins = require('../plugins'), - utils = require('../../public/src/utils'), - websockets = require('./index'), - meta = require('../meta'), - events = require('../events'), - emailer = require('../emailer'), - db = require('../database'), +var user = require('../user'); +var topics = require('../topics'); +var notifications = require('../notifications'); +var messaging = require('../messaging'); +var plugins = require('../plugins'); +var websockets = require('./index'); +var meta = require('../meta'); +var events = require('../events'); +var emailer = require('../emailer'); +var db = require('../database'); - SocketUser = {}; +var SocketUser = {}; require('./user/profile')(SocketUser); @@ -33,20 +32,29 @@ SocketUser.deleteAccount = function(socket, data, callback) { if (!socket.uid) { return; } - user.isAdministrator(socket.uid, function(err, isAdmin) { - if (err || isAdmin) { - return callback(err || new Error('[[error:cant-delete-admin]]')); - } - socket.broadcast.emit('event:user_status_change', {uid: socket.uid, status: 'offline'}); - user.deleteAccount(socket.uid, function(err) { - if (err) { - return callback(err); + async.waterfall([ + function (next) { + user.isAdministrator(socket.uid, next); + }, + function (isAdmin, next) { + if (isAdmin) { + return next(new Error('[[error:cant-delete-admin]]')); } - websockets.in('uid_' + socket.uid).emit('event:logout'); - callback(); - }); - }); + user.deleteAccount(socket.uid, next); + }, + function (next) { + socket.broadcast.emit('event:user_status_change', {uid: socket.uid, status: 'offline'}); + + events.log({ + type: 'user-delete', + uid: socket.uid, + targetUid: socket.uid, + ip: socket.ip + }); + next(); + } + ], callback); }; SocketUser.emailExists = function(socket, data, callback) { @@ -271,7 +279,7 @@ SocketUser.invite = function(socket, email, callback) { return callback(new Error('[[error:invalid-data]]')); } - var registrationType = meta.config.registrationType + var registrationType = meta.config.registrationType; if (registrationType !== 'invite-only' && registrationType !== 'admin-invite-only') { return callback(new Error('[[error:forum-not-invite-only]]')); diff --git a/src/views/admin/advanced/events.tpl b/src/views/admin/advanced/events.tpl index eb43eaa824..f69d7928a5 100644 --- a/src/views/admin/advanced/events.tpl +++ b/src/views/admin/advanced/events.tpl @@ -17,7 +17,7 @@
{events.user.icon:text}
- {events.user.username} (uid {events.user.uid}) (IP {events.ip}) + {events.user.username} (uid {events.uid}) (IP {events.ip}) {events.timestampISO}

{events.jsonString}