Skip to content

Commit

Permalink
fix fetch/Request:
Browse files Browse the repository at this point in the history
- correctly handle Request(<rewritten url>, <original request>) init if needed (if url needs to be rewritten)
- store __WB_real_url on Request object to be able to tell if we have a rewritten request to avoid second rewrite

worker rewrite:
- use JSON.stringify() to avoid possible quote issues in rw prefix
  • Loading branch information
ikreymer committed Jul 4, 2024
1 parent 922b00b commit 33f0a42
Showing 1 changed file with 49 additions and 25 deletions.
74 changes: 49 additions & 25 deletions src/wombat.js
Original file line number Diff line number Diff line change
Expand Up @@ -2686,9 +2686,9 @@ Wombat.prototype.rewriteWorker = function(workerUrl) {
this.wb_abs_prefix +
'\', \'prefixMod\': \'' +
this.wb_abs_prefix +
'wkrf_/\', \'originalURL\': \'' +
originalURL +
'\'}); })();';
'wkrf_/\', \'originalURL\': ' +
JSON.stringify(originalURL) +
'}); })();';

workerCode = rw + workerCode;
}
Expand Down Expand Up @@ -4608,30 +4608,31 @@ Wombat.prototype.initHTTPOverrides = function() {
if (this.$wbwindow.fetch) {
var orig_fetch = this.$wbwindow.fetch;
this.$wbwindow.fetch = function fetch(input, init_opts) {
var rwInput = input;
var inputType = typeof input;
if (inputType === 'string') {
rwInput = wombat.rewriteUrl(input);
} else if (inputType === 'object' && input.url) {
var request;

if (input instanceof Request) {
var new_url = wombat.rewriteUrl(input.url);
if (new_url !== input.url) {
rwInput = new Request(new_url, init_opts);
if (new_url !== input.url && (!input.__WB_real_url || new_url !== input.__WB_real_url)) {
request = new Request(new_url, input);
} else {
request = input;
}
} else if (inputType === 'object' && input.href) {
// it is likely that input is either window.location or window.URL
rwInput = wombat.rewriteUrl(input.href);
}
} else {
input = wombat.rewriteUrl(input.toString());

if (!init_opts) {
init_opts = {};
}
if (init_opts.credentials === undefined) {
try {
init_opts.credentials = 'include';
} catch(e) {}
if (!init_opts) {
init_opts = {};
}
if (init_opts.credentials === undefined) {
try {
init_opts.credentials = 'include';
} catch(e) {}
}

request = new Request(input, init_opts);
}

return orig_fetch.call(wombat.proxyToObj(this), rwInput, init_opts);
return orig_fetch.call(wombat.proxyToObj(this), request);
};
}

Expand Down Expand Up @@ -4662,12 +4663,35 @@ Wombat.prototype.initHTTPOverrides = function() {
}
break;
}
newInitOpts['credentials'] = 'include';
const props = ['cache', 'headers', 'integrity',
'keepalive', 'method', 'mode', 'redirect',
'referrerPolicy', 'signal'
];

const newOpts = {};

for (const prop of props) {
newOpts[prop] = newInitOpts[prop];
}

newOpts.credentials = 'include';

if (newInitOpts.referrer) {
newInitOpts.referrer = wombat.rewriteUrl(newInitOpts.referrer);
newOpts.referrer = wombat.rewriteUrl(newInitOpts.referrer);
}

if (newInitOpts.duplex && newInitOpts.body) {
newOpts.body = newInitOpts.body;
newOpts.duplex = newInitOpts.duplex;
}

return new Request_(newInput, newInitOpts);
var request = new Request_(newInput, newOpts);
try {
request.__WB_real_url = new URL(newInput, wombat.$wbwindow.location.origin).href;
} catch (e) {

}
return request;
};
})(this.$wbwindow.Request);

Expand Down

0 comments on commit 33f0a42

Please sign in to comment.