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