Massive Cleanup

This commit is contained in:
TheEmeraldStarr 2020-11-11 19:00:03 -08:00
parent 81a7ab1d96
commit d2547cf7b2
33 changed files with 373 additions and 5048 deletions

View file

@ -1,26 +0,0 @@
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
dist: {
src: ['src/**/*.js'],
dest: 'dist/gameboy.js'
}
},
uglify: {
dist: {
files: {
"dist/gameboy.min.js": ["dist/gameboy.js"]
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ['concat', 'uglify']);
};

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 TheEmeraldStarr
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

591
app.js
View file

@ -1,603 +1,28 @@
const {
checkServerIdentity
} = require('tls');
const express = require('express'),
const
express = require('express'),
app = express(),
http = require('http'),
https = require('https'),
fs = require('fs'),
querystring = require('querystring'),
session = require('express-session'),
sanitizer = require('sanitizer'),
websocket = require('./ws-proxy.js'),
fetch = require('node-fetch'),
path = require("path");
path = require('path'),
char_insert = require('./charinsert.js');
const config = JSON.parse(fs.readFileSync('./config.json', {
encoding: 'utf8'
}));
if (!config.prefix.startsWith('/')) {
config.prefix = `/${config.prefix}`;
}
if (!config.prefix.endsWith('/')) {
config.prefix = `${config.prefix}/`;
}
let server;
let server_protocol;
const server_options = {
key: fs.readFileSync('./ssl/default.key'),
cert: fs.readFileSync('./ssl/default.crt')
}
if (config.ssl == true) {
server = https.createServer(server_options, app);
server_protocol = 'https://';
} else {
server = http.createServer(app);
server_protocol = 'http://';
};
// WebSocket Proxying
websocket(server);
console.log(`Alloy Proxy now running on ${server_protocol}0.0.0.0:${config.port}! Proxy prefix is "${config.prefix}"!`);
server = http.createServer(app);
server.listen(process.env.PORT || config.port);
btoa = (str) => {
str = new Buffer.from(str).toString('base64');
return str;
};
atob = (str) => {
str = new Buffer.from(str, 'base64').toString('utf-8');
return str;
};
rewrite_url = (dataURL, option) => {
var websiteURL;
var websitePath;
if (option == 'decode') {
websiteURL = atob(dataURL.split('/').splice(0, 1).join('/'));
websitePath = '/' + dataURL.split('/').splice(1).join('/');
} else {
websiteURL = btoa(dataURL.split('/').splice(0, 3).join('/'));
websitePath = '/' + dataURL.split('/').splice(3).join('/');
}
if (websitePath == '/') {
return `${websiteURL}`;
} else return `${websiteURL}${websitePath}`;
};
app.use(session({
secret: 'alloy',
saveUninitialized: true,
resave: true,
/*cookieName: '__alloy_cookie_auth=yes',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000 */
}));
// We made our own version of body-parser instead, due to issues.
app.use((req, res, next) => {
if (req.method == 'POST') {
req.raw_body = '';
req.on('data', chunk => {
req.raw_body += chunk.toString(); // convert buffer to string
});
req.on('end', () => {
req.str_body = req.raw_body;
try {
req.body = JSON.parse(req.raw_body);
} catch (err) {
req.body = {}
}
next();
});
} else return next();
});
app.use(`${config.prefix}utils/`, async (req, res, next) => {
if (req.url.startsWith('/assets/')) {
res.sendFile(__dirname + '/utils' + req.url);
}
if (req.query.url) {
let url = atob(req.query.url);
if (url.startsWith('https://') || url.startsWith('http://')) {
url = url;
} else if (url.startsWith('//')) {
url = 'http:' + url;
} else {
url = 'http://' + url;
}
return res.redirect(307, config.prefix + rewrite_url(url));
}
});
/*
//Cookie Auth
app.use(checkAuth);
app.use(auth);
function auth(req, res, next) {
let user = new User({
cookieName: '__alloy_cookie_auth=yes'
});
if (!req.signedCookies.user) {
var authHeader = req.headers.authorization;
if (!authHeader) {
var err = new Error('You are not authenticated!');
err.status = 401;
next(err);
return;
}
var auth = new Buffer(authHeader.split(' ')[1], 'base64').toString().split(':');
var pass = auth[1];
if (user == '__alloy_cookie_auth=yes') {
res.cookie('user', 'admin', {
signed: true
});
next(); // authorized
} else {
var err = new Error('You are not authenticated!');
err.status = 401;
next(err);
}
} else {
if (req.signedCookies.user === 'admin') {
next();
} else {
var err = new Error('You are not authenticated!');
err.status = 401;
next(err);
}
}
};
// Check the auth of the routes => middleware functions
function checkAuth(req, res, next) {
console.log('checkAuth ' + req.url);
// don 't serve /secure to those not logged in => /secure if for those who are logged in
// you should add to this list, for each and every secure url
if (req.url.indexOf(`${config.prefix}session/`) === 0 && (!req.session || !req.session.authenticated)) {
res.render(fs.readFileSync('./utils/error/error.html', 'utf8').toString().replace('%ERROR%', `Error 401: The website '${sanitizer.sanitize(proxy.url.hostname)}' is not permitted!`), {
status: 403
});
return;
}
xt();
} */
app.post(`${config.prefix}session/`, async (req, res, next) => {
let url = querystring.parse(req.raw_body).url;
if (url.startsWith('//')) {
url = 'http:' + url;
} else if (url.startsWith('https://') || url.startsWith('http://')) {
url = url
} else {
url = 'http://' + url
};
/* let cookies = {};
if (request.headers.cookie !== undefined) {
cookies = cookie.parse(request.headers.cookie);
}
console.log(cookies);
response.writeHead(200, {
'SET-Cookie': ['__alloy_cookie_auth=yes',
`Permanent=Cookies; Max-Age=${60*60*24*30}`,
'Secure=Secure; Secure',
'HttpOnly=HttpOnly; HttpOnly',
'Path=Path; Path=/cookie'
]
})
response.end('Coookie!!'); */
req.session.authenticated = true;
});
app.use(config.prefix, async (req, res, next) => {
var proxy = {};
proxy.url = rewrite_url(req.url.slice(1), 'decode');
proxy.url = {
href: proxy.url,
hostname: proxy.url.split('/').splice(2).splice(0, 1).join('/'),
origin: proxy.url.split('/').splice(0, 3).join('/'),
encoded_origin: btoa(proxy.url.split('/').splice(0, 3).join('/')),
path: '/' + proxy.url.split('/').splice(3).join('/'),
protocol: proxy.url.split('\:').splice(0, 1).join(''),
}
proxy.url.encoded_origin = btoa(proxy.url.origin);
proxy.requestHeaders = req.headers;
proxy.requestHeaders['host'] = proxy.url.hostname;
if (proxy.requestHeaders['referer']) {
let referer = '/' + String(proxy.requestHeaders['referer']).split('/').splice(3).join('/');
referer = rewrite_url(referer.replace(config.prefix, ''), 'decode');
if (referer.startsWith('https://') || referer.startsWith('http://')) {
referer = referer;
} else referer = proxy.url.href;
proxy.requestHeaders['referer'] = referer;
}
if (proxy.requestHeaders['origin']) {
let origin = '/' + String(proxy.requestHeaders['origin']).split('/').splice(3).join('/');
origin = rewrite_url(origin.replace(config.prefix, ''), 'decode');
if (origin.startsWith('https://') || origin.startsWith('http://')) {
origin = origin.split('/').splice(0, 3).join('/');
} else origin = proxy.url.origin;
proxy.requestHeaders['origin'] = origin;
}
if (proxy.requestHeaders.cookie) {
delete proxy.requestHeaders.cookie;
}
const httpAgent = new http.Agent({
keepAlive: true
});
const httpsAgent = new https.Agent({
rejectUnauthorized: false,
keepAlive: true
});
proxy.options = {
method: req.method,
headers: proxy.requestHeaders,
redirect: 'manual',
agent: function(_parsedURL) {
if (_parsedURL.protocol == 'http:') {
return httpAgent;
} else {
return httpsAgent;
}
}
};
if (req.method == 'POST') {
proxy.options.body = req.str_body;
}
if (proxy.url.hostname == 'discord.com' && proxy.url.path == '/') {
return res.redirect(307, config.prefix + rewrite_url('https://discord.com/login'));
};
if (proxy.url.hostname == 'www.reddit.com') {
return res.redirect(307, config.prefix + rewrite_url('https://old.reddit.com'));
};
if (!req.url.slice(1).startsWith(`${proxy.url.encoded_origin}/`)) {
return res.redirect(307, config.prefix + proxy.url.encoded_origin + '/');
};
const blocklist = JSON.parse(fs.readFileSync('./blocklist.json', {
encoding: 'utf8'
}));
let is_blocked = false;
Array.from(blocklist).forEach(blocked_hostname => {
if (proxy.url.hostname == blocked_hostname) {
is_blocked = true;
}
});
if (is_blocked == true) {
return res.send(fs.readFileSync('./utils/error/error.html', 'utf8').toString().replace('%ERROR%', `Error 401: The website '${sanitizer.sanitize(proxy.url.hostname)}' is not permitted!`))
}
proxy.response = await fetch(proxy.url.href, proxy.options).catch(err => res.send(fs.readFileSync('./utils/error/error.html', 'utf8').toString().replace('%ERROR%', `Error 400: Could not make request to '${sanitizer.sanitize(proxy.url.href)}'!`)));
if (typeof proxy.response.buffer != 'function') return;
proxy.buffer = await proxy.response.buffer();
proxy.content_type = 'text/plain';
proxy.response.headers.forEach((e, i, a) => {
if (i == 'content-type') proxy.content_type = e;
});
if (proxy.content_type == null || typeof proxy.content_type == 'undefined') proxy.content_type = 'text/html';
proxy.sendResponse = proxy.buffer;
// Parsing the headers from the response to remove square brackets so we can set them as the response headers.
proxy.headers = Object.fromEntries(
Object.entries(JSON.parse(JSON.stringify(proxy.response.headers.raw())))
.map(([key, val]) => [key, val[0]])
);
// Parsing all the headers to remove all of the bad headers that could affect proxies performance.
Object.entries(proxy.headers).forEach(([header_name, header_value]) => {
if (header_name.startsWith('content-encoding') || header_name.startsWith('x-') || header_name.startsWith('cf-') || header_name.startsWith('strict-transport-security') || header_name.startsWith('content-security-policy')) {
delete proxy.headers[header_name];
}
});
// If theres a location for a redirect in the response, then the proxy will get the response location then redirect you to the proxied version of the url.
if (proxy.response.headers.get('location')) {
return res.redirect(307, config.prefix + rewrite_url(String(proxy.response.headers.get('location'))));
}
res.status(proxy.response.status);
res.set(proxy.headers);
res.contentType(proxy.content_type);
if (proxy.content_type.startsWith('text/html')) {
req.session.url = proxy.url.origin;
proxy.sendResponse = proxy.sendResponse.toString()
.replace(/integrity="(.*?)"/gi, '')
.replace(/nonce="(.*?)"/gi, '')
.replace(/(href|src|poster|data|action|srcset)="\/\/(.*?)"/gi, `$1` + `="http://` + `$2` + `"`)
.replace(/(href|src|poster|data|action|srcset)='\/\/(.*?)'/gi, `$1` + `='http://` + `$2` + `'`)
.replace(/(href|src|poster|data|action|srcset)="\/(.*?)"/gi, `$1` + `="${config.prefix}${proxy.url.encoded_origin}/` + `$2` + `"`)
.replace(/(href|src|poster|data|action|srcset)='\/(.*?)'/gi, `$1` + `='${config.prefix}${proxy.url.encoded_origin}/` + `$2` + `'`)
.replace(/'(https:\/\/|http:\/\/)(.*?)'/gi, function(str) {
str = str.split(`'`).slice(1).slice(0, -1).join(``);
return `'${config.prefix}${rewrite_url(str)}'`
})
.replace(/"(https:\/\/|http:\/\/)(.*?)"/gi, function(str) {
str = str.split(`"`).slice(1).slice(0, -1).join(``);
return `"${config.prefix}${rewrite_url(str)}"`
})
.replace(/(window|document).location.href/gi, `"${proxy.url.href}"`)
.replace(/(window|document).location.hostname/gi, `"${proxy.url.hostname}"`)
.replace(/(window|document).location.pathname/gi, `"${proxy.url.path}"`)
.replace(/location.href/gi, `"${proxy.url.href}"`)
.replace(/location.hostname/gi, `"${proxy.url.hostname}"`)
.replace(/location.pathname/gi, `"${proxy.url.path}"`)
.replace(/<html(.*?)>/gi, `<html` + '$1' + `><script src="${config.prefix}utils/assets/inject.js" id="_alloy_data" prefix="${config.prefix}" url="${btoa(proxy.url.href)}"></script>`);
// Temp hotfix for Youtube search bar until my script injection can fix it.
if (proxy.url.hostname == 'www.youtube.com') {
proxy.sendResponse = proxy.sendResponse.replace(/\/results/gi, `${config.prefix}${proxy.url.encoded_origin}/results`);
};
} else if (proxy.content_type.startsWith('text/css')) {
proxy.sendResponse = proxy.sendResponse.toString()
.replace(/url\("\/\/(.*?)"\)/gi, `url("http://` + `$1` + `")`)
.replace(/url\('\/\/(.*?)'\)/gi, `url('http://` + `$1` + `')`)
.replace(/url\(\/\/(.*?)\)/gi, `url(http://` + `$1` + `)`)
.replace(/url\("\/(.*?)"\)/gi, `url("${config.prefix}${proxy.url.encoded_origin}/` + `$1` + `")`)
.replace(/url\('\/(.*?)'\)/gi, `url('${config.prefix}${proxy.url.encoded_origin}/` + `$1` + `')`)
.replace(/url\(\/(.*?)\)/gi, `url(${config.prefix}${proxy.url.encoded_origin}/` + `$1` + `)`)
.replace(/"(https:\/\/|http:\/\/)(.*?)"/gi, function(str) {
str = str.split(`"`).slice(1).slice(0, -1).join(``);
return `"${config.prefix}${rewrite_url(str)}"`
})
.replace(/'(https:\/\/|http:\/\/)(.*?)'/gi, function(str) {
str = str.split(`'`).slice(1).slice(0, -1).join(``);
return `'${config.prefix}${rewrite_url(str)}'`
})
.replace(/\((https:\/\/|http:\/\/)(.*?)\)/gi, function(str) {
str = str.split(`(`).slice(1).join(``).split(')').slice(0, -1).join('');
return `(${config.prefix}${rewrite_url(str)})`
});
};
// We send the response from the server rewritten.
res.send(proxy.sendResponse);
});
app.post('/', async (req, res) => {
app.post('/', async(req, res) => {
switch (req.url) {
case '/':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'index.html'), 'utf8'));
}
});
/* app.get('/'), async (req, res) => {
charInsert = str => {
var output = '';
str.split(' ').forEach((word, word_index) => (word.split('').forEach((chr, chr_index) => output += (!chr_index || chr_index == word.length) ? '<span style="white-space: nowrap">&#' + chr.charCodeAt() + '</span>' : '<span style="white-space: nowrap">&#8203;<span style="display:none;font-size:0px;">&#8203;...</span>&#' + chr.charCodeAt() + '&#8203;</span>'), output += word_index != str.split(' ').length - 1 ? ' ' : ''));
return output
},
result = fs.readFileSync(path.join(__dirname, 'public', 'index.html'), 'utf8').replace(/charinsert{([\s\S]*?)}/g, (match, str) => charInsert(str));
fs.writeFileSync(path.join(__dirname, 'public', 'page.html'), result);
}
app.get('/'), async (req, res) => {
charInsert = str => {
var output = '';
str.split(' ').forEach((word, word_index) => (word.split('').forEach((chr, chr_index) => output += (!chr_index || chr_index == word.length) ? '<span style="white-space: nowrap">&#' + chr.charCodeAt() + '</span>' : '<span style="white-space: nowrap">&#8203;<span style="display:none;font-size:0px;">&#8203;...</span>&#' + chr.charCodeAt() + '&#8203;</span>'), output += word_index != str.split(' ').length - 1 ? ' ' : ''));
return output
},
result = fs.readFileSync(path.join(__dirname, 'public', 'page.html'), 'utf8').replace(/charinsert{([\s\S]*?)}/g, (match, str) => charInsert(str));
fs.writeFileSync(path.join(__dirname, 'public', 'index.html'), result);
} */
//Querystrings
app.get('/', async (req, res, t) => res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages,index.html,info.html,archive,archive,hidden.html'.split(',')['/,/?in,/?fg,/?rr,/?j'.split(',').indexOf(req.url) + 1], ',surf.html,f.html,run.html,frames,redirects3,proxnav5,nav7'.replace(/,[^,]+/g, e => ([] + e.match(/\D+/)).repeat(+e.match(/\d+/) + 1)).split(',')[t = 'z,fg,rr,k,dd,n,yh,ym,a,b,y,e,d,p,c,f,g,h,i,m,t,x'.split(',').indexOf(req.url.slice(2)) + 1], (t = ',,,,krunker,discordprox,chatbox,ythub,ytmobile,alloy,node,youtube,pydodge,discordhub,pmprox,credits,flash,gtools,games5,icons,gba,terms,bookmarklets'.split(',')[t]) && t + '.html'), 'utf8')));
//Querystrings Old
/* app.get('/', async (req, res) => {
app.get('/', async(req, res, t) => res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages,index.html,info.html,archive,archive,hidden.html'.split(',')['/,/?in,/?fg,/?rr,/?j'.split(',').indexOf(req.url) + 1], ',surf.html,f.html,run.html,frames,redirects3,proxnav5,nav7'.replace(/,[^,]+/g, e => ([] + e.match(/\D+/)).repeat(+e.match(/\d+/) + 1)).split(',')[t = 'z,fg,rr,k,dd,n,yh,ym,a,b,y,e,d,p,c,f,g,h,i,m,t,x'.split(',').indexOf(req.url.slice(2)) + 1], (t = ',,,,krunker,discordprox,chatbox,ythub,ytmobile,alloy,node,youtube,pydodge,discordhub,pmprox,credits,flash,gtools,games5,icons,gba,terms,bookmarklets'.split(',')[t]) && t + '.html'), 'utf8')));
const path = require("path"); //Use this for path.
fs.readFileSync( path, options );
Use this for improved navigation. Massive help from MikeLime and Duce.
if (req.url == '/?querystringhere') {
return res.send(fs.readFileSync(path.resolve() + 'filepath', {
encoding: 'utf8'
}));
}
var hbsites = {};
&& hostname == hbsites
switch (req.url) {
case '/':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'index.html'), 'utf8'));
}
switch (req.url) {
case '/?z':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'surf.html'), 'utf8'));
}
switch (req.url) {
case '/?a':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'proxnav', 'alloy.html'), 'utf8'));
}
switch (req.url) {
case '/?dd':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'redirects', 'discordprox.html'), 'utf8'));
}
switch (req.url) {
case '/?b':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'proxnav', 'node.html'), 'utf8'));
}
switch (req.url) {
case '/?y':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'proxnav', 'youtube.html'), 'utf8'));
}
switch (req.url) {
case '/?e':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'proxnav', 'pydodge.html'), 'utf8'));
}
switch (req.url) {
case '/?d':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'proxnav', 'discordhub.html'), 'utf8'));
}
switch (req.url) {
case '/?c':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'credits.html'), 'utf8'));
}
switch (req.url) {
case '/?f':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'flash.html'), 'utf8'));
}
switch (req.url) {
case '/?g':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'gtools.html'), 'utf8'));
}
switch (req.url) {
case '/?h':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'games5.html'), 'utf8'));
}
switch (req.url) {
case '/?i':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'icons.html'), 'utf8'));
}
switch (req.url) {
case '/?in':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'info.html'), 'utf8'));
}
switch (req.url) {
case '/?k':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'frames', 'krunker.html'), 'utf8'));
}
switch (req.url) {
case '/?m':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'gba.html'), 'utf8'));
}
switch (req.url) {
case '/?n':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'redirects', 'chatbox.html'), 'utf8'));
}
switch (req.url) {
case '/?p':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'proxnav', 'pmprox.html'), 'utf8'));
}
switch (req.url) {
case '/?t':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'terms.html'), 'utf8'));
}
switch (req.url) {
case '/?x':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'nav', 'bookmarklets.html'), 'utf8'));
}
switch (req.url) {
case '/?yh':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'redirects', 'ythub.html'), 'utf8'));
}
switch (req.url) {
case '/?ym':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'pages', 'redirects', 'ytmobile.html'), 'utf8'));
}
switch (req.url) {
case '/?fg':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'archive', 'f.html'), 'utf8'));
}
switch (req.url) {
case '/?rr':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'archive', 'run.html'), 'utf8'));
}
// Frames Page
switch (req.url) {
case '/?j':
return res.send(fs.readFileSync(path.join(__dirname, 'public', 'hidden.html'), 'utf8'))
}
}); */
app.use('/', express.static('public'));
app.use(async (req, res, next) => {
if (req.headers['referer']) {
let referer = '/' + String(req.headers['referer']).split('/').splice(3).join('/');
referer = rewrite_url(referer.replace(config.prefix, ''), 'decode').split('/').splice(0, 3).join('/');
if (referer.startsWith('https://') || referer.startsWith('http://')) {
res.redirect(307, config.prefix + btoa(referer) + req.url)
} else {
if (req.session.url) {
res.redirect(307, config.prefix + btoa(req.session.url) + req.url)
} else return next();
}
} else if (req.session.url) {
res.redirect(307, config.prefix + btoa(req.session.url) + req.url)
} else return next();
});
app.use(char_insert.static(path.join(__dirname, 'public')));

View file

@ -1,3 +0,0 @@
[
"add-your-website-url.blocked"
]

48
charinsert.js Normal file
View file

@ -0,0 +1,48 @@
var fs = require('fs'),
path = require('path'),
mime = require('mime-types'),
char_insert = (str, hash) => {
var output = '';
str.split(' ').forEach((word, word_index) => (word.split('').forEach((chr, chr_index) => output += (!chr_index || chr_index == word.length) ? '<span style="white-space: nowrap">&#' + chr.charCodeAt() + '</span>' : '<span style="white-space: nowrap">&#8203;<span style="display:none;font-size:0px;">&#8203;' + hash + '</span>&#' + chr.charCodeAt() + '&#8203;</span>'), output += word_index != str.split(' ').length - 1 ? ' ' : ''));
return output
},
hash = s => { for (var i = 0, h = 9; i < s.length;) h = Math.imul(h ^ s.charCodeAt(i++), 9 ** 9); return h ^ h >>> 9 },
express_ip = req => {
var ip = null,
methods = [req.headers['cf-connecting-ip'], req.headers['x-real-ip'], req.headers['x-forwarded-for']];
methods.filter(method => method).forEach(method => {
if (ip) return;
ip = method;
if (ip.includes(',')) {
ip = ip.split(',')[ip.split(',').length - 1].replace(' ', '');
if (ip.length > 15) ip = ip.split(',')[0].replace(' ', '');
}
});
return ip || '127.0.0.1';
};
module.exports = {
static: public_path => (req, res, next) => {
var pub_file = path.join(public_path, req.url);
if (fs.existsSync(pub_file)) {
if (fs.statSync(pub_file).isDirectory()) pub_file = path.join(pub_file, 'index.html');
if (!fs.existsSync(pub_file)) return next();
var mime_type = mime.lookup(pub_file),
data = fs.readFileSync(pub_file),
ext = path.extname(pub_file);
if (ext == '.html') data = data.toString('utf8').replace(/char_?insert{([\s\S]*?)}/gi, (match, str) => char_insert(str, hash(express_ip(req))));
res.contentType(mime_type).send(data);
} else next();
},
parse: string => char_insert(string, '-1231'),
}

View file

@ -1,5 +1,4 @@
{
"port": "8081",
"prefix": "/fetch/",
"port": "8080",
"ssl": false
}

3038
dist/gameboy.js vendored

File diff suppressed because it is too large Load diff

939
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,11 +1,11 @@
{
"name": "alloy-proxy",
"version": "2.3.0",
"description": "A web proxy capable of proxying websites!",
"name": "holyub",
"version": "4.0.0",
"description": "A pretty fancy website.",
"main": "app.js",
"scripts": {
"test": "node app.js",
"start": "node app.js ./node_modules/.bin/grunt"
"start": "node app.js"
},
"keywords": [
"proxy",
@ -13,20 +13,12 @@
"unblocker"
],
"author": "Titanium Network",
"license": "ISC",
"license": "MIT",
"dependencies": {
"cookie-parser": "^1.4.5",
"express": "^4.17.1",
"express-session": "^1.17.1",
"node-fetch": "^2.6.1",
"sanitizer": "^0.1.3",
"session": "^0.1.0",
"cookies": "0.4",
"ws": "^7.3.1",
"javascript-obfuscator": "^0.11.2",
"clean-css": "^4.1.9",
"mime": "^2.2.0",
"morgan": "^1.9.0",
"axios": "^0.19.2"
"mime-types": "^2.1.27",
"xss": "^1.0.8"
}
}

8
public/expr/ch.js Normal file
View file

@ -0,0 +1,8 @@
window.onload = function() {
var frame = document.getElementById("frame");
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
frame.src = "https://c." + domain + "/app";
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};

View file

@ -7,9 +7,9 @@ $('al').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
const origin = btoa(url)
frame.src = "https://" + domain + "/fetch/utils/?url=" + origin;
frame.src = "https://cdn." + domain + "/fetch/utils/?url=" + origin;
frame.style['visibility'] = "visible";
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
$('albp').onclick = function() {
@ -18,8 +18,8 @@ $('albp').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
const origin = btoa(url)
window.location.href = "https://" + domain + "/fetch/utils/?url=" + origin;
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
window.location.href = "https://cdn." + domain + "/fetch/utils/?url=" + origin;
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
//CH
@ -29,7 +29,7 @@ $('ch').onclick = function() {
var domain = det.replace('www.', '').split(/[/?#]/)[0];
frame.src = "https://c." + domain + "/app";
frame.style['visibility'] = "visible";
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
//NU
@ -61,7 +61,7 @@ $('pdprox').onclick = function() {
var domain = det.replace('www.', '').split(/[/?#]/)[0];
frame.src = "https://cdn." + domain + "/" + url;
frame.style['visibility'] = "visible";
document.cookie = 'wowow; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
$('pdproxbp').onclick = function() {
@ -70,7 +70,7 @@ $('pdproxbp').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
window.location.href = "https://cdn." + domain + "/" + url;
document.cookie = 'wowo; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
//PM Load
@ -102,9 +102,9 @@ $('ytbtn').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
const origin = btoa(yt)
frame.src = "https://" + domain + "/fetch/utils/?url=" + origin;
frame.src = "https://cdn." + domain + "/fetch/utils/?url=" + origin;
frame.style['visibility'] = "visible";
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
$('ytbtnm').onclick = function() {
@ -113,9 +113,9 @@ $('ytbtnm').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
const origin = btoa(yt)
frame.src = "https://" + domain + "/fetch/utils/?url=" + origin;
frame.src = "https://cdn." + domain + "/fetch/utils/?url=" + origin;
frame.style['visibility'] = "visible";
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
$('ytbp').onclick = function() {
@ -124,8 +124,17 @@ $('ytbp').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
const origin = btoa(yt)
window.location.href = "https://" + domain + "/fetch/utils/?url=" + origin;
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
window.location.href = "https://cdn." + domain + "/fetch/utils/?url=" + origin;
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
$('chat').onclick = function() {
var frame = document.getElementById("frame");
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
frame.src = "https://c." + domain + "/app";
frame.style['visibility'] = "visible";
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
//D
@ -135,9 +144,9 @@ $('dbtn').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
const origin = btoa(d)
frame.src = "https://" + domain + "/fetch/utils/?url=" + origin;
frame.src = "https://cdn." + domain + "/fetch/utils/?url=" + origin;
frame.style['visibility'] = "visible";
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};
$('dbp').onclick = function() {
@ -146,8 +155,8 @@ $('dbp').onclick = function() {
var det = document.domain;
var domain = det.replace('www.', '').split(/[/?#]/)[0];
const origin = btoa(d)
window.location.href = "https://" + domain + "/fetch/utils/?url=" + origin;
document.cookie = '__alloy_cookie_auth=yes; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
window.location.href = "https://cdn." + domain + "/fetch/utils/?url=" + origin;
document.cookie = 'oldsmobile=badcar; expires=' + (Date.now() + 259200) + '; SameSite=Lax; domain=.' + auth + '; path=/; Secure;';
return false;
};

View file

@ -7,6 +7,7 @@
<!-- Important: Use &#8203; to mess with keywords. -->
<title>H&#8203;oly Unb&#8203;loc&#8203;ke&#8203;r</title>
<meta name="description" content="G&#8203;et p&#8203;ast in&#8203;te&#8203;r&#8203;net ce&#8203;n&#8203;s&#8203;or&#8203;sh&#8203;ip tod&#8203;a&#8203;y!
:D">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/i.png">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic">
@ -27,10 +28,12 @@
</head>
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<!--
Important: Use <wbr> and &#8203; to mess with keywords.
PClo<wbr>ak. The script for this is im-runtime:
<iframe id="page-holder" src="/?j" style="display: block;"></iframe>
<noscript>You must enable javascript in your browser to view this webpage.</noscript>
-->
@ -61,7 +64,8 @@
</div>
</div> -->
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -72,7 +76,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -107,7 +112,7 @@
<div id="particles-js" class="in-bg">
<div class="d-popupbg" id="popup">
<center>
<p class="d-popupbg-text">(Updated 11/8/20): Now hid<wbr>es your history (St<wbr>ealth Mode)! - Most of the pr<wbr>oxi<wbr>es are back up.</p>
<p class="d-popupbg-text">(Updated 11/8/20): Now hi<wbr>des your history (Stealth Mode)! - Most of the pro<wbr>xies are back up.</p>
</center>
</div>
<div class="d-flex justify-content-center align-items-center in-flex">
@ -179,6 +184,7 @@
</footer>
</div>
<script src="assets/js/links.js"></script>
<script src="expr/surf.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -26,11 +26,13 @@
</head>
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<!-- Important: Use <wbr> to mess with keywords. -->
<div>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px; z-index: 1;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -40,7 +42,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -155,6 +158,7 @@
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/bs-init.js "></script>
<script src="expr/surf.js"></script>
</body>
</html>

View file

@ -27,11 +27,13 @@
</head>
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<!-- Important: Use <wbr> to mess with keywords. -->
<div>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -41,7 +43,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -100,12 +103,13 @@
<h1 class="text-center d-md-flex flex-grow-1 justify-content-md-center align-items-md-center" style="color: rgb(242,245,248);font-size: 46px;font-weight: normal;font-family: 'Montserrat Alternates', sans-serif;margin: 7px;padding: 34px;width: 100%;filter: blur(0px);height: 100%;">Credits<br></h1>
<p><br>&nbsp;Quite A Fa&#8203;ncy Em&#8203;erald (Crea&#8203;tor and Ow&#8203;ner, Disco&#8203;rd: Quite A Fan&#8203;cy Emer&#8203;ald#0001)<br><br><strong></strong><br>Contributors:<br> Kin&#8203;glalu (Gam&#8203;es Page,
Developer)
<br><strong> O&#8203;lyB (Tab Cl&#8203;oak, Web Developer)</strong><br><strong>&nbsp;YOCTDON&#8203;ALD'S (Obfusc&#8203;ation God, T&#8203;N Bugh&#8203;unter)</strong><br><strong> SexyDuceDuce (Pr&#8203;oxy and Web Dev&#8203;eloper)</strong><br><strong></strong><br>Notable Mentions:
<br><strong> O&#8203;lyB (Tab Cl&#8203;oak, Web Developer)</strong><br><strong>&nbsp;YOCTDON&#8203;ALD'S (Obfusc&#8203;ation God, T&#8203;N Bugh&#8203;unter)</strong><br><strong> SexyDuceDuce (Pr&#8203;oxy and Web Dev&#8203;eloper)</strong><br><strong></strong><br>Notable
Mentions:
<br> LQ16 (Creator of TN, Retired)</strong><br>Shirt (Owner of TN)<br> Mik<wbr>eLime (<strong>Co-Owner of Tit<wbr>anium<wbr>Ne<wbr>twork &amp; Mass Pr<wbr>o<wbr>xy Site Maker, Web Deve&#8203;loper, and Software Developer</strong>)
:D
<br> Sou&#8203;p (Cat La&#8203;dy) hehe<br>
<br><strong> Na<wbr>vvy</strong><br><strong>- Divi&#8203;de (Chatb&#8203;ox, Pro&#8203;xy/W&#8203;eb Deve&#8203;loper)<br><strong> B<wbr>3A<wbr>TDR<wbr>O<wbr>P3R</strong><br> Nautica<br><strong><br><strong></strong><br>And
everyone else on TN and to the various testers. :D<br><br>And of course a certain Michael (irl friend)<br><br></p>div>
everyone else on TN and to the various testers. :D<br><br>And of course a certain Michael (irl friend)<br><br></p>
</div>
</div>
</div>
@ -152,6 +156,7 @@
<script src="assets/js/links.js"></script>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="expr/surf.js"></script>
</body>
</html>

View file

@ -28,11 +28,13 @@
</head>
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<!-- Important: Use <wbr> to mess with keywords. -->
<div>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -42,7 +44,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -276,6 +279,7 @@
<script src="assets/js/links.js"></script>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="expr/surf.js"></script>
</body>
</html>

View file

@ -28,9 +28,11 @@
<!--Games Old CSS -->
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -54,7 +56,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -467,6 +470,7 @@
<script src="assets/js/links.js"></script>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="expr/surf.js"></script>
</body>
</html>

View file

@ -28,11 +28,13 @@
</head>
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<!--New-->
<div>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -42,7 +44,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -100,12 +103,13 @@
<div class="container text-center border rounded justify-content-center align-items-center button" style="color: rgb(255,255,255); filter: blur(0px); opacity: 0.95; padding-left: 50px; padding-right: 50px;">
<form class="hb-form-padding" id="unblocker-form" action="b" method="get">
<p class="s-text-header" style="font-size: 46px;">GTo&#8203;ols Directory</p>
<p style="font-family: 'Montserrat Alternates', sans-serif;">Choose where you would like to go. Below is some information.</p>
<p style="font-family: 'Montserrat Alternates', sans-serif;">Choose where you would like to go. Below is some information.<br>P&#8203;lease no&#8203;te that thi&#8203;s pa&#8203;ge and its library is a WI&#8203;P.</p>
<p class="text-white" style="font-size: 20px;font-family: Lato, sans-serif;">Information:<br></p>
<p class="text-hb-light" style="font-family: Lato, sans-serif;">Here you can find cool stuff like emula&#8203;tors and gam&#8203;es!</p>
<p class="text-hb-light" style="font-family: Lato, sans-serif;">Emu&#8203;lat&#8203;ors Featured: G&#8203;B, G&#8203;BA, N&#8203;ES, SN&#8203;ES (N&#8203;64 soon)</p>
<p class="text-hb-light" style="font-family: Lato, sans-serif;">T&#8203;ools Featured: Javascript Ter&#8203;minals, Virt&#8203;ual Mach&#8203;ines and more.</p>
<p class="text-hb-light" style="font-family: Lato, sans-serif;">Ga&#8203;mes Featured: Self explanatory. Fla&#8203;sh will soon be unsupported.</p>
<p class="text-white" style="font-family: Lato, sans-serif;">Most of the ga&#8203;mes here should hopefully be updated.</p>
<div style="margin-top: 2%;">
<a class="btn btn-group text-hb hb-border-color glow-on-hover" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif;" href="/?h">Em&#8203;ulat&#8203;ors</a>
<a class="btn btn-group text-hb hb-border-color glow-on-hover" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif;" href="/?h">To&#8203;ols</a>
@ -113,7 +117,6 @@
<a class="btn btn-group text-hb hb-border-color glow-on-hover" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif;" href="/?h">.&#8203;I&#8203;O Gam&#8203;es</a>
<a class="btn btn-group text-hb hb-border-color glow-on-hover" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif;" href="/?f">F&#8203;la&#8203;sh G&#8203;am&#8203;es</a>
</div>
<p class="text-white" style="font-family: Lato, sans-serif;">Most of the ga&#8203;mes here should hopefully be updated.</p>
</form>
</div>
</div>
@ -164,6 +167,7 @@
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/js/bs-init.js"></script>
<script src="expr/surf.js"></script>
</body>
</html>

View file

@ -27,11 +27,13 @@
</head>
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<!-- Important: Use <wbr> to mess with keywords. -->
<div>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -41,7 +43,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -157,6 +160,7 @@
<script src="assets/js/links.js"></script>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="expr/surf.js"></script>
</body>
</html>

View file

@ -29,11 +29,13 @@
</head>
<body>
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<!-- Important: Use <wbr> to mess with keywords. -->
<div>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -43,7 +45,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -75,7 +78,8 @@
<!-- Particles.js background -->
<script id="particles-js" style="background-image: url(&quot;assets/img/black.jpg&quot;);height: 100%;background-position: center;background-size: cover;background-repeat: no-repeat;background-color: #000000;font-family: 'Montserrat Alternates', sans-serif;font-weight: bold;" /> document.write(`
<script id="particles-js" style="background-image: url(&quot;assets/img/black.jpg&quot;);height: 100%;background-position: center;background-size: cover;background-repeat: no-repeat;background-color: #000000;font-family: 'Montserrat Alternates', sans-serif;font-weight: bold;"
/> document.write(`
<div>
<h1>Privacy Policy for Holy Unblocker</h1>
@ -341,6 +345,7 @@
<script src="assets/js/links.js"></script>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<script src="expr/surf.js"></script>
</body>
</html>

View file

@ -94,7 +94,7 @@
</div>
</div>
<p class="text-white" style="font-size: 20px; padding-top: 5px; font-family: 'Montserrat Alternates', sans-serif;">More Inf<wbr>ormation:<br></p>
<p class="text-hb s-text-p2" style="font-family: Lato, sans-serif;">Works on Di<wbr>scord (QR Code Only), Yout<wbr>ube (Might need to rel<wbr>oad), etc.<br><br>Many si<wbr>tes work with this. Ex<wbr>plore!</p>
<p class="text-hb s-text-p2" style="font-family: Lato, sans-serif;">Works on Di<wbr>scord (QR Code Only), Yout<wbr>ube (Might need to rel<wbr>oad), etc.<br><br>Many si<wbr>tes work with this.<br>This is curre<wbr>ntly one of the be<wbr>st proxi<wbr>es. Ex<wbr>plore!</p>
<p class="text-hb s-text-p2" style="font-family: Lato, sans-serif;">Git<wbr>Hub:&nbsp;<a class="text-hb" id="allink"><strong>&nbsp;https://github&#8203;.com/ti&#8203;taniumnetwork-&#8203;dev/alloypro&#8203;xy</strong></a><br></p>
<p class="text-white s-text-p2"><br>All<wbr>oy Pr<wbr>ox<wbr>y created by S<wbr>exyDu<wbr>ceD<wbr>uce
(a very epic person) :D<br>All<wbr>oy v2.3</p>

View file

@ -84,10 +84,10 @@
<div class="container border rounded text-center justify-content-center align-items-center button" style="color: rgb(255,255,255);filter: blur(0px); opacity: 0.95; padding-left: 50px; padding-right: 50px;">
<!--PD-->
<form id="pd">
<p class="s-text-header" style=" font-size: 46px; ">P<wbr>yDo<wbr>dge</p>
<p class="s-text-p1" style="font-family: 'Montserrat Alternates', sans-serif; ">An alterna<wbr>tive pr<wbr>oxy of a modi<wbr>fied V<wbr>ia Pro<wbr>xy.</p>
<p class="s-text-header" style=" font-size: 46px; ">V<wbr>ia Unb<wbr>lock<wbr>er</p>
<p class="s-text-p1" style="font-family: 'Montserrat Alternates', sans-serif; ">A hi<wbr>ghly flex<wbr>ible pro<wbr>xy which su<wbr>cce<wbr>sses N<wbr>ode U<wbr>nblock<wbr>er.</p>
<div class="input-group ">
<div class="input-group-prepend"></div><input id="url" class="bg-dark hb-border-color rounded-0 border-info shadow-sm form-control form-control-lg " type="text" name="url" autocomplete="off" style="width: 270px;font-family:
<div class="input-group-prepend"></div><input id="url" class="bg-dark rounded-0 hb-border-color shadow-sm form-control form-control-lg" type="text" name="url" autocomplete="off" style="width: 270px;font-family:
'Montserrat Alternates', sans-serif;opacity: 0.80; color:rgb(255,255,255); " placeholder="Insert URL ">
<div class="input-group-append ">
<button id="pdproxbp" class="glow-on-hover btn-dark btn-lg bg-dark text-hb rounded-0 hb-border-color shadow-lg select" data-bs-hover-animate="pulse" name="button" type="submit" style="width: 85px;padding: 2px; margin: 0px;height: 46.126px;font-family: 'Montserrat Alternates', sans-serif;font-size: 16px;">Classic</button>
@ -109,7 +109,7 @@
In conclusion, cooking has evolved as technology has developed. But in the grand scheme of things we still have the same methods. Cooking helped the advancement of the human brain and the advancement of human teeth and our digestive tracts. Today we have restaurants, grocery stores, microwaves, and ovens. And all we started off with was a fire and a piece of meat with a stick stuck through it. Cooking was, is, and will be a vital part of the human life.
</span>
<p class="text-white" style="padding-top: 5px; font-size: 20px;font-family: 'Montserrat Alternates', sans-serif; ">More Information:<br></p>
<p class="text-hb-light s-text-p2" style="font-family: Lato, sans-serif; ">Works on vari<wbr>ous sites.<br><br>Explore!</p>
<p class="text-hb-light s-text-p2" style="font-family: Lato, sans-serif; ">Works on vari<wbr>ous sites and game sites.<br>(CoolMathGames, etc.)<br><br>Explore!</p>
</form>
</div>
</div>
@ -158,7 +158,7 @@
<script src="assets/js/jquery.min.js "></script>
<script src="assets/bootstrap/js/bootstrap.min.js "></script>
<script src="assets/js/bs-init.js "></script>
<script src="expr/pdbp.js "></script>
<script src="expr/surf.js "></script>
</body>
</html>

View file

@ -11,21 +11,13 @@
:D">
<link rel="icon" type="image/png" sizes="32x32" href="assets/img/i.png">
<link rel="stylesheet" href="assets/css/styles.css">
<style type="text/css">
body,
html {
margin: 0;
padding: 0;
height: 100%;
overflow: hidden;
}
</style>
<!-- AL YT -->
<script src="/expr/ch.js"></script>
<script async src="https://arc.io/widget.js#2BzvQ1em"></script>
</head>
<body>
<iframe id="frame" style="visibility: visible;"></iframe>
<span style=display:none data-cooking=cooks>Cooking started 1.9 million years ago. Therefore, cooking is not something new to humans. Cooking started over a fire with no pots and pans or cooking utensils and now we have microwaves and stoves and special brushes to wipe on a marinade which was not even able to be comprehended 1.9 years ago. In between that time was the middle ages which had many advancements. Life was very different before cooking and has been very different since the beginning of cooking.
1.9 million years ago, given humans average sizes, had to spend forty eight percent of their life time in the “feeding process.” The feeding process does not include cooking. Cooking narrowed the time that humans had to spend in the feeding process to five percent. This change made it to where humans could spend less time in the feeding process and could do more valuable things with their time such as go out and hunt to grow bigger societies and other pursuits which ultimately lead to the beginning to the path of our modern brain. Cooking made food a lot easier to chew and digest. As a result of that we got more calorie benefit and a smaller digestive tract. All of this made cooking a vital part of human adaptation. The changes in human teeth happened so much faster than anything in the human body that scientists have come to the conclusion that this means that cooking was and has been passed down from generations and generations. Also, the oppressed women theory has been going on since the beginning of cooking when men went out and hunted and sought new things. Women at this time had to cook and do the gathering because of their lack of physically strength. So ever since cooking, even 1.9 million years ago, the roles of men and women have been a natural thing of life...

View file

@ -27,11 +27,12 @@
</head>
<body>
<!--New-->
<iframe id="frame" style="display:block; visibility: hidden;"></iframe>
<div>
<div class="header-dark" style="background-color: rgb(0,0,0);background-image: url(&quot;assets/img/black.jpg&quot;);">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search" style="height: 100px;">
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler" data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="container"><a class="navbar-brand" style="font-family: 'Montserrat Alternates', sans-serif;font-size: 21px;margin: 10px;font-style: normal;font-weight: bold;" href="/">Ho&#8203;ly Unb&#8203;lock&#8203;er</a><button data-toggle="collapse" class="navbar-toggler"
data-target="#navcol-1"><span class="sr-only">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navcol-1">
<ul class="nav navbar-nav ml-auto">
<!--Nav-->
@ -41,7 +42,8 @@
<li class="nav-item" role="presentation"><a class="nav-link" href="/?d" style="font-family: 'Montserrat Alternates', sans-serif;">D&#8203;isc&#8203;ord</a></li>
<li id="ch" class="nav-item" role="presentation"><a class="nav-link" href="/?n" style="font-family: 'Montserrat Alternates', sans-serif;">Cha&#8203;tbox</a></li>
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;color: rgb(255,255,255);font-family: 'Montserrat Alternates', sans-serif;">More</a>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50" role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
<div class="dropdown-menu" role="menu" style="background-color: rgb(33,30,30);font-family: 'Titillium Web', sans-serif;padding: 17%;padding-top: 10%;padding-bottom: 10%;"><a class="dropdown-item text-left text-white-50" role="presentation" href="/?k" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Kru&#8203;nk&#8203;er</a><a class="dropdown-item text-left text-white-50"
role="presentation" href="/?in" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Docs</a><a class="dropdown-item text-white-50" role="presentation" href="/?c" style="color: rgb(255,255,255);padding: 0%;font-family: Lato, sans-serif;">Cre&#8203;dits</a></div>
</li>
<!--Options Menu-->
<li class="nav-item dropdown"><a class="dropdown-toggle nav-link text-white" data-toggle="dropdown" aria-expanded="false" href="#" style="opacity: 0.80;font-family: 'Montserrat Alternates', sans-serif;">Options</a>
@ -87,17 +89,18 @@
<p class="s-text-header" style="font-size: 46px;">Su<wbr>rf Free<wbr>ly</p>
<p class="s-text-p1" style="font-family: 'Montserrat Alternates', sans-serif;">Choose which proxy you would like to use. Below is some information.</p>
<p class="text-white" style="font-size: 20px;font-family: Lato, sans-serif;">More Information:<br></p>
<p class="text-hb-light s-text-p2" style="font-family: Lato, sans-serif;">A&#8203;llo&#8203;y: Di&#8203;sco&#8203;rd (Mostly Full), Yo&#8203;uTu&#8203;be (Full), etc.<br><br>Nod&#8203;e: Co&#8203;olMa&#8203;thGa&#8203;mes, secondary pr&#8203;oxy compared to Al&#8203;loy, PM and PD.<br><br>P<wbr>M Pro<wbr>xy: Disc<wbr>ord, Yout<wbr>ube
(limited), etc.<br><br>V<wbr>ia: Alternative pro<wbr>xy with sup&#8203;port for vari&#8203;ous ga&#8203;mes sites.<br>
<p class="text-hb-light s-text-p2" style="font-family: Lato, sans-serif;">A&#8203;llo&#8203;y: Di&#8203;sco&#8203;rd (Mostly Full), Yo&#8203;uTu&#8203;be (Full), etc.<br><br>Vi<wbr>a: Alter<wbr>native pro<wbr>xy which suppo<wbr>rts many ga<wbr>me si<wbr>tes, etc.<br><br>Nod&#8203;e: Secondary
pr&#8203;oxy compared to Al&#8203;loy, PM and PD.<br><br>P<wbr>M Pro<wbr>xy: Disc<wbr>ord, Yout<wbr>ube (limited), etc.<br>
</p>
<p class="text-white s-text-p2">Many sites work with this. Join the T<wbr>N disc<wbr>ord for updated H<wbr>B sites and more. Explore!</strong><br>T<wbr>N D<wbr>isco<wbr>rd:</p>
<a class="text-hb s-text-p2" id="tnlink">https://di<wbr>sco<wbr>rd.com/invi<wbr>te/Dw<wbr>6C<wbr>7p5</a><br>
<a class="text-hb s-text-p2" id="tnlink">https://dis&#8203;cord.c&#8203;om/invite/Dw&#8203;6C7p&#8203;5</a><br>
<div style="margin: 2%;padding: 1px;">
<a class="btn btn-group text-hb hb-border-color glow-on-hover rounded-1" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif;" href="/?a">Al&#8203;loy Pro&#8203;xy</a>
<a class="btn btn-group text-hb hb-border-color glow-on-hover rounded-1" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif; margin-left: 5px;" href="/?e">V<wbr>ia Un<wbr>blo<wbr>ck<wbr>er</a>
<a class="btn btn-group text-hb hb-border-color glow-on-hover rounded-1" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif;" href="/?a">Al<wbr>loy Pro<wbr>xy</a>
<a class="btn btn-group text-hb hb-border-color glow-on-hover rounded-1" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif; margin-left: 5px;" href="/?e">V<wbr>ia Un<wbr>blo<wbr>cker</a>
<a class="btn btn-group text-hb hb-border-color glow-on-hover rounded-1" role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif; margin-left: 5px;" href="/?b">No<wbr>de Un<wbr>bloc<wbr>ker</a>
<a class="btn btn-group text-hb hb-border-color glow-on-hover rounded-1 " role="button" data-bs-hover-animate="pulse" style="background-color: rgb(24,26,28);font-family: 'Montserrat Alternates', sans-serif; margin-left: 5px; " href="/?p">PM Pro<wbr>xy</a>
</div>
<span style=display:none data-cooking=cooks>Cooking started 1.9 million years ago. Therefore, cooking is not something new to humans. Cooking started over a fire with no pots and pans or cooking utensils and now we have microwaves and stoves and special brushes to wipe on a marinade which was not even able to be comprehended 1.9 years ago. In between that time was the middle ages which had many advancements. Life was very different before cooking and has been very different since the beginning of cooking.
1.9 million years ago, given humans average sizes, had to spend forty eight percent of their life time in the “feeding process.” The feeding process does not include cooking. Cooking narrowed the time that humans had to spend in the feeding process to five percent. This change made it to where humans could spend less time in the feeding process and could do more valuable things with their time such as go out and hunt to grow bigger societies and other pursuits which ultimately lead to the beginning to the path of our modern brain. Cooking made food a lot easier to chew and digest. As a result of that we got more calorie benefit and a smaller digestive tract. All of this made cooking a vital part of human adaptation. The changes in human teeth happened so much faster than anything in the human body that scientists have come to the conclusion that this means that cooking was and has been passed down from generations and generations. Also, the oppressed women theory has been going on since the beginning of cooking when men went out and hunted and sought new things. Women at this time had to cook and do the gathering because of their lack of physically strength. So ever since cooking, even 1.9 million years ago, the roles of men and women have been a natural thing of life...

View file

@ -1,19 +1,32 @@
User-agent: *
Allow: /index.html
Allow: /z.html
Allow: /c.html
Disallow: /
Allow: /
Sitemap: https://quiteafancyemerald.com
Sitemap: https://holyubofficial.net
User-agent: Googlebot
Allow: /index.html
Allow: /z.html
Allow: /c.html
Disallow: /
Allow: /
Sitemap: https://quiteafancyemerald.com
Sitemap: https://holyubofficial.net
User-agent: DuckDuckBot
Allow: /
Sitemap: https://quiteafancyemerald.com
Sitemap: https://holyubofficial.net
User-agent: Bingbot
Allow: /
Sitemap: https://quiteafancyemerald.com
Sitemap: https://holyubofficial.net
User-agent: Slurp
Allow: /
Sitemap: https://quiteafancyemerald.com
Sitemap: https://holyubofficial.net
User-agent: Baiduspider
Allow: /
Sitemap: https://quiteafancyemerald.com
Sitemap: https://holyubofficial.net
User-agent: AdsBot-Google
Allow: /index.html
Allow: /z.html
Allow: /c.html
Disallow: /

123
public/sitemap.xml Normal file
View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>https://quiteafancyemerald.com/?a</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://quiteafancyemerald.com/?b</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://quiteafancyemerald.com/?z</loc>
<changefreq>daily</changefreq>
<lastmod>2020-11-11</lastmod>
<priority>0.9<priority>
</url>
<url>
<loc>https://quiteafancyemerald.com/?y</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://quiteafancyemerald.com/?d</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://quiteafancyemerald.com/</loc>
<changefreq>daily</changefreq>
<lastmod>2020-11-11</lastmod>
<priority>0.9<priority>
</url>
<url>
<loc>https://quiteafancyemerald.com/?k</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://quiteafancyemerald.com/?g</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://quiteafancyemerald.com/?e</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://quiteafancyemerald.com/?in</loc>
<changefreq>daily</changefreq>
<priority>0.9<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?a</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?b</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?z</loc>
<changefreq>daily</changefreq>
<priority>0.9<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?y</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?d</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?k</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?g</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?e</loc>
<changefreq>daily</changefreq>
<priority>0.8<priority>
<lastmod>2020-11-11</lastmod>
</url>
<url>
<loc>https://holyubofficial.net/?in</loc>
<changefreq>daily</changefreq>
<priority>0.9<priority>
<lastmod>2020-11-11</lastmod>
</url>
</urlset>

View file

@ -1,22 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDqzCCApOgAwIBAgIJAJnCkScWtmL0MA0GCSqGSIb3DQEBCwUAMGwxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMRgwFgYDVQQKDA9UaXRhbml1bU5l
dHdvcmsxDjAMBgNVBAsMBWdhbWVyMR4wHAYDVQQDDBUqLnRpdGFuaXVtbmV0d29y
ay5vcmcwHhcNMjAwNjEzMTg0OTU2WhcNMjEwNjEzMTg0OTU2WjBsMQswCQYDVQQG
EwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEYMBYGA1UECgwPVGl0YW5pdW1OZXR3
b3JrMQ4wDAYDVQQLDAVnYW1lcjEeMBwGA1UEAwwVKi50aXRhbml1bW5ldHdvcmsu
b3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPL69+RE6r8RrFh4
njzC8ZRnLB+yNtuGw14C0dvNb5JwgdLl5g9/wK/s0V5NGlqwxlQlxQ/gUSuYEcUR
6MYjcnaUmZZe/gaKVV0fkfkuigOWhLnI5AQxx7rhkzx1ujuyJ9D2pkDtZpSvv0yn
2yrvWhJMtjuxGYip8jaLuRpbXoafvR7nrlDaNcE/GwIjnCCxsRnY2bGbxYK840mN
fuMfF2nz+fXKPuQ/9PT48e3wOo9vM5s7yKhiHYwrogqzGN4cH4sSr1FE8C7flFyT
Yw101u7fUaopfeGCo9Pg6IrfzyzE5Qb7OlqlVk2IkvXx7pPqVc6lZCJEhOX/qF9o
n3mFqwIDAQABo1AwTjAdBgNVHQ4EFgQUC561ob2kGtFQ4az6y64b98+Fy+IwHwYD
VR0jBBgwFoAUC561ob2kGtFQ4az6y64b98+Fy+IwDAYDVR0TBAUwAwEB/zANBgkq
hkiG9w0BAQsFAAOCAQEAotvUsSLSzFyxQz329tEPyH6Tmi19FQoA5ZbLg6EqeTI9
08qOByDGkSYJi0npaIlPO1I557NxRzdO0PxK3ybol6lnzuSlqCJP5nb1dr0z2Eax
wgKht9P+ap/yozU5ye05ah2nkpcaeDPnwnnWFmfsnYNfgu62EshOS+5FETWEKVUb
LXQhGInOdJq8KZvhoLZWJoUhyAqxBfW4oVvaqs+Ff96A2NNKrvbiAVYX30rVa+x0
KIl0/DoVvDx2Q6TiL396cAXdKUW7edRQcSsGFcxwIrU5lePm0V05aN+oCoEBvXBG
ArPN+a5kpGjJwfcpcBVf9cJ6IsvptGS9de3eTHoTyw==
-----END CERTIFICATE-----

View file

@ -1,28 +0,0 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDA8vr35ETqvxGs
WHiePMLxlGcsH7I224bDXgLR281vknCB0uXmD3/Ar+zRXk0aWrDGVCXFD+BRK5gR
xRHoxiNydpSZll7+BopVXR+R+S6KA5aEucjkBDHHuuGTPHW6O7In0PamQO1mlK+/
TKfbKu9aEky2O7EZiKnyNou5Gltehp+9HueuUNo1wT8bAiOcILGxGdjZsZvFgrzj
SY1+4x8XafP59co+5D/09Pjx7fA6j28zmzvIqGIdjCuiCrMY3hwfixKvUUTwLt+U
XJNjDXTW7t9Rqil94YKj0+Doit/PLMTlBvs6WqVWTYiS9fHuk+pVzqVkIkSE5f+o
X2ifeYWrAgMBAAECggEAbihK8Ev6rKr5RBQeiPjXs2SuoppV/MvIXLHHmliLKS/J
29S0PGyM202VPtM/4dP1KMXR6nft8WmaIEsKtoKoqijZHfajtRO21pWb+JLy5wi1
XoFTGBrs8MLZFl5mODTsuZ6rsq9O2kn5LJZvHsmcbSgVc9UQfytvG0HY840ArS3g
kSDtUFb1xRui6wtCBKzHVvCT+FXhSBbwkHalmbqP6BefhJ3lW2VonkOcHDrdXPfW
CEN18IJ2v8QYgXqZP6VUlAweNXLJ33ZOl+jXGdygcOG24MFqdw0VtP0XFGk0jnSS
W6dX67BZKeZ71EKaTy02jw5LpQNXA70ismPJHQ2uQQKBgQDuROawnBIW1fC3xOle
m+JmP0eMe0eIQycxRsMXsXhYAA0wV3qYZSLZrNK2eRhmSNt+ODSmZ2Vt11dwOv5u
bo8WONrRlM097SmitS2S+8o7ASem2VKQzyRE72Y9517Q+aNBdLRVtjrRNSw/hfSu
ayLuG36+yukSH7wq7mfoUX34ZwKBgQDPTrgyyw8n5XhZT/qTTRnQJ2GTvPxDzNoJ
IAGhGJGFAb6wgLoSpGx6BC122vuRxcTjkjAiMDci5N2zNW+YZVni+F0KTVvNFfU2
pOTJUg3luRTygCra6O02PxwpbP/9KCBAKq/kYw/eBW+gxhPwP3ZrbAirvBjgBh0I
kIrFijNOHQKBgGUUAbFGZD4fwCCVflLOWnr5uUaVPcFGi6fR1w2EEgNy8iVh1vYz
YVdqg3E5aepqWgLvoRY+or64LbXEsQ70A+tvbxSdxXvR0mnd5lmGS0JAuSuE4gvg
dAhybrMwJf8NB/7KnX4G8mix3/WKxEQB2y2bqGcT+U/g+phTzuy1NXVdAoGBAIrl
jVjK4J60iswcYCEteWwT1rbr2oF60WNnxG+xTF63apJLzWAMNnoSLnwCAKgMv/xR
yFo/v9FrUnduCBUtYupFyeDLMATa/27bUEbq6VDPjw9jfFMr2TONWUsQMvvlVKZp
c2wsS0dQkRhBXr6LZsZWngCiiHAg6HcCkVgFXpapAoGBAJ/8oLGt0Ar+0MTl+gyk
xSqgHnsc5jgqhix3nIoI5oEAbfibdGmRD1S3rtWD9YsnPxMIl+6E5bOAHrmd+Zr8
O7EP+CLvbz4JXidaaa85h9ThXSG5xk1A1UTtSFrp+KolLE1Vvmjjd+R844XsM2wZ
OAHbihzk0iPPphjEWR4lU4Av
-----END PRIVATE KEY-----

View file

@ -1,17 +0,0 @@
-----BEGIN CERTIFICATE-----
MIICwzCCAaugAwIBAgIJAMN1fA0fbQDSMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
BAMTCWxvY2FsaG9zdDAeFw0yMDA2MDcyMDIyMDRaFw0zMDA2MDUyMDIyMDRaMBQx
EjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAPVHYq820Hi8Vy4ZAgmH/0Cl51TxWIWeoEgyQZEErgm1Vv49KuM0I1Ejk23+
+tbKxY489dc7Gj/PqPv5F7SASNcxcKi5zbJPC6eEJBh2lHh6ldzF1aMfaYnuh25a
3uhzoLpZPRsoTBysXkQZqC/6ZP6kBcwJnMZd12Uj4JIbdJwpyUorOYOv4GO6f7SA
dUPUhSJpfUMZ4EFnkgrGJ18iqml/afhKj0g6KDxDGc1l2ioVMxiSjEfP06mbfkZ4
zG16CmfITgyBFv8J9eF7exHCzqhbzgqWSfUNKazEKMbfCoegeZI196xtGIUbPYcf
U8a5M+/pSmojMvdqsppqro0qwa0CAwEAAaMYMBYwFAYDVR0RBA0wC4IJbG9jYWxo
b3N0MA0GCSqGSIb3DQEBBQUAA4IBAQBazEct+iiNe7/TY7c+l8wQBaCIhLtWxmfA
JLGBu5Jt+HPAMskU5+rK0nWPMIW5le+xhHXXRnmjqH1pm157hR1LvanLoHpWsPTc
eNx7utePC49t77UID1L2NHnmm9SAG/OhPJr3hh0AWG4GjJlWpK+9xeq7b9BoUsl7
umU/X/02ZJmXWSwrqhspxtz3dSNaozAVVZs4Bokf7WiU27ACgffa7pCh9E8WTgyV
jkvG5ZbmOeje7n+Fa0PEbTrm8SBtF/Rn96VkoZGJBC4+wia/0T5Gmjk8Ds9VhjVK
bCyEsgPbkjwRdT/eRO4gEOgJI36CrheluWLnqjiidregyKYHQhwA
-----END CERTIFICATE-----

View file

@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA9UdirzbQeLxXLhkCCYf/QKXnVPFYhZ6gSDJBkQSuCbVW/j0q
4zQjUSOTbf761srFjjz11zsaP8+o+/kXtIBI1zFwqLnNsk8Lp4QkGHaUeHqV3MXV
ox9pie6Hblre6HOgulk9GyhMHKxeRBmoL/pk/qQFzAmcxl3XZSPgkht0nCnJSis5
g6/gY7p/tIB1Q9SFIml9QxngQWeSCsYnXyKqaX9p+EqPSDooPEMZzWXaKhUzGJKM
R8/TqZt+RnjMbXoKZ8hODIEW/wn14Xt7EcLOqFvOCpZJ9Q0prMQoxt8Kh6B5kjX3
rG0YhRs9hx9Txrkz7+lKaiMy92qymmqujSrBrQIDAQABAoIBAQCQ6tFqlmdLvnN/
3/StLvXn+12XeVUE9Xjbzx2gEfTF9adlZTxuqwJm0S8tISaRO5LHfEsAFIJoy0eb
QEv6MIVY53QZrFXVERDgs5kj/wOvvzXGD/kufMO9Y/oOgJANJSwEje8lmYSGuGyl
rccKOdXsAXsPV2qSZSV7M1xe1uvpyzpoUaX5aEfl44Kz1U6pURCpjqCj3OwVoaXa
vlnDSI7LArhvVTR2Xifl9/MSz1qGlnlKTJTUJi5z+XEnIEqZmhYQOUnp2Wi4KWOR
SqKnLOgfSJKb3yrdHukpLBsakF7U1urLB2wUjweZdn7zI9qbzIt9GIy1mRjYXTXL
YwPDFOfBAoGBAP5Pi3+E8HV2L+6XOl9MYtKxn2KRvHQdR13IepmF+umhOxjfc6uC
NhVeutfwuYfTXWmiEOHPKhH6NLloPbKkpfl6YxaKsAPfeEUI8PEA9J9TiNvGIP6m
MZVsp5VS4Q/O2UTT9SG5dc3zOMmys1CJMIDZkzvub9HY1EiAiqRY/y+RAoGBAPbo
e1yl/O2Z4L/ILaqo0QpIOgOdpWGZUIshUp5LEUzcYcflnCzdh1CYXWOAnPlvhh3H
k4rTBMWJ4DaFWdNhYcOLowu0pk1Cm9q0akarmCr0DhKj98qubU/0QdzJ9q80eqYA
3/pfFNs+baIGqcqOeD+da4ZrbLoefO7eBE1qJdpdAoGAFJjkt4NQ5nKYFz7wX1+U
cXQpcJZVKSJl8VaXd2++jsWcP7t5Zt64+qodf/fjTvjzi+awb1mUEritJIco2Bs1
xir/c4fwEaA74XuD6EEnju/5GbPGYFmdknimahW4XMtoFYcFR6H5xKB6bPuoQlGa
OBVnM2dwbxKcvvKKSB1dLcECgYEAhQ4xdHMKwyv6Xr9MRLxmsijMAqjQt7C8I83Y
TO9dKlNU6jlFGTRkOD1zjix/6zd7Sc8EJnqjBqTPS/I+vteqrIsyWRuHxvjPLmOt
JdpQzUzpzIfJ/9JRnBWf7JB1vGMGeTDdgnn8rk2NHRSEKWDvUjDOAgkf9Yh6gOrp
3KIINg0CgYEA5VURroq8FtoLUeiyueKwJ8pBeWVa1IOy9OyG7MaebYVcs5XqDyMk
t/5dRHEbzjeM94qsi15BnwYtAy53RlIpA6VCsTxjgP53oj6emucoyj0eW4BRtTq1
Er5OUU3Sl6JrILXmefjGTKha97boBWpUZQrJ/zgiqR4KvyGIBq4lqLo=
-----END RSA PRIVATE KEY-----

View file

@ -1,109 +0,0 @@
var alloy_data = document.querySelector('#_alloy_data');
var url = alloy_data.getAttribute('url');
var prefix = alloy_data.getAttribute('prefix');
url = new URL(atob(url))
rewrite_url = (str) => {
proxied_url = '';
if (str.startsWith(window.location.origin + '/') && !str.startsWith(window.location.origin + prefix)) {
str = '/' + str.split('/').splice(3).join('/');
}
if (str.startsWith('//')) {
str = 'http:' + str;
} else if (str.startsWith('/') && !str.startsWith(prefix)) {
str = url.origin + str
}
if (str.startsWith('https://') || str.startsWith('http://')) {
path = "/" + str.split('/').splice(3).join('/');
origin = btoa(str.split('/').splice(0, 3).join('/'));
return proxied_url = prefix + origin + path
} else {
proxied_url = str;
}
return proxied_url;
}
let fetch_rewrite = window.fetch; window.fetch = function(url, options) {
url = rewrite_url(url);
return fetch_rewrite.apply(this, arguments);
}
let xml_rewrite = window.XMLHttpRequest.prototype.open;window.XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
url = rewrite_url(url);
return xml_rewrite.apply(this, arguments);
}
let createelement_rewrite = document.createElement; document.createElement = function(tag) {
var element = createelement_rewrite.call(document, tag);
if (tag.toLowerCase() === 'script' || tag.toLowerCase() === 'iframe' || tag.toLowerCase() === 'embed') {
Object.defineProperty(element.__proto__, 'src', {
set: function(value) {
value = rewrite_url(value)
element.setAttribute('src', value)
}
});
} else if (tag.toLowerCase() === 'link') {
Object.defineProperty(element.__proto__, 'href', {
set: function(value) {
value = rewrite_url(value)
element.setAttribute('href', value)
}
});
} else if (tag.toLowerCase() === 'form') {
Object.defineProperty(element.__proto__, 'action', {
set: function(value) {
value = rewrite_url(value)
element.setAttribute('action', value)
}
});
}
return element;
}
let setattribute_rewrite = window.Element.prototype.setAttribute; window.Element.prototype.setAttribute = function(attribute, href) {
if (attribute == ('src') || attribute == ('href') || attribute == ('action')) {
href = rewrite_url(href)
} else href = href;
return setattribute_rewrite.apply(this, arguments)
}
// Rewriting all incoming websocket request.
WebSocket = new Proxy(WebSocket, {
construct(target, args_array) {
var protocol;
if (location.protocol == 'https:') { protocol = 'wss://' } else { protocol = 'ws://' }
args_array[0] = protocol + location.origin.split('/').splice(2).join('/') + prefix + 'ws/' + btoa(args_array[0]);
return new target(args_array);
}
});
// Rewriting incoming pushstate.
history.pushState = new Proxy(history.pushState, {
apply: (target, thisArg, args_array) => {
args_array[2] = rewrite_url(args_array[2])
return target.apply(thisArg, args_array)
}
});
var previousState = window.history.state;
setInterval(function() {
if (!window.location.pathname.startsWith(`${prefix}${btoa(url.origin)}/`)) {
history.replaceState('', '', `${prefix}${btoa(url.origin)}/${window.location.href.split('/').splice(3).join('/')}`);
}
}, 0.1);

View file

@ -1,89 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap" rel="stylesheet">
<style>
body {
background-color: #222;
font-family: "Roboto";
color: #FFF;
margin: 0;
}
input {
background-color: #111;
color :#FFF;
border-radius: 4px;
border: none;
padding-top: 3px;
padding-bottom: 3px;
width: 300px;
font-size: 19px;
height: 45px;
margin-bottom: 5px;
font-family: 'Roboto';
text-align: center;
}
button {
background-color: #3333cc;
color :#FFF;
border-radius: 4px;
border: none;
padding-top: 3px;
padding-bottom: 3px;
width: 300px;
font-size: 19px;
height: 45px;
padding-left: 0;
padding-right: 0;
transition: 0.3s;
}
button:hover{
cursor: pointer;
background-color: #4d4dff;
}
.container p {
margin-bottom: 10px;
font-size: 30px;
}
.top {
top: 0;
left: 0;
right: 0;
border-bottom: #FFF solid 1px;
}
.top p {
font-family: "Noto Sans JP";
font-size: 30px;
margin: 22px 22px;
display: block
}
#error {
padding: 0px 5px;
font-size: 22px;
}
</style>
</head>
<body>
<div class="top">
<p>Alloy Proxy</p>
</div>
<p id="error">%ERROR%</p>
</body>
</html>

View file

@ -1,87 +0,0 @@
const WebSocket = require('ws'),
fs = require('fs');
const config = JSON.parse(fs.readFileSync('./config.json', {encoding:'utf8'}));
if (!config.prefix.startsWith('/')) {
config.prefix = `/${config.prefix}`;
}
if (!config.prefix.endsWith('/')) {
config.prefix = `${config.prefix}/`;
}
btoa = (str) => {
str = new Buffer.from(str).toString('base64');
return str;
};
atob = (str) => {
str = new Buffer.from(str, 'base64').toString('utf-8');
return str;
};
module.exports = (server) => {
const wss = new WebSocket.Server({ server: server });
wss.on('connection', (cli, req) => {
try {
const svr = new WebSocket(atob(req.url.toString().replace(`${config.prefix}ws/`, '')));
svr.on('message', (data) => {
try { cli.send(data) } catch(err){}
});
svr.on('open', () => {
cli.on('message', (data) => {
svr.send(data)
});
});
cli.on('close', (code) => {
try { svr.close(code); } catch(err) { svr.close(1006) };
});
svr.on('close', (code) => {
try { cli.close(code); } catch(err) { cli.close(1006) };
});
cli.on('error', (err) => {
try { svr.close(1001); } catch(err) { svr.close(1006) };
});
svr.on('error', (err) => {
try { cli.close(1001); } catch(err) { cli.close(1006) };
});
} catch(err) { cli.close(1001); }
});
}