1
0
mirror of https://codeberg.org/arh/how-cloudflare-works synced 2025-03-03 07:47:38 +01:00
This commit is contained in:
Corona 2020-07-31 01:30:52 +02:00
commit 069b41e669
55 changed files with 12512 additions and 4 deletions

@ -1,8 +1,9 @@
### License
* /globalist/* (Globalist) -- [GNU GPLv3](globalist/LICENSE)
* /addons/* -- [MIT License](https://en.wikipedia.org/wiki/MIT_License)
* /pdf/* -- Unknown (you can find a copy everywhere. Thanks to authors)
* Else -- [PUBLIC DOMAIN (CC0)](https://web.archive.org/web/https://creativecommons.org/share-your-work/public-domain/cc0/) = [WTFPL](http://www.wtfpl.net/about/)
* everything Else -- [PUBLIC DOMAIN (CC0)](https://web.archive.org/web/https://creativecommons.org/share-your-work/public-domain/cc0/) = [WTFPL](http://www.wtfpl.net/about/)
This repository, cloudflare-tor (aka _stop\_cloudflare)_, is in the `PUBLIC DOMAIN (CC0)`/`WTFPL`.
@ -11,6 +12,4 @@ It was created anonymously, in public, for the use of the world to resist [Cloud
Contributors who have anonymously contributed (including in [CryptoParty](https://cryptoparty.at/cryptoparty_wien_53)) have since come forward to give this project their blessing.
`CC0 license` allow you to use any files for any purpose, even in ways we may find distasteful or objectionable.
You can also make money off our work and you are not required to give credit to us.
`CC0 license` allow you to use those files for any purpose, even in ways we may find distasteful or objectionable. You can also make money off our work and you are not required to give credit to us.

3
addons/README.md Normal file

@ -0,0 +1,3 @@
### Addons for Firefox / Chromium (Source code only)
- [License](../LICENSE.md)

2
addons/bcmaCR/README.md Normal file

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.bcma.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

1467
addons/bcmaCR/cf.js Normal file

File diff suppressed because one or more lines are too long

73
addons/bcmaCR/cg.html Normal file

@ -0,0 +1,73 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body>
&nbsp;<br>
<b>&#128226; <span transk="actnow"></span></b><br>
<label><input type="radio" id="ta0" name="ta" value="0"> <span transk="actt0"></span></label><br>
<label><input type="radio" id="ta1" name="ta" value="1"> <span transk="actt1"></span></label><br>
<label><input type="radio" id="ta2" name="ta" value="2"> <span transk="actt2"></span></label><br>
<label><input type="radio" id="ta4" name="ta" value="4"> <span transk="actt4"></span></label><br>
<label><input type="radio" id="ta3" name="ta" value="3"> <span transk="actt3"></span></label>
&nbsp;<br>&nbsp;<br>
<b>&#128391; <span transk="uralturl"></span></b><br>
<span transk="ururepl"></span><br>
<input type="text" id="vau" spellcheck="false" value="" placeholder="ekz. https://mia.ekzemplo.net/proxy?url=%%URL%%">
<button type="button" id="aus"> <span transk="apply"></span> </button>
&nbsp;<br>&nbsp;<br>
<b>&#128276; <span transk="notify"></span></b><br>
<label><input type="checkbox" id="nnf1"> <span transk="notif1"></span></label><br>
<label><input type="checkbox" id="nnf2"> <span transk="notif2"></span></label>
&nbsp;<br>&nbsp;<br>
<b>&#128210; <span transk="urdomco"></span></b><br>
<textarea cols="50" rows="10" id="t" wrap="off" spellcheck="false" placeholder="Cloudflare domajnoj" readonly></textarea>
<br>
<button type="button" id="exp" disabled> <span transk="export"></span> </button>
<button type="button" id="clr"> <span transk="clear"></span> </button>
&nbsp;<br>&nbsp;<br>
<b>&#127987; <span transk="urwhite"></span></b><br>
<textarea cols="50" rows="10" id="g" wrap="off" spellcheck="false" placeholder="ekzemplo.com"></textarea>
<br>
<button type="button" id="ign"> <span transk="apply"></span> </button>
&nbsp;<br>&nbsp;<br>
<b>&#128172; Internacio</b><br>
<select id="myul">
<option value="" selected> --- </option>
<option value="ar">العربية</option>
<option value="bn">বাংলা</option>
<option value="de">Deutsch</option>
<option value="eo">Esperanto &#127942;</option>
<option value="es">Español</option>
<option value="fa">فارسی</option>
<option value="fr">Français</option>
<option value="ha">Harshen</option>
<option value="hi">हिंदी</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="jv">ꦧꦱꦗꦮ</option>
<option value="ko">힌디어</option>
<option value="mr">मराठी</option>
<option value="ms">bahasa Melayu</option>
<option value="nl">Nederlands</option>
<option value="pt">Português</option>
<option value="ru">Русский</option>
<option value="sw">Kiswahili</option>
<option value="ta">தமிழ்</option>
<option value="th">ภาษาไทย</option>
<option value="tr">Türkçe</option>
<option value="ur">اردو</option>
<option value="vi">Tiếng Việt</option>
<option value="zh">中文</option>
</select>
&nbsp;<br>&nbsp;<br>
<b>&#128218; <span transk="useflik"></span></b><br>
<ul>
<li><a href="https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/ss/tool_ismitm.php" target="_blank"><span transk="tsmitm"></span></a></li>
<li><a href="https://codeberg.org/crimeflare/cloudflare-tor" target="_blank">"The Great Cloudwall"</a></li>
</ul>
&nbsp;<br>
<script src="cg.js"></script>
</body>
</html>

100
addons/bcmaCR/cg.js Normal file

@ -0,0 +1,100 @@
document.addEventListener('DOMContentLoaded', () => {
chrome.runtime.sendMessage(['cf'], (r) => {
fetch('i18n/' + r[5] + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[transk]').forEach(x => {
x.innerText = j[x.getAttribute('transk')];
});
});
document.getElementById('t').value = JSON.parse(r[0]).join("\n");
document.getElementById('g').value = JSON.parse(r[1]).join("\n");
document.getElementById('vau').value = r[3];
document.getElementById('nnf1').checked = r[4][0];
document.getElementById('nnf2').checked = r[4][1];
switch (r[2]) {
case 0:
document.getElementById('ta0').checked = true;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = false;
break;
case 1:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = true;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = false;
break;
case 3:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = true;
document.getElementById('ta4').checked = false;
break;
case 4:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = true;
break;
default:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = true;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = false;
break;
}
});
document.getElementById('aus').addEventListener('click', function () {
chrome.runtime.sendMessage(['au', document.getElementById('vau').value]);
});
document.getElementById('clr').addEventListener('click', () => {
chrome.runtime.sendMessage(['dy']);
document.getElementById('t').value = '';
});
document.getElementById('nnf1').addEventListener('click', function () {
chrome.runtime.sendMessage(['nnf', '1', (this.checked ? true : false)]);
});
document.getElementById('nnf2').addEventListener('click', function () {
chrome.runtime.sendMessage(['nnf', '2', (this.checked ? true : false)]);
});
document.getElementById('ta0').addEventListener('click', function () {
if (this.checked) {
chrome.runtime.sendMessage(['ta', '0']);
}
});
document.getElementById('ta1').addEventListener('click', function () {
if (this.checked) {
chrome.runtime.sendMessage(['ta', '1']);
}
});
document.getElementById('ta2').addEventListener('click', function () {
if (this.checked) {
chrome.runtime.sendMessage(['ta', '2']);
}
});
document.getElementById('ta3').addEventListener('click', function () {
if (this.checked) {
chrome.runtime.sendMessage(['ta', '3']);
}
});
document.getElementById('ta4').addEventListener('click', function () {
if (this.checked) {
chrome.runtime.sendMessage(['ta', '4']);
}
});
document.getElementById('ign').addEventListener('click', function () {
chrome.runtime.sendMessage(['ig', document.getElementById('g').value.split("\n")]);
});
document.getElementById('myul').addEventListener('change', () => {
if (document.getElementById('myul').value != '') {
chrome.runtime.sendMessage(['ul', document.getElementById('myul').value]);
location.reload(true);
}
});
});

@ -0,0 +1,36 @@
{
"manifest_version": 2,
"name": "Bloku Cloudflaron MITM-Atakon",
"version": "1.0.3.6",
"minimum_chrome_version": "68",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"incognito": "split",
"permissions": [
"<all_urls>",
"activeTab",
"tabs",
"webRequest",
"webRequestBlocking",
"webNavigation",
"notifications",
"storage",
"unlimitedStorage"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"cf.js"
]
},
"options_ui": {
"page": "cg.html"
},
"browser_action": {
"default_icon": {
"32": "icons/cf_0.png"
}
}
}

2
addons/bcmaFX/README.md Normal file

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.bcma.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

1469
addons/bcmaFX/cf.js Normal file

File diff suppressed because one or more lines are too long

73
addons/bcmaFX/cg.html Normal file

@ -0,0 +1,73 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body>
&nbsp;<br>
<b>&#128226; <span transk="actnow"></span></b><br>
<label><input type="radio" id="ta0" name="ta" value="0"> <span transk="actt0"></span></label><br>
<label><input type="radio" id="ta1" name="ta" value="1"> <span transk="actt1"></span></label><br>
<label><input type="radio" id="ta2" name="ta" value="2"> <span transk="actt2"></span></label><br>
<label><input type="radio" id="ta4" name="ta" value="4"> <span transk="actt4"></span></label><br>
<label><input type="radio" id="ta3" name="ta" value="3"> <span transk="actt3"></span></label>
&nbsp;<br>&nbsp;<br>
<b>&#128391; <span transk="uralturl"></span></b><br>
<span transk="ururepl"></span><br>
<input type="text" id="vau" spellcheck="false" value="" placeholder="ekz. https://mia.ekzemplo.net/proxy?url=%%URL%%">
<button type="button" id="aus"> <span transk="apply"></span> </button>
&nbsp;<br>&nbsp;<br>
<b>&#128276; <span transk="notify"></span></b><br>
<label><input type="checkbox" id="nnf1"> <span transk="notif1"></span></label><br>
<label><input type="checkbox" id="nnf2"> <span transk="notif2"></span></label>
&nbsp;<br>&nbsp;<br>
<b>&#128210; <span transk="urdomco"></span></b><br>
<textarea cols="50" rows="10" id="t" wrap="off" spellcheck="false" placeholder="Cloudflare domajnoj" readonly></textarea>
<br>
<button type="button" id="exp"> <span transk="export"></span> </button>
<button type="button" id="clr"> <span transk="clear"></span> </button>
&nbsp;<br>&nbsp;<br>
<b>&#127987; <span transk="urwhite"></span></b><br>
<textarea cols="50" rows="10" id="g" wrap="off" spellcheck="false" placeholder="ekzemplo.com"></textarea>
<br>
<button type="button" id="ign"> <span transk="apply"></span> </button>
&nbsp;<br>&nbsp;<br>
<b>&#128172; Internacio</b><br>
<select id="myul">
<option value="" selected> --- </option>
<option value="ar">العربية</option>
<option value="bn">বাংলা</option>
<option value="de">Deutsch</option>
<option value="eo">Esperanto &#127942;</option>
<option value="es">Español</option>
<option value="fa">فارسی</option>
<option value="fr">Français</option>
<option value="ha">Harshen</option>
<option value="hi">हिंदी</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="jv">ꦧꦱꦗꦮ</option>
<option value="ko">힌디어</option>
<option value="mr">मराठी</option>
<option value="ms">bahasa Melayu</option>
<option value="nl">Nederlands</option>
<option value="pt">Português</option>
<option value="ru">Русский</option>
<option value="sw">Kiswahili</option>
<option value="ta">தமிழ்</option>
<option value="th">ภาษาไทย</option>
<option value="tr">Türkçe</option>
<option value="ur">اردو</option>
<option value="vi">Tiếng Việt</option>
<option value="zh">中文</option>
</select>
&nbsp;<br>&nbsp;<br>
<b>&#128218; <span transk="useflik"></span></b><br>
<ul>
<li><a href="https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/ss/tool_ismitm.php" target="_blank"><span transk="tsmitm"></span></a></li>
<li><a href="https://codeberg.org/crimeflare/cloudflare-tor" target="_blank">"The Great Cloudwall"</a></li>
</ul>
&nbsp;<br>
<script src="cg.js"></script>
</body>
</html>

111
addons/bcmaFX/cg.js Normal file

@ -0,0 +1,111 @@
document.addEventListener('DOMContentLoaded', () => {
browser.runtime.sendMessage(['cf']).then((r) => {
fetch('i18n/' + r[5] + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[transk]').forEach(x => {
x.innerText = j[x.getAttribute('transk')];
});
});
document.getElementById('t').value = JSON.parse(r[0]).join("\n");
document.getElementById('g').value = JSON.parse(r[1]).join("\n");
document.getElementById('vau').value = r[3];
document.getElementById('nnf1').checked = r[4][0];
document.getElementById('nnf2').checked = r[4][1];
switch (r[2]) {
case 0:
document.getElementById('ta0').checked = true;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = false;
break;
case 1:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = true;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = false;
break;
case 3:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = true;
document.getElementById('ta4').checked = false;
break;
case 4:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = false;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = true;
break;
default:
document.getElementById('ta0').checked = false;
document.getElementById('ta1').checked = false;
document.getElementById('ta2').checked = true;
document.getElementById('ta3').checked = false;
document.getElementById('ta4').checked = false;
break;
}
});
document.getElementById('aus').addEventListener('click', function () {
browser.runtime.sendMessage(['au', document.getElementById('vau').value]);
});
document.getElementById('exp').addEventListener('click', () => {
browser.tabs.create({
active: true,
url: 'about:blank'
}).then(function (t) {
browser.tabs.executeScript(t.id, {
matchAboutBlank: true,
code: "document.documentElement.innerHTML='<html><body><pre>'+atob('" + btoa(document.getElementById('t').value) + "')+'</pre></body></html>';window.stop();"
});
});
});
document.getElementById('clr').addEventListener('click', () => {
browser.runtime.sendMessage(['dy']);
document.getElementById('t').value = '';
});
document.getElementById('nnf1').addEventListener('click', function () {
browser.runtime.sendMessage(['nnf', '1', (this.checked ? true : false)]);
});
document.getElementById('nnf2').addEventListener('click', function () {
browser.runtime.sendMessage(['nnf', '2', (this.checked ? true : false)]);
});
document.getElementById('ta0').addEventListener('click', function () {
if (this.checked) {
browser.runtime.sendMessage(['ta', '0']);
}
});
document.getElementById('ta1').addEventListener('click', function () {
if (this.checked) {
browser.runtime.sendMessage(['ta', '1']);
}
});
document.getElementById('ta2').addEventListener('click', function () {
if (this.checked) {
browser.runtime.sendMessage(['ta', '2']);
}
});
document.getElementById('ta3').addEventListener('click', function () {
if (this.checked) {
browser.runtime.sendMessage(['ta', '3']);
}
});
document.getElementById('ta4').addEventListener('click', function () {
if (this.checked) {
browser.runtime.sendMessage(['ta', '4']);
}
});
document.getElementById('ign').addEventListener('click', function () {
browser.runtime.sendMessage(['ig', document.getElementById('g').value.split("\n")]);
});
document.getElementById('myul').addEventListener('change', () => {
if (document.getElementById('myul').value != '') {
browser.runtime.sendMessage(['ul', document.getElementById('myul').value]);
location.reload(true);
}
});
});

@ -0,0 +1,44 @@
{
"manifest_version": 2,
"name": "Bloku Cloudflaron MITM-Atakon",
"description": "Submetiĝu al tutmonda gvatado aŭ rezistu. La elekto estas via.",
"version": "1.0.3.6",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"permissions": [
"<all_urls>",
"activeTab",
"tabs",
"webRequest",
"webRequestBlocking",
"webNavigation",
"notifications",
"storage",
"unlimitedStorage"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"cf.js"
]
},
"options_ui": {
"browser_style": true,
"page": "cg.html"
},
"browser_action": {
"browser_style": true,
"default_icon": {
"32": "icons/cf_0.png"
}
},
"applications": {
"gecko": {
"id": "bcma@searxes.eu.org",
"strict_min_version": "68.0",
"update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=bcma"
}
}
}

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.isat.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

267
addons/isattlinkCR/bg.js Normal file

@ -0,0 +1,267 @@
let localUse = false,
localDB = [],
timr, memcache = {},
forcePurge = false,
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
/*
chrome.storage.local.get(['cep'], g => {
if (g.cep == 'y') {
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
} else {
if (g.cep != 'n') {
chrome.storage.local.set({
'cep': 'n'
});
fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
method: 'GET',
mode: 'cors'
}).then(r => r.text()).then(r => {
if (r == 'ok') {
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
chrome.storage.local.set({
'cep': 'y'
});
}
}).catch(() => {});
}
}
});
*/
function is_hostile(f) {
if (localUse) {
return new Promise((g, b) => {
g(localDB.includes(f) ? true : false);
});
}
return new Promise((g, b) => {
fetch(apiurl, {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: 'f=' + f
}).then(r => r.json()).then(r => {
if (r[0]) {
g(r[1]);
} else {
b();
}
}).catch(b);
});
}
function i_know_you(f) {
if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
return new Promise((g, b) => {
g(200);
});
}
let m;
if (memcache[f] != undefined) {
m = memcache[f];
return new Promise((g, b) => {
g(m);
});
}
return new Promise((g, b) => {
chrome.storage.local.get([f], (ff) => {
if (ff[f]) {
if (ff[f] == 'y') {
memcache[f] = 1;
g(1);
} else {
memcache[f] = -1;
g(-1);
}
} else {
g(0);
}
});
});
}
function forget_cache() {
chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
chrome.storage.local.clear();
memcache = {};
chrome.storage.local.set({
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'obs': (g.obs == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'dbg': (g.dbg == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'alt': (g.alt == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'cep': (g.cep == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'mul': (g.mul != undefined ? g.mul : 'eo')
});
chrome.storage.local.set({
'opd': (g.opd == 'n' ? 'n' : 'y')
});
chrome.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
});
chrome.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
chrome.storage.local.set({
'lastV': (chrome.runtime.getManifest()).version
});
});
clearTimeout(timr);
timr = setTimeout(function () {
forget_cache();
}, 1814400000);
}
chrome.storage.local.get(['lastU', 'lastV', 'ldb', 'opd'], g => {
localUse = (g.opd == 'n') ? true : false;
localDB = JSON.parse(g.ldb || '[]');
if (g.lastU) {
if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
chrome.storage.local.clear();
memcache = {};
chrome.storage.local.set({
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'obs': (g.obs == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'dbg': (g.dbg == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'alt': (g.alt == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'cep': (g.cep == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'mul': (g.mul != undefined ? g.mul : 'eo')
});
chrome.storage.local.set({
'opd': (g.opd == 'n' ? 'n' : 'y')
});
chrome.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
});
chrome.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
});
}
} else {
chrome.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
}
let nowVer = (chrome.runtime.getManifest()).version;
if (g.lastV != nowVer || forcePurge) {
chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
chrome.storage.local.clear();
memcache = {};
chrome.storage.local.set({
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'obs': (g.obs == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'dbg': (g.dbg == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'alt': (g.alt == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'cep': (g.cep == 'y' ? 'y' : 'n')
});
chrome.storage.local.set({
'mul': (g.mul != undefined ? g.mul : 'eo')
});
chrome.storage.local.set({
'opd': (g.opd == 'n' ? 'n' : 'y')
});
chrome.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
});
chrome.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
chrome.storage.local.set({
'lastV': (chrome.runtime.getManifest()).version
});
});
}
timr = setTimeout(function () {
forget_cache();
}, 1814400000);
});
chrome.runtime.onMessage.addListener((requests, sender, sendResponse) => {
if (requests) {
if (requests === 'clear') {
forget_cache();
return;
}
if (requests.indexOf('dbmode,') === 0) {
switch (requests) {
case 'dbmode,s1':
chrome.storage.local.set({
'opd': 'y'
});
localUse = false;
break;
case 'dbmode,s0':
chrome.storage.local.set({
'opd': 'n'
});
localUse = true;
break;
case 'dbmode,cl':
chrome.storage.local.set({
'ldb': '[]'
});
localDB = [];
break;
case 'dbmode,rl':
chrome.storage.local.get(['ldb'], (g) => {
localDB = JSON.parse(g.ldb || '[]');
});
break;
}
return;
}
requests.forEach(request => {
i_know_you(request).then((r) => {
if (r == 1 || r == -1) {
chrome.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
}
if (r == 0) {
is_hostile(request).then((a) => {
if (a) {
chrome.storage.local.set({
[request]: 'y'
});
} else {
chrome.storage.local.set({
[request]: 'n'
});
}
if (Object.keys(memcache).length > 650) {
memcache = {};
}
chrome.tabs.sendMessage(sender.tab.id, [request, a]);
}, () => {
chrome.tabs.sendMessage(sender.tab.id, [request, false]);
});
}
}, () => {});
});
}
return;
});

