From 1d3b617823a0221353efc5873074c7a1d1d2e320 Mon Sep 17 00:00:00 2001 From: Myx Date: Sun, 15 Oct 2023 13:09:03 +0200 Subject: [PATCH] Added ssl support --- .gitignore | 4 +++- client/certs/create-cert.sh | 13 +++++++++++++ client/webserver.ts | 24 ++++++++++++++++++++++-- package-lock.json | 22 ++++++++++++++++++++++ package.json | 3 +++ 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 client/certs/create-cert.sh diff --git a/.gitignore b/.gitignore index 171f060..d323b7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ node_modules .env !sounds/badsalt.mp3 -sounds/* \ No newline at end of file +sounds/* +cert.pem +key.pem \ No newline at end of file diff --git a/client/certs/create-cert.sh b/client/certs/create-cert.sh new file mode 100644 index 0000000..2681896 --- /dev/null +++ b/client/certs/create-cert.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Generate a private key +openssl genrsa -out key.pem 2048 + +# Generate a CSR using the private key +openssl req -new -key key.pem -out csr.pem + +# Generate a certificate using the private key and CSR +openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem + +# Delete the CSR, we don't need it anymore +rm csr.pem \ No newline at end of file diff --git a/client/webserver.ts b/client/webserver.ts index c7a6b29..db2ff7a 100644 --- a/client/webserver.ts +++ b/client/webserver.ts @@ -7,6 +7,8 @@ import ytdl from 'ytdl-core'; import fs from 'fs'; import bodyParser from 'body-parser'; import ffmpeg from 'fluent-ffmpeg'; +import https from 'https'; +import ip from 'ip'; const app = express(); const storage = diskStorage({ @@ -121,7 +123,25 @@ app.use(express.static(path.join(__dirname, "web"))); export function startServer() { const port = 8080; - app.listen(port, () => { - console.log(LoggerColors.Cyan,`Add sounds at http://localhost:${port}, or drop in the sounds folder.`); + let server; + let ssl: "https" | "http" = "http"; + + try { + const options = { + requestCert: true, + rejectUnauthorized: false, + key: fs.readFileSync(path.join(__dirname, '/certs/key.pem')), + cert: fs.readFileSync(path.join(__dirname, '/certs/cert.pem')), + }; + server = https.createServer(options, app); + ssl = "https"; + } catch (error) { + console.log(LoggerColors.Yellow, 'Could not find SSL certificates, falling back to http.'); + server = app; + ssl = "http"; + } + + server.listen(port, () => { + console.log(`Server started at ${ssl}://${ip.address()}:${port}`); }); } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9fc0da5..ad7082b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,8 @@ "dotenv": "~16.3.1", "express": "~4.18.2", "fluent-ffmpeg": "^2.1.2", + "https": "^1.0.0", + "ip": "^1.1.8", "libsodium-wrappers": "~0.7.13", "multer": "~1.4.5-lts.1", "node-schedule": "~2.1.1", @@ -28,6 +30,7 @@ }, "devDependencies": { "@types/express": "~4.17.18", + "@types/ip": "^1.1.1", "@types/node-schedule": "^2.1.1" } }, @@ -264,6 +267,15 @@ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==" }, + "node_modules/@types/ip": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.1.tgz", + "integrity": "sha512-/v+XZuKNBQHJi3dKeFt9LySLzWNkgmaYRtnFfg27Ag0MO9tQLzHUuAA8zOhPtbDvDGkcnZGr4pVZQPGNft/WYA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", @@ -808,6 +820,11 @@ "node": ">= 0.8" } }, + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -824,6 +841,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", diff --git a/package.json b/package.json index 2b30f24..020a722 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "dotenv": "~16.3.1", "express": "~4.18.2", "fluent-ffmpeg": "^2.1.2", + "https": "^1.0.0", + "ip": "^1.1.8", "libsodium-wrappers": "~0.7.13", "multer": "~1.4.5-lts.1", "node-schedule": "~2.1.1", @@ -29,6 +31,7 @@ }, "devDependencies": { "@types/express": "~4.17.18", + "@types/ip": "^1.1.1", "@types/node-schedule": "^2.1.1" } }