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) { if (!IF_DEBUG) {
// I believe logging objects precludes them from being GCed. // I believe logging objects precludes them from being GCed.

View File

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

View File

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

View File

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

View File

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

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(); 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) {