aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package-lock.json36
-rw-r--r--package.json1
-rw-r--r--src/helpers/userAgent-helpers.js42
-rw-r--r--src/models/UserAgent.js4
4 files changed, 57 insertions, 26 deletions
diff --git a/package-lock.json b/package-lock.json
index 8b943719f..926361a31 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -28853,6 +28853,11 @@
28853 "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 28853 "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
28854 "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" 28854 "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
28855 }, 28855 },
28856 "normalize-version": {
28857 "version": "1.0.5",
28858 "resolved": "https://registry.npmjs.org/normalize-version/-/normalize-version-1.0.5.tgz",
28859 "integrity": "sha1-pqK5AC3G+i5fFewvCywChPtJlxI="
28860 },
28856 "now-and-later": { 28861 "now-and-later": {
28857 "version": "2.0.1", 28862 "version": "2.0.1",
28858 "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", 28863 "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
@@ -33022,6 +33027,21 @@
33022 } 33027 }
33023 } 33028 }
33024 }, 33029 },
33030 "semver-closest": {
33031 "version": "0.1.2",
33032 "resolved": "https://registry.npmjs.org/semver-closest/-/semver-closest-0.1.2.tgz",
33033 "integrity": "sha512-Q6qk0bPNlK5zG62mWFC8L0Qc6OJX76XRWxiPgZyrh98IZTL3HPErgUlPfCyrAPsHVpU+YP4lf5Mz+LzpId91Og==",
33034 "requires": {
33035 "semver": "^5.4.1"
33036 },
33037 "dependencies": {
33038 "semver": {
33039 "version": "5.7.1",
33040 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
33041 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
33042 }
33043 }
33044 },
33025 "semver-compare": { 33045 "semver-compare": {
33026 "version": "1.0.0", 33046 "version": "1.0.0",
33027 "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 33047 "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
@@ -36028,6 +36048,22 @@
36028 "tmp": "0.0.x" 36048 "tmp": "0.0.x"
36029 } 36049 }
36030 }, 36050 },
36051 "useragent-generator": {
36052 "version": "github:vraravam/useragent-generator#61926ecf3d4b61b021d71953a6dbed3500f7c40a",
36053 "from": "github:vraravam/useragent-generator#upgrade-constants",
36054 "requires": {
36055 "normalize-version": "^1.0.5",
36056 "semver": "^5.4.1",
36057 "semver-closest": "^0.1.0"
36058 },
36059 "dependencies": {
36060 "semver": {
36061 "version": "5.7.1",
36062 "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
36063 "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
36064 }
36065 }
36066 },
36031 "utf8-byte-length": { 36067 "utf8-byte-length": {
36032 "version": "1.0.4", 36068 "version": "1.0.4",
36033 "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 36069 "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
diff --git a/package.json b/package.json
index bc60af039..2ceada397 100644
--- a/package.json
+++ b/package.json
@@ -130,6 +130,7 @@
130 "tar": "4.4.13", 130 "tar": "4.4.13",
131 "targz": "1.0.1", 131 "targz": "1.0.1",
132 "terser": "4.4.0", 132 "terser": "4.4.0",
133 "useragent-generator": "vraravam/useragent-generator#upgrade-constants",
133 "uuid": "3.3.3", 134 "uuid": "3.3.3",
134 "validator": "11.0.0", 135 "validator": "11.0.0",
135 "ws": "7.4.6" 136 "ws": "7.4.6"
diff --git a/src/helpers/userAgent-helpers.js b/src/helpers/userAgent-helpers.js
index fc9a6f507..4aa6f92d0 100644
--- a/src/helpers/userAgent-helpers.js
+++ b/src/helpers/userAgent-helpers.js
@@ -1,29 +1,35 @@
1import os from 'os'; 1import os from 'os';
2import macosVersion from 'macos-version'; 2import macosVersion from 'macos-version';
3import { 3import { chromeVersion, isMac, isWindows } from '../environment';
4 ferdiVersion, electronVersion, chromeVersion, isMac, isWindows, 4
5} from '../environment'; 5const uaGenerator = require('useragent-generator');
6
7function is64Bit() {
8 return os.arch().match(/64/);
9}
6 10
7function macOS() { 11function macOS() {
8 const version = macosVersion(); 12 const version = macosVersion();
9 return `Macintosh; Intel Mac OS X ${version.replace(/\./g, '_')}`; 13 let cpuName = os.cpus()[0].model.split(' ')[0];
14 if (cpuName && cpuName.match(/\(/)) {
15 cpuName = cpuName.split('(')[0];
16 }
17 return `Macintosh; ${cpuName} Mac OS X ${version.replace(/\./g, '_')}`;
10} 18}
11 19
12function windows() { 20function windows() {
13 const version = os.release(); 21 const version = os.release();
14 const [majorVersion, minorVersion] = version.split('.'); 22 const [majorVersion, minorVersion] = version.split('.');
15 return `Windows NT ${majorVersion}.${minorVersion}; Win64; x64`; 23 const archString = is64Bit() ? 'Win64' : 'Win32';
24 return `Windows NT ${majorVersion}.${minorVersion}; ${archString}; ${os.arch()}`;
16} 25}
17 26
18function linux() { 27function linux() {
19 return 'X11; Ubuntu; Linux x86_64'; 28 const archString = is64Bit() ? 'x86_64' : os.arch();
20} 29 return `X11; Ubuntu; Linux ${archString}`;
21
22export function isChromeless(url) {
23 return url.startsWith('https://accounts.google.com');
24} 30}
25 31
26export default function userAgent(removeChromeVersion = false, addFerdiVersion = false) { 32export default function userAgent() {
27 let platformString = ''; 33 let platformString = '';
28 34
29 if (isMac) { 35 if (isMac) {
@@ -34,17 +40,5 @@ export default function userAgent(removeChromeVersion = false, addFerdiVersion =
34 platformString = linux(); 40 platformString = linux();
35 } 41 }
36 42
37 let chromeVersionString = 'Chrome'; 43 return uaGenerator.chrome({ os: platformString, version: chromeVersion });
38 if (!removeChromeVersion) {
39 chromeVersionString = `Chrome/${chromeVersion}`;
40 }
41
42 let applicationString = '';
43 if (addFerdiVersion) {
44 applicationString = ` Ferdi/${ferdiVersion} Electron/${electronVersion}`;
45 }
46
47 // Chrome is pinned to WebKit 537.36, the latest version before hard forking to Blink.
48 return `Mozilla/5.0 (${platformString}) AppleWebKit/537.36 (KHTML, like Gecko) ${chromeVersionString} Safari/537.36${applicationString}`;
49 // Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 Ferdi/5.5.1-nightly.13 Electron/8.2.3
50} 44}
diff --git a/src/models/UserAgent.js b/src/models/UserAgent.js
index f1d08e306..6f91d4ed0 100644
--- a/src/models/UserAgent.js
+++ b/src/models/UserAgent.js
@@ -5,7 +5,7 @@ import {
5 observable, 5 observable,
6} from 'mobx'; 6} from 'mobx';
7 7
8import defaultUserAgent, { isChromeless } from '../helpers/userAgent-helpers'; 8import defaultUserAgent from '../helpers/userAgent-helpers';
9 9
10const debug = require('debug')('Ferdi:UserAgent'); 10const debug = require('debug')('Ferdi:UserAgent');
11 11
@@ -76,7 +76,7 @@ export default class UserAgent {
76 } 76 }
77 77
78 @action _handleNavigate(url, forwardingHack = false) { 78 @action _handleNavigate(url, forwardingHack = false) {
79 if (isChromeless(url)) { 79 if (url.startsWith('https://accounts.google.com')) {
80 if (!this.chromelessUserAgent) { 80 if (!this.chromelessUserAgent) {
81 debug('Setting user agent to chromeless for url', url); 81 debug('Setting user agent to chromeless for url', url);
82 this.chromelessUserAgent = true; 82 this.chromelessUserAgent = true;