Files
overleaf-cep/services/web/test/unit/src/Security/SessionAutostartMiddlewareTests.js
T
Eric Mc Sween a9f75060a5 Merge pull request #3585 from overleaf/ho-session-auto-start-bot-clear
Added isReqIsBot function to SessionAutostartMiddleware middlewear

GitOrigin-RevId: 652392f77a9a0cd55a8c1c3454ccec70d67a5c6e
2021-02-04 03:05:04 +00:00

102 lines
2.7 KiB
JavaScript

const sinon = require('sinon')
const chai = require('chai')
const { expect } = chai
const modulePath =
'../../../../app/src/infrastructure/SessionAutostartMiddleware.js'
const SandboxedModule = require('sandboxed-module')
describe('SessionAutostartMiddleware', function() {
let SessionAutostartMiddleware, middleware, Settings
const cookieName = 'coookieee'
const excludedRoute = '/wombat/potato'
const excludedMethod = 'POST'
const excludedCallback = () => 'call me'
beforeEach(function() {
Settings = {
cookieName: cookieName
}
SessionAutostartMiddleware = SandboxedModule.require(modulePath, {
globals: {
console: console
},
requires: {
'settings-sharelatex': Settings
}
})
middleware = new SessionAutostartMiddleware()
middleware.disableSessionAutostartForRoute(
excludedRoute,
excludedMethod,
excludedCallback
)
})
describe('middleware', function() {
let req, next
beforeEach(function() {
req = {
path: excludedRoute,
method: excludedMethod,
signedCookies: {},
headers: {}
}
next = sinon.stub()
})
it('executes the callback for the excluded route', function() {
middleware.middleware(req, {}, next)
expect(req.session.noSessionCallback).to.equal(excludedCallback)
})
it('does not execute the callback if the method is not excluded', function() {
req.method = 'GET'
middleware.middleware(req, {}, next)
expect(req.session).not.to.exist
})
it('does not execute the callback if the path is not excluded', function() {
req.path = '/giraffe'
middleware.middleware(req, {}, next)
expect(req.session).not.to.exist
})
it('does not execute the callback if there is a cookie', function() {
req.signedCookies[cookieName] = 'a very useful session cookie'
middleware.middleware(req, {}, next)
expect(req.session).not.to.exist
})
})
describe('bot middlewear', function() {
let req, next
beforeEach(function() {
req = {
signedCookies: {},
headers: {}
}
next = sinon.stub()
})
it('GoogleHC user agent should have an empty session', function() {
req.headers['user-agent'] = 'GoogleHC'
middleware.middleware(req, {}, next)
expect(req.session.noSessionCallback).to.deep.exist
})
it('should not add empty session with a firefox useragent', function() {
req.headers['user-agent'] = 'firefox'
middleware.middleware(req, {}, next)
expect(req.session).not.to.exist
})
it('should not add empty session with a empty useragent', function() {
middleware.middleware(req, {}, next)
expect(req.session).not.to.exist
})
})
})