Start adding copy-paste, fix exceptions UI, add dns padding, refactor

lastModifiedSTR
This commit is contained in:
Ilya Ig. Petrov 2017-03-17 10:31:24 +00:00
parent ae9e7b7471
commit 89e92c28d2
8 changed files with 91 additions and 19 deletions

View File

@ -2,7 +2,7 @@
{
const IF_DEBUG = false;
const IF_DEBUG = true;
if (!IF_DEBUG) {
// I believe logging objects precludes them from being GCed.

View File

@ -30,7 +30,7 @@
ifProhibitDns: {
dflt: false,
label: 'запретить опредление по IP/DNS',
desc: 'Пытается запретить скрипту использовать DNS, без которого определение блокировки по IP работать не будет. Используйте, если вам кажется, что мы проксируем слишком много сайтов. Запрет действует только для скрипта, браузер и др.программы продолжат использование DNS.',
desc: 'Пытается запретить скрипту использовать DNS, без которого определение блокировки по IP работать не будет (т.е. будет разблокироваться меньше сайтов). Используйте, чтобы получить прирост в производительности или если вам кажется, что мы проксируем слишком много сайтов. Запрет действует только для скрипта, браузер и др.программы продолжат использование DNS.',
index: 2,
},
ifUsePacScriptProxies: {

View File

@ -98,7 +98,7 @@
};
const setPacScriptFromProviderAsync = function setPacScriptFromProviderAsync(
provider, lastModified = mandatory(), cb = throwIfError
provider, lastModifiedStr = mandatory(), cb = throwIfError
) {
const pacUrl = provider.pacUrls[0];
@ -107,17 +107,20 @@
cb
);
httpLib.ifModifiedSince(pacUrl, lastModified, (err, newLastModified) => {
httpLib.ifModifiedSince(pacUrl, lastModifiedStr, (err, newLastModifiedStr) => {
if (!newLastModified) {
return cb(
null,
{lastModified},
new Warning(
'Ваш PAC-скрипт не нуждается в обновлении. Его дата: ' +
lastModified
)
);
if (!newLastModifiedStr) {
const res = {lastModified: lastModifiedStr};
const ifWasEverModified = lastModifiedStr !== new Date(0).toUTCString();
if (ifWasEverModified) {
return cb(
null, res,
new Warning(
'Ваш PAC-скрипт не нуждается в обновлении. Его дата: ' +
lastModifiedStr
)
);
}
}
// Employ all urls, the latter are fallbacks for the former.
@ -141,7 +144,7 @@
pacData,
(err, res) => cb(
err,
Object.assign(res || {}, {lastModified: newLastModified})
Object.assign(res || {}, {lastModified: newLastModifiedStr})
)
);

View File

@ -454,9 +454,9 @@
</section>
<section data-for="acc-exc" class="hidden-for-options-page">
<div>Проксировать указанный сайт?</div>
<div>Проксировать указанный сайт?
<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>
<datalist id="exc-list"></datalist>
<ol class="horizontal-list" id="exc-radio">

View File

@ -348,7 +348,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
{
const maxIndentFromRightInPx = 15;
ifTriangleClicked = ifClick
&& !excEditor.selectionStart && !excEditor.selectionStart
&& !excEditor.selectionStart && !excEditor.selectionEnd
&& event.x > excEditor.getBoundingClientRect().right - maxIndentFromRightInPx;
}
@ -426,7 +426,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
}
// Exact found!
hideOpt(exactOpt);
excList.childNodes.forEach(hideOpt);
if(exactOpt.label === labelIfProxied) {
thisYes.checked = true;
excEditor.parentNode.classList.add(yesClass);

View File

@ -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>

View File

@ -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')}`;
})
);

View File

@ -104,6 +104,14 @@
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()) {
if (host.trim() === 'localhost') {
@ -113,7 +121,7 @@
const promises = types.map(
(type) => new Promise((resolve) =>
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) => {
if (res) {