connect to socket on login

This commit is contained in:
Sam Hadow 2025-02-16 19:44:39 +01:00
parent 2073b81bbe
commit 156a39f7cb
8 changed files with 31 additions and 36 deletions

View File

@ -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",

View File

@ -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'));
//start server
var server = http.listen(port, () => {
console.log(`server is running on port ${server.address().port}`);
});
//socket.io
// socket.io
io.on('connection', (socket) => {
socket.on('chat message', (msg) => {
console.log(`message: ${msg}, id: ${socket.id}`);
console.log('A user connected');
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
//start server
const server = http.listen(port, () => {
console.log(`server is running on port ${server.address().port}`);
});

View File

@ -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" });

0
src/controllers/chat.js Normal file
View File

View File

@ -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});
},

View File

@ -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);

0
src/routes/chat.js Normal file
View File

14
src/socket.js Normal file
View File

@ -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;