connect to socket on login
This commit is contained in:
parent
2073b81bbe
commit
156a39f7cb
@ -16,7 +16,8 @@
|
|||||||
"express-session": "^1.18.1",
|
"express-session": "^1.18.1",
|
||||||
"pg": "^8.13.1",
|
"pg": "^8.13.1",
|
||||||
"pug": "^3.0.3",
|
"pug": "^3.0.3",
|
||||||
"socket.io": "^4.8.1"
|
"socket.io": "^4.8.1",
|
||||||
|
"socket.io-client": "^4.8.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/preset-env": "^7.26.8",
|
"@babel/preset-env": "^7.26.8",
|
||||||
|
23
src/app.js
23
src/app.js
@ -1,8 +1,9 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const app = express();
|
const app = express();
|
||||||
var http = require('http').Server(app);
|
const http = require('http').Server(app);
|
||||||
const port = process.env.PORT || 3333;
|
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');
|
const cookieParser = require('cookie-parser');
|
||||||
|
|
||||||
//database
|
//database
|
||||||
@ -34,18 +35,16 @@ app.use("/", routes);
|
|||||||
// bootstrap
|
// bootstrap
|
||||||
app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css'));
|
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
|
//start server
|
||||||
var server = http.listen(port, () => {
|
const server = http.listen(port, () => {
|
||||||
console.log(`server is running on port ${server.address().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 crypto = require('crypto');
|
||||||
const database = require("../db");
|
const database = require("../db");
|
||||||
const authentication = require("../authentication");
|
const authentication = require("../authentication");
|
||||||
|
const socket = require('../socket').default;
|
||||||
|
|
||||||
const accountController = {
|
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) => {
|
register: async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { sharedSecret, publicKey } = req.body;
|
const { sharedSecret, publicKey } = req.body;
|
||||||
@ -40,6 +23,7 @@ const accountController = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
loginGetChallenge: async (req, res) => {
|
loginGetChallenge: async (req, res) => {
|
||||||
|
//crypto.randomBytes() instead of Math.random() for cryptographically secure random numbers
|
||||||
let randomBuffer = crypto.randomBytes(16);
|
let randomBuffer = crypto.randomBytes(16);
|
||||||
let randomNumber = randomBuffer.toString('hex');
|
let randomNumber = randomBuffer.toString('hex');
|
||||||
req.session.randomNumber = randomNumber;
|
req.session.randomNumber = randomNumber;
|
||||||
@ -56,6 +40,8 @@ const accountController = {
|
|||||||
let validKey = authentication.verifySignature(msg, sig, publicKeys);
|
let validKey = authentication.verifySignature(msg, sig, publicKeys);
|
||||||
if (validKey !== null) {
|
if (validKey !== null) {
|
||||||
req.session.publicKey = validKey;
|
req.session.publicKey = validKey;
|
||||||
|
socket.auth = { validKey };
|
||||||
|
socket.connect();
|
||||||
return res.status(200).json({ message: "Challenge solved successfully" });
|
return res.status(200).json({ message: "Challenge solved successfully" });
|
||||||
} else {
|
} else {
|
||||||
return res.status(400).json({ error: "Challenge failed" });
|
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 = {
|
const mainController = {
|
||||||
root: (req, res) => {
|
root: (req, res) => {
|
||||||
let pubKey = req.session.publicKey;
|
let pubKey = req.session.publicKey;
|
||||||
console.log(pubKey);
|
|
||||||
let isLoggedIn = typeof pubKey !== 'undefined';
|
let isLoggedIn = typeof pubKey !== 'undefined';
|
||||||
res.render('index', {isLoggedIn, pubKey});
|
res.render('index', {isLoggedIn, pubKey});
|
||||||
},
|
},
|
||||||
|
@ -2,10 +2,6 @@ const express = require("express");
|
|||||||
const accountController = require("../controllers/account");
|
const accountController = require("../controllers/account");
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
router
|
|
||||||
.route("/cookie")
|
|
||||||
.get(accountController.getCookie);
|
|
||||||
|
|
||||||
router
|
router
|
||||||
.route("/register")
|
.route("/register")
|
||||||
.post(accountController.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