From 819dc7f6f4b940ec4c10244a611b38f0763a6fbd Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Mon, 27 Dec 2021 15:54:12 -0500 Subject: [PATCH] Include "Zotero/[version]" in file sync requests To avoid blocking by some institutional firewalls https://forums.zotero.org/discussion/93510/general-sync-error --- chrome/content/zotero/xpcom/zotero.js | 21 ++++++++++++++------- test/tests/zoteroTest.js | 6 +++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index 9e4c12a662..41dcb5c621 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -1937,7 +1937,7 @@ Zotero.Keys = new function() { /** - * Add X-Zotero-Version header to HTTP requests to zotero.org + * Identify client when connecting to first-party domains * * @namespace */ @@ -1955,13 +1955,21 @@ Zotero.VersionHeader = { try { let channel = subject.QueryInterface(Components.interfaces.nsIHttpChannel); let domain = channel.URI.host; - if (domain.endsWith(ZOTERO_CONFIG.DOMAIN_NAME)) { + // Add X-Zotero-Version header to HTTP requests to zotero.org + let isPrimaryDomain = domain == ZOTERO_CONFIG.DOMAIN_NAME + || domain.endsWith('.' + ZOTERO_CONFIG.DOMAIN_NAME); + if (isPrimaryDomain) { channel.setRequestHeader("X-Zotero-Version", Zotero.version, false); } else { - let ua = channel.getRequestHeader('User-Agent'); - ua = this.update(domain, ua); - channel.setRequestHeader('User-Agent', ua, false); + // Use "Firefox/[version]" in user agent if not a file sync request + let s3DomainRE = /zoterofilestorage(test)?\.s3\.(us-east-1\.)?amazonaws\.com/; + let isAppNameDomain = s3DomainRE.test(domain); + if (!isAppNameDomain) { + let ua = channel.getRequestHeader('User-Agent'); + ua = this.update(ua); + channel.setRequestHeader('User-Agent', ua, false); + } } } catch (e) { @@ -1972,12 +1980,11 @@ Zotero.VersionHeader = { /** * Replace Zotero/[version] with Firefox/[version] in the default user agent * - * @param {String} domain * @param {String} ua - User Agent * @param {String} [testAppName] - App name to look for (necessary in tests, which are * currently run in Firefox) */ - update: function (domain, ua, testAppName) { + update: function (ua, testAppName) { var info = Services.appinfo; var appName = testAppName || info.name; diff --git a/test/tests/zoteroTest.js b/test/tests/zoteroTest.js index 971e91e4f3..831b16577f 100644 --- a/test/tests/zoteroTest.js +++ b/test/tests/zoteroTest.js @@ -13,17 +13,17 @@ describe("Zotero", function() { var platformVersion = Services.appinfo.platformVersion.match(/^\d+/)[0] + '.0'; var ua1 = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 ${Zotero.clientName}/${Zotero.version}`; var ua2 = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/${platformVersion}`; - assert.equal(Zotero.VersionHeader.update('example.com', ua1, ZOTERO_CONFIG.CLIENT_NAME), ua2); + assert.equal(Zotero.VersionHeader.update(ua1, ZOTERO_CONFIG.CLIENT_NAME), ua2); }); it("should show Chrome user agent unchanged", function () { var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'; - assert.equal(Zotero.VersionHeader.update('example.com', ua, ZOTERO_CONFIG.CLIENT_NAME), ua); + assert.equal(Zotero.VersionHeader.update(ua, ZOTERO_CONFIG.CLIENT_NAME), ua); }); it("should show Firefox user agent unchanged", function () { var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0'; - assert.equal(Zotero.VersionHeader.update('example.com', ua, ZOTERO_CONFIG.CLIENT_NAME), ua); + assert.equal(Zotero.VersionHeader.update(ua, ZOTERO_CONFIG.CLIENT_NAME), ua); }); }); });