mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2024-11-27 20:03:45 +03:00
Fix HTTPS mod bug, add proxy-or-die, sort exceptions for import, capitalize mods
This commit is contained in:
parent
1f1e3bd033
commit
20fef07f08
|
@ -253,6 +253,12 @@
|
||||||
error: "net::ERR_PAC_SCRIPT_FAILED",
|
error: "net::ERR_PAC_SCRIPT_FAILED",
|
||||||
fatal: false,
|
fatal: false,
|
||||||
*/
|
*/
|
||||||
|
const ifConFail = details.error === 'net::ERR_PROXY_CONNECTION_FAILED';
|
||||||
|
if (ifConFail) {
|
||||||
|
// Happens if you return neither prixies nor "DIRECT".
|
||||||
|
// Ignore it.
|
||||||
|
return;
|
||||||
|
}
|
||||||
console.warn('PAC ERROR', details);
|
console.warn('PAC ERROR', details);
|
||||||
// TOOD: add "view pac script at this line" button.
|
// TOOD: add "view pac script at this line" button.
|
||||||
handlers.mayNotify('pac-error', 'Ошибка PAC!',
|
handlers.mayNotify('pac-error', 'Ошибка PAC!',
|
||||||
|
|
|
@ -33,17 +33,23 @@
|
||||||
desc: 'Пытается запретить скрипту использовать DNS, без которого определение блокировки по IP работать не будет (т.е. будет разблокироваться меньше сайтов). Используйте, чтобы получить прирост в производительности или если вам кажется, что мы проксируем слишком много сайтов. Запрет действует только для скрипта, браузер и др.программы продолжат использование DNS.',
|
desc: 'Пытается запретить скрипту использовать DNS, без которого определение блокировки по IP работать не будет (т.е. будет разблокироваться меньше сайтов). Используйте, чтобы получить прирост в производительности или если вам кажется, что мы проксируем слишком много сайтов. Запрет действует только для скрипта, браузер и др.программы продолжат использование DNS.',
|
||||||
index: 2,
|
index: 2,
|
||||||
},
|
},
|
||||||
|
ifProxyOrDie: {
|
||||||
|
dflt: true,
|
||||||
|
label: 'проксируй или умри!',
|
||||||
|
desc: 'Запрещает соединение с сайтами напрямую без прокси в случаях, когда все прокси отказывают. Например, если все ВАШИ прокси вдруг недоступны, то добавленные вручную сайты открываться не будут совсем.',
|
||||||
|
index: 3,
|
||||||
|
},
|
||||||
ifUsePacScriptProxies: {
|
ifUsePacScriptProxies: {
|
||||||
dflt: true,
|
dflt: true,
|
||||||
label: 'использовать прокси PAC-скрипта',
|
label: 'использовать прокси PAC-скрипта',
|
||||||
desc: 'Использовать прокси-сервера от авторов PAC-скрипта.',
|
desc: 'Использовать прокси-сервера от авторов PAC-скрипта.',
|
||||||
index: 3,
|
index: 4,
|
||||||
},
|
},
|
||||||
ifUseLocalTor: {
|
ifUseLocalTor: {
|
||||||
dflt: false,
|
dflt: false,
|
||||||
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>',
|
||||||
index: 4,
|
index: 5,
|
||||||
},
|
},
|
||||||
exceptions: {
|
exceptions: {
|
||||||
dflt: null,
|
dflt: null,
|
||||||
|
@ -52,13 +58,13 @@
|
||||||
dflt: true,
|
dflt: true,
|
||||||
label: 'учитывать исключения',
|
label: 'учитывать исключения',
|
||||||
desc: 'Учитывать сайты, добавленные вручную. Только для своих прокси-серверов! Без своих прокси работать не будет.',
|
desc: 'Учитывать сайты, добавленные вручную. Только для своих прокси-серверов! Без своих прокси работать не будет.',
|
||||||
index: 5,
|
index: 6,
|
||||||
},
|
},
|
||||||
customProxyStringRaw: {
|
customProxyStringRaw: {
|
||||||
dflt: '',
|
dflt: '',
|
||||||
label: 'использовать СВОИ прокси',
|
label: 'использовать СВОИ прокси',
|
||||||
url: 'https://rebrand.ly/ac-own-proxy',
|
url: 'https://rebrand.ly/ac-own-proxy',
|
||||||
index: 6,
|
index: 7,
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -76,7 +82,11 @@
|
||||||
|
|
||||||
const getCurrentConfigs = function getCurrentConfigs() {
|
const getCurrentConfigs = function getCurrentConfigs() {
|
||||||
|
|
||||||
return kitchenState(modsKey) || getDefaults();
|
const [err, mods, ...warns] = createPacModifiers( kitchenState(modsKey) );
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
return mods;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -102,8 +112,8 @@
|
||||||
const defaults = getDefaults();
|
const defaults = getDefaults();
|
||||||
const ifAllDefaults = Object.keys(defaults)
|
const ifAllDefaults = Object.keys(defaults)
|
||||||
.every(
|
.every(
|
||||||
(prop) => !(prop in mods)
|
(dProp) => !(dProp in mods)
|
||||||
|| Boolean(defaults[prop]) === Boolean(mods[prop])
|
|| Boolean(defaults[dProp]) === Boolean(mods[dProp])
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log('Input mods:', mods);
|
console.log('Input mods:', mods);
|
||||||
|
@ -148,6 +158,14 @@
|
||||||
self.excluded.push(host);
|
self.excluded.push(host);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
['included', 'excluded'].forEach((who) => {
|
||||||
|
|
||||||
|
self[who] = self[who]
|
||||||
|
.map( (s) => s.split('').reverse() )
|
||||||
|
.sort()
|
||||||
|
.map( (a) => a.reverse().join('') );
|
||||||
|
|
||||||
|
});
|
||||||
if (self.included.length && !self.filteredCustomsString) {
|
if (self.included.length && !self.filteredCustomsString) {
|
||||||
return [null, self, new TypeError(
|
return [null, self, new TypeError(
|
||||||
'Имеются сайты, добавленные вручную. Они проксироваться не будут, т.к. нет СВОИХ проски, удовлетворяющих вашим запросам!'
|
'Имеются сайты, добавленные вручную. Они проксироваться не будут, т.к. нет СВОИХ проски, удовлетворяющих вашим запросам!'
|
||||||
|
@ -175,15 +193,18 @@
|
||||||
|
|
||||||
let res = pacMods.ifProhibitDns ? `
|
let res = pacMods.ifProhibitDns ? `
|
||||||
global.dnsResolve = function(host) { return null; };
|
global.dnsResolve = function(host) { return null; };
|
||||||
` : '';
|
` : '';
|
||||||
if (pacMods.ifProxyHttpsUrlsOnly) {
|
if (pacMods.ifProxyHttpsUrlsOnly) {
|
||||||
|
|
||||||
res += `
|
res += `
|
||||||
if (!url.startsWith("https")) {
|
if (!url.startsWith("https")) {
|
||||||
return "DIRECT";
|
return "DIRECT";
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
res += `
|
||||||
|
const directIfAllowed = ${pacMods.ifProxyOrDie ? '""/* Not allowed. */' : '"; DIRECT"'};
|
||||||
|
`;
|
||||||
|
|
||||||
const ifIncluded = pacMods.included && pacMods.included.length;
|
const ifIncluded = pacMods.included && pacMods.included.length;
|
||||||
const ifExcluded = pacMods.excluded && pacMods.excluded.length;
|
const ifExcluded = pacMods.excluded && pacMods.excluded.length;
|
||||||
|
@ -191,6 +212,7 @@
|
||||||
|
|
||||||
if (ifExceptions) {
|
if (ifExceptions) {
|
||||||
res += `
|
res += `
|
||||||
|
/* EXCEPTIONS START */
|
||||||
const dotHost = '.' + host;
|
const dotHost = '.' + host;
|
||||||
const isHostInDomain = (domain) => dotHost.endsWith('.' + domain);
|
const isHostInDomain = (domain) => dotHost.endsWith('.' + domain);
|
||||||
const domainReducer = (maxWeight, [domain, ifIncluded]) => {
|
const domainReducer = (maxWeight, [domain, ifIncluded]) => {
|
||||||
|
@ -209,45 +231,35 @@
|
||||||
const excWeight = ${JSON.stringify(Object.entries(pacMods.exceptions))}.reduce( domainReducer, 0 );
|
const excWeight = ${JSON.stringify(Object.entries(pacMods.exceptions))}.reduce( domainReducer, 0 );
|
||||||
if (excWeight !== 0) {
|
if (excWeight !== 0) {
|
||||||
if (excWeight > 0) {
|
if (excWeight > 0) {
|
||||||
return "${pacMods.filteredCustomsString}; DIRECT";
|
// Always proxy it!
|
||||||
|
return "${pacMods.filteredCustomsString}" + directIfAllowed;
|
||||||
} else {
|
} else {
|
||||||
|
// Never proxy it!
|
||||||
return "DIRECT";
|
return "DIRECT";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* EXCEPTIONS END */
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
/*
|
res += `
|
||||||
if (ifIncluded) {
|
const pacProxyString = originalFindProxyForURL(url, host)${
|
||||||
res += `
|
pacMods.ifProxyOrDie ? '.replace(/DIRECT/g, "")' : ' + directIfAllowed'
|
||||||
if (${JSON.stringify(pacMods.included)}.some(isHostInDomain)) {
|
};`;
|
||||||
}
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ifExcluded) {
|
|
||||||
res += `
|
|
||||||
if (${JSON.stringify(pacMods.excluded)}.some(isHostInDomain)) {
|
|
||||||
return "DIRECT";
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if(
|
if(
|
||||||
!pacMods.ifUseSecureProxiesOnly &&
|
!pacMods.ifUseSecureProxiesOnly &&
|
||||||
!pacMods.filteredCustomsString &&
|
!pacMods.filteredCustomsString &&
|
||||||
pacMods.ifUsePacScriptProxies
|
pacMods.ifUsePacScriptProxies
|
||||||
) {
|
) {
|
||||||
return res + `
|
return res + `
|
||||||
return originalFindProxyForURL(url, host);
|
return pacProxyString;`;
|
||||||
`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res + `
|
return res + `
|
||||||
const pacProxyString = originalFindProxyForURL(url, host);
|
|
||||||
let pacProxyArray = pacProxyString.split(/(?:\\s*;\\s*)+/g).filter( (p) => p );
|
let pacProxyArray = pacProxyString.split(/(?:\\s*;\\s*)+/g).filter( (p) => p );
|
||||||
if (pacProxyArray.every( (p) => /^DIRECT$/i.test(p) )) {
|
const ifNoProxies = pacProxyArray${pacMods.ifProxyOrDie ? '.length === 0' : '.every( (p) => /^DIRECT$/i.test(p) )'};
|
||||||
|
if (ifNoProxies) {
|
||||||
// Directs only or null, no proxies.
|
// Directs only or null, no proxies.
|
||||||
return pacProxyString;
|
return "DIRECT";
|
||||||
}
|
}
|
||||||
return ` +
|
return ` +
|
||||||
function() {
|
function() {
|
||||||
|
@ -258,14 +270,14 @@
|
||||||
let filteredPacExp = 'pacProxyString';
|
let filteredPacExp = 'pacProxyString';
|
||||||
if (pacMods.ifUseSecureProxiesOnly) {
|
if (pacMods.ifUseSecureProxiesOnly) {
|
||||||
filteredPacExp =
|
filteredPacExp =
|
||||||
'pacProxyArray.filter( (pStr) => /^HTTPS\s/.test(pStr) ).join("; ")';
|
'pacProxyArray.filter( (pStr) => /^HTTPS\\s/.test(pStr) ).join("; ")';
|
||||||
}
|
}
|
||||||
if ( !pacMods.filteredCustomsString ) {
|
if ( !pacMods.filteredCustomsString ) {
|
||||||
return filteredPacExp;
|
return filteredPacExp;
|
||||||
}
|
}
|
||||||
return `${filteredPacExp} + "; ${pacMods.filteredCustomsString}"`;
|
return `${filteredPacExp} + "; ${pacMods.filteredCustomsString}"`;
|
||||||
|
|
||||||
}() + ' + "; DIRECT";'; // Without DIRECT you will get 'PROXY CONN FAILED' pac-error.
|
}() + ' + directIfAllowed;'; // Without DIRECT you will get 'PROXY CONN FAILED' pac-error.
|
||||||
|
|
||||||
}()}
|
}()}
|
||||||
|
|
||||||
|
|
|
@ -438,7 +438,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
// ON EACH LAUNCH, STARTUP, RELOAD, UPDATE, ENABLE
|
// ON EACH LAUNCH, STARTUP, RELOAD, UPDATE, ENABLE
|
||||||
chrome.storage.local.get(null, chromified( (err, oldStorage) => {
|
chrome.storage.local.get(null, chromified( async (err, oldStorage) => {
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
throw err;
|
throw err;
|
||||||
|
@ -508,13 +508,16 @@
|
||||||
*/
|
*/
|
||||||
const ifUpdating = antiCensorRu.version !== oldStorage.version;
|
const ifUpdating = antiCensorRu.version !== oldStorage.version;
|
||||||
|
|
||||||
if (!ifUpdating) {
|
await new Promise((resolve) => {
|
||||||
|
|
||||||
// LAUNCH, RELOAD, ENABLE
|
if (!ifUpdating) {
|
||||||
antiCensorRu.pacProviders = oldStorage.pacProviders;
|
|
||||||
console.log('Extension launched, reloaded or enabled.');
|
|
||||||
|
|
||||||
} else {
|
// LAUNCH, RELOAD, ENABLE
|
||||||
|
antiCensorRu.pacProviders = oldStorage.pacProviders;
|
||||||
|
console.log('Extension launched, reloaded or enabled.');
|
||||||
|
return resolve();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// UPDATE & MIGRATION
|
// UPDATE & MIGRATION
|
||||||
console.log('Updating from ', oldStorage.version, 'to', antiCensorRu.version);
|
console.log('Updating from ', oldStorage.version, 'to', antiCensorRu.version);
|
||||||
|
@ -530,21 +533,20 @@
|
||||||
antiCensorRu._currentPacProviderKey = 'Антизапрет';
|
antiCensorRu._currentPacProviderKey = 'Антизапрет';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log('Extension updated.');
|
|
||||||
|
|
||||||
}
|
antiCensorRu.pushToStorageAsync(() =>
|
||||||
|
window.apis.pacKitchen.keepCookedNowAsync(() => {
|
||||||
|
|
||||||
|
console.log('Extension updated.');
|
||||||
|
resolve();
|
||||||
|
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
if (antiCensorRu.getPacProvider()) {
|
if (antiCensorRu.getPacProvider()) {
|
||||||
|
antiCensorRu.setAlarms();
|
||||||
const ifAlarmTriggered = antiCensorRu.setAlarms();
|
|
||||||
|
|
||||||
if (ifAlarmTriggered) {
|
|
||||||
return; // Already pushed.
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
if( ifUpdating ) {
|
|
||||||
antiCensorRu.pushToStorageAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -305,6 +305,12 @@
|
||||||
|
|
||||||
/* TAB_2 PAC MODS */
|
/* TAB_2 PAC MODS */
|
||||||
|
|
||||||
|
#pac-mods label {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#pac-mods label:first-letter {
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
#mods-custom-proxy-string-raw ~ textarea {
|
#mods-custom-proxy-string-raw ~ textarea {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 7em;
|
height: 7em;
|
||||||
|
@ -468,7 +474,7 @@
|
||||||
<div id="exc-address">
|
<div id="exc-address">
|
||||||
<span>*.</span><input placeholder="navalny.com" list="exc-list" name="browser" id="exc-editor" style=""/>
|
<span>*.</span><input placeholder="navalny.com" list="exc-list" name="browser" id="exc-editor" style=""/>
|
||||||
</div>
|
</div>
|
||||||
<a href="../exceptions/index.html" title="импорт-экспорт"><svg
|
<a href="../exceptions/index.html" title="импорт/экспорт"><svg
|
||||||
class="icon"
|
class="icon"
|
||||||
><use xlink:href="#icon-import-export"></use></svg>
|
><use xlink:href="#icon-import-export"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<html style="display: none; will-change: contents, display">
|
<html style="display: none; will-change: contents, display">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Импорт-экспорт исключений</title>
|
<title>Импорт/экспорт исключений</title>
|
||||||
<style>
|
<style>
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "emoji";
|
font-family: "emoji";
|
||||||
|
|
|
@ -16,7 +16,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
||||||
# Комментарии НЕ сохраняются!
|
# Комментарии НЕ сохраняются!
|
||||||
# Сначала идёт список проксируемых сайтов,
|
# Сначала идёт список проксируемых сайтов,
|
||||||
# затем ==== на отдельной строке,
|
# затем ==== на отдельной строке,
|
||||||
# затем исключённые сайты.
|
# затем исключённые сайты, отсортированные с конца строки.
|
||||||
|
|
||||||
# ПРОКСИРОВАТЬ:
|
# ПРОКСИРОВАТЬ:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user