diff --git a/services/web/app/src/infrastructure/UnsupportedBrowserMiddleware.js b/services/web/app/src/infrastructure/UnsupportedBrowserMiddleware.js index e07f709481..d0e1f13d61 100644 --- a/services/web/app/src/infrastructure/UnsupportedBrowserMiddleware.js +++ b/services/web/app/src/infrastructure/UnsupportedBrowserMiddleware.js @@ -6,6 +6,8 @@ function unsupportedBrowserMiddleware(req, res, next) { const userAgent = req.headers['user-agent'] + if (!userAgent) return next() + const parser = Bowser.getParser(userAgent) // Allow bots through by only ignoring bots or unrecognised UA strings diff --git a/services/web/test/acceptance/config/settings.test.coffee b/services/web/test/acceptance/config/settings.test.coffee index fd41d8f139..b7502d9899 100644 --- a/services/web/test/acceptance/config/settings.test.coffee +++ b/services/web/test/acceptance/config/settings.test.coffee @@ -189,3 +189,6 @@ module.exports = overleaf: true reconfirmNotificationDays: 14 + + unsupportedBrowsers: + ie: '<=11' diff --git a/services/web/test/acceptance/src/UnsupportedBrowserTests.js b/services/web/test/acceptance/src/UnsupportedBrowserTests.js new file mode 100644 index 0000000000..6467b66995 --- /dev/null +++ b/services/web/test/acceptance/src/UnsupportedBrowserTests.js @@ -0,0 +1,64 @@ +const { expect } = require('chai') +const User = require('./helpers/User') + +describe('UnsupportedBrowsers', function () { + beforeEach(function (done) { + this.user = new User() + this.user.login(done) + }) + + it('allows bots', function (done) { + this.user.request( + { + url: '/project', + headers: { + // Googlebot user agent + 'user-agent': + 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' + } + }, + (error, response) => { + expect(error).to.not.exist + expect(response.statusCode).to.equal(200) + done() + } + ) + }) + + it('allows supported browsers', function (done) { + this.user.request( + { + url: '/project', + headers: { + // Chrome 90 user agent + 'user-agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36' + } + }, + (error, response) => { + expect(error).to.not.exist + expect(response.statusCode).to.equal(200) + done() + } + ) + }) + + it('redirects unsupported browsers to unsupported page', function (done) { + this.user.request( + { + url: '/project', + headers: { + // IE11 user agent + 'user-agent': + 'Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko' + } + }, + (error, response) => { + expect(error).to.not.exist + expect(response.statusCode).to.equal(302) + expect(response.headers.location).to.equal('/unsupported-browser') + done() + } + ) + }) +})