summaryrefslogtreecommitdiff
path: root/data/extensions/jsr@javascriptrestrictor/update.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/jsr@javascriptrestrictor/update.js')
-rw-r--r--data/extensions/jsr@javascriptrestrictor/update.js543
1 files changed, 0 insertions, 543 deletions
diff --git a/data/extensions/jsr@javascriptrestrictor/update.js b/data/extensions/jsr@javascriptrestrictor/update.js
deleted file mode 100644
index 83ccbb8..0000000
--- a/data/extensions/jsr@javascriptrestrictor/update.js
+++ /dev/null
@@ -1,543 +0,0 @@
-/** \file
- * \brief Code that updates configuration stored by the user after upgrades
- *
- * \author Copyright (C) 2019 Martin Timko
- * \author Copyright (C) 2019-2021 Libor Polcak
- *
- * \license SPDX-License-Identifier: GPL-3.0-or-later
- */
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <https://www.gnu.org/licenses/>.
-//
-
-let defaultNbsWhitelistDomain = "duckduckgo.com";
-let defaultNbsWhitelist = {};
-defaultNbsWhitelist[defaultNbsWhitelistDomain] = true;
-
-async function installUpdate() {
- /**
- * 0.3+ storage
- * {
- * __default__: 2, // Default protection level
- * version: 2.2, // The version of this storage
- * custom_levels: {}, // associative array of custom level (key, its id => object)
- * {level_id: short string used for example on the badge
- * level_text: Short level description
- * level_description: Full level description
- * ...
- * wrapping_params (key-value pairs), see wrapping_groups for the list of params and
- * supported values
- * }
- * domains: {}, // associative array of levels associated with specific domains (key, the domain => object)
- * {level_id: short string of the level in use
- * }
- * nbsWhitelist: {} // associative array of hosts that are removed from http protection control (hostname => boolean)
- * requestShieldOn: {} // Boolean, if it's TRUE or undefined, the http request protection is turned on, if it's FALSE, the protection si turned off
- * fpDetectionOn: {} // Boolean, if it's TRUE, the fingerprint detection is turned on, if it's FALSE or undefined, the protection si turned off
- *
- *
- */
- let item = await browser.storage.sync.get(null);
- if (!item.hasOwnProperty("version") || (item.version < 2.1)) {
- browser.storage.sync.clear();
- console.log("All JavaScript Restrictor data cleared! Unfortunately, we do not migrate settings from versions bellow 0.3.");
- item = {
- __default__: 2,
- version: 2.1,
- custom_levels: {},
- domains: {},
- };
- }
- if (item.version == 2.1) {
- // No Geolocation below 2.2
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.time_precision) {
- l.geolocation = true;
- if (l.time_precision_randomize) {
- l.geolocation_locationObfuscationType = 5;
- }
- else if (l.time_precision_precision == 2) {
- l.geolocation_locationObfuscationType = 2;
- }
- else if (l.time_precision_precision == 1) {
- l.geolocation_locationObfuscationType = 3;
- }
- else if (l.time_precision_precision == 0) {
- l.geolocation_locationObfuscationType = 4;
- }
- else {
- l.geolocation_locationObfuscationType = -1;
- }
- // note that the obfuscation type might be redefined below
- }
- if (l.shared_array || l.webworker || l.xhr || l.arrays) {
- l.geolocation = true;
- l.geolocation_locationObfuscationType = 0;
- }
- if (l.geolocation_locationObfuscationType === undefined && l.htmlcanvaselement) {
- l.geolocation = true;
- l.geolocation_locationObfuscationType = 3;
- }
- }
- item.version = 2.2;
- }
- if (item.version == 2.2) {
- // No window.name wrapping below 2.2
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- let count = 0;
- count += Number(Boolean(l.time_precision)) +
- Number(Boolean(l.hardware)) +
- Number(Boolean(l.battery)) +
- Number(Boolean(l.geolocation)) +
- Number(Boolean(l.shared_array)) +
- Number(Boolean(l.webworker)) +
- Number(Boolean(l.xhr)) +
- Number(Boolean(l.arrays)) +
- Number(Boolean(l.htmlcanvaselement));
- if (count >= 3) {
- l.windowname = true;
- }
- }
- item.version = 2.3;
- }
- if (item.version == 2.3) {
- // No enumerateDevices wrapping below 2.4
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- let count = 0;
- count += Number(Boolean(l.time_precision)) +
- Number(Boolean(l.hardware)) +
- Number(Boolean(l.battery)) +
- Number(Boolean(l.geolocation)) +
- Number(Boolean(l.shared_array)) +
- Number(Boolean(l.webworker)) +
- Number(Boolean(l.xhr)) +
- Number(Boolean(l.arrays)) +
- 100*Number(Boolean(l.htmlcanvaselement));
- if (count >= 102) {
- l.enumerateDevices = true;
- }
- }
- item.version = 2.4;
- }
- if (item.version < 2.6) {
- // No Beacon API (analytics) wrapping below 2.6
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.windowname || l.battery || l.geolocation || l.enumerateDevices || l.time_precision || l.hardware) {
- l.analytics = true;
- }
- }
- item.version = 2.6;
- }
- if (item.version < 2.7) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.htmlcanvaselement) {
- l.htmlcanvaselement_method = 1;
- l.audiobuffer = true;
- l.audiobuffer_method = 0;
- l.webgl = true;
- l.webgl_method = 0;
- }
- }
- item.version = 2.7;
- }
- if (item.version < 2.8) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.htmlcanvaselement) {
- l.plugins = true;
- if (l.htmlcanvaselement_method == 0) {
- l.plugins_method = 0;
- }
- else {
- l.plugins_method = 2;
- }
- }
- }
- item.version = 2.8;
- }
- if (item.version < 2.9) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.analytics) {
- l.gamepads = true;
- }
- }
- item.version = 2.9;
- }
- if (item.version < 3) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.gamepads) {
- l.vr = true;
- }
- }
- item.version = 3;
- }
- if (item.version < 4) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.hardware || l.battery || l.windowname) {
- l.physical_environment = true;
- l.physical_environment_emulateStationaryDevice = true;
- }
- }
- item.version = 4;
- }
- if (item.version < 5) {
- item.fpDetectionOn = false;
- item.version = 5;
- }
- if (item.version < 6) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- // time_precision
- if (l.time_precision) {
- if (l.time_precision_randomize || l.time_precision_precision < 1) {
- l.time_precision = 3;
- }
- else if (l.time_precision_precision == 1) {
- l.time_precision = 2;
- }
- else if (l.time_precision_precision > 1) {
- l.time_precision = 1;
- }
- else {
- delete l.time_precision;
- }
- }
- else {
- delete l.time_precision;
- }
- delete l.time_precision_precision;
- delete l.time_precision_randomize;
- // regular farbling
- for (farblable of ["htmlcanvaselement", "audiobuffer", "webgl", "plugins", "enumerateDevices", "hardware"]) {
- if (l[farblable]) {
- if (l[farblable + "_method"] !== undefined) {
- l[farblable] = l[farblable + "_method"] + 1;
- }
- else {
- l[farblable] = 2;
- }
- }
- else {
- delete l[farblable];
- }
- delete l[farblable + "_method"];
- }
- // xhr
- if (l.xhr) {
- if (l.xhr_behaviour_block && !l.xhr_behaviour_ask) {
- l.xhr = 2;
- }
- else {
- l.xhr = 1;
- }
- }
- else {
- delete l.xhr;
- }
- delete l.xhr_behaviour_block;
- delete l.xhr_behaviour_ask;
- // arrays
- if (l.arrays) {
- if (l.arrays_mapping) {
- l.arrays = 2;
- }
- else {
- l.arrays = 1;
- }
- }
- else {
- delete l.arrays;
- }
- delete l.arrays_mapping;
- //sharred_array
- if (l.shared_array) {
- if (l.shared_array_approach_block) {
- l.shared_array = 2;
- }
- else {
- l.shared_array = 1;
- }
- }
- else {
- delete l.shared_array;
- }
- delete l.shared_array_approach_block;
- delete l.shared_array_approach_polyfill;
- // webworker
- if (l.webworker) {
- if (l.webworker_approach_polyfill) {
- l.webworker = 2;
- }
- else {
- l.webworker = 1;
- }
- }
- else {
- delete l.webworker;
- }
- delete l.webworker_approach_polyfill;
- delete l.webworker_approach_slow;
- // geolocation
- if (l.geolocation) {
- if (l.geolocation_locationObfuscationType == 0) {
- l.geolocation = 6;
- }
- else if (l.geolocation_locationObfuscationType == 2) {
- l.geolocation = 2;
- }
- else if (l.geolocation_locationObfuscationType == 3) {
- l.geolocation = 3;
- }
- else if (l.geolocation_locationObfuscationType == 4) {
- l.geolocation = 4;
- }
- else if (l.geolocation_locationObfuscationType == 5) {
- l.geolocation = 5;
- }
- else if (l.geolocation_locationObfuscationType == -1) {
- l.geolocation = 1;
- }
- else {
- l.geolocation = 3;
- }
- }
- else {
- delete l.geolocation;
- }
- delete l.geolocation_locationObfuscationType;
- // others
- for (wrap of ["physical_environment", "gamepads", "vr", "analytics", "battery", "windowname"]) {
- if (l[wrap]) {
- l[wrap] = 1;
- }
- else {
- delete l[wrap];
- }
- }
- delete l.physical_environment_emulateStationaryDevice;
- }
- item.version = 6;
- }
- if (item.version < 6.1) {
- // We no longer ship level 1 as its content is not defined well, the tweaks allow the user
- // to relax the level conditions specifically to each page
- for (domain in item.domains) {
- let level = item.domains[domain];
- // Select the default level if the default level is not 3 (if level 3 is the default, set
- // level 2)
- if (level.level_id == "1") {
- if ([2, 3, "2", "3"].includes(item.__default__)) {
- level.level_id = "2";
- }
- else {
- level.level_id = String(item.__default__);
- }
- }
- }
- item.version = 6.1;
- }
- if (item.version < 6.2) {
- if (item.fpDetectionOn) {
- item.fpdSettings = {
- behavior: 3
- };
- }
- else {
- item.fpdSettings = {
- behavior: 1
- };
- }
- item.fpDetectionOn = true;
- item.nbsWhitelist = item.whitelistedHosts ? item.whitelistedHosts : defaultNbsWhitelist;
- delete item.whitelistedHosts;
- item.nbsSettings = {
- notifications: 1
- };
- item.version = 6.2;
- }
- if (item.version < 6.3) {
- if (level_2.windowname === undefined) { // Firefox
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (!(l.arrays || l.shared_array)) {
- delete l.windowname;
- }
- }
- }
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- l.webworker = 2;
- }
- item.version = 6.3;
- }
- if (item.version < 6.4) {
- if (item.nbsSettings) {
- item.nbsSettings.blocking = 1;
- }
- if (item.fpdSettings) {
- item.fpdSettings.detection = 0;
- }
- item.version = 6.4;
- }
- if (item.version < 6.5) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.time_precision && l.analytics && l.geolocation) {
- l.coopschedule = 1;
- l.net = 1;
- l.nfc = 1;
- l.useridle = 1;
- if (l.htmlcanvaselement || l.audiobuffer || l.enumerateDevices) {
- l.useridle = 2;
- if (l.htmlcanvaselement === 2 || l.audiobuffer === 2 || l.enumerateDevices === 3) {
- l.useridle = 3;
- l.playback = 2;
- }
- }
- }
- }
- item.version = 6.5;
- }
- if (item.version < 6.6) {
- if (item.fpdSettings) {
- switch (item.fpdSettings.behavior) {
- case 0:
- item.fpdSettings.notifications = 0;
- break;
- case 1:
- item.fpdSettings.behavior = 0;
- item.fpdSettings.notifications = 1;
- break;
- case 2:
- item.fpdSettings.behavior = 1;
- item.fpdSettings.notifications = 1;
- break;
- case 3:
- item.fpdSettings.behavior = 2;
- item.fpdSettings.notifications = 1;
- }
- }
- item.version = 6.6;
- }
- if (item.version < 6.7) {
- await browser.storage.sync.remove("whitelistedHosts"); // Renamed in 6.2 but not removed
- item.version = 6.7;
- }
- if (item.version < 6.8) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.webworker === 2) {
- let score = 0;
- for (group of ["time_precision", "net", "geolocation", "physical_environment", "useridle", "coopschedule", "gamepads", "vr", "analytics", "nfc"]) {
- if (l[group] !== undefined) {
- score++;
- }
- }
- for (group of ["htmlcanvaselement", "audiobuffer", "webgl", "hardware"]) {
- if (l[group] === 1) {
- score--;
- }
- else if (l[group] > 1) {
- score++;
- }
- }
- for (group of ["enumerateDevices", "plugins"]) {
- if (l[group] === 1 || l[group] === 2) {
- score--;
- }
- else if (l[group] > 2) {
- score++;
- }
- }
- if (score > 8) { // L0: 0, L1: 10, L2: 4, L3: 16
- l.webworker = 3;
- }
- }
- }
- item.version = 6.8;
- }
- if (item.version < 7) {
- for (level in item["custom_levels"]) {
- let l = item["custom_levels"][level];
- if (l.audiobuffer === 1 || l.htmlcanvaselement === 1) {
- l.wasm = 1;
- }
- }
- item.nbsWhitelist[defaultNbsWhitelistDomain] = true;
- item.version = 7;
- }
-
-
-
- await browser.storage.sync.set(item);
- // origin of update.js must be recognized (background script vs. options page)
- if (typeof fpdLoadConfiguration === "function") {
- fpdLoadConfiguration();
- }
- else {
- browser.runtime.sendMessage({purpose: "fpd-load-config"});
- }
- if (typeof nbsLoadConfiguration === "function") {
- nbsLoadConfiguration();
- }
- else {
- browser.runtime.sendMessage({purpose: "nbs-load-config"})
- }
-}
-browser.runtime.onInstalled.addListener(installUpdate);
-// fallback - populate storage with valid data (if onInstalled won't fire)
-browser.storage.sync.get(null).then((item) => {
- checkAndSaveConfig(item, false); // level might not be loaded by this time
-});
-
-async function checkAndSaveConfig(conf, check_default = true) {
- let checkSettingRange = (module, setting, range, defValue) => {
- if (!(conf[module][setting] in range)) {
- conf[module][setting] = defValue;
- }
- }
- let checkExistAndType = (name, type, defValue) => {
- if (!(name in conf && typeof(conf[name]) === type)) {
- conf[name] = defValue;
- }
- }
- checkExistAndType("version", "number", 2.1);
- checkExistAndType("requestShieldOn", "boolean", true);
- checkExistAndType("fpDetectionOn", "boolean", false);
- checkExistAndType("custom_levels", "object", {});
- if (!("__default__" in conf) || typeof(conf.__default__) !== "string" ||
- (!(conf.__default__ in levels) && check_default)) {
- conf.__default__ = "2";
- }
- checkExistAndType("domains", "object", {});
- checkExistAndType("nbsWhitelist", "object", defaultNbsWhitelist);
- checkExistAndType("nbsSettings", "object", {});
- checkSettingRange("nbsSettings", "blocking", [0,1], 1);
- checkSettingRange("nbsSettings", "notifications", [0,1], 1);
- checkExistAndType("fpdWhitelist", "object", {});
- checkExistAndType("fpdSettings", "object", {});
- checkSettingRange("fpdSettings", "behavior", [0,1,2,3], 1);
- checkSettingRange("fpdSettings", "notifications", [0,1], 1);
- checkSettingRange("fpdSettings", "detection", [0,1], 0);
- await browser.storage.sync.set(conf);
- await installUpdate();
-}