import type { IncomingMessage, ServerResponse } from 'node:http'; import type { IIncomingMessage } from '@rocket.chat/core-typings'; import type { NextFunction } from 'connect'; import { Cookies } from 'meteor/ostrio:cookies'; import parser from 'ua-parser-js'; import { getURL } from '../../../lib/utils/getURL'; const cookies = new Cookies(); export const isIEOlderThan11 = (userAgent: ReturnType) => { if (!userAgent?.browser.name || !userAgent?.browser.version) { return false; } return userAgent.browser.name === 'IE' && parseInt(userAgent.browser.version) < 11; }; export const handleBrowserVersionCheck = (request: IncomingMessage, res: ServerResponse, next: NextFunction) => { const req = request as IIncomingMessage; const browserVersionCheck = cookies.get('browser_version_check', req.headers.cookie); if (browserVersionCheck === 'bypass') { next(); return; } const userAgent = parser(req.headers['user-agent']); if (browserVersionCheck !== 'force' && !isIEOlderThan11(userAgent)) { next(); return; } res.setHeader('content-type', 'text/html; charset=utf-8'); res.write(`
Browser not supported
Check the documentation Proceed anyway
`); res.end(); };