diff --git a/index.js b/index.js index 15bae80..9755c6c 100644 --- a/index.js +++ b/index.js @@ -2,23 +2,24 @@ const express = require('express'); const session = require('express-session'); const port = 3000; const app = express(); +const cookieParser = require('cookie-parser'); const path = require('path'); const { insertUser, isUserExists, client } = require('./backend/db.js'); const bcrypt = require('bcrypt'); const saltRounds = 10; - const { Server } = require('socket.io'); const { createServer } = require('node:http'); const server = createServer(app); const io = new Server(server); const jwt = require('jsonwebtoken'); +const {decode} = require("jsonwebtoken"); const jwtSecret = process.env.JWT_SECRET; require('dotenv').config(); - +app.use(cookieParser()); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(express.static(path.join(__dirname, 'public'))); @@ -46,44 +47,65 @@ app.post('/auth/signup', async (req, res) => { // serving the login page app.get('/login', (req, res) => { - res.sendFile(path.join(__dirname, '/frontend/routes/login.html')); + const token = req.cookies.token; + if (token) { + res.json({ Error: 'Already logged in' }); + } else { + res.sendFile(path.join(__dirname, '/frontend/routes/login.html')); + } }); // serving the signup page app.get('/signup', (req, res) => { + const token = req.cookies.token; + if(token){ + res.json({Error: 'Already logged in'}); + } else res.sendFile(path.join(__dirname, '/frontend/routes/signup.html')); }); app.get('/auth/user', (req, res) => { - if (req.session.loggedin) { - res.json({ username: req.session.username }); - } else { - res.status(401).json({ message: 'Unauthorized' }); + const token = req.cookies.token; + if(token) { + jwt.verify(token, jwtSecret, (err, user) => { + if(err) { + return res.status(403).send('Unauthorized'); + } else { + const username = user.username; + res.json({username}); + } + }); } }); // serving the chat page if logged in app.get('/', (req, res) => { - const username = req.session.username; + const token = req.cookies.token; + if (token) { + jwt.verify(token, jwtSecret, (err, user) => { + if (err) { + return res.status(403).send('Unauthorized'); + } else { + const username = user.username; + res.sendFile(path.join(__dirname, '/frontend/routes/chat.html')); + // socket io connection + io.on('connection', (socket) => { + console.log(username + ' connected'); - if (req.session.loggedin) { - res.sendFile(path.join(__dirname, '/frontend/routes/chat.html')); - // socket io connection - io.on('connection', (socket) => { - console.log(username + ' connected'); + // disconnect event + socket.on('disconnect', () => { + console.log(username + 'have disconnected'); + }); - // disconnect event - socket.on('disconnect', () => { - console.log(username + 'have disconnected'); - }); + // chat message event + socket.on('chat message', (msg) => { + const message = username + ': ' + msg; + console.log(message); + io.emit('chat message', message); - // chat message event - socket.on('chat message', (msg) => { - const message = username + ': ' + msg; - console.log(message); - io.emit('chat message', message); - - }); + }); + }); + } }); } else { diff --git a/package.json b/package.json index 844055a..9b3f40a 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "private": true, "dependencies": { "bcrypt": "^5.1.1", + "cookie-parser": "^1.4.6", "dotenv": "^16.4.5", "express": "^4.19.2", "express-session": "^1.18.0",