mirror of
https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
synced 2025-05-15 21:00:00 -04:00
wisp
This commit is contained in:
parent
d2d8853fb0
commit
3c7652b41d
10 changed files with 1731 additions and 54 deletions
15
package.json
15
package.json
|
@ -15,13 +15,16 @@
|
|||
"author": "Titanium Network",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@titaniumnetwork-dev/ultraviolet": "^1.0.4",
|
||||
"@tomphttp/bare-server-node": "^1.2.2",
|
||||
"@mercuryworkshop/bare-mux": "^1.1.4",
|
||||
"@mercuryworkshop/epoxy-transport": "^2.0.6",
|
||||
"@titaniumnetwork-dev/ultraviolet": "^3.1.5",
|
||||
"@tomphttp/bare-server-node": "^2.0.3",
|
||||
"babel": "^6.23.0",
|
||||
"corrosion": "^1.0.0",
|
||||
"express": "^4.17.1",
|
||||
"mime-types": "^2.1.27",
|
||||
"node-fetch": "^3.2.0",
|
||||
"ws": "^7.5.3"
|
||||
"express": "^4.19.2",
|
||||
"mime-types": "^2.1.35",
|
||||
"node-fetch": "^3.3.2",
|
||||
"wisp-server-node": "^1.1.0",
|
||||
"ws": "^8.18.0"
|
||||
}
|
||||
}
|
||||
|
|
1590
pnpm-lock.yaml
generated
Normal file
1590
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,7 @@
|
|||
import { uvPath } from '@titaniumnetwork-dev/ultraviolet';
|
||||
import createBareServer from '@tomphttp/bare-server-node';
|
||||
import wisp from "wisp-server-node";
|
||||
import { uvPath } from "@titaniumnetwork-dev/ultraviolet";
|
||||
import { epoxyPath } from "@mercuryworkshop/epoxy-transport";
|
||||
import { baremuxPath } from "@mercuryworkshop/bare-mux/node";
|
||||
import http from 'http';
|
||||
import path from 'path';
|
||||
import express from 'express';
|
||||
|
@ -7,9 +9,8 @@ import { readFile } from 'fs/promises';
|
|||
import pkg from './routes.mjs';
|
||||
import { paintSource, tryReadFile } from './randomization.mjs';
|
||||
|
||||
const bare = createBareServer('/bare/');
|
||||
const config = JSON.parse(await readFile(new URL('./config.json',
|
||||
import.meta.url)));
|
||||
|
||||
const config = JSON.parse(await readFile(new URL('./config.json', import.meta.url)));
|
||||
const { pages, text404 } = pkg;
|
||||
const __dirname = path.resolve();
|
||||
const port = process.env.PORT || config.port;
|
||||
|
@ -17,30 +18,30 @@ const app = express();
|
|||
const router = express.Router();
|
||||
const server = http.createServer();
|
||||
|
||||
server.on('request', (req, res) => {
|
||||
if (bare.shouldRoute(req)) {
|
||||
bare.routeRequest(req, res);
|
||||
} else {
|
||||
app(req, res);
|
||||
}
|
||||
});
|
||||
|
||||
server.on('upgrade', (req, socket, head) => {
|
||||
if (bare.shouldRoute(req)) {
|
||||
bare.routeUpgrade(req, socket, head);
|
||||
} else {
|
||||
app(req, res);
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/', async(req, res) => res.send(paintSource(tryReadFile(path.join(__dirname, 'views', ['/', '/?'].includes(req.url) ? pages.index : pages[Object.keys(req.query)[0]])))));
|
||||
router.get('/', async (req, res) => res.send(paintSource(tryReadFile(path.join(__dirname, 'views', ['/', '/?'].includes(req.url) ? pages.index : pages[Object.keys(req.query)[0]])))));
|
||||
app.use(router);
|
||||
app.use(express.static(path.join(__dirname, 'views')));
|
||||
app.use("/uv/", express.static(uvPath));
|
||||
app.use("/epoxy/", express.static(epoxyPath));
|
||||
app.use("/baremux/", express.static(baremuxPath));
|
||||
app.disable('x-powered-by');
|
||||
|
||||
app.use((req, res) => {
|
||||
res.status(404).send(paintSource(text404));
|
||||
});
|
||||
|
||||
server.on("request", (req, res) => {
|
||||
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
|
||||
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
|
||||
app(req, res);
|
||||
});
|
||||
server.on("upgrade", (req, socket, head) => {
|
||||
if (req.url.endsWith("/wisp/"))
|
||||
wisp.routeRequest(req, socket, head);
|
||||
else
|
||||
socket.end();
|
||||
});
|
||||
|
||||
server.listen(port);
|
||||
console.log('Holy Unblocker is listening on port ' + port + '.');
|
|
@ -959,3 +959,14 @@ strong) {
|
|||
.gfooter-only {
|
||||
margin: 40px 0px 32px 0px;
|
||||
}
|
||||
|
||||
#hu-frame {
|
||||
border: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: #111;
|
||||
}
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
const stockSW = "/uv/sw.js";
|
||||
|
||||
/**
|
||||
* List of hostnames that are allowed to run serviceworkers on http:
|
||||
* List of hostnames that are allowed to run serviceworkers on http://
|
||||
*/
|
||||
const swAllowedHostnames = ["localhost", "127.0.0.1"];
|
||||
|
||||
|
@ -14,17 +14,19 @@ const swAllowedHostnames = ["localhost", "127.0.0.1"];
|
|||
* Used in 404.html and index.html
|
||||
*/
|
||||
async function registerSW() {
|
||||
if (!navigator.serviceWorker) {
|
||||
if (
|
||||
location.protocol !== "https:" &&
|
||||
!swAllowedHostnames.includes(location.hostname)
|
||||
)
|
||||
throw new Error("Service workers cannot be registered without https.");
|
||||
|
||||
if (!navigator.serviceWorker)
|
||||
throw new Error("Your browser doesn't support service workers.");
|
||||
}
|
||||
|
||||
// Ultraviolet has a stock `sw.js` script.
|
||||
await navigator.serviceWorker.register(stockSW, {
|
||||
scope: __uv$config.prefix,
|
||||
});
|
||||
await navigator.serviceWorker.register(stockSW);
|
||||
|
||||
// Register the EpoxyClient transport to be used for network requests
|
||||
let wispUrl = (location.protocol === "https:" ? "wss" : "ws") + "://" + location.host + "/wisp/";
|
||||
await BareMux.SetTransport("EpxMod.EpoxyClient", { wisp: wispUrl });
|
||||
}
|
32
views/assets/js/search.js
Normal file
32
views/assets/js/search.js
Normal file
|
@ -0,0 +1,32 @@
|
|||
"use strict";
|
||||
/**
|
||||
*
|
||||
* @param {string} input
|
||||
* @param {string} template Template for a search query.
|
||||
* @returns {string} Fully qualified URL
|
||||
*/
|
||||
function search(input, template) {
|
||||
try {
|
||||
// input is a valid URL:
|
||||
// eg: https://example.com, https://example.com/test?q=param
|
||||
return new URL(input).toString();
|
||||
} catch (err) {
|
||||
// input was not a valid URL
|
||||
}
|
||||
|
||||
try {
|
||||
// input is a valid URL when http:// is added to the start:
|
||||
// eg: example.com, https://example.com/test?q=param
|
||||
const url = new URL(`http://${input}`);
|
||||
// only if the hostname has a TLD/subdomain
|
||||
if (url.hostname.includes(".")) return url.toString();
|
||||
} catch (err) {
|
||||
// input was not valid URL
|
||||
}
|
||||
|
||||
// input may have been a valid URL, however the hostname was invalid
|
||||
|
||||
// Attempts to convert the input to a fully qualified URL have failed
|
||||
// Treat the input as a search query
|
||||
return template.replace("%s", encodeURIComponent(input));
|
||||
}
|
22
views/assets/js/uvhuwork.js
Normal file
22
views/assets/js/uvhuwork.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
const form = document.getElementById("pr-form");
|
||||
const address = document.getElementById("pr-url");
|
||||
|
||||
const searchEngine = "https://google.com/search?q=%s";
|
||||
|
||||
|
||||
form.addEventListener("submit", async (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
try {
|
||||
await registerSW();
|
||||
} catch (err) {
|
||||
alert(err);
|
||||
throw err;
|
||||
}
|
||||
|
||||
const url = search(address.value, searchEngine);
|
||||
|
||||
let frame = document.getElementById("hu-frame");
|
||||
frame.style.display = "block";
|
||||
frame.src = __uv$config.prefix + __uv$config.encodeUrl(url);
|
||||
});
|
|
@ -12,6 +12,13 @@
|
|||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
|
||||
<link rel="stylesheet" href="assets/css/styles.css">
|
||||
<script src="/baremux/bare.cjs" defer></script>
|
||||
<script src="/epoxy/index.js" defer></script>
|
||||
<script src="/uv/uv.bundle.js" defer></script>
|
||||
<script src="/uv/uv.config.js" defer></script>
|
||||
<script src="/assets/js/register-sw.js" defer></script>
|
||||
<script src="/assets/js/search.js" defer></script>
|
||||
<script src="/assets/js/uvhuwork.js" defer></script>
|
||||
<script defer="defer" src="https://cdn.jsdelivr.net/npm/tsparticles@1.39.2/tsparticles.min.js" integrity="sha256-FCz5ToEA27payrGYaVGRidiIA+68Z31TBXFzcIT1/gU=" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
|
||||
|
@ -28,11 +35,11 @@
|
|||
<img id="cor-logo" class="pr-logo" src="/assets/img/uv2.png" alt="Ultraviolet TN Logo">
|
||||
<p>T­he hi­ghly inno­vati­ve pr­ox­y of Tit­aniu­m Netw­ork usi­ng tec­hnologi­es such as servi­ce wor­kers and soph­isticated rewr­iting techniq­ues wit­h
|
||||
CAPT­CHA suppor­t.</p>
|
||||
<div id="pr-form">
|
||||
<form id="pr-form">
|
||||
<input type="text" id="pr-url" spellcheck="false" autocomplete="off" placeholder="Search or enter in a target site!">
|
||||
<a href="#" id="pr-go1" class="pr-button glowbutton">Cl­assic</a>
|
||||
<a href="#" id="pr-go2" class="pr-button glowbutton">Stea­lth</a>
|
||||
</div>
|
||||
</form>
|
||||
<h3>More Information:</h3>
|
||||
<div class="font3">
|
||||
<p class="accented">
|
||||
|
@ -53,20 +60,11 @@
|
|||
</div>
|
||||
</div>
|
||||
<div id="footer" class="fullwidth"></div>
|
||||
<iframe style="display: none;" id="hu-frame"></iframe>
|
||||
<!-- IMPORTANT-HUCOOKINGINSERT-DONOTDELETE -->
|
||||
<script src="assets/js/common.js"></script>
|
||||
<script src="assets/js/links.js"></script>
|
||||
<script src="assets/js/prset.js"></script>
|
||||
<script>
|
||||
prSet("ultraviolet");
|
||||
</script>
|
||||
<script src="uv/uv.bundle.js"></script>
|
||||
<script src="uv/uv.config.js"></script>
|
||||
<script src="assets/js/register-sw.js"></script>
|
||||
<script>
|
||||
registerSW();
|
||||
</script>
|
||||
</script>
|
||||
<script src="assets/js/header.js"></script>
|
||||
<script src="assets/js/csel.js"></script>
|
||||
<script src="assets/js/footer.js"></script>
|
||||
|
|
18
views/uv/sw.js
Normal file
18
views/uv/sw.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
importScripts('/epoxy/index.js');
|
||||
importScripts('/uv/uv.bundle.js');
|
||||
importScripts('/uv/uv.config.js');
|
||||
importScripts(__uv$config.sw || '/uv/uv.sw.js');
|
||||
|
||||
const uv = new UVServiceWorker();
|
||||
|
||||
self.addEventListener('fetch', event => {
|
||||
event.respondWith(
|
||||
(async ()=>{
|
||||
if(uv.route(event)) {
|
||||
return await uv.fetch(event);
|
||||
}
|
||||
return await fetch(event.request);
|
||||
})()
|
||||
);
|
||||
});
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
self.__uv$config = {
|
||||
prefix: "/uv/service/",
|
||||
bare: "/bare/",
|
||||
encodeUrl: Ultraviolet.codec.xor.encode,
|
||||
decodeUrl: Ultraviolet.codec.xor.decode,
|
||||
handler: "/uv/uv.handler.js",
|
||||
client: "/uv/uv.client.js",
|
||||
bundle: "/uv/uv.bundle.js",
|
||||
config: "/uv/uv.config.js",
|
||||
sw: "/uv/uv.sw.js",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue