Revelav3/app.js
2022-06-07 01:54:29 -04:00

65 lines
No EOL
2.6 KiB
JavaScript

import Server from 'bare-server-node';
import https from 'https';
import nodeStatic from 'node-static';
import fs from 'fs';
const bare = new Server('/bare/', '');
const serve = new nodeStatic.Server('static/');
const patronServe = new nodeStatic.Server('static/');
const fakeServe = new nodeStatic.Server('fakeStatic/');
const server = https.createServer();
fs.readdir('/etc/letsencrypt/live', { withFileTypes: true }, (err, files) => {
if (!err)
files
.filter(file => file.isDirectory())
.map(folder => folder.name)
.forEach(dir => {
server.addContext(dir, {
key: fs.readFileSync(`/etc/letsencrypt/live/${dir}/privkey.pem`),
cert: fs.readFileSync(`/etc/letsencrypt/live/${dir}/fullchain.pem`)
});
});
});
server.on('request', (request, response) => {
const ip = request.headers['x-forwarded-for'] || request.connection.remoteAddress;
const isLS = ip.startsWith('34.216.110') || ip.startsWith('54.244.51') || ip.startsWith('54.172.60') || ip.startsWith('34.203.250') || ip.startsWith('34.203.254') || ['18.237.145.219', '34.213.241.18', '54.184.142.71', '34.219.54.89', '52.13.31.12', '52.89.157.185', '34.208.60.206', '3.80.101.141', '54.90.242.158', '54.172.185.65', '3.83.250.144', '18.209.180.25', '54.167.181.168', '54.166.136.197', '52.207.207.52', '54.252.242.153', '3.104.121.59', '34.253.198.121', '63.33.56.11', '34.250.114.219', '54.171.251.199'].includes(ip);
const unlockNow = request.url === '/?unlock';
if (unlockNow)
response.setHeader('Set-Cookie', ['key=standard; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/']);
const unlockPatronNow = request.url === '/?unlockPatron';
if (unlockPatronNow)
response.setHeader('Set-Cookie', ['key=patron; expires=Sun, 1 Jan 2023 00:00:00 UTC; path=/']);
const unlocked = request.headers['cookie'] === 'key=standard' || unlockNow;
const patronUnlocked = request.headers['cookie'] === 'key=patron' || unlockPatronNow;
if (bare.route_request(request, response))
return true;
if (!(unlocked || patronUnlocked) && (isLS || request.headers.host === 'nebulaproxy.nebula.bio' && !request.headers['user-agent'].match(/CrOS/)))
fakeServe.serve(request, response);
else {
if (bare.route_request(request, response))
return true;
if (patronUnlocked)
patronServe.serve(request, response);
else
serve.serve(request, response);
}
});
server.on('upgrade', (req, socket, head) => {
if (bare.route_upgrade(req, socket, head))
return;
socket.end();
});
server.listen(443);