diff --git a/extensions/chromium/runet-censorship-bypass/src/extension-common/35-pac-kitchen-api.js b/extensions/chromium/runet-censorship-bypass/src/extension-common/35-pac-kitchen-api.js index 59efacc..2189525 100644 --- a/extensions/chromium/runet-censorship-bypass/src/extension-common/35-pac-kitchen-api.js +++ b/extensions/chromium/runet-censorship-bypass/src/extension-common/35-pac-kitchen-api.js @@ -79,7 +79,7 @@ }, ifProhibitDns: { dflt: false, - label: 'запретить опредление по IP/DNS', + label: 'запретить определение по IP/DNS', desc: 'Пытается запретить скрипту использовать DNS, без которого определение блокировки по IP работать не будет (т.е. будет разблокироваться меньше сайтов). Используйте, чтобы получить прирост в производительности или если вам кажется, что мы проксируем слишком много сайтов. Запрет действует только для скрипта, браузер и др.программы продолжат использование DNS.', order: 2, }, @@ -130,6 +130,14 @@ desc: 'Проксировать особые домены. Необходима поддержка со стороны СВОИХ прокси.', order: 8, }, + replaceDirectWith: { + ifDisabled: true, + dflt: false, + category: 'ownProxies', + label: 'подменять DIRECT на', + desc: 'Использовать в PAC-скрипте указанную строку для запросов напрямую (вместо директивы DIRECT). Данная строка не проверяется на требования к шифрованию связи до прокси! Строка должна соответствовать формату возвращаемого значения PAC-скрипта, который подобен формату своих прокси.', + order: 9, + }, }); @@ -240,7 +248,7 @@ }); if (!ifAuthSupported && protectedProxies.length) { - return [new Error('Запароленные прокси не поддерживатюся в данной версии/платформе!')]; + return [new Error('Запароленные прокси не поддерживаются в данной версии/платформе!')]; } proxyHostToCredsList = {}; @@ -327,7 +335,7 @@ /******/ "use strict"; /******/ /******/ const originalFindProxyForURL = FindProxyForURL; -/******/ const tmp = function(url, host) { +/******/ let tmp = function(url, host) { /******/ ${ function() { @@ -465,7 +473,42 @@ ${ pacMods.filteredCustomsString } /******/ }; - +${ + !pacMods.replaceDirectWith + ? '' + : ` +/******/ const oldTmp = tmp; +/******/ tmp = function(url, host) { +/******/ const ip = dnsResolve(host); +/******/ if (ip) { +/******/ const ipInt = convert_addr(ip); +/******/ if([ +/******/ /* Reserved networks: https://en.wikipedia.org/wiki/Reserved_IP_addresses#IPv4 */ +/******/ [-16777216, 0 ], // ['0.0.0.0' , '255.0.0.0' ], +/******/ [-16777216, 167772160 ], // ['10.0.0.0' , '255.0.0.0' ], +/******/ [-4194304, 1681915904 ], // ['100.64.0.0' , '255.192.0.0'], +/******/ [-16777216, 2130706432 ], // ['127.0.0.0' , '255.0.0.0' ], +/******/ [-65536, -1442971648], // ['169.254.0.0', '255.255.0.0'], +/******/ [-1048576, -1408237568], // ['172.16.0.0', '255.240.0.0'], +/******/ [-256, -1073741824], // ['192.0.0.0' , '255.255.255.0'], +/******/ [-256, -1073741312], // ['192.0.2.0' , '255.255.255.0'], +/******/ [-256, -1067949312], // ['192.88.99.0' , '255.255.255.0'], +/******/ [-65536, -1062731776], // ['192.168.0.0', '255.255.0.0'], +/******/ [-131072, -971898880 ], // ['198.18.0.0', '255.254.0.0'], +/******/ [-256, -969710592 ], // ['198.51.100.0', '255.255.255.0'], +/******/ [-256, -889163520 ], // ['203.0.113.0', '255.255.255.0'], +/******/ [-268435456, -536870912 ], // ['224.0.0.0', '240.0.0.0'], +/******/ [-268435456, -268435456 ], // ['240.0.0.0', '240.0.0.0'], +/******/ [-1, -1 ], // ['255.255.255.255' , '255.255.255.255'], +/******/ ].some(([netMask, maskedNet]) => (ipInt & netMask) === maskedNet) +/******/ ) { +/******/ return "DIRECT"; +/******/ } +/******/ } +/******/ return oldTmp.call(this, url, host).replace(/(;|^)\\s*DIRECT\\s*(?=;|$)/g, "$1${pacMods.replaceDirectWith}"); +/******/ }; + ` +} /******/ if (global) { /******/ global.FindProxyForURL = tmp; /******/ } else { diff --git a/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/InfoLi.js b/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/InfoLi.js index d1f1c53..509f304 100644 --- a/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/InfoLi.js +++ b/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/InfoLi.js @@ -25,6 +25,9 @@ export default function getInfoLi() { .infoRow { position: relative; } + .infoRow a { + text-decoration: underline; + } .infoRow > input[type="checkbox"] { position: relative; top: -0.08em; @@ -49,7 +52,7 @@ export default function getInfoLi() { position: absolute; white-space: initial; word-break: initial; - top: 100%; + /* top: 100%; Commented to get rid of bug when tooltip is placed below InfoLi children fields. */ left: 0; right: 1em; z-index: 1; diff --git a/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/Main.js b/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/Main.js index 69043bf..3935266 100644 --- a/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/Main.js +++ b/extensions/chromium/runet-censorship-bypass/src/extension-common/pages/options/src/components/Main.js @@ -31,6 +31,7 @@ export default function getMain(theState) { const Notifications = getNotifications(theState); const checksName = 'pacMods'; + let selection = [0, 0]; // TODO: dirty hack but seems ok. return class Main extends Component { @@ -161,6 +162,26 @@ export default function getMain(theState) { orderedConfigs: this.state.catToOrderedMods['ownProxies'], childrenOfMod: { customProxyStringRaw: ProxyEditor, + replaceDirectWith: ({ conf, onNewValue, ifInputsDisabled }) => + ( { + + const t = event.target; + selection = [t.selectionStart, t.selectionEnd]; + onNewValue(true, t.value); + }} + ref={(input) => { + + if (input) { + input.focus(); + input.selectionStart = selection[0]; + input.selectionEnd = selection[1]; + } + }} + />), }, name: checksName, }, modsHandlers)