Add whitelisting for sites to be proxied

This commit is contained in:
ilyaigpetrov 2021-05-17 17:12:45 +00:00
parent d3caee1483
commit 57a2a8c1ac
6 changed files with 4721 additions and 307 deletions

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
"subpages": "cd ./src/extension-common/pages/options/ && npm run build && cd -", "subpages": "cd ./src/extension-common/pages/options/ && npm run build && cd -",
"subpages:dev": "cd ./src/extension-common/pages/options/ && npm run build:dev:nocomp && cd -", "subpages:dev": "cd ./src/extension-common/pages/options/ && npm run build:dev:nocomp && cd -",
"start": "npm run release", "start": "npm run release",
"release": "npm run subpages && npm run gulp buildAll" "release": "npm run subpages && npx gulp -- buildAll"
}, },
"author": "Ilya Ig. Petrov", "author": "Ilya Ig. Petrov",
"license": "GPLv3", "license": "GPLv3",

View File

@ -101,20 +101,12 @@
dflt: false, dflt: false,
category: 'ownProxies', category: 'ownProxies',
label: 'использовать СВОЙ локальный Tor', label: 'использовать СВОЙ локальный Tor',
desc: 'Установите <a href="https://rebrand.ly/ac-tor">Tor</a> на свой компьютер и используйте его как прокси-сервер. <a href="https://rebrand.ly/ac-tor">ВАЖНО</a>', desc: 'Установите <a href="https://rebrand.ly/ac-tor">Tor</a> на свой компьютер и используйте его как прокси-сервер. <a href="https://rebrand.ly/ac-tor">ВАЖНО</a>.',
order: 5, order: 5,
}, },
exceptions: { exceptions: {
dflt: null, dflt: null,
category: 'exceptions', category: 'exceptions',
order: 5.5,
},
whitelist: {
dflt: [],
category: 'exceptions',
label: 'белый список'
desc: 'Разрешить расширению работать только с адресами из белого списка',
order: 5.6,
}, },
ifMindExceptions: { ifMindExceptions: {
dflt: true, dflt: true,
@ -123,6 +115,17 @@
desc: 'Учитывать сайты, добавленные вручную. Только для своих прокси-серверов! Без своих прокси работать не будет.', desc: 'Учитывать сайты, добавленные вручную. Только для своих прокси-серверов! Без своих прокси работать не будет.',
order: 6, order: 6,
}, },
whitelist: {
dflt: [],
category: 'exceptions',
},
ifMindWhitelist: {
dflt: false,
category: 'exceptions',
label: 'Ограничиться только <a href="../exceptions/index.html">белым списком</a>',
desc: 'Разрешить расширению работать только с адресами из белого списка.',
order: 6.5,
},
customProxyStringRaw: { customProxyStringRaw: {
dflt: '', dflt: '',
category: 'ownProxies', category: 'ownProxies',
@ -165,7 +168,6 @@
return acc; return acc;
}, {}); }, {});
}; };
const getCurrentConfigs = function getCurrentConfigs(ifRaw = false) { const getCurrentConfigs = function getCurrentConfigs(ifRaw = false) {
@ -228,7 +230,8 @@
}); });
const self = {}; const self = {};
Object.assign(self, getDefaults(), mods); const gdft = getDefaults();
Object.assign(self, gdft, mods);
self.ifNoMods = ifNoMods; self.ifNoMods = ifNoMods;
let customProxyArray = []; let customProxyArray = [];
@ -355,26 +358,20 @@
/******/ const dotHost = '.' + host; /******/ const dotHost = '.' + host;
${ ${
function() { function() {
// TODO: STOPPED HERE
const wlstr = JSON.stringify(pacMods.whitelist);
let generatedPac = ` let generatedPac = `
/******/ if (${pacMods.ifMindWhitelist && pacMods.whitelist.length}) {
/******/ const ifWhitelisted = /******/ const ifWhitelisted =
/******/ .some((whiteHost) => { /******/ ${JSON.stringify(pacMods.whitelist)}.some((whiteHost) => {
/******/ const ifWild = whiteHost.startsWith('*'); /******/ const ifWild = whiteHost.startsWith('*');
/******/ if (ifWild) { /******/ if (ifWild) {
/******/ return `dotHost.endsWith(whiteHost.substr(1)); /******/ return dotHost.endsWith(whiteHost.substr(1));
/******/ } /******/ }
/******/ return host === whiteHost; /******/ return host === whiteHost;
/******/ }) /******/ })
/******/ if (ifWhiteListed) { /******/ if (!ifWhitelisted) {
/******/ return 'DIRECT'; /******/ return 'DIRECT';
/******/ } /******/ }
/******/ }`;
/******/
if (!ifWhitelisted) {
return 'DIRECT';
}
)
generatedPac += pacMods.ifProhibitDns ? ` generatedPac += pacMods.ifProhibitDns ? `
/******/ /******/

View File

@ -17,7 +17,9 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
# Сначала идёт список проксируемых сайтов, # Сначала идёт список проксируемых сайтов,
# затем ==== на отдельной строке, # затем ==== на отдельной строке,
# затем исключённые сайты. # затем исключённые сайты.
# После ещё одной строки с ==== идёт белый список.
# Сортировка с конца строки. # Сортировка с конца строки.
# Адреса со звёздочками поддерживаются: *.kasparov.ru, например.
# ПРОКСИРОВАТЬ: # ПРОКСИРОВАТЬ:

View File

@ -12,6 +12,7 @@
"concat-stream": "^1.6.2", "concat-stream": "^1.6.2",
"csjs-inject": "^1.0.1", "csjs-inject": "^1.0.1",
"flow-bin": "^0.45.0", "flow-bin": "^0.45.0",
"gulp": "^4.0.2",
"inferno": "~3.2.0", "inferno": "~3.2.0",
"inferno-component": "^3.10.1", "inferno-component": "^3.10.1",
"inferno-create-element": "^3.10.1", "inferno-create-element": "^3.10.1",