Revelav3/app.js
2023-01-30 08:38:40 -08:00

175 lines
4.9 KiB
JavaScript

import createBareServer from "@tomphttp/bare-server-node";
import http from "http";
import {createRequire} from "module";
import {dirname, join} from "path";
import serveStatic from "serve-static";
import {fileURLToPath} from "url";
const require = createRequire(import.meta.url);
const config = require("./deployment.config.json");
import fs from "fs";
var base64data;
import sgTransport from "nodemailer-sendgrid-transport";
import nodemailer from "nodemailer";
import fetch from "node-fetch";
const options = {
auth : {
api_key : config.sendgrid_options.api_key,
},
};
const sendgridMailerAgent = nodemailer.createTransport(sgTransport(options));
const smtpMailerAgent = nodemailer.createTransport(config.smtp_options);
function sendVerificationEmail(UUID, OTP) {
let email = {
to : "",
from : "",
subject : `NebulaWEB personal access code ${OTP}`,
text : `
####### ACCESS CODE (OTP) ${OTP} #######
####### DO NOT SHARE THIS CODE! #######
(this message is automated)`,
html : `
####### ACCESS CODE (OTP) ${OTP} #######
####### DO NOT SHARE THIS CODE! #######
(this message is automated)
`,
};
if (config.sendgrid_verification == true) {
email.to = config.sendgrid_options.to_email
email.from = config.sendgrid_options.sendFromEmail
sendgridMailerAgent.sendMail(email, (err, res) => {
if (err) {
console.log(err);
}
console.log(res);
});
}
if (config.smtp_verification == true) {
email.to = config.smtp_options.to_email
email.from = config.smtp_options.sendFromEmail
smtpMailerAgent.sendMail(email, (err, res) => {
if (err) {
console.log(err);
}
console.log(res);
});
}
if (config.discord_verification == true) {
fetch(config.webhook_url, {
method : "POST",
headers : {
"Content-Type" : "application/json",
},
body : JSON.stringify({
content : `Your NebulaWEB access code is ${OTP}`,
}),
});
}
}
function getNewCode() {
var seq = (Math.floor(Math.random() * 10000) + 10000).toString().substring(1);
if (seq == "0") {
getNewCode();
}
return seq;
}
const PORT = process.env.PORT || 3000;
const bareServer = createBareServer("/bare/", {
logErrors : false,
localAddress : undefined,
});
const serve =
serveStatic(join(dirname(fileURLToPath(import.meta.url)), "static/"), {
fallthrough : false,
maxAge : 5 * 60 * 1000,
});
const server = http.createServer();
server.on("request", (request, response) => {
try {
if (bareServer.shouldRoute(request)) {
bareServer.routeRequest(request, response);
} else {
let base64data;
const url = request.url;
if (url.startsWith("/sendNewCode")) {
const OTP = getNewCode();
fs.writeFile("./memory.txt", OTP, function(err) {
if (err)
return console.log(err);
console.log(`Wrote OTP code to temp file`);
});
fs.readFile("./memory.txt", "utf8", (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
sendVerificationEmail("10", data);
let buff = new Buffer(data);
base64data = buff.toString("base64");
console.log("302");
response.writeHead(302, {
location : "/unv.html?c=" + base64data,
});
response.end();
});
} else if (url.startsWith("/verification")) {
var body;
if (config.sendgrid_verification == true ||
config.discord_verification == true ||
config.smtp_verificaton == true) {
const body = "true";
response.writeHead(200, {
"Content-Length" : Buffer.byteLength(body),
"Content-Type" : "text/plain",
});
response.end(body);
} else {
const body = "false";
response.writeHead(200, {
"Content-Length" : Buffer.byteLength(body),
"Content-Type" : "text/plain",
});
response.end(body);
}
} else {
serve(request, response, (err) => {
response.writeHead(err?.statusCode || 500, null, {
"Content-Type" : "text/plain",
});
response.end(err?.stack);
});
}
}
} catch (e) {
response.writeHead(500, "Internal Server Error", {
"Content-Type" : "text/plain",
});
response.end(e.stack);
}
});
server.on("upgrade", (req, socket, head) => {
if (bareServer.shouldRoute(req)) {
bareServer.routeUpgrade(req, socket, head);
} else {
socket.end();
}
});
server.listen(PORT);
if (process.env.UNSAFE_CONTINUE)
process.on("uncaughtException", (err, origin) => {
console.error(`Critical error (${origin}):`);
console.error(err);
console.error("UNSAFELY CONTINUING EXECUTION");
console.error();
});
console.log(`Server running at http://localhost:${PORT}/.`);