From ecf30cd01b28337da46a4a8684c594c1c9c20e63 Mon Sep 17 00:00:00 2001 From: didierfred <didierfred@gmail.com> Date: Tue, 6 Feb 2018 14:51:05 +0100 Subject: [PATCH] Implements new storage format --- background.js | 69 ++++++++++++++++++++++++++++++------------------- popup/config.js | 56 ++++++++++++++++++++++++--------------- 2 files changed, 78 insertions(+), 47 deletions(-) diff --git a/background.js b/background.js index 208b9ec..020e11d 100644 --- a/background.js +++ b/background.js @@ -10,27 +10,46 @@ "use strict"; -var targetPage = "https://httpbin.org/*"; -var modifyTable = []; +//var targetPage = "https://httpbin.org/*"; +//var modifyTable = []; +var config ; var started = "off"; -// If no table stored , use and store a default one -if (!localStorage.getItem('modifyTable')) +// if configuration exist +if (localStorage.getItem('config')) { - modifyTable = [ - ["add","test_header_name","test_header_value","on"], - ]; - localStorage.setItem("modifyTable",JSON.stringify(modifyTable)); + console.log("Load standard config"); + config= JSON.parse(localStorage.getItem('config')); } else { - modifyTable=JSON.parse(localStorage.getItem("modifyTable")); + // else check if old config exist + if (localStorage.getItem('targetPage')&& localStorage.getItem('modifyTable')) + { + console.log("Load old config"); + var headers = []; + var modifyTable=JSON.parse(localStorage.getItem("modifyTable")); + for (var to_modify of modifyTable) + { + headers.push({action:to_modify[0],header_name:to_modify[1],header_value:to_modify[2],status:to_modify[3]}); + } + config = {format_version:"1.0",target_page:localStorage.getItem('targetPage'),headers:headers}; + // save old config in new format + localStorage.setItem("config",JSON.stringify(config)); + } + //else no config exists, create a default one + else + { + console.log("Load default config"); + var headers = []; + headers.push({action:"add",header_name:"test_header_name",header_value:"test_header_value",status:"on"}); + config = {format_version:"1.0",target_page:"https://httpbin.org/*",headers:headers}; + // save configuration + localStorage.setItem("config",JSON.stringify(config)); + } } - -// If no target page stored , use a default one -if (!localStorage.getItem('targetPage')) localStorage.setItem('targetPage',targetPage); -else targetPage = localStorage.getItem('targetPage'); - + + // If no started value stored , use a default one if (!localStorage.getItem('started')) localStorage.setItem('started',started); else started = localStorage.getItem('started'); @@ -41,7 +60,6 @@ if (started=="on") browser.browserAction.setIcon({ path: "icons/modify-green-32.png"}); } - // listen for change in configuration or start/stop browser.runtime.onMessage.addListener(notify); @@ -53,29 +71,29 @@ browser.runtime.onMessage.addListener(notify); function rewriteHeader(e) { - for (var to_modify of modifyTable) + for (var to_modify of config.headers) { - if (to_modify[3]=="on") + if (to_modify.status=="on") { - if (to_modify[0]=="add") + if (to_modify.action=="add") { - var new_header = {"name" :to_modify[1],"value":to_modify[2]}; + var new_header = {"name" :to_modify.header_name,"value":to_modify.header_value}; e.requestHeaders.push(new_header); } - else if (to_modify[0]=="modify") + else if (to_modify.action=="modify") { for (var header of e.requestHeaders) { - if (header.name.toLowerCase() == to_modify[1].toLowerCase()) header.value = to_modify[2]; + if (header.name.toLowerCase() == to_modify.header_name.toLowerCase()) header.value = to_modify.header_value; } } - else if (to_modify[0]=="delete") + else if (to_modify.action=="delete") { var index = -1; for (var i=0; i < e.requestHeaders.length; i++) { - if (e.requestHeaders[i].name.toLowerCase() == to_modify[1].toLowerCase()) index=i; + if (e.requestHeaders[i].name.toLowerCase() == to_modify.header_name.toLowerCase()) index=i; } if (index!=-1) { @@ -101,8 +119,7 @@ function notify(message) { if (message=="reload") { - modifyTable=JSON.parse(localStorage.getItem("modifyTable")); - targetPage = localStorage.getItem('targetPage'); + config=JSON.parse(localStorage.getItem("config")); if (started=="on") { browser.webRequest.onBeforeSendHeaders.removeListener(rewriteHeader); @@ -132,7 +149,7 @@ function notify(message) function addListener() { browser.webRequest.onBeforeSendHeaders.addListener(rewriteHeader, - {urls: [targetPage]}, + {urls: [config.target_page]}, ["blocking", "requestHeaders"]); } diff --git a/popup/config.js b/popup/config.js index 35f2a49..dbb68c3 100644 --- a/popup/config.js +++ b/popup/config.js @@ -13,14 +13,14 @@ var line_number = 1; var started = "off"; window.onload = function() { - var configTable = JSON.parse(localStorage.getItem("modifyTable")); - for (var to_add of configTable) appendLine(to_add[0],to_add[1],to_add[2],to_add[3]); + var config = JSON.parse(localStorage.getItem("config")); + for (var to_add of config.headers) appendLine(to_add.action,to_add.header_name,to_add.header_value,to_add.status); document.getElementById('save_button').addEventListener('click',function (e) {save_data();}); document.getElementById('export_button').addEventListener('click',function (e) {export_data();}); - document.getElementById('import_button').addEventListener('change',function (e) {import_data(e);}); + document.getElementById('import_button').addEventListener('click',function (e) {import_data(e);}); document.getElementById('add_button').addEventListener('click',function (e) {appendLine("add","-","-","off");}); document.getElementById('start_img').addEventListener('click',function (e) {start_modify();}); - document.getElementById('targetPage').value=localStorage.getItem("targetPage"); + document.getElementById('targetPage').value=config.target_page; started = localStorage.getItem("started"); if (started=="on") document.getElementById("start_img").src = "img/stop.png"; } ; @@ -47,7 +47,32 @@ document.getElementById('delete_button'+line_number).addEventListener('click',fu line_number++; } +function create_configuration_data() +{ + var tr_elements = document.querySelectorAll("#config_tab tr"); + var headers = []; + for (i=1;i<tr_elements.length;i++) // ignore line 1 which is the table header + { + + var action = tr_elements[i].childNodes[0].childNodes[0].value; + var header_name = tr_elements[i].childNodes[1].childNodes[0].value; + var header_value = tr_elements[i].childNodes[2].childNodes[0].value; + var status = tr_elements[i].childNodes[3].childNodes[0].value; + headers.push({action:action,header_name:header_name,header_value:header_value,status:status}); + + } + var to_export = {format_version:"1.0",target_page:document.getElementById('targetPage').value,headers:headers}; + console.log(JSON.stringify(to_export)); + return JSON.stringify(to_export); +} +function save_data () + { + localStorage.setItem("config",create_configuration_data()); + browser.runtime.sendMessage("reload"); + } + +/** function save_data () { var tr_elements = document.querySelectorAll("#config_tab tr"); @@ -65,28 +90,18 @@ function save_data () localStorage.setItem("targetPage",document.getElementById('targetPage').value); browser.runtime.sendMessage("reload"); } +**/ + + function export_data() { // Create file data - var tr_elements = document.querySelectorAll("#config_tab tr"); - var headers = []; - for (i=1;i<tr_elements.length;i++) // ignore line 1 which is the table header - { - - var action = tr_elements[i].childNodes[0].childNodes[0].value; - var header_name = tr_elements[i].childNodes[1].childNodes[0].value; - var header_value = tr_elements[i].childNodes[2].childNodes[0].value; - var status = tr_elements[i].childNodes[3].childNodes[0].value; - headers.push({action:action,header_name:header_name,header_value:header_value,status:status}); - - } - var to_export = {format_version:"1.0",target_page:document.getElementById('targetPage').value,headers:headers}; - console.log(JSON.stringify(to_export)); + var to_export= create_configuration_data(); // Create file to save var a = document.createElement('a'); - a.href = 'data:attachment/json,' + encodeURIComponent(JSON.stringify(to_export)); + a.href = 'data:attachment/json,' + encodeURIComponent(to_export); a.target = 'download'; a.download = 'SimpleModifyHeader.conf'; @@ -99,7 +114,6 @@ function export_data() function import_data(evt) { - // create an input field in the iframe var input = document.createElement("input"); input.type="file"; @@ -120,7 +134,7 @@ function readSingleFile(e) var reader = new FileReader(); reader.onload = function(e) { - var contents = e.target.result; + var contents = e.target.result; var config=""; try { -- GitLab