@ -0,0 +1,59 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body style="display:none">
&nbsp;<br>
<label><input type="checkbox" id="ign1"> <span tek="tlign1"></span></label><br>
<label><input type="checkbox" id="obs"> <span tek="tlobs"></span></label><br>
<label><input type="checkbox" id="alt"> <span tek="tlalt"></span></label><br>
<label><input type="checkbox" id="dbg" disabled> <span tek="tldbg"></span></label><br>
<br>&nbsp;<br>
<span tek="opmode"></span><br>
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ &rarr; <a href="https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/#!op=info/api" target="_blank">Ss API</a> ]<br>
<label><input type="radio" name="opm" id="opoff"> <span tek="opmoff"></span></label> [ &rarr; <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
<br>&nbsp;<br>
&#128172;
<select id="myul">
<option value="" selected> --- </option>
<option value="ar">العربية</option>
<option value="bn">বাংলা</option>
<option value="de">Deutsch</option>
<option value="eo">Esperanto &#127942;</option>
<option value="es">Español</option>
<option value="fa">فارسی</option>
<option value="fr">Français</option>
<option value="ha">Harshen</option>
<option value="hi">हिंदी</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="jv">ꦧꦱꦗꦮ</option>
<option value="ko">힌디어</option>
<option value="mr">मराठी</option>
<option value="ms">bahasa Melayu</option>
<option value="nl">Nederlands</option>
<option value="pt">Português</option>
<option value="ru">Русский</option>
<option value="sw">Kiswahili</option>
<option value="ta">தமிழ்</option>
<option value="th">ภาษาไทย</option>
<option value="tr">Türkçe</option>
<option value="ur">اردو</option>
<option value="vi">Tiếng Việt</option>
<option value="zh">中文</option>
</select>
<br>&nbsp;<br>&nbsp;<br>
<span tek="aboutcache"></span><br>
<span id="smsa"><button type="button" id="sms"> <span tek="statsshow"></span> </button></span>
<span id="smsb" style="display:none">
&nbsp;<br>
<span tek="hostile"></span>: <span id="viry">?</span><br>
<span tek="neutral"></span>: <span id="virn">?</span><br>
<span tek="total"></span>: <span id="viro">?</span><br>
&nbsp;<br>
<button type="button" id="crs"> <span tek="statsclear"></span> </button>
</span>
<br><br><script src="cg.js"></script>
</body>
</html>

90
addons/isattlinkCR/cg.js Normal file

@ -0,0 +1,90 @@
document.addEventListener('DOMContentLoaded', () => {
chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'mul', 'opd'], g => {
document.getElementById('ign1').checked = (g.ign1 == 'y') ? true : false;
document.getElementById('obs').checked = (g.obs == 'y') ? true : false;
document.getElementById('alt').checked = (g.alt == 'y') ? true : false;
document.getElementById('opon').checked = (g.opd != 'n') ? true : false;
document.getElementById('opoff').checked = (g.opd == 'n') ? true : false;
let ul = g.mul || 'eo';
fetch('i18n/' + ul + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[tek]').forEach(x => {
x.innerText = j[x.getAttribute('tek')];
});
});
document.body.style.display = 'block';
});
});
document.getElementById('myul').addEventListener('change', () => {
let xul = document.getElementById('myul').value;
if (xul.length == 2) {
chrome.storage.local.set({
'mul': xul
});
location.reload(true);
}
});
document.getElementById('ign1').addEventListener('click', () => {
chrome.storage.local.set({
'ign1': (document.getElementById('ign1').checked ? 'y' : 'n')
});
});
document.getElementById('obs').addEventListener('click', () => {
chrome.storage.local.set({
'obs': (document.getElementById('obs').checked ? 'y' : 'n')
});
});
document.getElementById('alt').addEventListener('click', () => {
chrome.storage.local.set({
'alt': (document.getElementById('alt').checked ? 'y' : 'n')
});
});
document.getElementById('opon').addEventListener('click', () => {
chrome.runtime.sendMessage('dbmode,s1', () => {
location.reload();
});
});
document.getElementById('opoff').addEventListener('click', () => {
chrome.runtime.sendMessage('dbmode,s0', () => {
location.reload();
});
});
document.getElementById('crs').addEventListener('click', () => {
chrome.runtime.sendMessage('clear', () => {
location.reload();
});
});
document.getElementById('sms').addEventListener('click', () => {
document.getElementById('smsa').style.display = 'none';
chrome.storage.local.get(null, g => {
let iY = 0,
iN = 0,
iT, tmp, akd = [];
Object.keys(g).forEach(a => {
if (!['ign1', 'obs', 'dbg', 'alt', 'lastU', 'lastV', 'cep', 'mul', 'opd', 'ldb'].includes(a) && (g[a] == 'y' || g[a] == 'n')) {
if (!akd.includes(a)) {
akd.push(a);
if (g[a] == 'y') {
iY++;
} else {
iN++;
}
}
}
});
iT = iY + iN;
if (iT > 0) {
tmp = (iY * 100 / iT).toFixed(1);
document.getElementById('viry').innerText = iY + ' (' + tmp + '%)';
tmp = (iN * 100 / iT).toFixed(1);
document.getElementById('virn').innerText = iN + ' (' + tmp + '%)';
document.getElementById('viro').innerText = (iY + iN);
} else {
document.getElementById('viry').innerText = 0;
document.getElementById('virn').innerText = 0;
document.getElementById('viro').innerText = 0;
}
document.getElementById('smsb').style.display = 'inline';
});
});

