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)