2024-01-05 02:22:15 +01:00
|
|
|
const { Telemetry } = require("../../models/telemetry");
|
2024-04-01 22:56:35 +02:00
|
|
|
const { CommunicationKey } = require("../comKey");
|
2024-01-05 02:22:15 +01:00
|
|
|
const setupTelemetry = require("../telemetry");
|
|
|
|
|
|
|
|
function bootSSL(app, port = 3001) {
|
|
|
|
try {
|
|
|
|
console.log(
|
|
|
|
`\x1b[33m[SSL BOOT ENABLED]\x1b[0m Loading the certificate and key for HTTPS mode...`
|
|
|
|
);
|
|
|
|
const fs = require("fs");
|
|
|
|
const https = require("https");
|
|
|
|
const privateKey = fs.readFileSync(process.env.HTTPS_KEY_PATH);
|
|
|
|
const certificate = fs.readFileSync(process.env.HTTPS_CERT_PATH);
|
|
|
|
const credentials = { key: privateKey, cert: certificate };
|
2024-05-17 23:03:25 +02:00
|
|
|
const server = https.createServer(credentials, app);
|
2024-01-05 02:22:15 +01:00
|
|
|
|
2024-05-17 23:03:25 +02:00
|
|
|
server
|
2024-01-05 02:22:15 +01:00
|
|
|
.listen(port, async () => {
|
|
|
|
await setupTelemetry();
|
2024-04-01 22:56:35 +02:00
|
|
|
new CommunicationKey(true);
|
2024-01-05 02:22:15 +01:00
|
|
|
console.log(`Primary server in HTTPS mode listening on port ${port}`);
|
|
|
|
})
|
|
|
|
.on("error", catchSigTerms);
|
2024-05-17 23:03:25 +02:00
|
|
|
|
|
|
|
require("express-ws")(app, server); // Apply same certificate + server for WSS connections
|
|
|
|
return { app, server };
|
2024-01-05 02:22:15 +01:00
|
|
|
} catch (e) {
|
|
|
|
console.error(
|
|
|
|
`\x1b[31m[SSL BOOT FAILED]\x1b[0m ${e.message} - falling back to HTTP boot.`,
|
|
|
|
{
|
|
|
|
ENABLE_HTTPS: process.env.ENABLE_HTTPS,
|
|
|
|
HTTPS_KEY_PATH: process.env.HTTPS_KEY_PATH,
|
|
|
|
HTTPS_CERT_PATH: process.env.HTTPS_CERT_PATH,
|
|
|
|
stacktrace: e.stack,
|
|
|
|
}
|
|
|
|
);
|
|
|
|
return bootHTTP(app, port);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function bootHTTP(app, port = 3001) {
|
|
|
|
if (!app) throw new Error('No "app" defined - crashing!');
|
|
|
|
|
|
|
|
app
|
|
|
|
.listen(port, async () => {
|
|
|
|
await setupTelemetry();
|
2024-04-01 22:56:35 +02:00
|
|
|
new CommunicationKey(true);
|
2024-01-05 02:22:15 +01:00
|
|
|
console.log(`Primary server in HTTP mode listening on port ${port}`);
|
|
|
|
})
|
|
|
|
.on("error", catchSigTerms);
|
2024-05-17 23:03:25 +02:00
|
|
|
|
|
|
|
return { app, server: null };
|
2024-01-05 02:22:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function catchSigTerms() {
|
|
|
|
process.once("SIGUSR2", function () {
|
|
|
|
Telemetry.flush();
|
|
|
|
process.kill(process.pid, "SIGUSR2");
|
|
|
|
});
|
|
|
|
process.on("SIGINT", function () {
|
|
|
|
Telemetry.flush();
|
|
|
|
process.kill(process.pid, "SIGINT");
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
bootHTTP,
|
|
|
|
bootSSL,
|
|
|
|
};
|