mirror of
https://codeberg.org/arh/how-cloudflare-works
synced 2025-01-31 23:14:51 +01:00
PR 60
This commit is contained in:
commit
069b41e669
@ -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
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
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
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
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>
|
||||
<br>
|
||||
<b>📢 <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>
|
||||
<br> <br>
|
||||
<b>🖇 <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>
|
||||
<br> <br>
|
||||
<b>🔔 <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>
|
||||
<br> <br>
|
||||
<b>📒 <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>
|
||||
<br> <br>
|
||||
<b>🏳 <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>
|
||||
<br> <br>
|
||||
<b>💬 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 🏆</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> <br>
|
||||
<b>📚 <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>
|
||||
<br>
|
||||
<script src="cg.js"></script>
|
||||
</body>
|
||||
</html>
|
100
addons/bcmaCR/cg.js
Normal file
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);
|
||||
}
|
||||
});
|
||||
});
|
36
addons/bcmaCR/manifest.json
Normal file
36
addons/bcmaCR/manifest.json
Normal 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
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
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
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>
|
||||
<br>
|
||||
<b>📢 <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>
|
||||
<br> <br>
|
||||
<b>🖇 <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>
|
||||
<br> <br>
|
||||
<b>🔔 <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>
|
||||
<br> <br>
|
||||
<b>📒 <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>
|
||||
<br> <br>
|
||||
<b>🏳 <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>
|
||||
<br> <br>
|
||||
<b>💬 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 🏆</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> <br>
|
||||
<b>📚 <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>
|
||||
<br>
|
||||
<script src="cg.js"></script>
|
||||
</body>
|
||||
</html>
|
111
addons/bcmaFX/cg.js
Normal file
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);
|
||||
}
|
||||
});
|
||||
});
|
44
addons/bcmaFX/manifest.json
Normal file
44
addons/bcmaFX/manifest.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
2
addons/isattlinkCR/README.md
Normal file
2
addons/isattlinkCR/README.md
Normal 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
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;
|
||||
});
|
59
addons/isattlinkCR/cfg.html
Normal file
59
addons/isattlinkCR/cfg.html
Normal file
@ -0,0 +1,59 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
</head>
|
||||
<body style="display:none">
|
||||
<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> <br>
|
||||
<span tek="opmode"></span><br>
|
||||
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ → <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> [ → <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
|
||||
<br> <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 🏆</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> <br> <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">
|
||||
<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>
|
||||
<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
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
1126
addons/isattlinkCR/cs.js
Normal file
File diff suppressed because one or more lines are too long
17
addons/isattlinkCR/localdb.html
Normal file
17
addons/isattlinkCR/localdb.html
Normal file
@ -0,0 +1,17 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
<title>🗄</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"> 📝 <span tek="opximp"></span> </button>
|
||||
<button type="button" id="ldb_c"> 🗑 <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>
|
67
addons/isattlinkCR/localdb.js
Normal file
67
addons/isattlinkCR/localdb.js
Normal 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();
|
||||
});
|
||||
}
|
||||
});
|
37
addons/isattlinkCR/manifest.json
Normal file
37
addons/isattlinkCR/manifest.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
2
addons/isattlinkFX/README.md
Normal file
2
addons/isattlinkFX/README.md
Normal 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
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;
|
||||
});
|
59
addons/isattlinkFX/cfg.html
Normal file
59
addons/isattlinkFX/cfg.html
Normal file
@ -0,0 +1,59 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
</head>
|
||||
<body style="display:none">
|
||||
<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> <br>
|
||||
<span tek="opmode"></span><br>
|
||||
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ → <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> [ → <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
|
||||
<br> <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 🏆</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> <br> <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">
|
||||
<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>
|
||||
<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
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
1129
addons/isattlinkFX/cs.js
Normal file
File diff suppressed because one or more lines are too long
17
addons/isattlinkFX/localdb.html
Normal file
17
addons/isattlinkFX/localdb.html
Normal file
@ -0,0 +1,17 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
<title>🗄</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"> 📝 <span tek="opximp"></span> </button>
|
||||
<button type="button" id="ldb_c"> 🗑 <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>
|
67
addons/isattlinkFX/localdb.js
Normal file
67
addons/isattlinkFX/localdb.js
Normal 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();
|
||||
});
|
||||
}
|
||||
});
|
43
addons/isattlinkFX/manifest.json
Normal file
43
addons/isattlinkFX/manifest.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
2
addons/ismitmlinkCR/README.md
Normal file
2
addons/ismitmlinkCR/README.md
Normal 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
1340
addons/ismitmlinkCR/bg.js
Normal file
File diff suppressed because one or more lines are too long
60
addons/ismitmlinkCR/cfg.html
Normal file
60
addons/ismitmlinkCR/cfg.html
Normal file
@ -0,0 +1,60 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
</head>
|
||||
<body style="display:none">
|
||||
<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> <br>
|
||||
<span tek="opmode"></span><br>
|
||||
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ → <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> [ → <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
|
||||
<br> <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 🏆</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> <br> <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">
|
||||
<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>
|
||||
<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
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
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
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
17
addons/ismitmlinkCR/localdb.html
Normal file
17
addons/ismitmlinkCR/localdb.html
Normal file
@ -0,0 +1,17 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
<title>🗄</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"> 📝 <span tek="opximp"></span> </button>
|
||||
<button type="button" id="ldb_c"> 🗑 <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>
|
67
addons/ismitmlinkCR/localdb.js
Normal file
67
addons/ismitmlinkCR/localdb.js
Normal 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();
|
||||
});
|
||||
}
|
||||
});
|
37
addons/ismitmlinkCR/manifest.json
Normal file
37
addons/ismitmlinkCR/manifest.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
2
addons/ismitmlinkFX/README.md
Normal file
2
addons/ismitmlinkFX/README.md
Normal 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
1343
addons/ismitmlinkFX/bg.js
Normal file
File diff suppressed because one or more lines are too long
60
addons/ismitmlinkFX/cfg.html
Normal file
60
addons/ismitmlinkFX/cfg.html
Normal file
@ -0,0 +1,60 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
</head>
|
||||
<body style="display:none">
|
||||
<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> <br>
|
||||
<span tek="opmode"></span><br>
|
||||
<label><input type="radio" name="opm" id="opon"> <span tek="opmon"></span></label> [ → <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> [ → <a href="./localdb.html" target="_blank"><span tek="opmode"></span></a> ]<br>
|
||||
<br> <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 🏆</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> <br> <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">
|
||||
<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>
|
||||
<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
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
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
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
17
addons/ismitmlinkFX/localdb.html
Normal file
17
addons/ismitmlinkFX/localdb.html
Normal file
@ -0,0 +1,17 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
<title>🗄</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"> 📝 <span tek="opximp"></span> </button>
|
||||
<button type="button" id="ldb_c"> 🗑 <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>
|
67
addons/ismitmlinkFX/localdb.js
Normal file
67
addons/ismitmlinkFX/localdb.js
Normal 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();
|
||||
});
|
||||
}
|
||||
});
|
43
addons/ismitmlinkFX/manifest.json
Normal file
43
addons/ismitmlinkFX/manifest.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
2
addons/urejectCR/README.md
Normal file
2
addons/urejectCR/README.md
Normal 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
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
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>📝</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
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"> 🔗 </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);
|
||||
});
|
||||
});
|
31
addons/urejectCR/manifest.json
Normal file
31
addons/urejectCR/manifest.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
2
addons/urejectFX/README.md
Normal file
2
addons/urejectFX/README.md
Normal 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
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
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>📝</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
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"> 🔗 </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);
|
||||
});
|
||||
});
|
38
addons/urejectFX/manifest.json
Normal file
38
addons/urejectFX/manifest.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
52
tool/userscript.cf_email_decoder.js
Normal file
52
tool/userscript.cf_email_decoder.js
Normal 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");
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user