xiMatrix

filter net requests according to source, destination and type  https://addons.mozilla.org/firefox/addon/ximatrix/
git clone https://git.ce9e.org/xiMatrix.git

commit
0eefd4b5066d4a3b65a9e451da379fbaa0b0cdfa
parent
0a8b062a7cc79541a24ba4ee0ae371acf9f42430
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-02-25 00:13
add savedRules

Diffstat

M src/bg.js 52 +++++++++++++++++++++++++++++-----------------------

1 files changed, 29 insertions, 23 deletions


diff --git a/src/bg.js b/src/bg.js

@@ -4,6 +4,7 @@ var lock = Promise.resolve();
    4     4 
    5     5 var STORAGE_DEFAULTS = {
    6     6     'rules': {},
   -1     7     'savedRules': {},
    7     8     'requests': {},
    8     9     'recording': true,
    9    10 };
@@ -33,36 +34,41 @@ var storageChange = function(key, fn) {
   33    34 };
   34    35 
   35    36 var setRule = function(context, hostname, type, rule) {
   36    -1     return storageChange('rules', rules => {
   37    -1         if (hostname === 'first-party') {
   38    -1             context = '*';
   39    -1         }
   40    -1         if (!rules[context]) {
   41    -1             rules[context] = {};
   42    -1         }
   43    -1         if (!rules[context][hostname]) {
   44    -1             rules[context][hostname] = {};
   45    -1         }
   46    -1         if (rule) {
   47    -1             rules[context][hostname][type] = rule;
   48    -1         } else {
   49    -1             delete rules[context][hostname][type];
   50    -1             if (Object.keys(rules[context][hostname]).length === 0) {
   51    -1                 delete rules[context][hostname];
   -1    37     return storageGet('savedRules').then(savedRules => {
   -1    38         return storageChange('rules', rules => {
   -1    39             if (hostname === 'first-party') {
   -1    40                 context = '*';
   52    41             }
   53    -1             if (Object.keys(rules[context]).length === 0) {
   54    -1                 delete rules[context];
   -1    42             if (!rules[context]) {
   -1    43                 rules[context] = savedRules[context] || {};
   55    44             }
   56    -1         }
   57    -1         return rules;
   -1    45             if (!rules[context][hostname]) {
   -1    46                 rules[context][hostname] = {};
   -1    47             }
   -1    48             if (rule) {
   -1    49                 rules[context][hostname][type] = rule;
   -1    50             } else {
   -1    51                 delete rules[context][hostname][type];
   -1    52                 if (Object.keys(rules[context][hostname]).length === 0) {
   -1    53                     delete rules[context][hostname];
   -1    54                 }
   -1    55                 if (Object.keys(rules[context]).length === 0) {
   -1    56                     delete rules[context];
   -1    57                 }
   -1    58             }
   -1    59             return rules;
   -1    60         });
   58    61     });
   59    62 };
   60    63 
   61    64 var getRules = function(context) {
   62    -1     return storageGet('rules').then(rules => {
   -1    65     return Promise.all([
   -1    66         storageGet('rules'),
   -1    67         storageGet('savedRules'),
   -1    68     ]).then(([rules, savedRules]) => {
   63    69         var restricted = {};
   64    -1         restricted['*'] = rules['*'] || {};
   65    -1         restricted[context] = rules[context] || {};
   -1    70         restricted['*'] = rules['*'] || savedRules['*'] || {};
   -1    71         restricted[context] = rules[context] || savedRules[context] || {};
   66    72         return restricted;
   67    73     });
   68    74 };