1126
addons/isattlinkCR/cs.js Normal file

File diff suppressed because one or more lines are too long

@ -0,0 +1,17 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>&#128452;</title>
</head>
<body style="display:none">
<br>
<meter id="pbr" value="0" min="0" max="100" style="width:50%"></meter><br><br>
<button type="button" id="ldb_i"> &#x1F4DD; <span tek="opximp"></span> </button>
<button type="button" id="ldb_c"> &#x1F5D1; <span tek="opxclr"></span> </button>
<span style="display:none">
<input type="file" id="f" accept="text/plain">
<span tek="opxdone"></span>
</span>
<script src="localdb.js"></script>
</body>
</html>

@ -0,0 +1,67 @@
let irun = false;
document.addEventListener('DOMContentLoaded', () => {
chrome.storage.local.get(['mul'], g => {
let ul = g.mul || 'eo';
fetch('i18n/' + ul + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[tek]').forEach(x => {
x.innerText = j[x.getAttribute('tek')];
});
document.body.style.display = 'block';
});
});
});
document.getElementById('f').addEventListener('change', e => {
let ff = e.target.files[0];
if (ff) {
let r = new FileReader();
r.addEventListener('load', e => {
if (ff.size > 4) {
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
if (g.length > 0) {
chrome.storage.local.get(['ldb'], gs => {
irun = true;
let cnt0, cnt1 = 0,
gc = 1,
db = JSON.parse(gs.ldb || '[]');
cnt0 = db.length;
document.getElementById('pbr').max = g.length;
g.forEach(x => {
document.getElementById('pbr').value = gc;
gc++;
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
db.push(x);
}
});
g = null;
cnt1 = db.length;
if (cnt1 != cnt0) {
chrome.storage.local.set({
'ldb': JSON.stringify(db)
});
}
chrome.runtime.sendMessage('dbmode,rl', () => {
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
location.reload();
});
});
}
}
});
r.readAsText(ff);
}
});
document.getElementById('ldb_i').addEventListener('click', () => {
if (!irun) {
document.getElementById('f').click();
}
});
document.getElementById('ldb_c').addEventListener('click', () => {
if (!irun) {
chrome.runtime.sendMessage('dbmode,cl', () => {
alert(document.querySelector('span[tek=opxdone]').innerText);
location.reload();
});
}
});

