mirror of
https://github.com/anticensority/runet-censorship-bypass.git
synced 2024-11-24 02:13:43 +03:00
Counter abuse, add locales, change description, add utils.messages, change disabling to warning message if no-control, add mask and grayscale icons
This commit is contained in:
parent
dc47210ad9
commit
34c94eb3d3
|
@ -4,11 +4,30 @@ window.utils = {
|
|||
|
||||
areSettingsNotControlledFor(details) {
|
||||
|
||||
return ['controlled_by_other', 'not_controllable']
|
||||
return ['controlled_by_other', 'not_controllable']
|
||||
.some( (prefix) => details.levelOfControl.startsWith(prefix) );
|
||||
|
||||
},
|
||||
|
||||
messages: {
|
||||
|
||||
searchSettingsUrlFor(niddle) {
|
||||
|
||||
return 'chrome://settings/search#' + (chrome.i18n.getMessage(niddle) || niddle);
|
||||
|
||||
},
|
||||
|
||||
whichExtensionHtml() {
|
||||
|
||||
return chrome.i18n.getMessage('noControl') +
|
||||
` <a href="${ this.searchSettingsUrlFor('proxy') }">
|
||||
${ chrome.i18n.getMessage('which') }
|
||||
</a>`;
|
||||
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
window.apis = {};
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
for(const prop in value) {
|
||||
if (/^[A-Z]/.test(prop)) {
|
||||
console.log(prop);
|
||||
continue;
|
||||
}
|
||||
alt[prop] = value[prop];
|
||||
|
@ -80,7 +81,7 @@
|
|||
viewError(err) {
|
||||
|
||||
openAndFocus(
|
||||
'https://rebrand.ly/ac-error/?' + JSON.stringify(err, errorJsonReplacer, 0)
|
||||
'https://rebrand.ly/ac-error/?' + btoa(JSON.stringify(err, errorJsonReplacer, 0))
|
||||
);
|
||||
|
||||
},
|
||||
|
@ -120,9 +121,9 @@
|
|||
|
||||
this.ifNotControlled = window.utils.areSettingsNotControlledFor(details);
|
||||
if (this.ifNotControlled) {
|
||||
chrome.browserAction.disable();
|
||||
chrome.browserAction.setIcon( {path: './icons/default-grayscale-128.png'} );
|
||||
} else {
|
||||
chrome.browserAction.enable();
|
||||
chrome.browserAction.setIcon( {path: './icons/default-128.png'} );
|
||||
}
|
||||
return this.ifNotControlled;
|
||||
|
||||
|
@ -150,6 +151,7 @@
|
|||
requireInteraction: true,
|
||||
type: 'basic',
|
||||
iconUrl: './icons/' + icon,
|
||||
appIconMaskUrl: './icons/default-mask-128.png',
|
||||
isClickable: true,
|
||||
}
|
||||
);
|
||||
|
@ -186,7 +188,9 @@
|
|||
|
||||
const handlers = window.apis.errorHandlers;
|
||||
|
||||
// INIT
|
||||
// INITIALIZATION
|
||||
// ==============
|
||||
|
||||
chrome.proxy.settings.get(
|
||||
{},
|
||||
(details) => handlers.isNotControlled(details)
|
||||
|
@ -196,7 +200,7 @@
|
|||
|
||||
chrome.notifications.clear(notId);
|
||||
if(notId === 'no-control') {
|
||||
return openAndFocus('chrome://settings/#proxy');
|
||||
return openAndFocus( window.utils.messages.searchSettingsUrlFor('proxy') );
|
||||
}
|
||||
const errors = handlers.idToError;
|
||||
handlers.viewError(errors);
|
||||
|
@ -230,10 +234,12 @@
|
|||
console.log('Proxy settings changed.', details);
|
||||
const noCon = 'no-control';
|
||||
if ( handlers.isNotControlled(details) ) {
|
||||
console.log(details);
|
||||
handlers.mayNotify(noCon, 'Другое расширение контролирует прокси',
|
||||
'Какое?',
|
||||
'no-control-128.png');
|
||||
handlers.mayNotify(
|
||||
noCon,
|
||||
chrome.i18n.getMessage('noControl'),
|
||||
chrome.i18n.getMessage('which'),
|
||||
'no-control-128.png'
|
||||
);
|
||||
} else {
|
||||
chrome.notifications.clear( noCon );
|
||||
}
|
||||
|
|
|
@ -109,8 +109,12 @@
|
|||
},
|
||||
},
|
||||
Оба_и_на_свитчах: {
|
||||
// pacUrl: 'https://drive.google.com/uc?export=download&id=0B-ZCVSvuNWf0akpCOURNS2VCTmc', // 0.14
|
||||
pacUrl: 'https://drive.google.com/uc?export=download&id=0B-ZCVSvuNWf0bzNUR2F4RF8wOU0', // 0.15
|
||||
/*
|
||||
Don't use in system configs! Because Win does poor caching.
|
||||
Url is encoded to counter abuse.
|
||||
Version: 0.15
|
||||
*/
|
||||
pacUrl: '\x68\x74\x74\x70\x73\x3a\x2f\x2f\x64\x72\x69\x76\x65\x2e\x67\x6f\x6f\x67\x6c\x65\x2e\x63\x6f\x6d\x2f\x75\x63\x3f\x65\x78\x70\x6f\x72\x74\x3d\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x26\x69\x64\x3d\x30\x42\x2d\x5a\x43\x56\x53\x76\x75\x4e\x57\x66\x30\x62\x7a\x4e\x55\x52\x32\x46\x34\x52\x46\x38\x77\x4f\x55\x30',
|
||||
proxyHosts: ['proxy.antizapret.prostovpn.org', 'gw2.anticenz.org'],
|
||||
proxyIps: {
|
||||
'195.123.209.38': 'proxy.antizapret.prostovpn.org',
|
||||
|
@ -267,6 +271,11 @@
|
|||
},
|
||||
|
||||
_pacUpdatePeriodInMinutes: 12*60,
|
||||
get pacUpdatePeriodInMinutes() {
|
||||
|
||||
return this._pacUpdatePeriodInMinutes;
|
||||
|
||||
},
|
||||
|
||||
setAlarms() {
|
||||
|
||||
|
@ -454,7 +463,7 @@
|
|||
|
||||
if ( window.utils.areSettingsNotControlledFor( details ) ) {
|
||||
console.warn('Failed, other extension is in control.');
|
||||
return cb({clarification: {message: 'Настройки прокси контролирует другое расширение. <a href="chrome://settings/search#proxy">Какое?</a>'}});
|
||||
return cb({clarification: {message: window.utils.messages.whichExtensionHtml() }});
|
||||
}
|
||||
console.log('Successfuly set PAC in proxy settings..');
|
||||
cb();
|
||||
|
|
|
@ -48,8 +48,7 @@ window.tabWithError2ip = {}; // For errors only: Error? -> Check this IP!
|
|||
chrome.webRequest.onErrorOccurred.addListener(
|
||||
(requestDetails) =>
|
||||
isInsideTabWithIp(requestDetails)
|
||||
&& isProxiedAndInformed(requestDetails)
|
||||
,
|
||||
&& isProxiedAndInformed(requestDetails),
|
||||
{urls: ['<all_urls>']}
|
||||
);
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"extName": {
|
||||
"message": "Runet Censorship Bypass"
|
||||
},
|
||||
"extDesc": {
|
||||
"message": "Circumvent Russian internet censorship:"
|
||||
},
|
||||
"proxy": {
|
||||
"message": "proxy"
|
||||
},
|
||||
"noControl": {
|
||||
"message": "Other extension controls proxy!"
|
||||
},
|
||||
"which": {
|
||||
"message": "Which?"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"extName": {
|
||||
"message": "Обход блокировок Рунета"
|
||||
},
|
||||
"extDesc": {
|
||||
"message": "Обход интернет-цензуры в России:"
|
||||
},
|
||||
"proxy": {
|
||||
"message": "прокси"
|
||||
},
|
||||
"noControl": {
|
||||
"message": "Другое расширение контролирует настройки прокси!"
|
||||
},
|
||||
"which": {
|
||||
"message": "Какое?"
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 9.8 KiB |
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
|
||||
"name": "Обход блокировок Рунета 0.15",
|
||||
"description": "Аргументы против цензуры: https://git.io/vEkI9",
|
||||
"version": "0.0.0.15",
|
||||
"name": "__MSG_extName__",
|
||||
"default_locale": "en",
|
||||
"description": "__MSG_extDesc__ https://rebrand.ly/ac-wiki",
|
||||
"version": "0.0.0.16",
|
||||
"icons": {
|
||||
"128": "/icons/default-128.png"
|
||||
},
|
||||
|
@ -22,7 +23,13 @@
|
|||
],
|
||||
|
||||
"background": {
|
||||
"scripts": ["00-init-apis.js", "11-api-error-handlers.js", "12-api-sync-pac-script-with-pac-provider.js", "30-block-informer.js", "40-context-menus.js"]
|
||||
"scripts": [
|
||||
"00-init-apis.js",
|
||||
"11-api-error-handlers.js",
|
||||
"12-api-sync-pac-script-with-pac-provider.js",
|
||||
"30-block-informer.js",
|
||||
"40-context-menus.js"
|
||||
]
|
||||
},
|
||||
"browser_action": {
|
||||
"default_title": "Этот сайт благословлён",
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html style="display: none">
|
||||
<head>
|
||||
<title>Выбор провайдера PAC</title>
|
||||
<style>
|
||||
div {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
label {
|
||||
user-select: none;
|
||||
}
|
||||
|
@ -44,20 +48,29 @@
|
|||
}
|
||||
hr {
|
||||
border-width: 1px 0 0 0;
|
||||
margin: 0.6em 0;
|
||||
padding: 0;
|
||||
}
|
||||
#configs-panel > header {
|
||||
margin: 0.6em 0 0.4em;
|
||||
margin: 0 0 0.4em;
|
||||
}
|
||||
.if-not-controlled {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<span class="if-not-controlled">
|
||||
<span id="which-extension"></span>
|
||||
<hr style="border-color: red; border-style: solid;"/>
|
||||
</span>
|
||||
<ul id="list-of-providers">
|
||||
<li><input type="radio" name="pacProvider" id="none" checked> <label for="none">Отключить</label></li>
|
||||
</ul>
|
||||
<div style="white-space: nowrap">
|
||||
Обновлялись: <span class="update-date">...</span>
|
||||
</div>
|
||||
<div id="status">Загрузка...</div>
|
||||
<span id="status">Загрузка...</span>
|
||||
<hr/>
|
||||
<div id="configs-panel">
|
||||
<header>Я ❤️ уведомления:</header>
|
||||
|
|
|
@ -7,17 +7,12 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
|
||||
const setStatusTo = (msg) => {
|
||||
|
||||
const status = getStatus();
|
||||
if (msg) {
|
||||
status.classList.remove('off');
|
||||
status.innerHTML = msg;
|
||||
} else {
|
||||
status.classList.add('off');
|
||||
}
|
||||
getStatus().innerHTML = msg;
|
||||
|
||||
};
|
||||
|
||||
const antiCensorRu = backgroundPage.apis.antiCensorRu;
|
||||
const errorHandlers = backgroundPage.apis.errorHandlers;
|
||||
|
||||
// SET DATE
|
||||
|
||||
|
@ -26,15 +21,14 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
let dateForUser = 'никогда';
|
||||
if( antiCensorRu.lastPacUpdateStamp ) {
|
||||
let diff = Date.now() - antiCensorRu.lastPacUpdateStamp;
|
||||
let units = ' мс';
|
||||
let units = 'мс';
|
||||
const gauges = [
|
||||
[1000, ' с'],
|
||||
[60, ' мин'],
|
||||
[60, ' ч'],
|
||||
[24, ' дн'],
|
||||
[1000, 'с'],
|
||||
[60, 'мин'],
|
||||
[60, 'ч'],
|
||||
[24, 'дн'],
|
||||
[7, ' недель'],
|
||||
[4, ' месяцев'],
|
||||
[12, ' г'],
|
||||
];
|
||||
for(const g of gauges) {
|
||||
const diffy = Math.floor(diff / g[0]);
|
||||
|
@ -47,7 +41,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
}
|
||||
|
||||
const dateElement = document.querySelector('.update-date');
|
||||
dateElement.innerText = dateForUser;
|
||||
dateElement.innerText = dateForUser + ' / T=' + (antiCensorRu.pacUpdatePeriodInMinutes/60) + 'ч';
|
||||
dateElement.title = new Date(antiCensorRu.lastPacUpdateStamp)
|
||||
.toLocaleString('ru-RU');
|
||||
|
||||
|
@ -95,7 +89,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
);
|
||||
getStatus().querySelector('.link-button').onclick = function() {
|
||||
|
||||
backgroundPage.apis.errorHandlers.viewError(err);
|
||||
errorHandlers.viewError(err);
|
||||
return false;
|
||||
|
||||
};
|
||||
|
@ -180,7 +174,7 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
}
|
||||
|
||||
const conpanel = document.getElementById('list-of-handlers');
|
||||
backgroundPage.apis.errorHandlers.getEventsMap().forEach( (value, name) => {
|
||||
errorHandlers.getEventsMap().forEach( (value, name) => {
|
||||
|
||||
const li = document.createElement('li');
|
||||
li.innerHTML = `
|
||||
|
@ -201,11 +195,22 @@ chrome.runtime.getBackgroundPage( (backgroundPage) =>
|
|||
|
||||
});
|
||||
|
||||
if( errorHandlers.ifNotControlled ) {
|
||||
console.log('ADDING');
|
||||
document.getElementById('which-extension').innerHTML = backgroundPage.utils.messages.whichExtensionHtml();
|
||||
document.querySelectorAll('.if-not-controlled').forEach( (node) => {
|
||||
|
||||
node.style.display = 'block';
|
||||
|
||||
});
|
||||
}
|
||||
setStatusTo('');
|
||||
|
||||
if (antiCensorRu.ifFirstInstall) {
|
||||
const id = antiCensorRu.currentPacProviderKey || 'none';
|
||||
document.querySelector('#update-' + id).click();
|
||||
}
|
||||
document.documentElement.style.display = '';
|
||||
|
||||
})
|
||||
);
|
||||
|
|
|
@ -4,31 +4,35 @@ In popup links are not clickable at all, fix it.
|
|||
On other pages "chrome://" links are not clickable, fix it.
|
||||
Use only if really required because of performance penalty.
|
||||
*/
|
||||
{
|
||||
|
||||
const target = document.getElementById('status');
|
||||
const target = document.documentElement;
|
||||
|
||||
const updateLinks = () => {
|
||||
const updateLinks = () => {
|
||||
|
||||
const links = document.querySelectorAll('a:not([href=""])');
|
||||
for (let i = 0; i < links.length; i++) {
|
||||
const ln = links[i];
|
||||
const location = ln.href;
|
||||
ln.onclick = function() {
|
||||
console.log('UPDATE');
|
||||
const links = document.querySelectorAll('a:not([href=""])');
|
||||
for (let i = 0; i < links.length; i++) {
|
||||
const ln = links[i];
|
||||
const location = ln.href;
|
||||
ln.onclick = function() {
|
||||
|
||||
chrome.tabs.create({active: !this.dataset.inBg, url: location});
|
||||
return false;
|
||||
chrome.tabs.create({active: !this.dataset.inBg, url: location});
|
||||
return false;
|
||||
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
new MutationObserver( updateLinks )
|
||||
.observe(target, {
|
||||
attributes: false,
|
||||
subtree: true,
|
||||
childList: true,
|
||||
characterData: false,
|
||||
});
|
||||
new MutationObserver( updateLinks )
|
||||
.observe(target, {
|
||||
attributes: true,
|
||||
subtree: true,
|
||||
childList: true,
|
||||
characterData: false,
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', updateLinks);
|
||||
document.addEventListener('DOMContentLoaded', updateLinks);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user