Deproxify homepage URLs without trailing slash. Closes #2884

This commit is contained in:
Adomas Venčkauskas 2022-11-15 13:22:33 +02:00
parent 039142e50d
commit ed46d8c53c

View file

@ -138,6 +138,8 @@ Zotero.Proxies = new function() {
* @type String * @type String
*/ */
this.proxyToProper = function(url, onlyReturnIfProxied) { this.proxyToProper = function(url, onlyReturnIfProxied) {
// make sure url has a trailing slash
url = new URL(url).href;
for (let proxy of Zotero.Proxies.proxies) { for (let proxy of Zotero.Proxies.proxies) {
if(proxy.regexp) { if(proxy.regexp) {
var m = proxy.regexp.exec(url); var m = proxy.regexp.exec(url);
@ -173,16 +175,18 @@ Zotero.Proxies = new function() {
* Check the url for potential proxies and deproxify, providing a scheme to build * Check the url for potential proxies and deproxify, providing a scheme to build
* a proxy object. * a proxy object.
* *
* @param URL * @param url
* @returns {Object} Unproxied url to proxy object * @returns {Object} Unproxied url to proxy object
*/ */
this.getPotentialProxies = function(URL) { this.getPotentialProxies = function(url) {
// make sure url has a trailing slash
url = new URL(url).href;
var urlToProxy = {}; var urlToProxy = {};
// If it's a known proxied URL just return it // If it's a known proxied URL just return it
if (Zotero.Proxies.transparent) { if (Zotero.Proxies.transparent) {
for (var proxy of Zotero.Proxies.proxies) { for (var proxy of Zotero.Proxies.proxies) {
if (proxy.regexp) { if (proxy.regexp) {
var m = proxy.regexp.exec(URL); var m = proxy.regexp.exec(url);
if (m) { if (m) {
let proper = proxy.toProper(m); let proper = proxy.toProper(m);
urlToProxy[proper] = proxy.toJSON(); urlToProxy[proper] = proxy.toJSON();
@ -191,12 +195,12 @@ Zotero.Proxies = new function() {
} }
} }
} }
urlToProxy[URL] = null; urlToProxy[url] = null;
// if there is a subdomain that is also a TLD, also test against URI with the domain // if there is a subdomain that is also a TLD, also test against URI with the domain
// dropped after the TLD // dropped after the TLD
// (i.e., www.nature.com.mutex.gmu.edu => www.nature.com) // (i.e., www.nature.com.mutex.gmu.edu => www.nature.com)
var m = /^(https?:\/\/)([^\/]+)/i.exec(URL); var m = /^(https?:\/\/)([^\/]+)/i.exec(url);
if (m) { if (m) {
// First, drop the 0- if it exists (this is an III invention) // First, drop the 0- if it exists (this is an III invention)
var host = m[2]; var host = m[2];
@ -217,7 +221,7 @@ Zotero.Proxies = new function() {
if (TLDS[parts[j].toLowerCase()]) { if (TLDS[parts[j].toLowerCase()]) {
var properHost = parts.slice(0, j+1).join("."); var properHost = parts.slice(0, j+1).join(".");
// protocol + properHost + /path // protocol + properHost + /path
var properURL = m[1]+properHost+URL.substr(m[0].length); var properURL = m[1]+properHost+url.substr(m[0].length);
var proxyHost = parts.slice(j+1).join('.'); var proxyHost = parts.slice(j+1).join('.');
urlToProxy[properURL] = {scheme: m[1] + '%h.' + proxyHost + '/%p'}; urlToProxy[properURL] = {scheme: m[1] + '%h.' + proxyHost + '/%p'};
} }
@ -451,6 +455,8 @@ Zotero.Proxy.prototype.erase = Zotero.Promise.coroutine(function* () {
*/ */
Zotero.Proxy.prototype.toProper = function(m) { Zotero.Proxy.prototype.toProper = function(m) {
if (!Array.isArray(m)) { if (!Array.isArray(m)) {
// make sure url has a trailing slash
m = new URL(m).href;
let match = this.regexp.exec(m); let match = this.regexp.exec(m);
if (!match) { if (!match) {
return m return m