@ -0,0 +1,37 @@
{
"manifest_version": 2,
"name": "Ĉu ĉi tiuj ligoj blokos Tor-uzanton?",
"version": "1.0.2.2",
"minimum_chrome_version": "68",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"incognito": "split",
"permissions": [
"storage",
"unlimitedStorage"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"bg.js"
]
},
"options_ui": {
"chrome_style": false,
"page": "cfg.html"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"cs.js"
],
"run_at": "document_end"
}
]
}

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.isat.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

270
addons/isattlinkFX/bg.js Normal file

@ -0,0 +1,270 @@
let localUse = false,
localDB = [],
timr, memcache = {},
forcePurge = false,
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
/*
browser.storage.local.get(['cep']).then(g => {
if (g.cep == 'y') {
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
} else {
if (g.cep != 'n') {
browser.storage.local.set({
'cep': 'n'
});
fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
method: 'GET',
mode: 'cors'
}).then(r => r.text()).then(r => {
if (r == 'ok') {
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
browser.storage.local.set({
'cep': 'y'
});
}
}).catch(() => {});
}
}
});
*/
function is_hostile(f) {
if (localUse) {
return new Promise((g, b) => {
g(localDB.includes(f) ? true : false);
});
}
return new Promise((g, b) => {
fetch(apiurl, {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: 'f=' + f
}).then(r => r.json()).then(r => {
if (r[0]) {
g(r[1]);
} else {
b();
}
}).catch(b);
});
}
function i_know_you(f) {
if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
return new Promise((g, b) => {
g(200);
});
}
let m;
if (memcache[f] != undefined) {
m = memcache[f];
return new Promise((g, b) => {
g(m);
});
}
return new Promise((g, b) => {
browser.storage.local.get([f]).then((ff) => {
if (ff[f]) {
if (ff[f] == 'y') {
memcache[f] = 1;
g(1);
} else {
memcache[f] = -1;
g(-1);
}
} else {
g(0);
}
}, () => {
g(0);
});
});
}
function forget_cache() {
browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
browser.storage.local.clear();
memcache = {};
browser.storage.local.set({
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'obs': (g.obs == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'dbg': (g.dbg == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'alt': (g.alt == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'cep': (g.cep == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'mul': (g.mul != undefined ? g.mul : 'eo')
});
browser.storage.local.set({
'opd': (g.opd == 'n' ? 'n' : 'y')
});
browser.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
});
browser.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
browser.storage.local.set({
'lastV': (browser.runtime.getManifest()).version
});
});
clearTimeout(timr);
timr = setTimeout(function () {
forget_cache();
}, 1814400000);
}
browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
localUse = (g.opd == 'n') ? true : false;
localDB = JSON.parse(g.ldb || '[]');
if (g.lastU) {
if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
browser.storage.local.clear();
memcache = {};
browser.storage.local.set({
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'obs': (g.obs == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'dbg': (g.dbg == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'alt': (g.alt == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'cep': (g.cep == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'mul': (g.mul != undefined ? g.mul : 'eo')
});
browser.storage.local.set({
'opd': (g.opd == 'n' ? 'n' : 'y')
});
browser.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
});
browser.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
});
}
} else {
browser.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
}
let nowVer = (browser.runtime.getManifest()).version;
if (g.lastV != nowVer || forcePurge) {
console.log('Updated', nowVer);
browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
browser.storage.local.clear();
memcache = {};
browser.storage.local.set({
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'obs': (g.obs == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'dbg': (g.dbg == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'alt': (g.alt == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'cep': (g.cep == 'y' ? 'y' : 'n')
});
browser.storage.local.set({
'mul': (g.mul != undefined ? g.mul : 'eo')
});
browser.storage.local.set({
'opd': (g.opd == 'n' ? 'n' : 'y')
});
browser.storage.local.set({
'ldb': (g.ldb != undefined ? g.ldb : '[]')
});
browser.storage.local.set({
'lastU': Math.round((new Date()).getTime() / 1000)
});
browser.storage.local.set({
'lastV': (browser.runtime.getManifest()).version
});
});
}
timr = setTimeout(function () {
forget_cache();
}, 1814400000);
});
browser.runtime.onMessage.addListener((requests, sender, sendResponse) => {
if (requests) {
if (requests === 'clear') {
forget_cache();
return;
}
if (requests.indexOf('dbmode,') === 0) {
switch (requests) {
case 'dbmode,s1':
browser.storage.local.set({
'opd': 'y'
});
localUse = false;
break;
case 'dbmode,s0':
browser.storage.local.set({
'opd': 'n'
});
localUse = true;
break;
case 'dbmode,cl':
browser.storage.local.set({
'ldb': '[]'
});
localDB = [];
break;
case 'dbmode,rl':
browser.storage.local.get(['ldb']).then(g => {
localDB = JSON.parse(g.ldb || '[]');
});
break;
}
return;
}
requests.forEach(request => {
i_know_you(request).then((r) => {
if (r == 1 || r == -1) {
browser.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
}
if (r == 0) {
is_hostile(request).then((a) => {
if (a) {
browser.storage.local.set({
[request]: 'y'
});
} else {
browser.storage.local.set({
[request]: 'n'
});
}
if (Object.keys(memcache).length > 650) {
memcache = {};
}
browser.tabs.sendMessage(sender.tab.id, [request, a]);
}, () => {
browser.tabs.sendMessage(sender.tab.id, [request, false]);
});
}
}, () => {});
});
}
return;
});

