From a03ac8fe727770bda24c51c819d40b15a21f34d2 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Mon, 28 Nov 2016 12:37:53 +0000 Subject: [PATCH] More robust session destruction after deleting user account. --- .../app/coffee/Features/User/UserController.coffee | 10 ++++++++-- .../coffee/User/UserControllerTests.coffee | 13 +++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/services/web/app/coffee/Features/User/UserController.coffee b/services/web/app/coffee/Features/User/UserController.coffee index 27e37b91be..639e565d27 100644 --- a/services/web/app/coffee/Features/User/UserController.coffee +++ b/services/web/app/coffee/Features/User/UserController.coffee @@ -33,8 +33,14 @@ module.exports = UserController = if err? logger.err {user_id}, "error while deleting user account" return next(err) - req.session?.destroy() - res.sendStatus(200) + sessionId = req.sessionID + req.logout?() + req.session.destroy (err) -> + if err? + logger.err err: err, 'error destorying session' + return next(err) + UserSessionsManager.untrackSession(user, sessionId) + res.sendStatus(200) unsubscribe: (req, res)-> user_id = AuthenticationController.getLoggedInUserId(req) diff --git a/services/web/test/UnitTests/coffee/User/UserControllerTests.coffee b/services/web/test/UnitTests/coffee/User/UserControllerTests.coffee index 96ba614d22..f2f886a4a6 100644 --- a/services/web/test/UnitTests/coffee/User/UserControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/User/UserControllerTests.coffee @@ -89,6 +89,8 @@ describe "UserController", -> beforeEach -> @req.body.password = 'wat' + @req.logout = sinon.stub() + @req.session.destroy = sinon.stub().callsArgWith(0, null) @AuthenticationController.getLoggedInUserId = sinon.stub().returns(@user._id) @AuthenticationManager.authenticate = sinon.stub().callsArgWith(2, null, @user) @UserDeleter.deleteUser = sinon.stub().callsArgWith(1, null) @@ -159,6 +161,17 @@ describe "UserController", -> done() @UserController.tryDeleteUser @req, @res, @next + describe 'when session.destroy produces an error', -> + + beforeEach -> + @req.session.destroy = sinon.stub().callsArgWith(0, new Error('woops')) + + it 'should call next with an error', (done) -> + @next = (err) => + expect(err).to.not.equal null + expect(err).to.be.instanceof Error + done() + @UserController.tryDeleteUser @req, @res, @next describe "unsubscribe", ->