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