@ -0,0 +1,59 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body style="display:none">
&nbsp;<br>
<label><input type="checkbox" id="ign1"> <span tek="tlign1"></span></label><br>
<label><input type="checkbox" id="obs"> <span tek="tlobs"></span></label><br>
<label><input type="checkbox" id="alt"> <span tek="tlalt"></span></label><br>
<label><input type="checkbox" id="dbg"> <span tek="tldbg"></span></label><br>
<br>&nbsp;<br>
<span tek="opmode"></span><br>
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ &rarr; <a href="https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/#!op=info/api" target="_blank">Ss API</a> ]<br>
<label><input type="radio" name="opm" id="opoff"> <span tek="opmoff"></span></label> [ &rarr; <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
<br>&nbsp;<br>
&#128172;
<select id="myul">
<option value="" selected> --- </option>
<option value="ar">العربية</option>
<option value="bn">বাংলা</option>
<option value="de">Deutsch</option>
<option value="eo">Esperanto &#127942;</option>
<option value="es">Español</option>
<option value="fa">فارسی</option>
<option value="fr">Français</option>
<option value="ha">Harshen</option>
<option value="hi">हिंदी</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="jv">ꦧꦱꦗꦮ</option>
<option value="ko">힌디어</option>
<option value="mr">मराठी</option>
<option value="ms">bahasa Melayu</option>
<option value="nl">Nederlands</option>
<option value="pt">Português</option>
<option value="ru">Русский</option>
<option value="sw">Kiswahili</option>
<option value="ta">தமிழ்</option>
<option value="th">ภาษาไทย</option>
<option value="tr">Türkçe</option>
<option value="ur">اردو</option>
<option value="vi">Tiếng Việt</option>
<option value="zh">中文</option>
</select>
<br>&nbsp;<br>&nbsp;<br>
<span tek="aboutcache"></span><br>
<span id="smsa"><button type="button" id="sms"> <span tek="statsshow"></span> </button></span>
<span id="smsb" style="display:none">
&nbsp;<br>
<span tek="hostile"></span>: <span id="viry">?</span><br>
<span tek="neutral"></span>: <span id="virn">?</span><br>
<span tek="total"></span>: <span id="viro">?</span><br>
&nbsp;<br>
<button type="button" id="crs"> <span tek="statsclear"></span> </button>
</span>
<br><br><script src="cg.js"></script>
</body>
</html>

96
addons/isattlinkFX/cg.js Normal file

@ -0,0 +1,96 @@
document.addEventListener('DOMContentLoaded', () => {
browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'mul', 'opd']).then(g => {
document.getElementById('ign1').checked = (g.ign1 == 'y') ? true : false;
document.getElementById('obs').checked = (g.obs == 'y') ? true : false;
document.getElementById('dbg').checked = (g.dbg == 'y') ? true : false;
document.getElementById('alt').checked = (g.alt == 'y') ? true : false;
document.getElementById('opon').checked = (g.opd != 'n') ? true : false;
document.getElementById('opoff').checked = (g.opd == 'n') ? true : false;
let ul = g.mul || 'eo';
fetch('i18n/' + ul + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[tek]').forEach(x => {
x.innerText = j[x.getAttribute('tek')];
});
document.body.style.display = 'block';
});
});
});
document.getElementById('myul').addEventListener('change', () => {
let xul = document.getElementById('myul').value;
if (xul.length == 2) {
browser.storage.local.set({
'mul': xul
});
location.reload(true);
}
});
document.getElementById('ign1').addEventListener('click', () => {
browser.storage.local.set({
'ign1': (document.getElementById('ign1').checked ? 'y' : 'n')
});
});
document.getElementById('obs').addEventListener('click', () => {
browser.storage.local.set({
'obs': (document.getElementById('obs').checked ? 'y' : 'n')
});
});
document.getElementById('dbg').addEventListener('click', () => {
browser.storage.local.set({
'dbg': (document.getElementById('dbg').checked ? 'y' : 'n')
});
});
document.getElementById('alt').addEventListener('click', () => {
browser.storage.local.set({
'alt': (document.getElementById('alt').checked ? 'y' : 'n')
});
});
document.getElementById('opon').addEventListener('click', () => {
browser.runtime.sendMessage('dbmode,s1').then(() => {
location.reload();
});
});
document.getElementById('opoff').addEventListener('click', () => {
browser.runtime.sendMessage('dbmode,s0').then(() => {
location.reload();
});
});
document.getElementById('crs').addEventListener('click', () => {
browser.runtime.sendMessage('clear').then(() => {
location.reload();
});
});
document.getElementById('sms').addEventListener('click', () => {
document.getElementById('smsa').style.display = 'none';
browser.storage.local.get().then(g => {
let iY = 0,
iN = 0,
iT, tmp, akd = [];
Object.keys(g).forEach(a => {
if (!['ign1', 'obs', 'dbg', 'alt', 'lastU', 'lastV', 'cep', 'mul', 'opd', 'ldb'].includes(a) && (g[a] == 'y' || g[a] == 'n')) {
if (!akd.includes(a)) {
akd.push(a);
if (g[a] == 'y') {
iY++;
} else {
iN++;
}
}
}
});
iT = iY + iN;
if (iT > 0) {
tmp = (iY * 100 / iT).toFixed(1);
document.getElementById('viry').innerText = iY + ' (' + tmp + '%)';
tmp = (iN * 100 / iT).toFixed(1);
document.getElementById('virn').innerText = iN + ' (' + tmp + '%)';
document.getElementById('viro').innerText = (iY + iN);
} else {
document.getElementById('viry').innerText = 0;
document.getElementById('virn').innerText = 0;
document.getElementById('viro').innerText = 0;
}
document.getElementById('smsb').style.display = 'inline';
});
});

1129
addons/isattlinkFX/cs.js Normal file

File diff suppressed because one or more lines are too long

@ -0,0 +1,17 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>&#128452;</title>
</head>
<body style="display:none">
<br>
<meter id="pbr" value="0" min="0" max="100" style="width:50%"></meter><br><br>
<button type="button" id="ldb_i"> &#x1F4DD; <span tek="opximp"></span> </button>
<button type="button" id="ldb_c"> &#x1F5D1; <span tek="opxclr"></span> </button>
<span style="display:none">
<input type="file" id="f" accept="text/plain">
<span tek="opxdone"></span>
</span>
<script src="localdb.js"></script>
</body>
</html>

@ -0,0 +1,67 @@
let irun = false;
document.addEventListener('DOMContentLoaded', () => {
browser.storage.local.get(['mul']).then(g => {
let ul = g.mul || 'eo';
fetch('i18n/' + ul + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[tek]').forEach(x => {
x.innerText = j[x.getAttribute('tek')];
});
document.body.style.display = 'block';
});
});
});
document.getElementById('f').addEventListener('change', e => {
let ff = e.target.files[0];
if (ff) {
let r = new FileReader();
r.addEventListener('load', e => {
if (ff.size > 4) {
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
if (g.length > 0) {
browser.storage.local.get(['ldb']).then(gs => {
irun = true;
let cnt0, cnt1 = 0,
gc = 1,
db = JSON.parse(gs.ldb || '[]');
cnt0 = db.length;
document.getElementById('pbr').max = g.length;
g.forEach(x => {
document.getElementById('pbr').value = gc;
gc++;
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
db.push(x);
}
});
g = null;
cnt1 = db.length;
if (cnt1 != cnt0) {
browser.storage.local.set({
'ldb': JSON.stringify(db)
});
}
browser.runtime.sendMessage('dbmode,rl').then(() => {
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
location.reload();
});
});
}
}
});
r.readAsText(ff);
}
});
document.getElementById('ldb_i').addEventListener('click', () => {
if (!irun) {
document.getElementById('f').click();
}
});
document.getElementById('ldb_c').addEventListener('click', () => {
if (!irun) {
browser.runtime.sendMessage('dbmode,cl').then(() => {
alert(document.querySelector('span[tek=opxdone]').innerText);
location.reload();
});
}
});

