diff --git a/src/eventlog.js b/src/eventlog.js index abd5e686f..74d37ab83 100644 --- a/src/eventlog.js +++ b/src/eventlog.js @@ -56,6 +56,7 @@ var assert = require('assert'), DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:eventlog'), eventlogdb = require('./eventlogdb.js'), + notifications = require('./notifications.js'), util = require('util'), uuid = require('uuid'); @@ -96,6 +97,17 @@ function add(action, source, data, callback) { eventlogdb.add(id, action, source, data, function (error) { if (error) return callback(new EventLogError(EventLogError.INTERNAL_ERROR, error)); + // decide if we want to add notifications as well + if (action === exports.ACTION_USER_ADD) { + notifications.userAdded(data.user); + } if (action === exports.ACTION_USER_REMOVE) { + notifications.userRemoved(data.user); + } if (action === exports.ACTION_USER_UPDATE && data.adminStatusChanged) { + notifications.adminChanged(data.user); + } else { + // no notification + } + callback(null, { id: id }); }); } diff --git a/src/notifications.js b/src/notifications.js index 4ae9cc0ae..a1527c353 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -128,11 +128,8 @@ function actionForAllAdmins(iterator, callback) { }); } -function userAdded(user, callback) { +function userAdded(user) { assert.strictEqual(typeof user, 'object'); - assert(typeof callback === 'undefined' || typeof callback === 'function'); - - callback = callback || NOOP_CALLBACK; actionForAllAdmins(function (admin, callback) { // skip for the same user @@ -140,14 +137,13 @@ function userAdded(user, callback) { mailer.userAdded(admin.email, user); add(admin.id, 'User added', `User ${user.fallbackEmail} was added`, '/#/users', callback); - }, callback); + }, function (error) { + if (error) console.error(error); + }); } -function userRemoved(user, callback) { +function userRemoved(user) { assert.strictEqual(typeof user, 'object'); - assert(typeof callback === 'undefined' || typeof callback === 'function'); - - callback = callback || NOOP_CALLBACK; actionForAllAdmins(function (admin, callback) { // skip for the same user @@ -155,23 +151,23 @@ function userRemoved(user, callback) { mailer.userRemoved(admin.email, user); add(admin.id, 'User removed', `User ${user.username || user.email || user.fallbackEmail} was removed`, '/#/users', callback); - }, callback); + }, function (error) { + if (error) console.error(error); + }); } -function adminChanged(user, isAdmin, callback) { +function adminChanged(user) { assert.strictEqual(typeof user, 'object'); - assert.strictEqual(typeof isAdmin, 'boolean'); - assert(typeof callback === 'undefined' || typeof callback === 'function'); - - callback = callback || NOOP_CALLBACK; actionForAllAdmins(function (admin, callback) { // skip for the same user if (admin.email === user.email || admin.email === user.fallbackEmail) return callback(); - mailer.adminChanged(admin.email, user, isAdmin); - add(admin.id, 'Admin status change', `User ${user.username || user.email || user.fallbackEmail} ${isAdmin ? 'is now an admin' : 'is no more an admin'}`, '/#/users', callback); - }, callback); + mailer.adminChanged(admin.email, user, user.admin); + add(admin.id, 'Admin status change', `User ${user.username || user.email || user.fallbackEmail} ${user.admin ? 'is now an admin' : 'is no more an admin'}`, '/#/users', callback); + }, function (error) { + if (error) console.error(error); + }); } function oomEvent(program, context, callback) { diff --git a/src/users.js b/src/users.js index 3167a8c35..6789f72fb 100644 --- a/src/users.js +++ b/src/users.js @@ -204,11 +204,9 @@ function create(username, password, email, displayName, options, auditSource, ca if (error && error.reason === DatabaseError.ALREADY_EXISTS) return callback(new UsersError(UsersError.ALREADY_EXISTS, error.message)); if (error) return callback(new UsersError(UsersError.INTERNAL_ERROR, error)); - callback(null, user); - eventlog.add(eventlog.ACTION_USER_ADD, auditSource, { userId: user.id, email: user.email, user: removePrivateFields(user), invitor: invitor }); - if (!isOwner) notifications.userAdded(user); + callback(null, user); }); }); }); @@ -296,11 +294,7 @@ function removeUser(userId, auditSource, callback) { if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new UsersError(UsersError.NOT_FOUND)); if (error) return callback(new UsersError(UsersError.INTERNAL_ERROR, error)); - eventlog.add(eventlog.ACTION_USER_REMOVE, auditSource, { userId: userId, user: removePrivateFields(user) }); - - callback(); - - notifications.userRemoved(user); + eventlog.add(eventlog.ACTION_USER_REMOVE, auditSource, { userId: userId, user: removePrivateFields(user) }, callback); }); }); } @@ -428,9 +422,11 @@ function updateUser(userId, data, auditSource, callback) { get(userId, function (error, result) { if (error) return callback(new UsersError(UsersError.INTERNAL_ERROR, error)); - eventlog.add(eventlog.ACTION_USER_UPDATE, auditSource, { userId: userId, user: removePrivateFields(result) }); - - if ((result.admin && !oldUser.admin) || (!result.admin && oldUser.admin)) notifications.adminChanged(result, result.admin); + eventlog.add(eventlog.ACTION_USER_UPDATE, auditSource, { + userId: userId, + user: removePrivateFields(result), + adminStatusChanged: ((result.admin && !oldUser.admin) || (!result.admin && oldUser.admin)) + }); }); }); });