From 156a39f7cb814b0bb249aafd936df9d546e61cb1 Mon Sep 17 00:00:00 2001 From: Sam Hadow Date: Sun, 16 Feb 2025 19:44:39 +0100 Subject: [PATCH] connect to socket on login --- package.json | 3 ++- src/app.js | 23 +++++++++++------------ src/controllers/account.js | 22 ++++------------------ src/controllers/chat.js | 0 src/controllers/main.js | 1 - src/routes/account.js | 4 ---- src/routes/chat.js | 0 src/socket.js | 14 ++++++++++++++ 8 files changed, 31 insertions(+), 36 deletions(-) create mode 100644 src/controllers/chat.js create mode 100644 src/routes/chat.js create mode 100644 src/socket.js diff --git a/package.json b/package.json index 61a9610..59abc63 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "express-session": "^1.18.1", "pg": "^8.13.1", "pug": "^3.0.3", - "socket.io": "^4.8.1" + "socket.io": "^4.8.1", + "socket.io-client": "^4.8.1" }, "devDependencies": { "@babel/preset-env": "^7.26.8", diff --git a/src/app.js b/src/app.js index c8d8eb3..da5b8d3 100644 --- a/src/app.js +++ b/src/app.js @@ -1,8 +1,9 @@ const express = require('express'); const app = express(); -var http = require('http').Server(app); +const http = require('http').Server(app); const port = process.env.PORT || 3333; -var io = require('socket.io')(http); +const { Server } = require('socket.io'); +const io = new Server(http); const cookieParser = require('cookie-parser'); //database @@ -34,18 +35,16 @@ app.use("/", routes); // bootstrap app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); - +// socket.io +io.on('connection', (socket) => { + console.log('A user connected'); + socket.on('disconnect', () => { + console.log('User disconnected'); + }); +}); //start server -var server = http.listen(port, () => { +const server = http.listen(port, () => { console.log(`server is running on port ${server.address().port}`); }); - -//socket.io -io.on('connection', (socket) => { - socket.on('chat message', (msg) => { - console.log(`message: ${msg}, id: ${socket.id}`); - }); -}); - diff --git a/src/controllers/account.js b/src/controllers/account.js index a8bb87a..125501d 100644 --- a/src/controllers/account.js +++ b/src/controllers/account.js @@ -1,26 +1,9 @@ const crypto = require('crypto'); const database = require("../db"); const authentication = require("../authentication"); +const socket = require('../socket').default; const accountController = { - getCookie: (req, res) => { - console.log("site loaded") - console.log(req.cookies) - let cookie = req.cookies.user; - if (!cookie) { - //crypto.randomBytes() instead of Math.random() for cryptographically secure random numbers - let randomBuffer = crypto.randomBytes(16); // 128bits of entropy - let randomNumber = randomBuffer.toString('hex'); - let options = { - maxAge: 86400000, // 1 day - httpOnly: true - } - // Set cookie - res.cookie("user", randomNumber, options); - console.log("cookie set"); - } - res.redirect('/'); - }, register: async (req, res) => { try { const { sharedSecret, publicKey } = req.body; @@ -40,6 +23,7 @@ const accountController = { } }, loginGetChallenge: async (req, res) => { + //crypto.randomBytes() instead of Math.random() for cryptographically secure random numbers let randomBuffer = crypto.randomBytes(16); let randomNumber = randomBuffer.toString('hex'); req.session.randomNumber = randomNumber; @@ -56,6 +40,8 @@ const accountController = { let validKey = authentication.verifySignature(msg, sig, publicKeys); if (validKey !== null) { req.session.publicKey = validKey; + socket.auth = { validKey }; + socket.connect(); return res.status(200).json({ message: "Challenge solved successfully" }); } else { return res.status(400).json({ error: "Challenge failed" }); diff --git a/src/controllers/chat.js b/src/controllers/chat.js new file mode 100644 index 0000000..e69de29 diff --git a/src/controllers/main.js b/src/controllers/main.js index 2137e33..942d46f 100644 --- a/src/controllers/main.js +++ b/src/controllers/main.js @@ -3,7 +3,6 @@ const path = require('path'); const mainController = { root: (req, res) => { let pubKey = req.session.publicKey; - console.log(pubKey); let isLoggedIn = typeof pubKey !== 'undefined'; res.render('index', {isLoggedIn, pubKey}); }, diff --git a/src/routes/account.js b/src/routes/account.js index 1d8c3e0..9b5b615 100644 --- a/src/routes/account.js +++ b/src/routes/account.js @@ -2,10 +2,6 @@ const express = require("express"); const accountController = require("../controllers/account"); const router = express.Router(); -router - .route("/cookie") - .get(accountController.getCookie); - router .route("/register") .post(accountController.register); diff --git a/src/routes/chat.js b/src/routes/chat.js new file mode 100644 index 0000000..e69de29 diff --git a/src/socket.js b/src/socket.js new file mode 100644 index 0000000..0dcdf2f --- /dev/null +++ b/src/socket.js @@ -0,0 +1,14 @@ +import { io } from "socket.io-client"; + +const URL = "http://localhost:3333"; +const socket = io(URL, { + autoConnect: false, + transports: ['websocket', 'polling'] +}); + +// log during dev +socket.onAny((event, ...args) => { + console.log(event, args); +}); + +export default socket;