connect to socket on login
This commit is contained in:
parent
2073b81bbe
commit
156a39f7cb
@ -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",
|
||||
|
25
src/app.js
25
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'));
|
||||
|
||||
|
||||
|
||||
|
||||
//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}`);
|
||||
});
|
||||
|
@ -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;
|
Loading…
x
Reference in New Issue
Block a user