mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2024-11-27 20:03:45 +03:00
Start adding copy-paste, fix exceptions UI, add dns padding, refactor
lastModifiedSTR
This commit is contained in:
parent
ae9e7b7471
commit
89e92c28d2
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
const IF_DEBUG = false;
|
const IF_DEBUG = true;
|
||||||
|
|
||||||
if (!IF_DEBUG) {
|
if (!IF_DEBUG) {
|
||||||
// I believe logging objects precludes them from being GCed.
|
// I believe logging objects precludes them from being GCed.
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
ifProhibitDns: {
|
ifProhibitDns: {
|
||||||
dflt: false,
|
dflt: false,
|
||||||
label: 'запретить опредление по IP/DNS',
|
label: 'запретить опредление по IP/DNS',
|
||||||
desc: 'Пытается запретить скрипту использовать DNS, без которого определение блокировки по IP работать не будет. Используйте, если вам кажется, что мы проксируем слишком много сайтов. Запрет действует только для скрипта, браузер и др.программы продолжат использование DNS.',
|
desc: 'Пытается запретить скрипту использовать DNS, без которого определение блокировки по IP работать не будет (т.е. будет разблокироваться меньше сайтов). Используйте, чтобы получить прирост в производительности или если вам кажется, что мы проксируем слишком много сайтов. Запрет действует только для скрипта, браузер и др.программы продолжат использование DNS.',
|
||||||
index: 2,
|
index: 2,
|
||||||
},
|
},
|
||||||
ifUsePacScriptProxies: {
|
ifUsePacScriptProxies: {
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
const setPacScriptFromProviderAsync = function setPacScriptFromProviderAsync(
|
const setPacScriptFromProviderAsync = function setPacScriptFromProviderAsync(
|
||||||
provider, lastModified = mandatory(), cb = throwIfError
|
provider, lastModifiedStr = mandatory(), cb = throwIfError
|
||||||
) {
|
) {
|
||||||
|
|
||||||
const pacUrl = provider.pacUrls[0];
|
const pacUrl = provider.pacUrls[0];
|
||||||
|
@ -107,17 +107,20 @@
|
||||||
cb
|
cb
|
||||||
);
|
);
|
||||||
|
|
||||||
httpLib.ifModifiedSince(pacUrl, lastModified, (err, newLastModified) => {
|
httpLib.ifModifiedSince(pacUrl, lastModifiedStr, (err, newLastModifiedStr) => {
|
||||||
|
|
||||||
if (!newLastModified) {
|
if (!newLastModifiedStr) {
|
||||||
return cb(
|
const res = {lastModified: lastModifiedStr};
|
||||||
null,
|
const ifWasEverModified = lastModifiedStr !== new Date(0).toUTCString();
|
||||||
{lastModified},
|
if (ifWasEverModified) {
|
||||||
new Warning(
|
return cb(
|
||||||
'Ваш PAC-скрипт не нуждается в обновлении. Его дата: ' +
|
null, res,
|
||||||
lastModified
|
new Warning(
|
||||||
)
|
'Ваш PAC-скрипт не нуждается в обновлении. Его дата: ' +
|
||||||
);
|
lastModifiedStr
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Employ all urls, the latter are fallbacks for the former.
|
// Employ all urls, the latter are fallbacks for the former.
|
||||||
|
@ -141,7 +144,7 @@
|
||||||
pacData,
|
pacData,
|
||||||
(err, res) => cb(
|
(err, res) => cb(
|
||||||
err,
|
err,
|
||||||
Object.assign(res || {}, {lastModified: newLastModified})
|
Object.assign(res || {}, {lastModified: newLastModifiedStr})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -454,9 +454,9 @@
|
||||||
</section>
|
</section>
|
||||||
<section data-for="acc-exc" class="hidden-for-options-page">
|
<section data-for="acc-exc" class="hidden-for-options-page">
|
||||||
|
|
||||||
<div>Проксировать указанный сайт?</div>
|
<div>Проксировать указанный сайт?
|
||||||
<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=""/><a href="../exceptions/index.html">☰</a></div>
|
||||||
</div>
|
</div>
|
||||||
<datalist id="exc-list"></datalist>
|
<datalist id="exc-list"></datalist>
|
||||||
<ol class="horizontal-list" id="exc-radio">
|
<ol class="horizontal-list" id="exc-radio">
|
||||||
|
|
|
@ -348,7 +348,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
||||||
{
|
{
|
||||||
const maxIndentFromRightInPx = 15;
|
const maxIndentFromRightInPx = 15;
|
||||||
ifTriangleClicked = ifClick
|
ifTriangleClicked = ifClick
|
||||||
&& !excEditor.selectionStart && !excEditor.selectionStart
|
&& !excEditor.selectionStart && !excEditor.selectionEnd
|
||||||
&& event.x > excEditor.getBoundingClientRect().right - maxIndentFromRightInPx;
|
&& event.x > excEditor.getBoundingClientRect().right - maxIndentFromRightInPx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,7 +426,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exact found!
|
// Exact found!
|
||||||
hideOpt(exactOpt);
|
excList.childNodes.forEach(hideOpt);
|
||||||
if(exactOpt.label === labelIfProxied) {
|
if(exactOpt.label === labelIfProxied) {
|
||||||
thisYes.checked = true;
|
thisYes.checked = true;
|
||||||
excEditor.parentNode.classList.add(yesClass);
|
excEditor.parentNode.classList.add(yesClass);
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Исключения</title>
|
||||||
|
<style>
|
||||||
|
html, body {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
display: block;
|
||||||
|
border-width: 1px 0 0 0;
|
||||||
|
padding: 1em;
|
||||||
|
height: 100%;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
nav {
|
||||||
|
padding: 0.2em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<button>Сохранить в памяти</button>
|
||||||
|
<button>Считать из памяти</button>
|
||||||
|
</nav>
|
||||||
|
<textarea id="editor"></textarea>
|
||||||
|
<script src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,24 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
||||||
|
backgroundPage.apis.errorHandlers.installListenersOn(
|
||||||
|
window, 'EXC', () => {
|
||||||
|
|
||||||
|
const editor = document.getElementById('editor');
|
||||||
|
const mods = backgroundPage.apis.pacKitchen.getPacMods();
|
||||||
|
editor.innerText = `# Комментарии начинаются с # и действуют до конца строки.
|
||||||
|
# Сначала идёт список проксируемых сайтов,
|
||||||
|
# затем ---- на отдельной строке,
|
||||||
|
# затем исключённые сайты.
|
||||||
|
|
||||||
|
# ПРОКСИРОВАТЬ:
|
||||||
|
|
||||||
|
${mods.included.join('\n')}
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
# НЕ ПРОКСИРОВАТЬ:
|
||||||
|
|
||||||
|
${mods.excluded.join('\n')}`;
|
||||||
|
|
||||||
|
})
|
||||||
|
);
|
|
@ -104,6 +104,14 @@
|
||||||
|
|
||||||
reinit();
|
reinit();
|
||||||
|
|
||||||
|
const generateRandomHexString = function generateRandomHexString(minLen, maxLen) {
|
||||||
|
|
||||||
|
return Array.from(window.crypto.getRandomValues(new Uint8Array(maxLen)))
|
||||||
|
.slice(minLen + Math.floor(Math.random()*(maxLen - minLen)))
|
||||||
|
.map((i) => i.toString(16)).join('');
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
const getIpsFor = function getIpsFor(host, cb = mandatory()) {
|
const getIpsFor = function getIpsFor(host, cb = mandatory()) {
|
||||||
|
|
||||||
if (host.trim() === 'localhost') {
|
if (host.trim() === 'localhost') {
|
||||||
|
@ -113,7 +121,7 @@
|
||||||
const promises = types.map(
|
const promises = types.map(
|
||||||
(type) => new Promise((resolve) =>
|
(type) => new Promise((resolve) =>
|
||||||
httpLib.get(
|
httpLib.get(
|
||||||
`https://dns.google.com/resolve?type=${type}&name=${host}&edns_client_subnet=0.0.0.0/0`,
|
`https://dns.google.com/resolve?type=${type}&name=${host}&random_padding=${generateRandomHexString(30,500)}`,
|
||||||
(err, res) => {
|
(err, res) => {
|
||||||
|
|
||||||
if (res) {
|
if (res) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user