diff --git a/bigbluebutton-html5/imports/utils/browserInfo.js b/bigbluebutton-html5/imports/utils/browserInfo.js index b6a65481cc..235e22ceab 100644 --- a/bigbluebutton-html5/imports/utils/browserInfo.js +++ b/bigbluebutton-html5/imports/utils/browserInfo.js @@ -1,4 +1,5 @@ import Bowser from 'bowser'; +import logger from '/imports/startup/client/logger'; const userAgent = window.navigator.userAgent; const BOWSER_RESULTS = Bowser.parse(userAgent); @@ -10,7 +11,29 @@ const isIe = BOWSER_RESULTS.browser.name === 'Internet Explorer'; const isFirefox = BOWSER_RESULTS.browser.name === 'Firefox'; const browserName = BOWSER_RESULTS.browser.name; -const versionNumber = BOWSER_RESULTS.browser.version; + +const getVersionNumber = () => { + if (BOWSER_RESULTS.browser.version) return BOWSER_RESULTS.browser.version; + + // There are some scenarios (e.g.; WKWebView) where Bowser can't detect the + // Safari version. In such cases, we can use the WebKit version to determine + // it. + if (isSafari && BOWSER_RESULTS.engine.version) return BOWSER_RESULTS.engine.version; + + // If the version number is not available, log an warning and return Infinity + // so that we do not deny access to the user (even if we're uncertain about + // whether it's a supported browser). + logger.warn({ + logCode: 'browserInfo_invalid_version', + extraInfo: { + userAgent, + }, + }, 'Unable to determine the browser version number'); + + return 'Infinity'; +}; + +const versionNumber = getVersionNumber(); const isValidSafariVersion = Bowser.getParser(userAgent).satisfies({ safari: '>12',