diff --git a/background.js b/background.js index 271a1f4..73203cc 100644 --- a/background.js +++ b/background.js @@ -116,6 +116,12 @@ function storeInBrowserStorage(item, callback_function) { chrome.storage.local.set(item, callback_function); } +function hasCookieKey(cookie, key) { + let cookieArray = cookie.value.split(';').filter((e) => e.trim().length > 0); + let cookieKeyIndex = cookieArray.findIndex((kv) => kv.trim().startsWith(key + '=')); + return cookieKeyIndex !== -1; +} + /* * This function set a key-value pair in HTTP header "Cookie", * and returns the value of HTTP header after modification. @@ -230,7 +236,7 @@ function rewriteRequestHeader(e) { 'Delete request header : name=' + to_modify.header_name.toLowerCase() + ' for url ' + e.url ); } - } else if (to_modify.action === 'cookie_add_or_modify') { + } else if (to_modify.action === 'cookie_add') { let header_cookie = e.requestHeaders.find((header) => header.name.toLowerCase() === 'cookie'); let new_cookie = cookie_keyvalues_set( header_cookie === undefined ? '' : header_cookie.value, @@ -241,16 +247,33 @@ function rewriteRequestHeader(e) { e.requestHeaders.push({name: 'Cookie', value: new_cookie}); if (config.debug_mode) log( - 'cookie_add_or_modify.req new_header : name=Cookie,value=' + + 'cookie_add.req new_header : name=Cookie,value=' + new_cookie + ' for url ' + e.url ); - } else { + } else if ( ! hasCookieKey(header_cookie, to_modify.header_name)) { + header_cookie.value = new_cookie; + if (config.debug_mode) + log( + 'cookie_modify.req modify_header : name=Cookie,value=' + + new_cookie + + ' for url ' + + e.url + ); + } + } else if (to_modify.action === 'cookie_modify') { + let header_cookie = e.requestHeaders.find((header) => header.name.toLowerCase() === 'cookie'); + let new_cookie = cookie_keyvalues_set( + header_cookie === undefined ? '' : header_cookie.value, + to_modify.header_name, + to_modify.header_value + ); + if (header_cookie != undefined) { header_cookie.value = new_cookie; if (config.debug_mode) log( - 'cookie_add_or_modify.req modify_header : name=Cookie,value=' + + 'cookie_modify.req modify_header : name=Cookie,value=' + new_cookie + ' for url ' + e.url @@ -346,7 +369,7 @@ function rewriteResponseHeader(e) { e.url ); } - } else if (to_modify.action === 'cookie_add_or_modify') { + } else if (to_modify.action === 'cookie_add') { let header_cookie = e.responseHeaders.find( (header) => header.name.toLowerCase() === 'set-cookie' && @@ -362,21 +385,36 @@ function rewriteResponseHeader(e) { ); if (header_cookie === undefined) { log( - "SimpleModifyHeaders.Warning: you're using cookie_add_or_modify in Response. While adding new cookie in response, this plugin only generates `Set-Cookie: cookie-name=cookie-value `, without ANY additional attributes. Add a `Set-Cookie` header if you need them. " + "SimpleModifyHeaders.Warning: you're using cookie_add in Response. While adding new cookie in response, this plugin only generates `Set-Cookie: cookie-name=cookie-value `, without ANY additional attributes. Add a `Set-Cookie` header if you need them. " ); e.responseHeaders.push({name: 'Set-Cookie', value: new_header_value}); if (config.debug_mode) log( - 'cookie_add_or_modify.resp new_header : name=Cookie,value=' + + 'cookie_add.resp new_header : name=Cookie,value=' + new_header_value + ' for url ' + e.url ); - } else { + } + } else if (to_modify.action === 'cookie_modify') { + let header_cookie = e.responseHeaders.find( + (header) => + header.name.toLowerCase() === 'set-cookie' && + header.value + .toLowerCase() + .trim() + .startsWith(to_modify.header_name.toLowerCase() + '=') + ); + let new_header_value = set_cookie_modify_cookie_value( + header_cookie === undefined ? '' : header_cookie.value, + to_modify.header_name, + to_modify.header_value + ); + if (header_cookie != undefined) { header_cookie.value = new_header_value; if (config.debug_mode) log( - 'cookie_add_or_modify.resp modify_header : name=Cookie,value=' + + 'cookie_modify.resp modify_header : name=Cookie,value=' + new_header_value + ' for url ' + e.url diff --git a/manifestV3..json b/manifestV3.json similarity index 95% rename from manifestV3..json rename to manifestV3.json index 65f94a9..3d95ecd 100644 --- a/manifestV3..json +++ b/manifestV3.json @@ -25,4 +25,4 @@ "background": { "service_worker": "service-worker.js" } -} \ No newline at end of file +} diff --git a/popup/config.js b/popup/config.js index 832f7fa..303442c 100644 --- a/popup/config.js +++ b/popup/config.js @@ -190,7 +190,8 @@ function appendLine(url_contains, action, header_name, header_value, comment, ap if (!useManifestV3) { // Not available in Manifest V3 html += ` - + + `; } html += `