mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2024-11-27 20:03:45 +03:00
Promisifed syncWithPac, added error reports
This commit is contained in:
parent
6c2b2eba30
commit
7c4e78efac
|
@ -25,12 +25,14 @@
|
|||
.link-button, .link-button:visited {
|
||||
color: #0000EE;
|
||||
text-decoration: none;
|
||||
display: none;
|
||||
}
|
||||
.link-button:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
input:checked ~ .link-button {
|
||||
.checked-radio-panel {
|
||||
display: none;
|
||||
}
|
||||
input:checked ~ .checked-radio-panel {
|
||||
display: inline;
|
||||
}
|
||||
.button-panel {
|
||||
|
|
|
@ -5,8 +5,12 @@ renderPage();
|
|||
function renderPage() {
|
||||
console.log('Rendering started.');
|
||||
|
||||
function getStatus() {
|
||||
return document.querySelector('#status');
|
||||
}
|
||||
|
||||
function setStatusTo(msg) {
|
||||
var status = document.querySelector('#status');
|
||||
var status = getStatus();
|
||||
if (msg) {
|
||||
status.classList.remove('off');
|
||||
status.innerHTML = msg;
|
||||
|
@ -21,7 +25,7 @@ function renderPage() {
|
|||
// SET DATE
|
||||
|
||||
function setDate() {
|
||||
var dateForUser = '...';
|
||||
var dateForUser = 'никогда';
|
||||
if( antiCensorRu.lastPacUpdateStamp ) {
|
||||
var diff = Date.now() - antiCensorRu.lastPacUpdateStamp;
|
||||
var units = ' мс';
|
||||
|
@ -76,7 +80,7 @@ function renderPage() {
|
|||
var _firstChild = ul.firstChild;
|
||||
for( var providerKey of Object.keys(antiCensorRu.pacProviders) ) {
|
||||
var li = document.createElement('li');
|
||||
li.innerHTML = '<input type="radio" name="pacProvider" id="'+providerKey+'"> <label for="'+providerKey+'">'+providerKey+'</label> <a href class="link-button">[обновить]</a>';
|
||||
li.innerHTML = '<input type="radio" name="pacProvider" id="'+providerKey+'"> <label for="'+providerKey+'">'+providerKey+'</label> <a href class="link-button checked-radio-panel">[обновить]</a>';
|
||||
li.querySelector('.link-button').onclick = () => {triggerChosenProvider(); return false;};
|
||||
ul.insertBefore( li, _firstChild );
|
||||
}
|
||||
|
@ -97,8 +101,39 @@ function renderPage() {
|
|||
|
||||
enableDisableInputs();
|
||||
setStatusTo('Установка...');
|
||||
antiCensorRu.installPac(pacKey, () => {
|
||||
setStatusTo('PAC-скрипт установлен.');
|
||||
antiCensorRu.installPac(pacKey, err => {
|
||||
if (err) {
|
||||
var ifNotCritical = err.clarification && err.clarification.ifNotCritical;
|
||||
|
||||
var message = '';
|
||||
var clarification = err.clarification;
|
||||
do {
|
||||
message = message +' '+ (clarification && clarification.message || err.message || '');
|
||||
clarification = clarification.prev;
|
||||
} while( clarification && clarification.prev );
|
||||
message = message.trim();
|
||||
|
||||
message = '<span style="font-size: 0.9em; color: darkred">'+ message +'</span>';
|
||||
var label = ifNotCritical ? 'Некритичная ошибка.' : 'Ошибка!';
|
||||
label = '<span style="color:red">'+ label +'</span>';
|
||||
setStatusTo(
|
||||
label +'<br/>'+ message +' <a href class="link-button">[Ещё подробнее]</a>'
|
||||
);
|
||||
var btn = getStatus().querySelector('.link-button');
|
||||
btn.onclick = function() {
|
||||
var div = document.createElement('div');
|
||||
div.innerHTML = '\
|
||||
Более подробную информацию можно узнать из логов фоновой страницы:<br/>\
|
||||
<a href class="ext">chrome://extensions</a> › Это расширение › Отладка страниц: фоновая страница › Console (DevTools)';
|
||||
getStatus().replaceChild(div, this);
|
||||
div.querySelector('.ext').onclick = () => {
|
||||
chrome.tabs.create({ url: "chrome://extensions" });
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
} else
|
||||
setStatusTo('PAC-скрипт установлен.');
|
||||
enableDisableInputs();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -80,19 +80,34 @@ window.antiCensorRu = {
|
|||
lastPacUpdateStamp: 0,
|
||||
|
||||
syncWithPacProvider(cb) {
|
||||
setPacScriptFromProvider(
|
||||
this.pacProvider,
|
||||
err => {
|
||||
if (!err)
|
||||
var cb = cb || (() => {});
|
||||
|
||||
var pacSetPromise = new Promise(
|
||||
(resolve, reject) => setPacScriptFromProvider(
|
||||
this.pacProvider,
|
||||
(err, res) => {
|
||||
if (err)
|
||||
return reject(err);
|
||||
this.lastPacUpdateStamp = Date.now();
|
||||
updatePacProxyIps(
|
||||
this.pacProvider,
|
||||
() => {
|
||||
this.ifFirstInstall = false;
|
||||
this.pushToStorage(cb)
|
||||
}
|
||||
)}
|
||||
)
|
||||
this.ifFirstInstall = false;
|
||||
return resolve(res);
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
return updatePacProxyIps(
|
||||
this.pacProvider,
|
||||
ipsError => {
|
||||
if (ipsError && ipsError.clarification)
|
||||
ipsError.clarification.ifNotCritical = true;
|
||||
pacSetPromise.then(
|
||||
res => this.pushToStorage(
|
||||
pushError => pushError ? cb(pushError) : cb(ipsError, res)
|
||||
),
|
||||
err => cb(err)
|
||||
)
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
_periodicUpdateAlarmReason: 'Периодичное обновление PAC-скрипта Антизапрет',
|
||||
|
@ -191,18 +206,24 @@ function asyncLogGroup() {
|
|||
}
|
||||
}
|
||||
|
||||
function ifSuccessfulCode(status) {
|
||||
return status >= 200 && status < 300 || status === 304;
|
||||
}
|
||||
|
||||
function httpGet(url, cb) {
|
||||
var cb = cb || (() => {});
|
||||
var req = new XMLHttpRequest();
|
||||
var ifAsync = true;
|
||||
req.open('GET', url, ifAsync);
|
||||
req.onload = event => {
|
||||
if (req.status !== 200)
|
||||
return cb(event);
|
||||
if (!ifSuccessfulCode(req.status)) {
|
||||
req.clarification = {message: 'Получен ответ с неудачным HTTP-кодом '+req.status+ '.'};
|
||||
return cb(req);
|
||||
}
|
||||
console.log('GETed with success.');
|
||||
return cb(null, req.responseText)
|
||||
};
|
||||
req.onerror = cb;
|
||||
req.onerror = event => { event.clarification = {message: 'Что-то не так с сетью, проверьте соединение.'}; return cb(event); };
|
||||
req.send();
|
||||
}
|
||||
|
||||
|
@ -212,6 +233,10 @@ function updatePacProxyIps(provider, cb) {
|
|||
return cb(null, null);
|
||||
}
|
||||
var cb = asyncLogGroup('Getting IP for '+ provider.proxyHosts.join(', ') +'...', cb);
|
||||
var failure = {
|
||||
clarification: {message:'Не удалось получить один или несколько IP адресов для прокси-серверов. Иконка для уведомления об обходе блокировок может не отображаться.'},
|
||||
errors: {}
|
||||
};
|
||||
var i = 0;
|
||||
for (var proxyHost of provider.proxyHosts) {
|
||||
httpGet(
|
||||
|
@ -220,9 +245,13 @@ function updatePacProxyIps(provider, cb) {
|
|||
if (!err) {
|
||||
provider.proxyIps = provider.proxyIps || {};
|
||||
provider.proxyIps[ JSON.parse(res).answer[0].rdata ] = true;
|
||||
} else
|
||||
failure.errors[proxyHost] = err;
|
||||
|
||||
if ( ++i == provider.proxyHosts.length ) {
|
||||
failure = Object.keys(failure.errors).length ? failure : null;
|
||||
return cb(failure, provider.proxyIps);
|
||||
}
|
||||
if ( ++i == provider.proxyHosts.length )
|
||||
return cb(err, 'Complete.');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -234,8 +263,13 @@ function setPacScriptFromProvider(provider, cb) {
|
|||
httpGet(
|
||||
provider.pacUrl,
|
||||
(err, res) => {
|
||||
if (err)
|
||||
if (err) {
|
||||
err.clarification = {
|
||||
message: 'Не удалось скачать PAC-скрипт с адреса: ' +provider.pacUrl+ '.',
|
||||
prev: err.clarification
|
||||
};
|
||||
return cb(err);
|
||||
}
|
||||
console.log('Clearing chrome proxy settings...');
|
||||
return chrome.proxy.settings.clear({}, () => {
|
||||
var config = {
|
||||
|
|
Loading…
Reference in New Issue
Block a user