@ -0,0 +1,43 @@
{
"manifest_version": 2,
"name": "Ĉu ĉi tiuj ligoj blokos Tor-uzanton?",
"description": "Skanu FQDN uzante la API de Ss",
"version": "1.0.2.2",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"permissions": [
"storage",
"unlimitedStorage"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"bg.js"
]
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"cs.js"
],
"run_at": "document_end"
}
],
"options_ui": {
"browser_style": true,
"page": "cfg.html"
},
"applications": {
"gecko": {
"id": "torwatch@searxes.eu.org",
"strict_min_version": "68.0",
"update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=isattlink"
}
}
}

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.ismm.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

1340
addons/ismitmlinkCR/bg.js Normal file

File diff suppressed because one or more lines are too long

@ -0,0 +1,60 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body style="display:none">
&nbsp;<br>
<label><input type="checkbox" id="ign1"> <span tek="tlign1"></span></label><br>
<label><input type="checkbox" id="ign2"> <span tek="tlign2"></span></label><br>
<label><input type="checkbox" id="obs"> <span tek="tlobs"></span></label><br>
<label><input type="checkbox" id="alt"> <span tek="tlalt"></span></label><br>
<label><input type="checkbox" id="dbg" disabled> <span tek="tldbg"></span></label><br>
<br>&nbsp;<br>
<span tek="opmode"></span><br>
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ &rarr; <a href="https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/#!op=info/api" target="_blank">Ss API</a> ]<br>
<label><input type="radio" name="opm" id="opoff"> <span tek="opmoff"></span></label> [ &rarr; <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
<br>&nbsp;<br>
&#128172;
<select id="myul">
<option value="" selected> --- </option>
<option value="ar">العربية</option>
<option value="bn">বাংলা</option>
<option value="de">Deutsch</option>
<option value="eo">Esperanto &#127942;</option>
<option value="es">Español</option>
<option value="fa">فارسی</option>
<option value="fr">Français</option>
<option value="ha">Harshen</option>
<option value="hi">हिंदी</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="jv">ꦧꦱꦗꦮ</option>
<option value="ko">힌디어</option>
<option value="mr">मराठी</option>
<option value="ms">bahasa Melayu</option>
<option value="nl">Nederlands</option>
<option value="pt">Português</option>
<option value="ru">Русский</option>
<option value="sw">Kiswahili</option>
<option value="ta">தமிழ்</option>
<option value="th">ภาษาไทย</option>
<option value="tr">Türkçe</option>
<option value="ur">اردو</option>
<option value="vi">Tiếng Việt</option>
<option value="zh">中文</option>
</select>
<br>&nbsp;<br>&nbsp;<br>
<span tek="aboutcache"></span><br>
<span id="smsa"><button type="button" id="sms"> <span tek="statsshow"></span> </button></span>
<span id="smsb" style="display:none">
&nbsp;<br>
<span tek="hostile"></span>: <span id="viry">?</span><br>
<span tek="neutral"></span>: <span id="virn">?</span><br>
<span tek="total"></span>: <span id="viro">?</span><br>
&nbsp;<br>
<button type="button" id="crs"> <span tek="statsclear"></span> </button>
</span>
<br><br><script src="cg.js"></script>
</body>
</html>

1151
addons/ismitmlinkCR/cg.js Normal file

File diff suppressed because one or more lines are too long

73
addons/ismitmlinkCR/cs.js Normal file

@ -0,0 +1,73 @@
if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
let cs = (function () {
let s = document.createElement('style');
document.head.appendChild(s);
return s.sheet;
})();
if (cs) {
cs.insertRule("a[data-mitm=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
cs.insertRule("a[data-mitm=y]::before{content:'[\\26A0]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
cs.insertRule("a[data-mitm=y]:hover::before{content:'[\\26A1]'}", 2);
cs.insertRule("a[data-mitm=y]:hover{color:red !important}", 3);
cs.insertRule("img[data-mitm=y]{cursor:not-allowed !important;border:2px red dotted !important}", 4);
cs.insertRule("img[data-mitm=y]:hover{filter:sepia(20%)}", 5);
}
chrome.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt'], (g) => {
let asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
if (g.ign1 == 'y') {
asked.push(location.hostname);
}
let qstall = (g.ign2 == 'y') ? 'a[href]:not([data-mitm])' : 'a[href]:not([data-mitm]),img[src]:not([data-mitm])';
let running = false;
function scanme() {
if (!running) {
running = true;
let unknown = [];
document.querySelectorAll(qstall).forEach(a => {
let aF = (a.tagName == 'A' ? (new URL(a.href)).hostname : (new URL(a.src)).hostname) || '';
a.dataset.mitm = aF;
if (!asked.includes(aF)) {
asked.push(aF);
if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && aF.length >= 4) {
unknown.push(aF);
}
}
});
if (unknown.length > 0) {
chrome.runtime.sendMessage(unknown);
}
running = false;
}
}
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.length == 2) {
document.querySelectorAll(g.ign2 == 'y' ? "a[href][data-mitm='" + request[0] + "']" : "a[href][data-mitm='" + request[0] + "'],img[src][data-mitm='" + request[0] + "']").forEach(a => {
if (request[1]) {
a.dataset.mitm = 'y';
if (g.alt == 'y' && a.tagName == 'A') {
if (!a.href.startsWith('https://web.archive.org/web/')) {
a.href = 'https://web.archive.org/web/' + a.href;
}
a.title = 'Arkivo!';
} else {
a.title = 'MITM!';
}
} else {
a.dataset.mitm = 'n';
}
});
}
sendResponse(true);
return;
});
scanme();
if (g.obs == 'y') {
(new MutationObserver(scanme)).observe(document, {
attributes: true,
attributeFilter: ['href'],
childList: true,
subtree: true
});
}
});
}

@ -0,0 +1,17 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>&#128452;</title>
</head>
<body style="display:none">
<br>
<meter id="pbr" value="0" min="0" max="100" style="width:50%"></meter><br><br>
<button type="button" id="ldb_i"> &#x1F4DD; <span tek="opximp"></span> </button>
<button type="button" id="ldb_c"> &#x1F5D1; <span tek="opxclr"></span> </button>
<span style="display:none">
<input type="file" id="f" accept="text/plain">
<span tek="opxdone"></span>
</span>
<script src="localdb.js"></script>
</body>
</html>

@ -0,0 +1,67 @@
let irun = false;
document.addEventListener('DOMContentLoaded', () => {
chrome.storage.local.get(['mul'], g => {
let ul = g.mul || 'eo';
fetch('i18n/' + ul + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[tek]').forEach(x => {
x.innerText = j[x.getAttribute('tek')];
});
document.body.style.display = 'block';
});
});
});
document.getElementById('f').addEventListener('change', e => {
let ff = e.target.files[0];
if (ff) {
let r = new FileReader();
r.addEventListener('load', e => {
if (ff.size > 4) {
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
if (g.length > 0) {
chrome.storage.local.get(['ldb'], gs => {
irun = true;
let cnt0, cnt1 = 0,
gc = 1,
db = JSON.parse(gs.ldb || '[]');
cnt0 = db.length;
document.getElementById('pbr').max = g.length;
g.forEach(x => {
document.getElementById('pbr').value = gc;
gc++;
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
db.push(x);
}
});
g = null;
cnt1 = db.length;
if (cnt1 != cnt0) {
chrome.storage.local.set({
'ldb': JSON.stringify(db)
});
}
chrome.runtime.sendMessage('dbmode,rl', () => {
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
location.reload();
});
});
}
}
});
r.readAsText(ff);
}
});
document.getElementById('ldb_i').addEventListener('click', () => {
if (!irun) {
document.getElementById('f').click();
}
});
document.getElementById('ldb_c').addEventListener('click', () => {
if (!irun) {
chrome.runtime.sendMessage('dbmode,cl', () => {
alert(document.querySelector('span[tek=opxdone]').innerText);
location.reload();
});
}
});

@ -0,0 +1,37 @@
{
"manifest_version": 2,
"name": "Ĉu ligoj estas vundeblaj al MITM-atako?",
"version": "1.0.20.2",
"minimum_chrome_version": "68",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"incognito": "split",
"permissions": [
"storage",
"unlimitedStorage"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"bg.js"
]
},
"options_ui": {
"chrome_style": false,
"page": "cfg.html"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"cs.js"
],
"run_at": "document_end"
}
]
}

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.ismm.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

