From a8e340abe07588a20323c1aba11f0f364ec5b210 Mon Sep 17 00:00:00 2001 From: Thomas Rientjes <synzvato@protonmail.com> Date: Wed, 10 Jan 2018 19:39:26 -0300 Subject: [PATCH] Modularize request sanitation logic --- .eslintrc | 1 + core/request-sanitizer.js | 62 ++++++++++++++++++++++++++++++++ core/state-manager.js | 34 ++---------------- pages/background/background.html | 1 + 4 files changed, 67 insertions(+), 31 deletions(-) create mode 100644 core/request-sanitizer.js diff --git a/.eslintrc b/.eslintrc index 5765e85..8e8ecee 100644 --- a/.eslintrc +++ b/.eslintrc @@ -12,6 +12,7 @@ "interceptor": true, "mappings": true, "requestAnalyzer": true, + "requestSanitizer": true, "Resource": true, "resources": true, "Setting": true, diff --git a/core/request-sanitizer.js b/core/request-sanitizer.js new file mode 100644 index 0000000..e5cfc98 --- /dev/null +++ b/core/request-sanitizer.js @@ -0,0 +1,62 @@ +/** + * Request Sanitizer + * Belongs to Decentraleyes. + * + * @author Thomas Rientjes + * @since 2018-01-10 + * @license MPL 2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +'use strict'; + +/** + * Request Sanitizer + */ + +var requestSanitizer = {}; + +/** + * Public Methods + */ + +requestSanitizer.enable = function () { + + let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders; + + onBeforeSendHeaders.addListener(requestSanitizer._stripMetadata, { + 'urls': stateManager.validHosts + }, [WebRequest.BLOCKING, WebRequest.HEADERS]); +}; + +requestSanitizer.disable = function () { + + let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders; + + onBeforeSendHeaders.removeListener(requestSanitizer._stripMetadata, { + 'urls': stateManager.validHosts + }, [WebRequest.BLOCKING, WebRequest.HEADERS]); +}; + +/** + * Private Methods + */ + +requestSanitizer._stripMetadata = function (requestDetails) { + + for (let i = 0; i < requestDetails.requestHeaders.length; ++i) { + + if (requestDetails.requestHeaders[i].name === WebRequest.ORIGIN_HEADER) { + requestDetails.requestHeaders.splice(i--, 1); + } else if (requestDetails.requestHeaders[i].name === WebRequest.REFERER_HEADER) { + requestDetails.requestHeaders.splice(i--, 1); + } + } + + return { + 'requestHeaders': requestDetails.requestHeaders + }; +}; diff --git a/core/state-manager.js b/core/state-manager.js index 43bf38b..b10bfab 100644 --- a/core/state-manager.js +++ b/core/state-manager.js @@ -148,22 +148,6 @@ stateManager._updateTab = function (details) { } }; -stateManager._stripMetadata = function (requestDetails) { - - for (let i = 0; i < requestDetails.requestHeaders.length; ++i) { - - if (requestDetails.requestHeaders[i].name === WebRequest.ORIGIN_HEADER) { - requestDetails.requestHeaders.splice(i--, 1); - } else if (requestDetails.requestHeaders[i].name === WebRequest.REFERER_HEADER) { - requestDetails.requestHeaders.splice(i--, 1); - } - } - - return { - 'requestHeaders': requestDetails.requestHeaders - }; -}; - stateManager._handleStorageChanged = function (changes) { if ('showIconBadge' in changes) { @@ -180,19 +164,10 @@ stateManager._handleStorageChanged = function (changes) { if ('stripMetadata' in changes) { - let onBeforeSendHeaders; - - onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders; - - onBeforeSendHeaders.removeListener(stateManager._stripMetadata, { - 'urls': stateManager.validHosts - }, [WebRequest.BLOCKING, WebRequest.HEADERS]); + requestSanitizer.disable(); if (changes.stripMetadata.newValue !== false) { - - onBeforeSendHeaders.addListener(stateManager._stripMetadata, { - 'urls': stateManager.validHosts - }, [WebRequest.BLOCKING, WebRequest.HEADERS]); + requestSanitizer.enable(); } } }; @@ -272,10 +247,7 @@ chrome.webRequest.onBeforeRedirect.addListener(function (requestDetails) { chrome.storage.local.get({'stripMetadata': true}, function (options) { if (options === null || options.stripMetadata !== false) { - - chrome.webRequest.onBeforeSendHeaders.addListener(stateManager._stripMetadata, { - 'urls': stateManager.validHosts - }, [WebRequest.BLOCKING, WebRequest.HEADERS]); + requestSanitizer.enable(); } }); diff --git a/pages/background/background.html b/pages/background/background.html index 55584b6..ebf75a1 100644 --- a/pages/background/background.html +++ b/pages/background/background.html @@ -17,6 +17,7 @@ <script src="../../core/files.js"></script> <script src="../../core/resources.js"></script> <script src="../../core/mappings.js"></script> + <script src="../../core/request-sanitizer.js"></script> <script src="../../core/state-manager.js"></script> <script src="../../core/request-analyzer.js"></script> <script src="../../core/interceptor.js"></script> -- GitLab