LocalCDN-Firefox-Chrome-Brave/core/request-sanitizer.js

95 lines
2.3 KiB
JavaScript

/**
* 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
*/
let requestSanitizer = {};
/**
* Preparation
* https://codeberg.org/nobody/LocalCDN/issues/442
*/
/* eslint-disable indent */
const ExtraInfoSpec = BrowserType.FIREFOX
? [WebRequest.BLOCKING, WebRequest.HEADERS]
: [WebRequest.BLOCKING, WebRequest.HEADERS, WebRequest.EXTRA_HEADERS];
/* eslint-enable indent */
/**
* Public Methods
*/
requestSanitizer.enable = function () {
let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
onBeforeSendHeaders.addListener(requestSanitizer._stripMetadata, {
'urls': stateManager.validHosts
}, ExtraInfoSpec);
};
requestSanitizer.disable = function () {
let onBeforeSendHeaders = chrome.webRequest.onBeforeSendHeaders;
onBeforeSendHeaders.removeListener(requestSanitizer._stripMetadata, {
'urls': stateManager.validHosts
}, ExtraInfoSpec);
};
/**
* Private Methods
*/
requestSanitizer._stripMetadata = function (requestDetails) {
let sensitiveHeaders, initiatorDomain, allowlistedDomains;
sensitiveHeaders = [Header.COOKIE, Header.ORIGIN, Header.REFERER];
initiatorDomain = helpers.extractDomainFromUrl(requestDetails.initiator, true);
allowlistedDomains = helpers.checkAllowlisted(initiatorDomain, requestAnalyzer.allowlistedDomains);
if (allowlistedDomains) {
return {
[WebRequest.HEADERS]: requestDetails.requestHeaders,
};
}
for (let i = 0; i < requestDetails.requestHeaders.length; ++i) {
if (sensitiveHeaders.indexOf(requestDetails.requestHeaders[i].name) > -1) {
requestDetails.requestHeaders.splice(i--, 1);
}
}
return {
[WebRequest.HEADERS]: requestDetails.requestHeaders
};
};
/**
* Initializations
*/
storageManager.type.get({[Setting.STRIP_METADATA]: true}, function (items) {
if (items === null || items.stripMetadata !== false) {
requestSanitizer.enable();
}
});