Merge pull request #3820 from overleaf/as-block-ie

Add middleware to block unsupported browsers

GitOrigin-RevId: b1f1e4ae1572c3c323dc72442c8d5169b4879d5d
This commit is contained in:
Alasdair Smith
2021-04-17 02:09:52 +00:00
committed by Copybot
parent e47237f350
commit f7cf7626ec
5 changed files with 76 additions and 10 deletions
@@ -0,0 +1,23 @@
const Bowser = require('bowser')
const Settings = require('settings-sharelatex')
function unsupportedBrowserMiddleware(req, res, next) {
if (!Settings.unsupportedBrowsers) return next()
const userAgent = req.headers['user-agent']
const parser = Bowser.getParser(userAgent)
// Allow bots through by only ignoring bots or unrecognised UA strings
const isBot = parser.isPlatform('bot') || !parser.getBrowserName()
if (isBot) return next()
const isUnsupported = parser.satisfies(Settings.unsupportedBrowsers)
if (isUnsupported) {
return res.redirect('/unsupported-browser')
}
next()
}
module.exports = { unsupportedBrowserMiddleware }
+9
View File
@@ -49,6 +49,9 @@ const InstitutionsController = require('./Features/Institutions/InstitutionsCont
const UserMembershipRouter = require('./Features/UserMembership/UserMembershipRouter')
const SystemMessageController = require('./Features/SystemMessages/SystemMessageController')
const { Joi, validate } = require('./infrastructure/Validation')
const {
unsupportedBrowserMiddleware
} = require('./infrastructure/UnsupportedBrowserMiddleware')
const logger = require('logger-sharelatex')
const _ = require('underscore')
@@ -263,6 +266,7 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) {
maxRequests: 30,
timeInterval: 60
}),
unsupportedBrowserMiddleware,
ProjectController.projectListPage
)
webRouter.post(
@@ -284,6 +288,7 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) {
maxRequests: 15,
timeInterval: 60
}),
unsupportedBrowserMiddleware,
AuthenticationController.validateUserSession(),
AuthorizationMiddleware.ensureUserCanReadProject,
ProjectController.loadEditor
@@ -1138,5 +1143,9 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) {
TokenAccessController.grantTokenAccessReadOnly
)
webRouter.get('/unsupported-browser', (req, res) => {
res.render('general/unsupported-browser')
})
webRouter.get('*', ErrorController.notFound)
}
@@ -0,0 +1,16 @@
extends ../layout/layout-no-js
block vars
- metadata = { title: 'Unsupported browser', viewport: true }
block body
body.full-height
main.content.content-alt.full-height
.container.full-height
.error-container.full-height
.error-details
h1.error-status Unsupported Browser
p.error-description
| Sorry, we don't support your browser anymore. Find out more about #[a(href="https://www.overleaf.com/learn/how-to/What_browsers_do_you_support") what browsers we support].
br
| If you think you're seeing this message in error, please #[a(href="/contact") let us know].