pac-setter hits 0.0.0.4

This commit is contained in:
Ilya Ig. Petrov 2016-01-18 00:27:54 +05:00
parent c8fd652ab4
commit 7947a01d73
4 changed files with 71 additions and 40 deletions

View File

@ -9,7 +9,7 @@ function getHostname(url) {
}
function blockInform(details) {
if (details.tabId !== -1 && window.antiCensorRu.pacProvider && window.antiCensorRu.pacProvider.proxyIp && details.ip === window.antiCensorRu.pacProvider.proxyIp) {
if (details.tabId !== -1 && window.antiCensorRu.pacProvider && window.antiCensorRu.pacProvider.proxyIps && window.antiCensorRu.pacProvider.proxyIps[ details.ip ]) {
chrome.pageAction.setIcon({
path: '/icons/rkn-empty.png',

View File

@ -2,8 +2,8 @@
"manifest_version": 2,
"name": "Ненавязчивый РосКомНадзор",
"description": "Потому что хорошее ценрзурирование -- это слишком сложно.y",
"version": "0.0.0.3",
"description": "Аргументы против цензуры: https://git.io/vEkI9",
"version": "0.0.0.4",
"icons": {
"128": "/icons/rkn-empty.png"
},

View File

@ -19,28 +19,41 @@ chrome.runtime.getBackgroundPage( backgroundPage => {
ul.insertBefore( li, _firstChild );
}
var checkChosenProvider = () => {
var targetRadio = () => {
var id = antiCensorRu.currentPacProviderKey || 'none';
var checkedRadio = document.querySelector('#'+id);
checkedRadio.checked = true;
return document.querySelector('#'+id);
}
var checkChosenProvider = () => {
targetRadio().checked = true;
}
var triggerChosenProvider = () => {
var event = document.createEvent('HTMLEvents');
event.initEvent('change', false, true);
checkedRadio.dispatchEvent(event);
targetRadio().dispatchEvent(event);
}
checkChosenProvider();
setStatusTo('');
var radios = [].slice.apply( document.querySelectorAll('[name=pacProvider]') );
for(var radio of radios) {
radio.onchange = function(event) {
setStatusTo('');
var pacKey = event.target.id;
if (pacKey === 'none')
return antiCensorRu.clearPac( () => window && window.close() );
function switchInputs() {
var inputs = document.querySelectorAll('[name="pacProvider"]');
for (var i = 0; i < inputs.length; i++)
inputs[i].disabled = !inputs[i].disabled;
}
switchInputs();
setStatusTo('Установка...');
antiCensorRu.installPac(pacKey, () => { setStatusTo('PAC-скрипт установлен.'); if(window) window.close(); });
}
}
setStatusTo('');
checkChosenProvider();
if (antiCensorRu.ifNotInstalled)
triggerChosenProvider();
});

View File

@ -23,16 +23,20 @@ window.antiCensorRu = {
pacProviders: {
Антизапрет: {
pacUrl: 'http://antizapret.prostovpn.org/proxy.pac',
proxyHost: 'proxy.antizapret.prostovpn.org',
proxyIp: '195.154.110.37'
proxyHosts: ['proxy.antizapret.prostovpn.org'],
proxyIps: {'195.154.110.37': true}
},
Антиценз: {
pacUrl: 'https://config.anticenz.org/proxy.pac',
proxyHost: 'gw2.anticenz.org'
proxyHosts: ['gw2.anticenz.org']
},
Обаа_свитчах: {
pacUrl: 'https://drive.google.com/uc?export=download&id=0B-ZCVSvuNWf0akpCOURNS2VCTmc',
proxyHosts: ['gw2.anticenz.org', 'proxy.antizapret.prostovpn.org']
}
},
_currentPacProviderKey: 'Антиценз',
_currentPacProviderKey: 'Оба_и_на_свитчах',
get currentPacProviderKey() { return this._currentPacProviderKey },
set currentPacProviderKey(newKey) {
@ -71,7 +75,7 @@ window.antiCensorRu = {
setPacScriptFromProvider(
this.pacProvider,
() => {
updatePacProxyIp(
updatePacProxyIps(
this.pacProvider,
() => {
this.ifNotInstalled = false;
@ -82,6 +86,7 @@ window.antiCensorRu = {
},
installPac(key, cb) {
if(typeof(key) === 'function') {
cb = key;
key = undefined;
@ -101,7 +106,7 @@ window.antiCensorRu = {
);
chrome.alarms.create(reason, {
periodInMinutes: 2*60
periodInMinutes: 4*60
});
this.syncWithPacProvider(cb);
@ -120,22 +125,23 @@ window.antiCensorRu = {
};
chrome.runtime.onStartup.addListener( () => {
console.log('Starting...');
window.antiCensorRu.pullFromStorage(
() =>
chrome.storage.onChanged.addListener( () => window.antiCensorRu.pullFromStorage() )
)
});
chrome.runtime.onInstalled.addListener( details => {
console.log('Installing...');
switch(details.reason) {
case 'install':
case 'update':
window.antiCensorRu.pullFromStorage(
() => {
window.antiCensorRu.ifNotInstalled = true;
window.antiCensorRu.installPac();
//chrome.runtime.openOptionsPage();
}
)
break;
case 'install':
window.antiCensorRu.ifNotInstalled = true;
chrome.runtime.openOptionsPage();
}
});
@ -159,7 +165,7 @@ function httpGet(url, cb) {
var ifAsync = true;
req.open('GET', url, ifAsync);
req.onload = event => {
if (req.status === 404)
if (req.status !== 200)
return cb(event);
console.log('GETed with success.');
return cb(null, req.responseText)
@ -168,20 +174,32 @@ function httpGet(url, cb) {
req.send();
}
function updatePacProxyIp(provider, cb) {
var cb = asyncLogGroup('Getting IP for '+ provider.proxyHost +'...', cb);
function updatePacProxyIps(provider, cb) {
if (!provider.proxyHosts) {
console.log(provider+' has no proxies defined.');
return cb(null, null);
}
var cb = asyncLogGroup('Getting IP for '+ provider.proxyHosts.join(', ') +'...', cb);
var i = 0;
for (var proxyHost of provider.proxyHosts) {
httpGet(
'http://www.dns-lg.com/google1/'+ provider.proxyHost +'/A',
'http://www.dns-lg.com/google1/'+ proxyHost +'/A',
(err, res) => {
if (!err)
provider.proxyIp = JSON.parse(res).answer[0].rdata;
return cb(err, res);
if (!err) {
provider.proxyIps = provider.proxyIps || {};
provider.proxyIps[ JSON.parse(res).answer[0].rdata ] = true;
}
++i;
if ( i == provider.proxyHosts.length )
return cb(err, 'Complete.');
}
);
}
}
function setPacScriptFromProvider(provider, cb) {
var cb = asyncLogGroup('Getting pac script from provider...', provider.pacUrl, cb);
httpGet(
provider.pacUrl,
(err, res) => {