mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-12 05:36:40 +00:00
On logout, clear sudo mode
This commit is contained in:
parent
0f75d9f4d9
commit
c864288c4e
4 changed files with 100 additions and 0 deletions
|
@ -18,6 +18,12 @@ module.exports = SudoModeHandler =
|
|||
logger.log {userId, duration}, "[SudoMode] activating sudo mode for user"
|
||||
rclient.set SudoModeHandler._buildKey(userId), '1', 'EX', duration, callback
|
||||
|
||||
clearSudoMode: (userId, callback=(err)->) ->
|
||||
if !userId?
|
||||
return callback(new Error('[SudoMode] user must be supplied'))
|
||||
logger.log {userId}, "[SudoMode] clearing sudo mode for user"
|
||||
rclient.del SudoModeHandler._buildKey(userId), callback
|
||||
|
||||
isSudoModeActive: (userId, callback=(err, isActive)->) ->
|
||||
if !userId?
|
||||
return callback(new Error('[SudoMode] user must be supplied'))
|
||||
|
|
|
@ -11,6 +11,7 @@ AuthenticationManager = require("../Authentication/AuthenticationManager")
|
|||
AuthenticationController = require('../Authentication/AuthenticationController')
|
||||
UserSessionsManager = require("./UserSessionsManager")
|
||||
UserUpdater = require("./UserUpdater")
|
||||
SudoModeHandler = require('../SudoMode/SudoModeHandler')
|
||||
settings = require "settings-sharelatex"
|
||||
|
||||
module.exports = UserController =
|
||||
|
@ -118,6 +119,7 @@ module.exports = UserController =
|
|||
if err
|
||||
logger.err err: err, 'error destorying session'
|
||||
UserSessionsManager.untrackSession(user, sessionId)
|
||||
SudoModeHandler.clearSudoMode(user._id)
|
||||
res.redirect '/login'
|
||||
|
||||
register : (req, res, next = (error) ->)->
|
||||
|
|
|
@ -30,6 +30,7 @@ describe 'SudoModeHandler', ->
|
|||
beforeEach ->
|
||||
@rclient.set = sinon.stub().callsArgWith(4, null)
|
||||
|
||||
|
||||
it 'should not produce an error', (done) ->
|
||||
@call (err) =>
|
||||
expect(err).to.equal null
|
||||
|
@ -43,6 +44,22 @@ describe 'SudoModeHandler', ->
|
|||
)).to.equal true
|
||||
done()
|
||||
|
||||
describe 'when user id is not supplied', ->
|
||||
beforeEach ->
|
||||
@call = (cb) =>
|
||||
@SudoModeHandler.activateSudoMode null, cb
|
||||
|
||||
it 'should produce an error', (done) ->
|
||||
@call (err) =>
|
||||
expect(err).to.not.equal null
|
||||
expect(err).to.be.instanceof Error
|
||||
done()
|
||||
|
||||
it 'should not set value in redis', (done) ->
|
||||
@call (err) =>
|
||||
expect(@rclient.set.callCount).to.equal 0
|
||||
done()
|
||||
|
||||
describe 'when rclient.set produces an error', ->
|
||||
beforeEach ->
|
||||
@rclient.set = sinon.stub().callsArgWith(4, new Error('woops'))
|
||||
|
@ -53,6 +70,51 @@ describe 'SudoModeHandler', ->
|
|||
expect(err).to.be.instanceof Error
|
||||
done()
|
||||
|
||||
describe 'clearSudoMode', ->
|
||||
beforeEach ->
|
||||
@rclient.del = sinon.stub().callsArgWith(1, null)
|
||||
@call = (cb) =>
|
||||
@SudoModeHandler.clearSudoMode @userId, cb
|
||||
|
||||
it 'should not produce an error', (done) ->
|
||||
@call (err) =>
|
||||
expect(err).to.equal null
|
||||
done()
|
||||
|
||||
it 'should delete key from redis', (done) ->
|
||||
@call (err) =>
|
||||
expect(@rclient.del.callCount).to.equal 1
|
||||
expect(@rclient.del.calledWith(
|
||||
'SudoMode:{some_user_id}'
|
||||
)).to.equal true
|
||||
done()
|
||||
|
||||
describe 'when rclient.del produces an error', ->
|
||||
beforeEach ->
|
||||
@rclient.del = sinon.stub().callsArgWith(1, new Error('woops'))
|
||||
|
||||
it 'should produce an error', (done) ->
|
||||
@call (err) =>
|
||||
expect(err).to.not.equal null
|
||||
expect(err).to.be.instanceof Error
|
||||
done()
|
||||
|
||||
describe 'when user id is not supplied', ->
|
||||
beforeEach ->
|
||||
@call = (cb) =>
|
||||
@SudoModeHandler.clearSudoMode null, cb
|
||||
|
||||
it 'should produce an error', (done) ->
|
||||
@call (err) =>
|
||||
expect(err).to.not.equal null
|
||||
expect(err).to.be.instanceof Error
|
||||
done()
|
||||
|
||||
it 'should not delete value in redis', (done) ->
|
||||
@call (err) =>
|
||||
expect(@rclient.del.callCount).to.equal 0
|
||||
done()
|
||||
|
||||
describe 'isSudoModeActive', ->
|
||||
beforeEach ->
|
||||
@call = (cb) =>
|
||||
|
@ -108,3 +170,19 @@ describe 'SudoModeHandler', ->
|
|||
expect(err).to.be.instanceof Error
|
||||
expect(isActive).to.be.oneOf [null, undefined]
|
||||
done()
|
||||
|
||||
describe 'when user id is not supplied', ->
|
||||
beforeEach ->
|
||||
@call = (cb) =>
|
||||
@SudoModeHandler.isSudoModeActive null, cb
|
||||
|
||||
it 'should produce an error', (done) ->
|
||||
@call (err) =>
|
||||
expect(err).to.not.equal null
|
||||
expect(err).to.be.instanceof Error
|
||||
done()
|
||||
|
||||
it 'should not get value in redis', (done) ->
|
||||
@call (err) =>
|
||||
expect(@rclient.get.callCount).to.equal 0
|
||||
done()
|
||||
|
|
|
@ -60,6 +60,8 @@ describe "UserController", ->
|
|||
trackSession: sinon.stub()
|
||||
untrackSession: sinon.stub()
|
||||
revokeAllUserSessions: sinon.stub().callsArgWith(2, null)
|
||||
@SudoModeHandler =
|
||||
clearSudoMode: sinon.stub()
|
||||
@UserController = SandboxedModule.require modulePath, requires:
|
||||
"./UserLocator": @UserLocator
|
||||
"./UserDeleter": @UserDeleter
|
||||
|
@ -73,6 +75,7 @@ describe "UserController", ->
|
|||
"../Subscription/SubscriptionDomainHandler":@SubscriptionDomainHandler
|
||||
"./UserHandler":@UserHandler
|
||||
"./UserSessionsManager": @UserSessionsManager
|
||||
"../SudoMode/SudoModeHandler": @SudoModeHandler
|
||||
"settings-sharelatex": @settings
|
||||
"logger-sharelatex":
|
||||
log:->
|
||||
|
@ -302,6 +305,17 @@ describe "UserController", ->
|
|||
|
||||
@UserController.logout @req, @res
|
||||
|
||||
it 'should clear sudo-mode', (done) ->
|
||||
@req.session.destroy = sinon.stub().callsArgWith(0)
|
||||
@SudoModeHandler.clearSudoMode = sinon.stub()
|
||||
@res.redirect = (url)=>
|
||||
url.should.equal "/login"
|
||||
@SudoModeHandler.clearSudoMode.callCount.should.equal 1
|
||||
@SudoModeHandler.clearSudoMode.calledWith(@user._id).should.equal true
|
||||
done()
|
||||
|
||||
@UserController.logout @req, @res
|
||||
|
||||
|
||||
describe "register", ->
|
||||
beforeEach ->
|
||||
|
|
Loading…
Add table
Reference in a new issue