Skip to content

Commit a0fb387

Browse files
Merge pull request #19 from psie/master
Re-expose Set-Cookie in fetch(), fix multiple Set-Cookie headers
2 parents fb227b3 + a33021b commit a0fb387

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

extension/src/bg/background.js

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,14 @@ async function perform_http_request(params) {
224224
var response_headers = {};
225225

226226
for (var pair of response.headers.entries()) {
227-
response_headers[pair[0]] = pair[1];
227+
// Fix Set-Cookie from onHeadersReceived (fetch() doesn't expose it)
228+
if (pair[0] === 'x-set-cookie') {
229+
// Original Set-Cookie may merge multiple headers, we have it packed
230+
response_headers['Set-Cookie'] = JSON.parse(pair[1]);
231+
}
232+
else {
233+
response_headers[pair[0]] = pair[1];
234+
}
228235
}
229236

230237
const redirect_hack_url_prefix = `${location.origin.toString()}/redirect-hack.html?id=`;
@@ -244,7 +251,15 @@ async function perform_http_request(params) {
244251
// Format headers
245252
var redirect_hack_headers = {};
246253
response_metadata.headers.map(header_data => {
247-
redirect_hack_headers[header_data.name] = header_data.value;
254+
// Original Set-Cookie may merge multiple headers, skip it
255+
if (header_data.name.toLowerCase() !== 'set-cookie') {
256+
if (header_data.name === 'X-Set-Cookie') {
257+
redirect_hack_headers['Set-Cookie'] = JSON.parse(header_data.value);
258+
}
259+
else {
260+
redirect_hack_headers[header_data.name] = header_data.value;
261+
}
262+
}
248263
});
249264

250265
const redirect_hack_data = {
@@ -427,8 +442,26 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
427442
return
428443
}
429444

445+
// Rewrite Set-Cookie to expose it in fetch()
446+
cookies = []
447+
details.responseHeaders.map(responseHeader => {
448+
if(responseHeader.name.toLowerCase() === 'set-cookie') {
449+
cookies.push(responseHeader.value);
450+
}
451+
});
452+
if (cookies.length != 0) {
453+
details.responseHeaders.push({
454+
'name': 'X-Set-Cookie',
455+
// We pack array of cookies into string and depack later.
456+
// Otherwise multiple Set-Cookie headers would be merged together.
457+
'value': JSON.stringify(cookies)
458+
});
459+
}
460+
430461
if(!REDIRECT_STATUS_CODES.includes(details.statusCode)) {
431-
return
462+
return {
463+
responseHeaders: details.responseHeaders
464+
}
432465
}
433466

434467
const redirect_hack_id = uuidv4();
@@ -444,4 +477,4 @@ chrome.webRequest.onHeadersReceived.addListener(function(details) {
444477
};
445478
}, {
446479
urls: ["<all_urls>"]
447-
}, ["blocking", "responseHeaders", "extraHeaders"]);
480+
}, ["blocking", "responseHeaders", "extraHeaders"]);

0 commit comments

Comments
 (0)