connect to socket on login
This commit is contained in:
		| @@ -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", | ||||
|   | ||||
							
								
								
									
										23
									
								
								src/app.js
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								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}`); | ||||
|     }); | ||||
| }); | ||||
|  | ||||
|   | ||||
| @@ -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
									
								
							
							
						
						
									
										0
									
								
								src/controllers/chat.js
									
									
									
									
									
										Normal 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}); | ||||
|     }, | ||||
|   | ||||
| @@ -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
									
								
							
							
						
						
									
										0
									
								
								src/routes/chat.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										14
									
								
								src/socket.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/socket.js
									
									
									
									
									
										Normal 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; | ||||
		Reference in New Issue
	
	Block a user