1343
addons/ismitmlinkFX/bg.js Normal file

File diff suppressed because one or more lines are too long

@ -0,0 +1,60 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body style="display:none">
&nbsp;<br>
<label><input type="checkbox" id="ign1"> <span tek="tlign1"></span></label><br>
<label><input type="checkbox" id="ign2"> <span tek="tlign2"></span></label><br>
<label><input type="checkbox" id="obs"> <span tek="tlobs"></span></label><br>
<label><input type="checkbox" id="alt"> <span tek="tlalt"></span></label><br>
<label><input type="checkbox" id="dbg"> <span tek="tldbg"></span></label><br>
<br>&nbsp;<br>
<span tek="opmode"></span><br>
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ &rarr; <a href="https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/#!op=info/api" target="_blank">Ss API</a> ]<br>
<label><input type="radio" name="opm" id="opoff"> <span tek="opmoff"></span></label> [ &rarr; <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
<br>&nbsp;<br>
&#128172;
<select id="myul">
<option value="" selected> --- </option>
<option value="ar">العربية</option>
<option value="bn">বাংলা</option>
<option value="de">Deutsch</option>
<option value="eo">Esperanto &#127942;</option>
<option value="es">Español</option>
<option value="fa">فارسی</option>
<option value="fr">Français</option>
<option value="ha">Harshen</option>
<option value="hi">हिंदी</option>
<option value="id">Indonesia</option>
<option value="it">Italiano</option>
<option value="ja">日本語</option>
<option value="jv">ꦧꦱꦗꦮ</option>
<option value="ko">힌디어</option>
<option value="mr">मराठी</option>
<option value="ms">bahasa Melayu</option>
<option value="nl">Nederlands</option>
<option value="pt">Português</option>
<option value="ru">Русский</option>
<option value="sw">Kiswahili</option>
<option value="ta">தமிழ்</option>
<option value="th">ภาษาไทย</option>
<option value="tr">Türkçe</option>
<option value="ur">اردو</option>
<option value="vi">Tiếng Việt</option>
<option value="zh">中文</option>
</select>
<br>&nbsp;<br>&nbsp;<br>
<span tek="aboutcache"></span><br>
<span id="smsa"><button type="button" id="sms"> <span tek="statsshow"></span> </button></span>
<span id="smsb" style="display:none">
&nbsp;<br>
<span tek="hostile"></span>: <span id="viry">?</span><br>
<span tek="neutral"></span>: <span id="virn">?</span><br>
<span tek="total"></span>: <span id="viro">?</span><br>
&nbsp;<br>
<button type="button" id="crs"> <span tek="statsclear"></span> </button>
</span>
<br><br><script src="cg.js"></script>
</body>
</html>

1157
addons/ismitmlinkFX/cg.js Normal file

File diff suppressed because one or more lines are too long

76
addons/ismitmlinkFX/cs.js Normal file

@ -0,0 +1,76 @@
if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
let cs = (function () {
let s = document.createElement('style');
document.head.appendChild(s);
return s.sheet;
})();
if (cs) {
cs.insertRule("a[data-mitm=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
cs.insertRule("a[data-mitm=y]::before{content:'[\\26A0]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
cs.insertRule("a[data-mitm=y]:hover::before{content:'[\\26A1]'}", 2);
cs.insertRule("a[data-mitm=y]:hover{color:red !important}", 3);
cs.insertRule("img[data-mitm=y]{cursor:not-allowed !important;border:2px red dotted !important}", 4);
cs.insertRule("img[data-mitm=y]:hover{filter:sepia(20%)}", 5);
}
browser.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt']).then(g => {
let asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
if (g.ign1 == 'y') {
asked.push(location.hostname);
}
let qstall = (g.ign2 == 'y') ? 'a[href]:not([data-mitm])' : 'a[href]:not([data-mitm]),img[src]:not([data-mitm])';
let running = false;
function scanme() {
if (!running) {
running = true;
let unknown = [];
document.querySelectorAll(qstall).forEach(a => {
let aF = (a.tagName == 'A' ? (new URL(a.href)).hostname : (new URL(a.src)).hostname) || '';
a.dataset.mitm = aF;
if (!asked.includes(aF)) {
asked.push(aF);
if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && aF.length >= 4) {
unknown.push(aF);
}
}
});
if (unknown.length > 0) {
browser.runtime.sendMessage(unknown);
}
running = false;
}
}
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.length == 2) {
if (g.dbg == 'y') {
console.log('isMITM:', request[0], request[1]);
}
document.querySelectorAll(g.ign2 == 'y' ? "a[href][data-mitm='" + request[0] + "']" : "a[href][data-mitm='" + request[0] + "'],img[src][data-mitm='" + request[0] + "']").forEach(a => {
if (request[1]) {
a.dataset.mitm = 'y';
if (g.alt == 'y' && a.tagName == 'A') {
if (!a.href.startsWith('https://web.archive.org/web/')) {
a.href = 'https://web.archive.org/web/' + a.href;
}
a.title = 'Arkivo!';
} else {
a.title = 'MITM!';
}
} else {
a.dataset.mitm = 'n';
}
});
}
sendResponse(true);
return;
});
scanme();
if (g.obs == 'y') {
(new MutationObserver(scanme)).observe(document, {
attributes: true,
attributeFilter: ['href'],
childList: true,
subtree: true
});
}
});
}

@ -0,0 +1,17 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>&#128452;</title>
</head>
<body style="display:none">
<br>
<meter id="pbr" value="0" min="0" max="100" style="width:50%"></meter><br><br>
<button type="button" id="ldb_i"> &#x1F4DD; <span tek="opximp"></span> </button>
<button type="button" id="ldb_c"> &#x1F5D1; <span tek="opxclr"></span> </button>
<span style="display:none">
<input type="file" id="f" accept="text/plain">
<span tek="opxdone"></span>
</span>
<script src="localdb.js"></script>
</body>
</html>

@ -0,0 +1,67 @@
let irun = false;
document.addEventListener('DOMContentLoaded', () => {
browser.storage.local.get(['mul']).then(g => {
let ul = g.mul || 'eo';
fetch('i18n/' + ul + '.json', {
method: 'GET'
}).then(j => j.json()).then(j => {
document.querySelectorAll('span[tek]').forEach(x => {
x.innerText = j[x.getAttribute('tek')];
});
document.body.style.display = 'block';
});
});
});
document.getElementById('f').addEventListener('change', e => {
let ff = e.target.files[0];
if (ff) {
let r = new FileReader();
r.addEventListener('load', e => {
if (ff.size > 4) {
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
if (g.length > 0) {
browser.storage.local.get(['ldb']).then(gs => {
irun = true;
let cnt0, cnt1 = 0,
gc = 1,
db = JSON.parse(gs.ldb || '[]');
cnt0 = db.length;
document.getElementById('pbr').max = g.length;
g.forEach(x => {
document.getElementById('pbr').value = gc;
gc++;
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
db.push(x);
}
});
g = null;
cnt1 = db.length;
if (cnt1 != cnt0) {
browser.storage.local.set({
'ldb': JSON.stringify(db)
});
}
browser.runtime.sendMessage('dbmode,rl').then(() => {
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
location.reload();
});
});
}
}
});
r.readAsText(ff);
}
});
document.getElementById('ldb_i').addEventListener('click', () => {
if (!irun) {
document.getElementById('f').click();
}
});
document.getElementById('ldb_c').addEventListener('click', () => {
if (!irun) {
browser.runtime.sendMessage('dbmode,cl').then(() => {
alert(document.querySelector('span[tek=opxdone]').innerText);
location.reload();
});
}
});

@ -0,0 +1,43 @@
{
"manifest_version": 2,
"name": "Ĉu ligoj estas vundeblaj al MITM-atako?",
"description": "Skanu FQDN uzante la API de Ss",
"version": "1.0.20.2",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"permissions": [
"storage",
"unlimitedStorage"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"bg.js"
]
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"cs.js"
],
"run_at": "document_end"
}
],
"options_ui": {
"browser_style": true,
"page": "cfg.html"
},
"applications": {
"gecko": {
"id": "ismitmlink@searxes.danwin1210.me",
"strict_min_version": "68.0",
"update_url":"https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=ismitmlink"
}
}
}

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.urjm.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

