From 817c5250154da97089787f342ec3ea9746e864b3 Mon Sep 17 00:00:00 2001
From: Cris Stringfellow <22254235+crislin2046@users.noreply.github.com>
Date: Thu, 2 May 2024 00:45:17 +0800
Subject: [PATCH] ok
---
server.js | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 120 insertions(+)
create mode 100644 server.js
diff --git a/server.js b/server.js
new file mode 100644
index 0000000..b757504
--- /dev/null
+++ b/server.js
@@ -0,0 +1,120 @@
+const express = require('express');
+const { Server } = require('ws');
+const https = require('https');
+const fs = require('fs');
+const readline = require('readline');
+
+const SSLCERTS_DIR = path.resolve(os.homedir(), 'sslcerts');
+const app = express();
+
+// SSL credentials
+const options = {
+ key: fs.readFileSync(path.resolve(SSLCERTS_DIR, 'server.key')),
+ cert: fs.readFileSync(path.resolve(SSLCERTS_DIR, 'server.cert'))
+};
+
+const server = https.createServer(options, app);
+const wss = new Server({ server });
+
+app.get('/', (req, res) => {
+ res.send(`
+
+
+
+
+
+ Jellyness - WebRTC Chat
+
+
+ WebRTC Chat
+
+
+
+
+
+ `);
+});
+
+let adminId = null;
+const peers = new Map();
+
+wss.on('connection', function(ws) {
+ const id = Date.now();
+ let nickname = `User${id}`;
+
+ console.log(`Secure connection received: ${id}`);
+ peers.set(id, { ws, nickname });
+
+ ws.on('message', function(message) {
+ console.log(`Received: ${message} from ${nickname}`);
+
+ if (message.startsWith('/name ')) {
+ const newName = message.split(' ')[1];
+ peers.get(id).nickname = newName;
+ ws.send(`Name changed to ${newName}`);
+ return;
+ }
+
+ const formattedMessage = `${id === adminId ? '*' : ''}${nickname}: ${message}`;
+ for (let [peerId, peer] of peers) {
+ if (peer.ws.readyState === ws.OPEN) {
+ peer.ws.send(formattedMessage);
+ }
+ }
+ });
+
+ ws.on('close', () => {
+ peers.delete(id);
+ console.log(`Connection closed: ${id}`);
+ });
+});
+
+// REPL for command line interaction
+const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+ prompt: 'talk> '
+});
+
+adminId = Date.now(); // Assigning admin ID on start
+peers.set(adminId, { ws: null, nickname: 'Admin' });
+
+rl.prompt();
+
+rl.on('line', (line) => {
+ if (line.startsWith('/name ')) {
+ const newName = line.split(' ')[1];
+ peers.get(adminId).nickname = newName;
+ console.log(`Admin name changed to ${newName}`);
+ rl.prompt();
+ return;
+ }
+
+ const message = `*${peers.get(adminId).nickname}: ${line}`;
+ for (let [id, peer] of peers) {
+ if (peer.ws && peer.ws.readyState === peer.ws.OPEN) {
+ peer.ws.send(message);
+ }
+ }
+ rl.prompt();
+});
+
+server.listen(8999, () => {
+ console.log('Secure server running on https://localhost:3000');
+});
+