pac-setter hits 0.0.0.2: more transparent code
11
extensions/chromium/minimalistic-pac-setter/README.md
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
Обход Интернет-цензуры в России пока что не является нарушением закона.
|
||||||
|
|
||||||
|
Расширение позволяет обходить блокировки РосКомНадзора, давая вам доступ
|
||||||
|
к библиотекам, энциклопедиям и сайтам оппоцизионного движения в России.
|
||||||
|
|
||||||
|
Проксирует только заблокированные сайты, оставляя нетронутыми все остальные.
|
||||||
|
|
||||||
|
Известные недостатки: ресурсы с динамичным IP, попадающих под блокировку, некорректно проксируются. Непричастные к блокировкам сайты рушатся.
|
||||||
|
|
||||||
|
Неофициальное расширение на базе antizapret.prostovpn.org
|
||||||
|
Обновляет PAC-скрипт каждые два часа.
|
BIN
extensions/chromium/minimalistic-pac-setter/archive.org.png
Executable file
After Width: | Height: | Size: 78 KiB |
54
extensions/chromium/minimalistic-pac-setter/extnesion/block-informer.js
Executable file
|
@ -0,0 +1,54 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Shows user PageAction icon if any part of the current site is being blocked and proxied.
|
||||||
|
|
||||||
|
|
||||||
|
function getHostname(url) {
|
||||||
|
var a = document.createElement('a');
|
||||||
|
a.href = url;
|
||||||
|
return a.hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
function blockInform(details) {
|
||||||
|
if (details.tabId !== -1 && details.ip === antizapret.proxyIp) {
|
||||||
|
|
||||||
|
chrome.pageAction.setIcon({
|
||||||
|
path: '/icons/rkn-empty.png',
|
||||||
|
tabId: details.tabId
|
||||||
|
});
|
||||||
|
|
||||||
|
chrome.pageAction.getTitle(
|
||||||
|
{ tabId: details.tabId },
|
||||||
|
result => {
|
||||||
|
|
||||||
|
if (!/\n/.test(result))
|
||||||
|
result = 'Разблокированы:';
|
||||||
|
|
||||||
|
var hostname = getHostname(details.url).trim();
|
||||||
|
|
||||||
|
var ifListed = result.split(/\r?\n/g).some(
|
||||||
|
line => line.trim() === hostname
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!ifListed)
|
||||||
|
chrome.pageAction.setTitle({
|
||||||
|
title: result +'\n'+ hostname,
|
||||||
|
tabId: details.tabId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
chrome.pageAction.show(details.tabId);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
chrome.webRequest.onCompleted.addListener(
|
||||||
|
blockInform,
|
||||||
|
{ urls: ['<all_urls>'] }
|
||||||
|
);
|
||||||
|
|
||||||
|
chrome.webRequest.onErrorOccurred.addListener(
|
||||||
|
blockInform,
|
||||||
|
{ urls: ['<all_urls>'] }
|
||||||
|
);
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
@ -3,23 +3,21 @@
|
||||||
|
|
||||||
"name": "Антизапрет",
|
"name": "Антизапрет",
|
||||||
"description": "Безопасный Интернет с возможностью отказаться",
|
"description": "Безопасный Интернет с возможностью отказаться",
|
||||||
"version": "0.0.0.1",
|
"version": "0.0.0.2",
|
||||||
|
"icons": {
|
||||||
|
"128": "/icons/rkn-empty.png"
|
||||||
|
},
|
||||||
|
"author": "ilyaigpetrov@gmail.com",
|
||||||
|
"homepage_url": "https://github.com/ilyaigpetrov/anti-censorship-russia",
|
||||||
|
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"proxy",
|
"proxy",
|
||||||
"webRequest",
|
"webRequest",
|
||||||
"alarms",
|
"alarms",
|
||||||
"<all_urls>"
|
"<all_urls>"
|
||||||
],
|
],
|
||||||
"icons": {
|
|
||||||
"128": "/icons/rkn-empty.png"
|
|
||||||
},
|
|
||||||
"background": {
|
"background": {
|
||||||
"scripts": ["install.js", "proxy.js"]
|
"scripts": ["sync-pac-script-with-antizapret.js", "block-informer.js"]
|
||||||
},
|
},
|
||||||
"page_action": {},
|
"page_action": {}
|
||||||
|
|
||||||
"author": "ilyaigpetrov@gmail.com",
|
|
||||||
"homepage_url": "https://github.com/ilyaigpetrov/anti-censorship-russia",
|
|
||||||
"short_name": "Антизапрет"
|
|
||||||
}
|
}
|
|
@ -1,5 +1,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
Task 1. Gets IP for host proxy.antizapret.prostovpn.org with dns-lg.com.
|
||||||
|
This IP is used in block-informer to inform user when proxy is ON.
|
||||||
|
Task 2. Downloads PAC proxy script from Antizapret and sets it in Chromium settings.
|
||||||
|
Task 3. Schedules tasks 1 & 2 for every 2 hours.
|
||||||
|
*/
|
||||||
|
|
||||||
var antizapret = {
|
var antizapret = {
|
||||||
pacUrl: 'http://antizapret.prostovpn.org/proxy.pac',
|
pacUrl: 'http://antizapret.prostovpn.org/proxy.pac',
|
||||||
proxyHost: 'proxy.antizapret.prostovpn.org',
|
proxyHost: 'proxy.antizapret.prostovpn.org',
|
||||||
|
@ -20,16 +27,27 @@ function httpGet(url, cb) {
|
||||||
req.send();
|
req.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdatePac() {
|
function getIpForHost(host, cb) {
|
||||||
|
httpGet(
|
||||||
httpGet(
|
'http://www.dns-lg.com/google1/'+host+'/A',
|
||||||
'http://www.dns-lg.com/google1/'+antizapret.proxyHost+'/A',
|
cb
|
||||||
(err, res) => {
|
|
||||||
antizapret.proxyIp = JSON.parse(res).answer[0].rdata;
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
httpGet(
|
function updateAntizapretProxyIp() {
|
||||||
|
getIpForHost(
|
||||||
|
antizapret.proxyHost,
|
||||||
|
(err, res) => {
|
||||||
|
if (err)
|
||||||
|
console.log(err)
|
||||||
|
else
|
||||||
|
antizapret.proxyIp = JSON.parse(res).answer[0].rdata;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setPacScriptFromAntizapret() {
|
||||||
|
httpGet(
|
||||||
antizapret.pacUrl,
|
antizapret.pacUrl,
|
||||||
(err, res) => {
|
(err, res) => {
|
||||||
|
|
||||||
|
@ -47,8 +65,12 @@ function UpdatePac() {
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function syncWithAntizapret() {
|
||||||
|
updateAntizapretProxyIp();
|
||||||
|
setPacScriptFromAntizapret();
|
||||||
}
|
}
|
||||||
|
|
||||||
chrome.runtime.onInstalled.addListener( details => {
|
chrome.runtime.onInstalled.addListener( details => {
|
||||||
|
@ -56,14 +78,15 @@ chrome.runtime.onInstalled.addListener( details => {
|
||||||
case 'install':
|
case 'install':
|
||||||
case 'update':
|
case 'update':
|
||||||
|
|
||||||
UpdatePac();
|
syncWithAntizapret();
|
||||||
|
|
||||||
var reason = 'Периодичное обновление PAC-скрипта Антизапрет';
|
var reason = 'Периодичное обновление PAC-скрипта Антизапрет';
|
||||||
|
|
||||||
chrome.alarms.onAlarm.addListener(
|
chrome.alarms.onAlarm.addListener(
|
||||||
alarm => {
|
alarm => {
|
||||||
if (alarm.name === reason)
|
if (alarm.name === reason) {
|
||||||
UpdatePac();
|
syncWithAntizapret();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
function blockInform(details) {
|
|
||||||
if (details.tabId !== -1 && details.ip === antizapret.proxyIp) {
|
|
||||||
|
|
||||||
chrome.pageAction.setIcon({
|
|
||||||
path: '/icons/rkn-empty.png',
|
|
||||||
tabId: details.tabId
|
|
||||||
});
|
|
||||||
|
|
||||||
chrome.pageAction.setTitle({
|
|
||||||
title: 'Сайт блокирован!',
|
|
||||||
tabId: details.tabId
|
|
||||||
});
|
|
||||||
|
|
||||||
chrome.pageAction.show(details.tabId);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
chrome.webRequest.onCompleted.addListener(
|
|
||||||
blockInform,
|
|
||||||
{ urls: ['<all_urls>'] }
|
|
||||||
);
|
|
||||||
|
|
||||||
chrome.webRequest.onErrorOccurred.addListener(
|
|
||||||
blockInform,
|
|
||||||
{ urls: ['<all_urls>'] }
|
|
||||||
);
|
|