PR 60
This commit is contained in:
commit
069b41e669
|
@ -1,8 +1,9 @@
|
||||||
### License
|
### License
|
||||||
|
|
||||||
* /globalist/* (Globalist) -- [GNU GPLv3](globalist/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)
|
* /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`.
|
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.
|
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.
|
`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.
|
||||||
|
|
||||||
You can also make money off our work and you are not required to give credit to us.
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
### Addons for Firefox / Chromium (Source code only)
|
||||||
|
|
||||||
|
- [License](../LICENSE.md)
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.bcma.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
File diff suppressed because one or more lines are too long
|
@ -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>
|
|
@ -0,0 +1,100 @@
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
chrome.runtime.sendMessage(['cf'], (r) => {
|
||||||
|
fetch('i18n/' + r[5] + '.json', {
|
||||||
|
method: 'GET'
|
||||||
|
}).then(j => j.json()).then(j => {
|
||||||
|
document.querySelectorAll('span[transk]').forEach(x => {
|
||||||
|
x.innerText = j[x.getAttribute('transk')];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
document.getElementById('t').value = JSON.parse(r[0]).join("\n");
|
||||||
|
document.getElementById('g').value = JSON.parse(r[1]).join("\n");
|
||||||
|
document.getElementById('vau').value = r[3];
|
||||||
|
document.getElementById('nnf1').checked = r[4][0];
|
||||||
|
document.getElementById('nnf2').checked = r[4][1];
|
||||||
|
switch (r[2]) {
|
||||||
|
case 0:
|
||||||
|
document.getElementById('ta0').checked = true;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = true;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = true;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = true;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('aus').addEventListener('click', function () {
|
||||||
|
chrome.runtime.sendMessage(['au', document.getElementById('vau').value]);
|
||||||
|
});
|
||||||
|
document.getElementById('clr').addEventListener('click', () => {
|
||||||
|
chrome.runtime.sendMessage(['dy']);
|
||||||
|
document.getElementById('t').value = '';
|
||||||
|
});
|
||||||
|
document.getElementById('nnf1').addEventListener('click', function () {
|
||||||
|
chrome.runtime.sendMessage(['nnf', '1', (this.checked ? true : false)]);
|
||||||
|
});
|
||||||
|
document.getElementById('nnf2').addEventListener('click', function () {
|
||||||
|
chrome.runtime.sendMessage(['nnf', '2', (this.checked ? true : false)]);
|
||||||
|
});
|
||||||
|
document.getElementById('ta0').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
chrome.runtime.sendMessage(['ta', '0']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta1').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
chrome.runtime.sendMessage(['ta', '1']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta2').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
chrome.runtime.sendMessage(['ta', '2']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta3').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
chrome.runtime.sendMessage(['ta', '3']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta4').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
chrome.runtime.sendMessage(['ta', '4']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ign').addEventListener('click', function () {
|
||||||
|
chrome.runtime.sendMessage(['ig', document.getElementById('g').value.split("\n")]);
|
||||||
|
});
|
||||||
|
document.getElementById('myul').addEventListener('change', () => {
|
||||||
|
if (document.getElementById('myul').value != '') {
|
||||||
|
chrome.runtime.sendMessage(['ul', document.getElementById('myul').value]);
|
||||||
|
location.reload(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Bloku Cloudflaron MITM-Atakon",
|
||||||
|
"version": "1.0.3.6",
|
||||||
|
"minimum_chrome_version": "68",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"incognito": "split",
|
||||||
|
"permissions": [
|
||||||
|
"<all_urls>",
|
||||||
|
"activeTab",
|
||||||
|
"tabs",
|
||||||
|
"webRequest",
|
||||||
|
"webRequestBlocking",
|
||||||
|
"webNavigation",
|
||||||
|
"notifications",
|
||||||
|
"storage",
|
||||||
|
"unlimitedStorage"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"cf.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options_ui": {
|
||||||
|
"page": "cg.html"
|
||||||
|
},
|
||||||
|
"browser_action": {
|
||||||
|
"default_icon": {
|
||||||
|
"32": "icons/cf_0.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.bcma.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
File diff suppressed because one or more lines are too long
|
@ -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>
|
|
@ -0,0 +1,111 @@
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
browser.runtime.sendMessage(['cf']).then((r) => {
|
||||||
|
fetch('i18n/' + r[5] + '.json', {
|
||||||
|
method: 'GET'
|
||||||
|
}).then(j => j.json()).then(j => {
|
||||||
|
document.querySelectorAll('span[transk]').forEach(x => {
|
||||||
|
x.innerText = j[x.getAttribute('transk')];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
document.getElementById('t').value = JSON.parse(r[0]).join("\n");
|
||||||
|
document.getElementById('g').value = JSON.parse(r[1]).join("\n");
|
||||||
|
document.getElementById('vau').value = r[3];
|
||||||
|
document.getElementById('nnf1').checked = r[4][0];
|
||||||
|
document.getElementById('nnf2').checked = r[4][1];
|
||||||
|
switch (r[2]) {
|
||||||
|
case 0:
|
||||||
|
document.getElementById('ta0').checked = true;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = true;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = true;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = false;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
document.getElementById('ta0').checked = false;
|
||||||
|
document.getElementById('ta1').checked = false;
|
||||||
|
document.getElementById('ta2').checked = true;
|
||||||
|
document.getElementById('ta3').checked = false;
|
||||||
|
document.getElementById('ta4').checked = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('aus').addEventListener('click', function () {
|
||||||
|
browser.runtime.sendMessage(['au', document.getElementById('vau').value]);
|
||||||
|
});
|
||||||
|
document.getElementById('exp').addEventListener('click', () => {
|
||||||
|
browser.tabs.create({
|
||||||
|
active: true,
|
||||||
|
url: 'about:blank'
|
||||||
|
}).then(function (t) {
|
||||||
|
browser.tabs.executeScript(t.id, {
|
||||||
|
matchAboutBlank: true,
|
||||||
|
code: "document.documentElement.innerHTML='<html><body><pre>'+atob('" + btoa(document.getElementById('t').value) + "')+'</pre></body></html>';window.stop();"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
document.getElementById('clr').addEventListener('click', () => {
|
||||||
|
browser.runtime.sendMessage(['dy']);
|
||||||
|
document.getElementById('t').value = '';
|
||||||
|
});
|
||||||
|
document.getElementById('nnf1').addEventListener('click', function () {
|
||||||
|
browser.runtime.sendMessage(['nnf', '1', (this.checked ? true : false)]);
|
||||||
|
});
|
||||||
|
document.getElementById('nnf2').addEventListener('click', function () {
|
||||||
|
browser.runtime.sendMessage(['nnf', '2', (this.checked ? true : false)]);
|
||||||
|
});
|
||||||
|
document.getElementById('ta0').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
browser.runtime.sendMessage(['ta', '0']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta1').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
browser.runtime.sendMessage(['ta', '1']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta2').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
browser.runtime.sendMessage(['ta', '2']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta3').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
browser.runtime.sendMessage(['ta', '3']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ta4').addEventListener('click', function () {
|
||||||
|
if (this.checked) {
|
||||||
|
browser.runtime.sendMessage(['ta', '4']);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ign').addEventListener('click', function () {
|
||||||
|
browser.runtime.sendMessage(['ig', document.getElementById('g').value.split("\n")]);
|
||||||
|
});
|
||||||
|
document.getElementById('myul').addEventListener('change', () => {
|
||||||
|
if (document.getElementById('myul').value != '') {
|
||||||
|
browser.runtime.sendMessage(['ul', document.getElementById('myul').value]);
|
||||||
|
location.reload(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Bloku Cloudflaron MITM-Atakon",
|
||||||
|
"description": "Submetiĝu al tutmonda gvatado aŭ rezistu. La elekto estas via.",
|
||||||
|
"version": "1.0.3.6",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"permissions": [
|
||||||
|
"<all_urls>",
|
||||||
|
"activeTab",
|
||||||
|
"tabs",
|
||||||
|
"webRequest",
|
||||||
|
"webRequestBlocking",
|
||||||
|
"webNavigation",
|
||||||
|
"notifications",
|
||||||
|
"storage",
|
||||||
|
"unlimitedStorage"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"cf.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options_ui": {
|
||||||
|
"browser_style": true,
|
||||||
|
"page": "cg.html"
|
||||||
|
},
|
||||||
|
"browser_action": {
|
||||||
|
"browser_style": true,
|
||||||
|
"default_icon": {
|
||||||
|
"32": "icons/cf_0.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"applications": {
|
||||||
|
"gecko": {
|
||||||
|
"id": "bcma@searxes.eu.org",
|
||||||
|
"strict_min_version": "68.0",
|
||||||
|
"update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=bcma"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.isat.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
|
@ -0,0 +1,267 @@
|
||||||
|
let localUse = false,
|
||||||
|
localDB = [],
|
||||||
|
timr, memcache = {},
|
||||||
|
forcePurge = false,
|
||||||
|
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
|
||||||
|
/*
|
||||||
|
chrome.storage.local.get(['cep'], g => {
|
||||||
|
if (g.cep == 'y') {
|
||||||
|
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
|
||||||
|
} else {
|
||||||
|
if (g.cep != 'n') {
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'cep': 'n'
|
||||||
|
});
|
||||||
|
fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
|
||||||
|
method: 'GET',
|
||||||
|
mode: 'cors'
|
||||||
|
}).then(r => r.text()).then(r => {
|
||||||
|
if (r == 'ok') {
|
||||||
|
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'cep': 'y'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
function is_hostile(f) {
|
||||||
|
if (localUse) {
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
g(localDB.includes(f) ? true : false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
fetch(apiurl, {
|
||||||
|
method: 'POST',
|
||||||
|
mode: 'cors',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
|
},
|
||||||
|
body: 'f=' + f
|
||||||
|
}).then(r => r.json()).then(r => {
|
||||||
|
if (r[0]) {
|
||||||
|
g(r[1]);
|
||||||
|
} else {
|
||||||
|
b();
|
||||||
|
}
|
||||||
|
}).catch(b);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function i_know_you(f) {
|
||||||
|
if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
g(200);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let m;
|
||||||
|
if (memcache[f] != undefined) {
|
||||||
|
m = memcache[f];
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
g(m);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
chrome.storage.local.get([f], (ff) => {
|
||||||
|
if (ff[f]) {
|
||||||
|
if (ff[f] == 'y') {
|
||||||
|
memcache[f] = 1;
|
||||||
|
g(1);
|
||||||
|
} else {
|
||||||
|
memcache[f] = -1;
|
||||||
|
g(-1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
g(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function forget_cache() {
|
||||||
|
chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
|
||||||
|
chrome.storage.local.clear();
|
||||||
|
memcache = {};
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'obs': (g.obs == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'dbg': (g.dbg == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'alt': (g.alt == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'cep': (g.cep == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'mul': (g.mul != undefined ? g.mul : 'eo')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'opd': (g.opd == 'n' ? 'n' : 'y')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ldb': (g.ldb != undefined ? g.ldb : '[]')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'lastV': (chrome.runtime.getManifest()).version
|
||||||
|
});
|
||||||
|
});
|
||||||
|
clearTimeout(timr);
|
||||||
|
timr = setTimeout(function () {
|
||||||
|
forget_cache();
|
||||||
|
}, 1814400000);
|
||||||
|
}
|
||||||
|
chrome.storage.local.get(['lastU', 'lastV', 'ldb', 'opd'], g => {
|
||||||
|
localUse = (g.opd == 'n') ? true : false;
|
||||||
|
localDB = JSON.parse(g.ldb || '[]');
|
||||||
|
if (g.lastU) {
|
||||||
|
if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
|
||||||
|
chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
|
||||||
|
chrome.storage.local.clear();
|
||||||
|
memcache = {};
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'obs': (g.obs == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'dbg': (g.dbg == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'alt': (g.alt == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'cep': (g.cep == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'mul': (g.mul != undefined ? g.mul : 'eo')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'opd': (g.opd == 'n' ? 'n' : 'y')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ldb': (g.ldb != undefined ? g.ldb : '[]')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let nowVer = (chrome.runtime.getManifest()).version;
|
||||||
|
if (g.lastV != nowVer || forcePurge) {
|
||||||
|
chrome.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb'], g => {
|
||||||
|
chrome.storage.local.clear();
|
||||||
|
memcache = {};
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'obs': (g.obs == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'dbg': (g.dbg == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'alt': (g.alt == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'cep': (g.cep == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'mul': (g.mul != undefined ? g.mul : 'eo')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'opd': (g.opd == 'n' ? 'n' : 'y')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ldb': (g.ldb != undefined ? g.ldb : '[]')
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'lastV': (chrome.runtime.getManifest()).version
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
timr = setTimeout(function () {
|
||||||
|
forget_cache();
|
||||||
|
}, 1814400000);
|
||||||
|
});
|
||||||
|
chrome.runtime.onMessage.addListener((requests, sender, sendResponse) => {
|
||||||
|
if (requests) {
|
||||||
|
if (requests === 'clear') {
|
||||||
|
forget_cache();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (requests.indexOf('dbmode,') === 0) {
|
||||||
|
switch (requests) {
|
||||||
|
case 'dbmode,s1':
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'opd': 'y'
|
||||||
|
});
|
||||||
|
localUse = false;
|
||||||
|
break;
|
||||||
|
case 'dbmode,s0':
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'opd': 'n'
|
||||||
|
});
|
||||||
|
localUse = true;
|
||||||
|
break;
|
||||||
|
case 'dbmode,cl':
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ldb': '[]'
|
||||||
|
});
|
||||||
|
localDB = [];
|
||||||
|
break;
|
||||||
|
case 'dbmode,rl':
|
||||||
|
chrome.storage.local.get(['ldb'], (g) => {
|
||||||
|
localDB = JSON.parse(g.ldb || '[]');
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
requests.forEach(request => {
|
||||||
|
i_know_you(request).then((r) => {
|
||||||
|
if (r == 1 || r == -1) {
|
||||||
|
chrome.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
|
||||||
|
}
|
||||||
|
if (r == 0) {
|
||||||
|
is_hostile(request).then((a) => {
|
||||||
|
if (a) {
|
||||||
|
chrome.storage.local.set({
|
||||||
|
[request]: 'y'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
chrome.storage.local.set({
|
||||||
|
[request]: 'n'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (Object.keys(memcache).length > 650) {
|
||||||
|
memcache = {};
|
||||||
|
}
|
||||||
|
chrome.tabs.sendMessage(sender.tab.id, [request, a]);
|
||||||
|
}, () => {
|
||||||
|
chrome.tabs.sendMessage(sender.tab.id, [request, false]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, () => {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
});
|
|
@ -0,0 +1,59 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
</head>
|
||||||
|
<body style="display:none">
|
||||||
|
<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>
|
|
@ -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';
|
||||||
|
});
|
||||||
|
});
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,17 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
<title>🗄</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>
|
|
@ -0,0 +1,67 @@
|
||||||
|
let irun = false;
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
chrome.storage.local.get(['mul'], g => {
|
||||||
|
let ul = g.mul || 'eo';
|
||||||
|
fetch('i18n/' + ul + '.json', {
|
||||||
|
method: 'GET'
|
||||||
|
}).then(j => j.json()).then(j => {
|
||||||
|
document.querySelectorAll('span[tek]').forEach(x => {
|
||||||
|
x.innerText = j[x.getAttribute('tek')];
|
||||||
|
});
|
||||||
|
document.body.style.display = 'block';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
document.getElementById('f').addEventListener('change', e => {
|
||||||
|
let ff = e.target.files[0];
|
||||||
|
if (ff) {
|
||||||
|
let r = new FileReader();
|
||||||
|
r.addEventListener('load', e => {
|
||||||
|
if (ff.size > 4) {
|
||||||
|
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
|
||||||
|
if (g.length > 0) {
|
||||||
|
chrome.storage.local.get(['ldb'], gs => {
|
||||||
|
irun = true;
|
||||||
|
let cnt0, cnt1 = 0,
|
||||||
|
gc = 1,
|
||||||
|
db = JSON.parse(gs.ldb || '[]');
|
||||||
|
cnt0 = db.length;
|
||||||
|
document.getElementById('pbr').max = g.length;
|
||||||
|
g.forEach(x => {
|
||||||
|
document.getElementById('pbr').value = gc;
|
||||||
|
gc++;
|
||||||
|
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
|
||||||
|
db.push(x);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
g = null;
|
||||||
|
cnt1 = db.length;
|
||||||
|
if (cnt1 != cnt0) {
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ldb': JSON.stringify(db)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
chrome.runtime.sendMessage('dbmode,rl', () => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
r.readAsText(ff);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_i').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
document.getElementById('f').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_c').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
chrome.runtime.sendMessage('dbmode,cl', () => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Ĉu ĉi tiuj ligoj blokos Tor-uzanton?",
|
||||||
|
"version": "1.0.2.2",
|
||||||
|
"minimum_chrome_version": "68",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"incognito": "split",
|
||||||
|
"permissions": [
|
||||||
|
"storage",
|
||||||
|
"unlimitedStorage"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"bg.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options_ui": {
|
||||||
|
"chrome_style": false,
|
||||||
|
"page": "cfg.html"
|
||||||
|
},
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"matches": [
|
||||||
|
"http://*/*",
|
||||||
|
"https://*/*"
|
||||||
|
],
|
||||||
|
"js": [
|
||||||
|
"cs.js"
|
||||||
|
],
|
||||||
|
"run_at": "document_end"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.isat.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
|
@ -0,0 +1,270 @@
|
||||||
|
let localUse = false,
|
||||||
|
localDB = [],
|
||||||
|
timr, memcache = {},
|
||||||
|
forcePurge = false,
|
||||||
|
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
|
||||||
|
/*
|
||||||
|
browser.storage.local.get(['cep']).then(g => {
|
||||||
|
if (g.cep == 'y') {
|
||||||
|
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
|
||||||
|
} else {
|
||||||
|
if (g.cep != 'n') {
|
||||||
|
browser.storage.local.set({
|
||||||
|
'cep': 'n'
|
||||||
|
});
|
||||||
|
fetch('http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/ok.php', {
|
||||||
|
method: 'GET',
|
||||||
|
mode: 'cors'
|
||||||
|
}).then(r => r.text()).then(r => {
|
||||||
|
if (r == 'ok') {
|
||||||
|
apiurl = 'http://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/is_antitor.php';
|
||||||
|
browser.storage.local.set({
|
||||||
|
'cep': 'y'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
function is_hostile(f) {
|
||||||
|
if (localUse) {
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
g(localDB.includes(f) ? true : false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
fetch(apiurl, {
|
||||||
|
method: 'POST',
|
||||||
|
mode: 'cors',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded'
|
||||||
|
},
|
||||||
|
body: 'f=' + f
|
||||||
|
}).then(r => r.json()).then(r => {
|
||||||
|
if (r[0]) {
|
||||||
|
g(r[1]);
|
||||||
|
} else {
|
||||||
|
b();
|
||||||
|
}
|
||||||
|
}).catch(b);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function i_know_you(f) {
|
||||||
|
if (!/^([a-z0-9_.-]{1,255})\.([a-z]{2,80})$/.test(f)) {
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
g(200);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let m;
|
||||||
|
if (memcache[f] != undefined) {
|
||||||
|
m = memcache[f];
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
g(m);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new Promise((g, b) => {
|
||||||
|
browser.storage.local.get([f]).then((ff) => {
|
||||||
|
if (ff[f]) {
|
||||||
|
if (ff[f] == 'y') {
|
||||||
|
memcache[f] = 1;
|
||||||
|
g(1);
|
||||||
|
} else {
|
||||||
|
memcache[f] = -1;
|
||||||
|
g(-1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
g(0);
|
||||||
|
}
|
||||||
|
}, () => {
|
||||||
|
g(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function forget_cache() {
|
||||||
|
browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
|
||||||
|
browser.storage.local.clear();
|
||||||
|
memcache = {};
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'obs': (g.obs == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'dbg': (g.dbg == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'alt': (g.alt == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'cep': (g.cep == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'mul': (g.mul != undefined ? g.mul : 'eo')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'opd': (g.opd == 'n' ? 'n' : 'y')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ldb': (g.ldb != undefined ? g.ldb : '[]')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'lastV': (browser.runtime.getManifest()).version
|
||||||
|
});
|
||||||
|
});
|
||||||
|
clearTimeout(timr);
|
||||||
|
timr = setTimeout(function () {
|
||||||
|
forget_cache();
|
||||||
|
}, 1814400000);
|
||||||
|
}
|
||||||
|
browser.storage.local.get(['lastU', 'lastV', 'ldb', 'opd']).then(g => {
|
||||||
|
localUse = (g.opd == 'n') ? true : false;
|
||||||
|
localDB = JSON.parse(g.ldb || '[]');
|
||||||
|
if (g.lastU) {
|
||||||
|
if (Math.abs(Math.round((new Date()).getTime() / 1000) - g.lastU) > 1814400) {
|
||||||
|
browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
|
||||||
|
browser.storage.local.clear();
|
||||||
|
memcache = {};
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'obs': (g.obs == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'dbg': (g.dbg == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'alt': (g.alt == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'cep': (g.cep == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'mul': (g.mul != undefined ? g.mul : 'eo')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'opd': (g.opd == 'n' ? 'n' : 'y')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ldb': (g.ldb != undefined ? g.ldb : '[]')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
browser.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
let nowVer = (browser.runtime.getManifest()).version;
|
||||||
|
if (g.lastV != nowVer || forcePurge) {
|
||||||
|
console.log('Updated', nowVer);
|
||||||
|
browser.storage.local.get(['ign1', 'obs', 'dbg', 'alt', 'cep', 'mul', 'opd', 'ldb']).then(g => {
|
||||||
|
browser.storage.local.clear();
|
||||||
|
memcache = {};
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ign1': (g.ign1 == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'obs': (g.obs == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'dbg': (g.dbg == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'alt': (g.alt == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'cep': (g.cep == 'y' ? 'y' : 'n')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'mul': (g.mul != undefined ? g.mul : 'eo')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'opd': (g.opd == 'n' ? 'n' : 'y')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ldb': (g.ldb != undefined ? g.ldb : '[]')
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'lastU': Math.round((new Date()).getTime() / 1000)
|
||||||
|
});
|
||||||
|
browser.storage.local.set({
|
||||||
|
'lastV': (browser.runtime.getManifest()).version
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
timr = setTimeout(function () {
|
||||||
|
forget_cache();
|
||||||
|
}, 1814400000);
|
||||||
|
});
|
||||||
|
browser.runtime.onMessage.addListener((requests, sender, sendResponse) => {
|
||||||
|
if (requests) {
|
||||||
|
if (requests === 'clear') {
|
||||||
|
forget_cache();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (requests.indexOf('dbmode,') === 0) {
|
||||||
|
switch (requests) {
|
||||||
|
case 'dbmode,s1':
|
||||||
|
browser.storage.local.set({
|
||||||
|
'opd': 'y'
|
||||||
|
});
|
||||||
|
localUse = false;
|
||||||
|
break;
|
||||||
|
case 'dbmode,s0':
|
||||||
|
browser.storage.local.set({
|
||||||
|
'opd': 'n'
|
||||||
|
});
|
||||||
|
localUse = true;
|
||||||
|
break;
|
||||||
|
case 'dbmode,cl':
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ldb': '[]'
|
||||||
|
});
|
||||||
|
localDB = [];
|
||||||
|
break;
|
||||||
|
case 'dbmode,rl':
|
||||||
|
browser.storage.local.get(['ldb']).then(g => {
|
||||||
|
localDB = JSON.parse(g.ldb || '[]');
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
requests.forEach(request => {
|
||||||
|
i_know_you(request).then((r) => {
|
||||||
|
if (r == 1 || r == -1) {
|
||||||
|
browser.tabs.sendMessage(sender.tab.id, [request, ((r == 1) ? true : false)]);
|
||||||
|
}
|
||||||
|
if (r == 0) {
|
||||||
|
is_hostile(request).then((a) => {
|
||||||
|
if (a) {
|
||||||
|
browser.storage.local.set({
|
||||||
|
[request]: 'y'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
browser.storage.local.set({
|
||||||
|
[request]: 'n'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (Object.keys(memcache).length > 650) {
|
||||||
|
memcache = {};
|
||||||
|
}
|
||||||
|
browser.tabs.sendMessage(sender.tab.id, [request, a]);
|
||||||
|
}, () => {
|
||||||
|
browser.tabs.sendMessage(sender.tab.id, [request, false]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, () => {});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
});
|
|
@ -0,0 +1,59 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
</head>
|
||||||
|
<body style="display:none">
|
||||||
|
<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>
|
|
@ -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';
|
||||||
|
});
|
||||||
|
});
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,17 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
<title>🗄</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>
|
|
@ -0,0 +1,67 @@
|
||||||
|
let irun = false;
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
browser.storage.local.get(['mul']).then(g => {
|
||||||
|
let ul = g.mul || 'eo';
|
||||||
|
fetch('i18n/' + ul + '.json', {
|
||||||
|
method: 'GET'
|
||||||
|
}).then(j => j.json()).then(j => {
|
||||||
|
document.querySelectorAll('span[tek]').forEach(x => {
|
||||||
|
x.innerText = j[x.getAttribute('tek')];
|
||||||
|
});
|
||||||
|
document.body.style.display = 'block';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
document.getElementById('f').addEventListener('change', e => {
|
||||||
|
let ff = e.target.files[0];
|
||||||
|
if (ff) {
|
||||||
|
let r = new FileReader();
|
||||||
|
r.addEventListener('load', e => {
|
||||||
|
if (ff.size > 4) {
|
||||||
|
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
|
||||||
|
if (g.length > 0) {
|
||||||
|
browser.storage.local.get(['ldb']).then(gs => {
|
||||||
|
irun = true;
|
||||||
|
let cnt0, cnt1 = 0,
|
||||||
|
gc = 1,
|
||||||
|
db = JSON.parse(gs.ldb || '[]');
|
||||||
|
cnt0 = db.length;
|
||||||
|
document.getElementById('pbr').max = g.length;
|
||||||
|
g.forEach(x => {
|
||||||
|
document.getElementById('pbr').value = gc;
|
||||||
|
gc++;
|
||||||
|
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
|
||||||
|
db.push(x);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
g = null;
|
||||||
|
cnt1 = db.length;
|
||||||
|
if (cnt1 != cnt0) {
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ldb': JSON.stringify(db)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
browser.runtime.sendMessage('dbmode,rl').then(() => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
r.readAsText(ff);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_i').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
document.getElementById('f').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_c').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
browser.runtime.sendMessage('dbmode,cl').then(() => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Ĉu ĉi tiuj ligoj blokos Tor-uzanton?",
|
||||||
|
"description": "Skanu FQDN uzante la API de Ss",
|
||||||
|
"version": "1.0.2.2",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"permissions": [
|
||||||
|
"storage",
|
||||||
|
"unlimitedStorage"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"bg.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"matches": [
|
||||||
|
"http://*/*",
|
||||||
|
"https://*/*"
|
||||||
|
],
|
||||||
|
"js": [
|
||||||
|
"cs.js"
|
||||||
|
],
|
||||||
|
"run_at": "document_end"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"options_ui": {
|
||||||
|
"browser_style": true,
|
||||||
|
"page": "cfg.html"
|
||||||
|
},
|
||||||
|
"applications": {
|
||||||
|
"gecko": {
|
||||||
|
"id": "torwatch@searxes.eu.org",
|
||||||
|
"strict_min_version": "68.0",
|
||||||
|
"update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=isattlink"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.ismm.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,60 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
</head>
|
||||||
|
<body style="display:none">
|
||||||
|
<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>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,73 @@
|
||||||
|
if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
|
||||||
|
let cs = (function () {
|
||||||
|
let s = document.createElement('style');
|
||||||
|
document.head.appendChild(s);
|
||||||
|
return s.sheet;
|
||||||
|
})();
|
||||||
|
if (cs) {
|
||||||
|
cs.insertRule("a[data-mitm=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
|
||||||
|
cs.insertRule("a[data-mitm=y]::before{content:'[\\26A0]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
|
||||||
|
cs.insertRule("a[data-mitm=y]:hover::before{content:'[\\26A1]'}", 2);
|
||||||
|
cs.insertRule("a[data-mitm=y]:hover{color:red !important}", 3);
|
||||||
|
cs.insertRule("img[data-mitm=y]{cursor:not-allowed !important;border:2px red dotted !important}", 4);
|
||||||
|
cs.insertRule("img[data-mitm=y]:hover{filter:sepia(20%)}", 5);
|
||||||
|
}
|
||||||
|
chrome.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt'], (g) => {
|
||||||
|
let asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
|
||||||
|
if (g.ign1 == 'y') {
|
||||||
|
asked.push(location.hostname);
|
||||||
|
}
|
||||||
|
let qstall = (g.ign2 == 'y') ? 'a[href]:not([data-mitm])' : 'a[href]:not([data-mitm]),img[src]:not([data-mitm])';
|
||||||
|
let running = false;
|
||||||
|
function scanme() {
|
||||||
|
if (!running) {
|
||||||
|
running = true;
|
||||||
|
let unknown = [];
|
||||||
|
document.querySelectorAll(qstall).forEach(a => {
|
||||||
|
let aF = (a.tagName == 'A' ? (new URL(a.href)).hostname : (new URL(a.src)).hostname) || '';
|
||||||
|
a.dataset.mitm = aF;
|
||||||
|
if (!asked.includes(aF)) {
|
||||||
|
asked.push(aF);
|
||||||
|
if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && aF.length >= 4) {
|
||||||
|
unknown.push(aF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (unknown.length > 0) {
|
||||||
|
chrome.runtime.sendMessage(unknown);
|
||||||
|
}
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
||||||
|
if (request.length == 2) {
|
||||||
|
document.querySelectorAll(g.ign2 == 'y' ? "a[href][data-mitm='" + request[0] + "']" : "a[href][data-mitm='" + request[0] + "'],img[src][data-mitm='" + request[0] + "']").forEach(a => {
|
||||||
|
if (request[1]) {
|
||||||
|
a.dataset.mitm = 'y';
|
||||||
|
if (g.alt == 'y' && a.tagName == 'A') {
|
||||||
|
if (!a.href.startsWith('https://web.archive.org/web/')) {
|
||||||
|
a.href = 'https://web.archive.org/web/' + a.href;
|
||||||
|
}
|
||||||
|
a.title = 'Arkivo!';
|
||||||
|
} else {
|
||||||
|
a.title = 'MITM!';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
a.dataset.mitm = 'n';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
sendResponse(true);
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
scanme();
|
||||||
|
if (g.obs == 'y') {
|
||||||
|
(new MutationObserver(scanme)).observe(document, {
|
||||||
|
attributes: true,
|
||||||
|
attributeFilter: ['href'],
|
||||||
|
childList: true,
|
||||||
|
subtree: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
<title>🗄</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>
|
|
@ -0,0 +1,67 @@
|
||||||
|
let irun = false;
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
chrome.storage.local.get(['mul'], g => {
|
||||||
|
let ul = g.mul || 'eo';
|
||||||
|
fetch('i18n/' + ul + '.json', {
|
||||||
|
method: 'GET'
|
||||||
|
}).then(j => j.json()).then(j => {
|
||||||
|
document.querySelectorAll('span[tek]').forEach(x => {
|
||||||
|
x.innerText = j[x.getAttribute('tek')];
|
||||||
|
});
|
||||||
|
document.body.style.display = 'block';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
document.getElementById('f').addEventListener('change', e => {
|
||||||
|
let ff = e.target.files[0];
|
||||||
|
if (ff) {
|
||||||
|
let r = new FileReader();
|
||||||
|
r.addEventListener('load', e => {
|
||||||
|
if (ff.size > 4) {
|
||||||
|
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
|
||||||
|
if (g.length > 0) {
|
||||||
|
chrome.storage.local.get(['ldb'], gs => {
|
||||||
|
irun = true;
|
||||||
|
let cnt0, cnt1 = 0,
|
||||||
|
gc = 1,
|
||||||
|
db = JSON.parse(gs.ldb || '[]');
|
||||||
|
cnt0 = db.length;
|
||||||
|
document.getElementById('pbr').max = g.length;
|
||||||
|
g.forEach(x => {
|
||||||
|
document.getElementById('pbr').value = gc;
|
||||||
|
gc++;
|
||||||
|
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
|
||||||
|
db.push(x);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
g = null;
|
||||||
|
cnt1 = db.length;
|
||||||
|
if (cnt1 != cnt0) {
|
||||||
|
chrome.storage.local.set({
|
||||||
|
'ldb': JSON.stringify(db)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
chrome.runtime.sendMessage('dbmode,rl', () => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
r.readAsText(ff);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_i').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
document.getElementById('f').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_c').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
chrome.runtime.sendMessage('dbmode,cl', () => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Ĉu ligoj estas vundeblaj al MITM-atako?",
|
||||||
|
"version": "1.0.20.2",
|
||||||
|
"minimum_chrome_version": "68",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"incognito": "split",
|
||||||
|
"permissions": [
|
||||||
|
"storage",
|
||||||
|
"unlimitedStorage"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"bg.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options_ui": {
|
||||||
|
"chrome_style": false,
|
||||||
|
"page": "cfg.html"
|
||||||
|
},
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"matches": [
|
||||||
|
"http://*/*",
|
||||||
|
"https://*/*"
|
||||||
|
],
|
||||||
|
"js": [
|
||||||
|
"cs.js"
|
||||||
|
],
|
||||||
|
"run_at": "document_end"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.ismm.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,60 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
</head>
|
||||||
|
<body style="display:none">
|
||||||
|
<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>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,76 @@
|
||||||
|
if (document.body && !['ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org'].includes(location.hostname)) {
|
||||||
|
let cs = (function () {
|
||||||
|
let s = document.createElement('style');
|
||||||
|
document.head.appendChild(s);
|
||||||
|
return s.sheet;
|
||||||
|
})();
|
||||||
|
if (cs) {
|
||||||
|
cs.insertRule("a[data-mitm=y]{cursor:not-allowed !important;text-decoration-line:line-through !important;text-decoration-color:red !important;text-decoration-style:double !important}", 0);
|
||||||
|
cs.insertRule("a[data-mitm=y]::before{content:'[\\26A0]';font-weight:bold !important;color:red !important;display:inline-block !important}", 1);
|
||||||
|
cs.insertRule("a[data-mitm=y]:hover::before{content:'[\\26A1]'}", 2);
|
||||||
|
cs.insertRule("a[data-mitm=y]:hover{color:red !important}", 3);
|
||||||
|
cs.insertRule("img[data-mitm=y]{cursor:not-allowed !important;border:2px red dotted !important}", 4);
|
||||||
|
cs.insertRule("img[data-mitm=y]:hover{filter:sepia(20%)}", 5);
|
||||||
|
}
|
||||||
|
browser.storage.local.get(['ign1', 'ign2', 'obs', 'dbg', 'alt']).then(g => {
|
||||||
|
let asked = ['', 'ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'searxes.eu.org', 'api.searxes.eu.org', 'ansero.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion', 'ansero.eu.org', 'addons.mozilla.org', 'addons.thunderbird.net', 'web.archive.org', 't.co'];
|
||||||
|
if (g.ign1 == 'y') {
|
||||||
|
asked.push(location.hostname);
|
||||||
|
}
|
||||||
|
let qstall = (g.ign2 == 'y') ? 'a[href]:not([data-mitm])' : 'a[href]:not([data-mitm]),img[src]:not([data-mitm])';
|
||||||
|
let running = false;
|
||||||
|
function scanme() {
|
||||||
|
if (!running) {
|
||||||
|
running = true;
|
||||||
|
let unknown = [];
|
||||||
|
document.querySelectorAll(qstall).forEach(a => {
|
||||||
|
let aF = (a.tagName == 'A' ? (new URL(a.href)).hostname : (new URL(a.src)).hostname) || '';
|
||||||
|
a.dataset.mitm = aF;
|
||||||
|
if (!asked.includes(aF)) {
|
||||||
|
asked.push(aF);
|
||||||
|
if (!/^(.*)\.(danwin1210\.me|wikipedia\.org|onion|i2p|invalid|test|local|localhost|([0-9]{1,3})|bbs|chan|cyb|dyn|geek|gopher|indy|libre|neo|null|o|oss|oz|parody|pirate|bit|lib|coin|emc|bazar|fur)$/.test(aF) && aF.length >= 4) {
|
||||||
|
unknown.push(aF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (unknown.length > 0) {
|
||||||
|
browser.runtime.sendMessage(unknown);
|
||||||
|
}
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
||||||
|
if (request.length == 2) {
|
||||||
|
if (g.dbg == 'y') {
|
||||||
|
console.log('isMITM:', request[0], request[1]);
|
||||||
|
}
|
||||||
|
document.querySelectorAll(g.ign2 == 'y' ? "a[href][data-mitm='" + request[0] + "']" : "a[href][data-mitm='" + request[0] + "'],img[src][data-mitm='" + request[0] + "']").forEach(a => {
|
||||||
|
if (request[1]) {
|
||||||
|
a.dataset.mitm = 'y';
|
||||||
|
if (g.alt == 'y' && a.tagName == 'A') {
|
||||||
|
if (!a.href.startsWith('https://web.archive.org/web/')) {
|
||||||
|
a.href = 'https://web.archive.org/web/' + a.href;
|
||||||
|
}
|
||||||
|
a.title = 'Arkivo!';
|
||||||
|
} else {
|
||||||
|
a.title = 'MITM!';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
a.dataset.mitm = 'n';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
sendResponse(true);
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
scanme();
|
||||||
|
if (g.obs == 'y') {
|
||||||
|
(new MutationObserver(scanme)).observe(document, {
|
||||||
|
attributes: true,
|
||||||
|
attributeFilter: ['href'],
|
||||||
|
childList: true,
|
||||||
|
subtree: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||||
|
<title>🗄</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>
|
|
@ -0,0 +1,67 @@
|
||||||
|
let irun = false;
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
browser.storage.local.get(['mul']).then(g => {
|
||||||
|
let ul = g.mul || 'eo';
|
||||||
|
fetch('i18n/' + ul + '.json', {
|
||||||
|
method: 'GET'
|
||||||
|
}).then(j => j.json()).then(j => {
|
||||||
|
document.querySelectorAll('span[tek]').forEach(x => {
|
||||||
|
x.innerText = j[x.getAttribute('tek')];
|
||||||
|
});
|
||||||
|
document.body.style.display = 'block';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
document.getElementById('f').addEventListener('change', e => {
|
||||||
|
let ff = e.target.files[0];
|
||||||
|
if (ff) {
|
||||||
|
let r = new FileReader();
|
||||||
|
r.addEventListener('load', e => {
|
||||||
|
if (ff.size > 4) {
|
||||||
|
let g = e.target.result.replace(/(?:\r\n|\r|\n)/g, "\n").split("\n");
|
||||||
|
if (g.length > 0) {
|
||||||
|
browser.storage.local.get(['ldb']).then(gs => {
|
||||||
|
irun = true;
|
||||||
|
let cnt0, cnt1 = 0,
|
||||||
|
gc = 1,
|
||||||
|
db = JSON.parse(gs.ldb || '[]');
|
||||||
|
cnt0 = db.length;
|
||||||
|
document.getElementById('pbr').max = g.length;
|
||||||
|
g.forEach(x => {
|
||||||
|
document.getElementById('pbr').value = gc;
|
||||||
|
gc++;
|
||||||
|
if (/^([0-9a-z.-]{4,400})\.([a-z]{2,40})$/.test(x) && !db.includes(x)) {
|
||||||
|
db.push(x);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
g = null;
|
||||||
|
cnt1 = db.length;
|
||||||
|
if (cnt1 != cnt0) {
|
||||||
|
browser.storage.local.set({
|
||||||
|
'ldb': JSON.stringify(db)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
browser.runtime.sendMessage('dbmode,rl').then(() => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText + "\n\n" + cnt0 + " -> " + cnt1);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
r.readAsText(ff);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_i').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
document.getElementById('f').click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.getElementById('ldb_c').addEventListener('click', () => {
|
||||||
|
if (!irun) {
|
||||||
|
browser.runtime.sendMessage('dbmode,cl').then(() => {
|
||||||
|
alert(document.querySelector('span[tek=opxdone]').innerText);
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Ĉu ligoj estas vundeblaj al MITM-atako?",
|
||||||
|
"description": "Skanu FQDN uzante la API de Ss",
|
||||||
|
"version": "1.0.20.2",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"permissions": [
|
||||||
|
"storage",
|
||||||
|
"unlimitedStorage"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"bg.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"content_scripts": [
|
||||||
|
{
|
||||||
|
"matches": [
|
||||||
|
"http://*/*",
|
||||||
|
"https://*/*"
|
||||||
|
],
|
||||||
|
"js": [
|
||||||
|
"cs.js"
|
||||||
|
],
|
||||||
|
"run_at": "document_end"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"options_ui": {
|
||||||
|
"browser_style": true,
|
||||||
|
"page": "cfg.html"
|
||||||
|
},
|
||||||
|
"applications": {
|
||||||
|
"gecko": {
|
||||||
|
"id": "ismitmlink@searxes.danwin1210.me",
|
||||||
|
"strict_min_version": "68.0",
|
||||||
|
"update_url":"https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=ismitmlink"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.urjm.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
|
@ -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();
|
||||||
|
});
|
|
@ -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>
|
|
@ -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);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Kiu retejo malakceptis min?",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"minimum_chrome_version": "60",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"incognito": "split",
|
||||||
|
"permissions": [
|
||||||
|
"webRequest",
|
||||||
|
"<all_urls>"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"bg.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options_ui": {
|
||||||
|
"open_in_tab": true,
|
||||||
|
"chrome_style": false,
|
||||||
|
"page": "log.html"
|
||||||
|
},
|
||||||
|
"browser_action": {
|
||||||
|
"default_icon": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
- [More Information / Download](../../subfiles/about.urjm.md)
|
||||||
|
- Disclaimer: This is NOT a mirror of upstream git. Synchronization may be delayed.
|
|
@ -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();
|
||||||
|
});
|
|
@ -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>
|
|
@ -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);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Kiu retejo malakceptis min?",
|
||||||
|
"description": "Via retejo malakceptis min, sed mi scias ke mi fartos bone.",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"homepage_url": "https://ss.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/",
|
||||||
|
"author": "Ss",
|
||||||
|
"permissions": [
|
||||||
|
"webRequest",
|
||||||
|
"<all_urls>"
|
||||||
|
],
|
||||||
|
"icons": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"bg.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options_ui": {
|
||||||
|
"browser_style": false,
|
||||||
|
"open_in_tab": true,
|
||||||
|
"page": "log.html"
|
||||||
|
},
|
||||||
|
"browser_action": {
|
||||||
|
"browser_style": true,
|
||||||
|
"default_icon": {
|
||||||
|
"72": "icons/72.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"applications": {
|
||||||
|
"gecko": {
|
||||||
|
"id": "urejectme@searxes.eu.org",
|
||||||
|
"strict_min_version": "60.0",
|
||||||
|
"update_url": "https://api.wodferndripvpe6ib4uz4rtngrnzichnirgn7t5x64gxcyroopbhsuqd.onion/_/addon.php?for=ureject"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
// ==UserScript==
|
||||||
|
// @name Decode Cloudflare-encoded email addresses
|
||||||
|
// @original https://codeberg.org/smege1001/cf_email_decoder
|
||||||
|
// @match *://*/*
|
||||||
|
// @grant none
|
||||||
|
// @version 1.0
|
||||||
|
// @author smege1001
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @license CC0-1.0
|
||||||
|
**/
|
||||||
|
|
||||||
|
const emailprotectionURLHashRegex = /\/cdn-cgi\/l\/email-protection#([aA0-fF9]*)/;
|
||||||
|
const emailprotectionURLNoHashRegex = /\/cdn-cgi\/l\/email-protection/; //hash is stored on data-cfemail
|
||||||
|
|
||||||
|
function decodeEmail(hash) { //cloudflare email address decoder
|
||||||
|
var hashArray = []; //split the hash into bytes
|
||||||
|
for (var hAIndex = 0; hAIndex < hash.length; hAIndex += 2) {
|
||||||
|
hashArray.push(parseInt(hash.substring(hAIndex, hAIndex + 2), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
var decoded = "";
|
||||||
|
var key = hashArray[0]; //get the decode key
|
||||||
|
|
||||||
|
for (var index = 1; index < hashArray.length; index++) {
|
||||||
|
decoded += String.fromCharCode(hashArray[index] ^ key);
|
||||||
|
}
|
||||||
|
return decoded;
|
||||||
|
}
|
||||||
|
|
||||||
|
var links = document.querySelectorAll("a"); //get all the links
|
||||||
|
|
||||||
|
for (var linksIndex = 0; linksIndex < links.length; linksIndex++) {
|
||||||
|
var link = links[linksIndex];
|
||||||
|
if (emailprotectionURLHashRegex.test(link.href)) {
|
||||||
|
var hash = link.href.match(emailprotectionURLHashRegex)[1];
|
||||||
|
link.href = "mailto:" + decodeEmail(hash); //replace the stupid email protection with just a mailto link
|
||||||
|
} else if (emailprotectionURLNoHashRegex.test(link.href) && link.hasAttribute("data-cfemail")) {
|
||||||
|
var hash = link.getAttribute("data-cfemail");
|
||||||
|
var decodedEmail = decodeEmail(hash);
|
||||||
|
|
||||||
|
link.href = "mailto:" + decodedEmail;
|
||||||
|
link.innerText = decodedEmail; //the inner text is just [email protected]
|
||||||
|
|
||||||
|
//remove the useless attributes
|
||||||
|
link.removeAttribute("data-cfemail");
|
||||||
|
link.classList.remove("__cf_email__");
|
||||||
|
|
||||||
|
if (link.getAttribute("class") == "") link.removeAttribute("class");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue