Include "Zotero/[version]" in file sync requests

To avoid blocking by some institutional firewalls

https://forums.zotero.org/discussion/93510/general-sync-error
This commit is contained in:
Dan Stillman 2021-12-27 15:54:12 -05:00
parent 3dab64ddbb
commit 819dc7f6f4
2 changed files with 17 additions and 10 deletions

View file

@ -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;

View file

@ -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);
});
});
});