mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
If external auth system is in use, skip sudo-mode checks
This commit is contained in:
parent
707a81cc2a
commit
60d3e4a97b
5 changed files with 55 additions and 7 deletions
|
@ -9,6 +9,9 @@ UserGetter = require '../User/UserGetter'
|
|||
module.exports = SudoModeController =
|
||||
|
||||
sudoModePrompt: (req, res, next) ->
|
||||
if req.externalAuthenticationSystemUsed()
|
||||
logger.log {userId}, "[SudoMode] using external auth, redirecting"
|
||||
return res.redirect('/project')
|
||||
userId = AuthenticationController.getLoggedInUserId(req)
|
||||
logger.log {userId}, "[SudoMode] rendering sudo mode password page"
|
||||
SudoModeHandler.isSudoModeActive userId, (err, isActive) ->
|
||||
|
|
|
@ -6,6 +6,9 @@ AuthenticationController = require '../Authentication/AuthenticationController'
|
|||
module.exports = SudoModeMiddlewear =
|
||||
|
||||
protectPage: (req, res, next) ->
|
||||
if req.externalAuthenticationSystemUsed()
|
||||
logger.log {userId}, "[SudoMode] using external auth, skipping sudo-mode check"
|
||||
return next()
|
||||
userId = AuthenticationController.getLoggedInUserId(req)
|
||||
logger.log {userId}, "[SudoMode] protecting endpoint, checking if sudo mode is active"
|
||||
SudoModeHandler.isSudoModeActive userId, (err, isActive) ->
|
||||
|
|
|
@ -84,6 +84,11 @@ module.exports = (app, webRouter, apiRouter)->
|
|||
webRouter.use addSetContentDisposition
|
||||
apiRouter.use addSetContentDisposition
|
||||
|
||||
webRouter.use (req, res, next)->
|
||||
req.externalAuthenticationSystemUsed = res.locals.externalAuthenticationSystemUsed = ->
|
||||
Settings.ldap? or Settings.saml?
|
||||
next()
|
||||
|
||||
webRouter.use (req, res, next)->
|
||||
|
||||
cdnBlocked = req.query.nocdn == 'true' or req.session.cdnBlocked
|
||||
|
@ -222,11 +227,6 @@ module.exports = (app, webRouter, apiRouter)->
|
|||
res.locals.formatPrice = SubscriptionFormatters.formatPrice
|
||||
next()
|
||||
|
||||
webRouter.use (req, res, next)->
|
||||
res.locals.externalAuthenticationSystemUsed = ->
|
||||
Settings.ldap? or Settings.saml?
|
||||
next()
|
||||
|
||||
webRouter.use (req, res, next)->
|
||||
currentUser = AuthenticationController.getSessionUser(req)
|
||||
if currentUser?
|
||||
|
|
|
@ -34,7 +34,7 @@ describe 'SudoModeController', ->
|
|||
describe 'sudoModePrompt', ->
|
||||
beforeEach ->
|
||||
@SudoModeHandler.isSudoModeActive = sinon.stub().callsArgWith(1, null, false)
|
||||
@req = {}
|
||||
@req = {externalAuthenticationSystemUsed: sinon.stub().returns(false)}
|
||||
@res = {redirect: sinon.stub(), render: sinon.stub()}
|
||||
@next = sinon.stub()
|
||||
|
||||
|
@ -70,6 +70,27 @@ describe 'SudoModeController', ->
|
|||
@next.callCount.should.equal 1
|
||||
expect(@next.lastCall.args[0]).to.be.instanceof Error
|
||||
|
||||
it 'should not render page', ->
|
||||
@SudoModeController.sudoModePrompt(@req, @res, @next)
|
||||
@res.render.callCount.should.equal 0
|
||||
|
||||
describe 'when external auth system is used', ->
|
||||
beforeEach ->
|
||||
@req.externalAuthenticationSystemUsed = sinon.stub().returns(true)
|
||||
|
||||
it 'should redirect', ->
|
||||
@SudoModeController.sudoModePrompt(@req, @res, @next)
|
||||
@res.redirect.callCount.should.equal 1
|
||||
@res.redirect.calledWith('/project').should.equal true
|
||||
|
||||
it 'should not check if sudo mode is active', ->
|
||||
@SudoModeController.sudoModePrompt(@req, @res, @next)
|
||||
@SudoModeHandler.isSudoModeActive.callCount.should.equal 0
|
||||
|
||||
it 'should not render page', ->
|
||||
@SudoModeController.sudoModePrompt(@req, @res, @next)
|
||||
@res.render.callCount.should.equal 0
|
||||
|
||||
describe 'submitPassword', ->
|
||||
beforeEach ->
|
||||
@AuthenticationController._getRedirectFromSession = sinon.stub().returns '/somewhere'
|
||||
|
|
|
@ -21,8 +21,9 @@ describe 'SudoModeMiddlewear', ->
|
|||
|
||||
describe 'protectPage', ->
|
||||
beforeEach ->
|
||||
@externalAuth = false
|
||||
@call = (cb) =>
|
||||
@req = {}
|
||||
@req = {externalAuthenticationSystemUsed: sinon.stub().returns(@externalAuth)}
|
||||
@res = {redirect: sinon.stub()}
|
||||
@next = sinon.stub()
|
||||
@SudoModeMiddlewear.protectPage @req, @res, @next
|
||||
|
@ -100,3 +101,23 @@ describe 'SudoModeMiddlewear', ->
|
|||
@next.callCount.should.equal 1
|
||||
expect(@next.lastCall.args[0]).to.be.instanceof Error
|
||||
done()
|
||||
|
||||
describe 'when external auth is being used', ->
|
||||
beforeEach ->
|
||||
@externalAuth = true
|
||||
|
||||
it 'should immediately return next with no args', (done) ->
|
||||
@call () =>
|
||||
@next.callCount.should.equal 1
|
||||
expect(@next.lastCall.args[0]).to.not.exist
|
||||
done()
|
||||
|
||||
it 'should not get the current user id', (done) ->
|
||||
@call () =>
|
||||
@AuthenticationController.getLoggedInUserId.callCount.should.equal 0
|
||||
done()
|
||||
|
||||
it 'should not check if sudo-mode is active', (done) ->
|
||||
@call () =>
|
||||
@SudoModeHandler.isSudoModeActive.callCount.should.equal 0
|
||||
done()
|
||||
|
|
Loading…
Reference in a new issue