34
addons/urejectCR/bg.js Normal file

@ -0,0 +1,34 @@
let history = {};
chrome.webRequest.onResponseStarted.addListener(i => {
if ([403, 406, 410, 429, 451, 462].includes(i.statusCode)) {
let iFQDN = (new URL(i.url)).hostname;
if (['searxes.eu.org', 'ansero.eu.org', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion'].includes(iFQDN)) {
return;
}
let iServer = '?';
i.responseHeaders.forEach(x => {
if (x.name == 'Server' || x.name == 'server') {
iServer = x.value;
}
});
history[iFQDN] = [i.url, iServer, i.statusCode, (new Date()).toUTCString()];
}
return;
}, {
urls: ['http://*/*', 'https://*/*'],
types: ['main_frame']
}, ['responseHeaders']);
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request && sender) {
if (request == 'get') {
sendResponse(history);
}
if (request == 'clear') {
history = {};
sendResponse(true);
}
}
});
chrome.browserAction.onClicked.addListener(() => {
chrome.runtime.openOptionsPage();
});

20
addons/urejectCR/log.html Normal file

@ -0,0 +1,20 @@
<html>
<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>&#128221;</title>
</head>
<body style="display:none">
<br><br>
<b>Detaloj</b><br>
<table style="width:90%" border=1>
<tbody></tbody>
</table>
<br>
<input id="clear" type="button" value=" Malplenigu liston "><br>
<br><br>
<b>Nur FQDN</b><br>
<textarea id="export" cols=60 rows=20 readonly></textarea>
<script src="log.js"></script>
</body>
</html>

18
addons/urejectCR/log.js Normal file

@ -0,0 +1,18 @@
function newrow(w) {
let tt = document.getElementsByTagName('tbody')[0];
let tr = tt.insertRow(tt.rows.length);
tr.innerHTML = w;
}
newrow('<tr><td><b>FQDN</b></td><td><b>Servilo</b></td><td><b>Stato</b></td><td><b>Kie</b></td><td><b>Kiam</b></td></tr>');
chrome.runtime.sendMessage('get', g => {
for (let k in g) {
newrow('<tr><td>' + k + '</td><td>' + g[k][1] + '</td><td>' + g[k][2] + '</td><td><a href="' + g[k][0] + '" rel="noreferrer noopener" target="_blank"> &#128279; </a></td><td>' + g[k][3] + '</td></tr>');
document.getElementById('export').innerHTML += k + "\n";
}
});
document.body.style.display = 'block';
document.getElementById('clear').addEventListener('click', () => {
chrome.runtime.sendMessage('clear', () => {
location.reload(true);
});
});

@ -0,0 +1,31 @@
{
"manifest_version": 2,
"name": "Kiu retejo malakceptis min?",
"version": "1.0.2",
"minimum_chrome_version": "60",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"incognito": "split",
"permissions": [
"webRequest",
"<all_urls>"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"bg.js"
]
},
"options_ui": {
"open_in_tab": true,
"chrome_style": false,
"page": "log.html"
},
"browser_action": {
"default_icon": {
"72": "icons/72.png"
}
}
}

@ -0,0 +1,2 @@
- [More Information / Download](../../subfiles/about.urjm.md)
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.

34
addons/urejectFX/bg.js Normal file

@ -0,0 +1,34 @@
let history = {};
browser.webRequest.onResponseStarted.addListener(i => {
if ([403, 406, 410, 429, 451, 462].includes(i.statusCode)) {
let iFQDN = (new URL(i.url)).hostname;
if (['searxes.eu.org', 'ansero.eu.org', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion'].includes(iFQDN)) {
return;
}
let iServer = '?';
i.responseHeaders.forEach(x => {
if (x.name == 'Server' || x.name == 'server') {
iServer = x.value;
}
});
history[iFQDN] = [i.url, iServer, i.statusCode, (new Date()).toUTCString()];
}
return;
}, {
urls: ['http://*/*', 'https://*/*'],
types: ['main_frame']
}, ['responseHeaders']);
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request && sender) {
if (request == 'get') {
sendResponse(history);
}
if (request == 'clear') {
history = {};
sendResponse(true);
}
}
});
browser.browserAction.onClicked.addListener(() => {
browser.runtime.openOptionsPage();
});

20
addons/urejectFX/log.html Normal file

@ -0,0 +1,20 @@
<html>
<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>&#128221;</title>
</head>
<body style="display:none">
<br><br>
<b>Detaloj</b><br>
<table style="width:90%" border=1>
<tbody></tbody>
</table>
<br>
<input id="clear" type="button" value=" Malplenigu liston "><br>
<br><br>
<b>Nur FQDN</b><br>
<textarea id="export" cols=60 rows=20 readonly></textarea>
<script src="log.js"></script>
</body>
</html>

18
addons/urejectFX/log.js Normal file

@ -0,0 +1,18 @@
function newrow(w) {
let tt = document.getElementsByTagName('tbody')[0];
let tr = tt.insertRow(tt.rows.length);
tr.innerHTML = w;
}
newrow('<tr><td><b>FQDN</b></td><td><b>Servilo</b></td><td><b>Stato</b></td><td><b>Kie</b></td><td><b>Kiam</b></td></tr>');
browser.runtime.sendMessage('get').then(g => {
for (let k in g) {
newrow('<tr><td>' + k + '</td><td>' + g[k][1] + '</td><td>' + g[k][2] + '</td><td><a href="' + g[k][0] + '" rel="noreferrer noopener" target="_blank"> &#128279; </a></td><td>' + g[k][3] + '</td></tr>');
document.getElementById('export').innerHTML += k + "\n";
}
});
document.body.style.display = 'block';
document.getElementById('clear').addEventListener('click', () => {
browser.runtime.sendMessage('clear').then(() => {
location.reload(true);
});
});

@ -0,0 +1,38 @@
{
"manifest_version": 2,
"name": "Kiu retejo malakceptis min?",
"description": "Via retejo malakceptis min, sed mi scias ke mi fartos bone.",
"version": "1.0.2",
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
"author": "Ss",
"permissions": [
"webRequest",
"<all_urls>"
],
"icons": {
"72": "icons/72.png"
},
"background": {
"scripts": [
"bg.js"
]
},
"options_ui": {
"browser_style": false,
"open_in_tab": true,
"page": "log.html"
},
"browser_action": {
"browser_style": true,
"default_icon": {
"72": "icons/72.png"
}
},
"applications": {
"gecko": {
"id": "urejectme@searxes.eu.org",
"strict_min_version": "60.0",
"update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=ureject"
}
}
}

@ -0,0 +1,52 @@
// ==UserScript==
// @name Decode Cloudflare-encoded email addresses
// @original https://codeberg.org/smege1001/cf_email_decoder
// @match *://*/*
// @grant none
// @version 1.0
// @author smege1001
// ==/UserScript==
/**
* @license CC0-1.0
**/
const emailprotectionURLHashRegex = /\/cdn-cgi\/l\/email-protection#([aA0-fF9]*)/;
const emailprotectionURLNoHashRegex = /\/cdn-cgi\/l\/email-protection/; //hash is stored on data-cfemail
function decodeEmail(hash) { //cloudflare email address decoder
var hashArray = []; //split the hash into bytes
for (var hAIndex = 0; hAIndex < hash.length; hAIndex += 2) {
hashArray.push(parseInt(hash.substring(hAIndex, hAIndex + 2), 16));
}
var decoded = "";
var key = hashArray[0]; //get the decode key
for (var index = 1; index < hashArray.length; index++) {
decoded += String.fromCharCode(hashArray[index] ^ key);
}
return decoded;
}
var links = document.querySelectorAll("a"); //get all the links
for (var linksIndex = 0; linksIndex < links.length; linksIndex++) {
var link = links[linksIndex];
if (emailprotectionURLHashRegex.test(link.href)) {
var hash = link.href.match(emailprotectionURLHashRegex)[1];
link.href = "mailto:" + decodeEmail(hash); //replace the stupid email protection with just a mailto link
} else if (emailprotectionURLNoHashRegex.test(link.href) && link.hasAttribute("data-cfemail")) {
var hash = link.getAttribute("data-cfemail");
var decodedEmail = decodeEmail(hash);
link.href = "mailto:" + decodedEmail;
link.innerText = decodedEmail; //the inner text is just [email protected]
//remove the useless attributes
link.removeAttribute("data-cfemail");
link.classList.remove("__cf_email__");
if (link.getAttribute("class") == "") link.removeAttribute("class");
}
}