Nativefier/src/infer/inferUserAgent.js

56 lines
2.1 KiB
JavaScript
Raw Normal View History

2016-03-25 12:58:03 +01:00
import axios from 'axios';
import _ from 'lodash';
const ELECTRON_VERSIONS_URL = 'https://atom.io/download/atom-shell/index.json';
const DEFAULT_CHROME_VERSION = '47.0.2526.73';
function getChromeVersionForElectronVersion(electronVersion, url = ELECTRON_VERSIONS_URL) {
2016-03-25 12:58:03 +01:00
return axios.get(url, {timeout: 5000})
2016-03-25 12:58:03 +01:00
.then(response => {
if (response.status !== 200) {
throw `Bad request: Status code ${response.status}`;
}
2016-03-25 12:58:03 +01:00
const data = response.data;
const electronVersionToChromeVersion = _.zipObject(data.map(d => d.version), data.map(d => d.chrome));
if (!(electronVersion in electronVersionToChromeVersion)) {
throw `Electron version '${ electronVersion }' not found in retrieved version list!`;
}
2016-03-25 12:58:03 +01:00
return electronVersionToChromeVersion[electronVersion];
});
}
export function getUserAgentString(chromeVersion, platform) {
let userAgent;
switch (platform) {
case 'darwin':
userAgent = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${ chromeVersion } Safari/537.36`;
break;
case 'win32':
userAgent = `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${ chromeVersion } Safari/537.36`;
break;
case 'linux':
userAgent = `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${ chromeVersion } Safari/537.36`;
break;
default:
2016-03-25 12:29:13 +01:00
throw 'Error invalid platform specified to getUserAgentString()';
}
return userAgent;
}
function inferUserAgent(electronVersion, platform, url = ELECTRON_VERSIONS_URL) {
return getChromeVersionForElectronVersion(electronVersion, url)
.then(chromeVersion => {
return getUserAgentString(chromeVersion, platform);
})
.catch(() => {
// console.warn(`Unable to infer chrome version for user agent, using ${DEFAULT_CHROME_VERSION}`);
return getUserAgentString(DEFAULT_CHROME_VERSION, platform);
});
}
export default inferUserAgent;