Skip to content
Snippets Groups Projects
Commit 119f329d authored by Recolic Keghart's avatar Recolic Keghart
Browse files

Allow modifying cookies

parent 7c8e19a4
No related branches found
No related tags found
No related merge requests found
...@@ -97,6 +97,29 @@ function storeInBrowserStorage(item, callback_function) { ...@@ -97,6 +97,29 @@ function storeInBrowserStorage(item, callback_function) {
chrome.storage.local.set(item, callback_function); chrome.storage.local.set(item, callback_function);
} }
/*
* This function set a key-value pair in HTTP header "Cookie",
* and returns the value of HTTP header after modification.
* If key already exists, it modify the value.
* If key doesn't exist, it add the key-value pair.
* If value is undefined, it delete the key-value pair from cookies.
* Recolic K <root@recolic.net>
*/
function cookie_keyvalues_set(original_cookies, key, value) {
let new_element = key + "=" + value; // not used if value is undefined.
let cookies_ar = original_cookies.split(";").filter(e => e.trim().length > 0);
let selected_cookie_index = cookies_ar.findIndex(kv => kv.startsWith(key+"="));
if (selected_cookie_index == -1)
cookies_ar.push(new_element);
else {
if (value === undefined)
cookies_ar.splice(selected_cookie_index, 1);
else
cookies_ar.splice(selected_cookie_index, 1, new_element);
}
return cookies_ar.join(";");
}
/* /*
* Standard function to log messages * Standard function to log messages
...@@ -142,6 +165,29 @@ function rewriteRequestHeader(e) { ...@@ -142,6 +165,29 @@ function rewriteRequestHeader(e) {
" for url " + e.url); " for url " + e.url);
} }
} }
else if (to_modify.action === "cookie_add_or_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) {
e.requestHeaders.push({"name": "Cookie", "value": new_cookie});
if (config.debug_mode) log("cookie_add_or_modify new_header : name=Cookie,value=" + new_cookie + " for url " + e.url);
}
else {
header_cookie.value = new_cookie;
if (config.debug_mode) log("cookie_add_or_modify modify_header : name=Cookie,value=" + new_cookie + " for url " + e.url);
}
}
else if (to_modify.action === "cookie_delete") {
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) {
if (config.debug_mode) log("cookie_delete: no cookie header found. doing nothing for url " + e.url);
}
else {
header_cookie.value = new_cookie;
if (config.debug_mode) log("cookie_delete modify_header : name=Cookie,value=" + new_cookie + " for url " + e.url);
}
}
} }
} }
if (config.debug_mode) log("End modify request headers for url " + e.url); if (config.debug_mode) log("End modify request headers for url " + e.url);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment