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

View File

@ -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
View File

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

2
addons/bcmaCR/README.md Normal file
View 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
View 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
View 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);
}
});
});

View File

@ -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
View 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
View 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
View 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);
}
});
});

View File

@ -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"
}
}
}

View File

@ -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
View 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;
});

View File

@ -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
View 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

View File

@ -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>

View File

@ -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();
});
}
});

View File

@ -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"
}
]
}

View File

@ -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
View 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;
});

View File

@ -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
View 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

View File

@ -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>

View File

@ -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();
});
}
});

View File

@ -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"
}
}
}

View File

@ -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

View File

@ -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
View 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
});
}
});
}

View File

@ -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>

View File

@ -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();
});
}
});

View File

@ -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"
}
]
}

View File

@ -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

View File

@ -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
View 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
});
}
});
}

View File

@ -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>

View File

@ -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();
});
}
});

View File

@ -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"
}
}
}

View File

@ -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
View 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
View 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
View 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);
});
});

View File

@ -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"
}
}
}

View File

@ -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
View 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
View 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
View 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);
});
});

View File

@ -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"
}
}
}

View File

@ -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");
}
}