Attempt to make websocket compatible with TLS

This commit is contained in:
Radon Rosborough 2020-06-11 17:54:12 -06:00
parent 92831f5f51
commit 466f897c58
1 changed files with 34 additions and 26 deletions

View File

@ -16,7 +16,7 @@ const port = parseInt(process.env.PORT) || 6119;
const tlsPort = parseInt(process.env.TLS_PORT) || 6120; const tlsPort = parseInt(process.env.TLS_PORT) || 6120;
const useTLS = process.env.TLS ? true : false; const useTLS = process.env.TLS ? true : false;
const app = ws(express()).app; const app = express();
app.set("query parser", (qs: string) => new URLSearchParams(qs)); app.set("query parser", (qs: string) => new URLSearchParams(qs));
app.set("view engine", "ejs"); app.set("view engine", "ejs");
@ -41,29 +41,37 @@ app.get("/:lang", (req, res) => {
}); });
app.use("/css", express.static(appRoot.path + "/frontend/styles")); app.use("/css", express.static(appRoot.path + "/frontend/styles"));
app.use("/js", express.static(appRoot.path + "/frontend/out")); app.use("/js", express.static(appRoot.path + "/frontend/out"));
app.ws("/api/v1/ws", (ws, req) => {
const lang = getQueryParams(req).get("lang"); function addWebsocket(baseApp) {
if (!lang) { const app = ws(baseApp).app;
ws.send( app.ws("/api/v1/ws", (ws, req) => {
JSON.stringify({ event: "error", errorMessage: "No language specified" }) const lang = getQueryParams(req).get("lang");
); if (!lang) {
ws.close(); ws.send(
} else if (!langs[lang]) { JSON.stringify({
ws.send( event: "error",
JSON.stringify({ errorMessage: "No language specified",
event: "error", })
errorMessage: `No such language: ${lang}`, );
}) ws.close();
); } else if (!langs[lang]) {
ws.close(); ws.send(
} else { JSON.stringify({
new api.Session(ws, getQueryParams(req).get("lang")); event: "error",
} errorMessage: `No such language: ${lang}`,
}); })
);
ws.close();
} else {
new api.Session(ws, getQueryParams(req).get("lang"));
}
});
return app;
}
if (useTLS) { if (useTLS) {
https addWebsocket(
.createServer( https.createServer(
{ {
key: Buffer.from(process.env.TLS_PRIVATE_KEY, "base64").toString( key: Buffer.from(process.env.TLS_PRIVATE_KEY, "base64").toString(
"ascii" "ascii"
@ -74,9 +82,9 @@ if (useTLS) {
}, },
app app
) )
.listen(tlsPort, host, () => ).listen(tlsPort, host, () =>
console.log(`Listening on https://${host}:${tlsPort}`) console.log(`Listening on https://${host}:${tlsPort}`)
); );
http http
.createServer((req, res) => { .createServer((req, res) => {
res.writeHead(301, { res.writeHead(301, {
@ -88,7 +96,7 @@ if (useTLS) {
console.log(`Listening on http://${host}:${port}`) console.log(`Listening on http://${host}:${port}`)
); );
} else { } else {
app.listen(port, host, () => addWebsocket(app).listen(port, host, () =>
console.log(`Listening on http://${host}:${port}`) console.log(`Listening on http://${host}:${port}`)
); );
} }