const express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const cors = require('cors'); const session = require('express-session'); const app = express(); const server = http.createServer(app); const io = socketIo(server, { cors: { origin: "http://localhost:5173", methods: ["GET", "POST"], credentials: true } }); app.use(cors({ origin: "http://localhost:5173", methods: ["GET", "POST"], credentials: true })); app.use(express.json()); app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: false, cookie: { secure: false } })); let users = {}; let admins = {}; let messages = []; app.post('/register', (req, res) => { const { id, name } = req.body; if (!id || !name) { return res.status(400).json({ error: 'ID and Name are required' }); } users[id] = { id, name }; res.status(200).json(users); }); app.get('/users', (req, res) => { res.status(200).json(users); }); app.post('/registerAdmin', (req, res) => { const { name, password } = req.body; if (!name || !password) { return res.status(400).json({ error: 'Name and Password are required' }); } if (admins[name]) { return res.status(400).json({ error: 'Admin already exists' }); } admins[name] = { password }; res.status(200).json({ message: 'Admin successfully registered' }); }); app.post('/loginAdmin', (req, res) => { const { name, password } = req.body; if (!name || !password) { return res.status(400).json({ error: 'Name and Password are required' }); } if (!admins[name] || admins[name].password !== password) { return res.status(400).json({ error: 'Invalid credentials' }); } req.session.user = { name }; res.status(200).json({ message: 'Login successful' }); }); app.post('/logoutAdmin', (req, res) => { req.session.destroy(err => { if (err) { return res.status(500).json({ error: 'Logout failed' }); } res.status(200).json({ message: 'Logout successful' }); }); }); const checkAuth = (req, res, next) => { if (!req.session.user) { return res.status(401).json({ error: 'Not authenticated' }); } next(); }; app.post('/sendMessage', checkAuth, (req, res) => { const { content, recipient } = req.body; if (!content || !recipient) { return res.status(400).json({ error: 'Content and Recipient are required' }); } const message = { content, sender: req.session.user.name, recipient }; messages.push(message); io.emit('receiveMessage', message); res.status(200).json(message); }); app.post('/endConversation', checkAuth, (req, res) => { const { recipient } = req.body; if (!recipient) { return res.status(400).json({ error: 'Recipient is required' }); } messages = messages.filter(msg => msg.recipient !== recipient); io.emit('receiveMessage', { type: 'conversationEnded', recipient }); res.status(200).json({ message: 'Conversation ended' }); }); app.post('/deleteUser', checkAuth, (req, res) => { const { id } = req.body; if (!id) { return res.status(400).json({ error: 'User ID is required' }); } delete users[id]; messages = messages.filter(msg => msg.recipient !== id); io.emit('updateUsers', Object.values(users)); io.emit('receiveMessage', { type: 'userDeleted', id }); res.status(200).json({ message: 'User successfully deleted' }); }); io.on('connection', (socket) => { console.log('User connected'); socket.on('sendMessage', (message) => { io.emit('receiveMessage', message); }); socket.on('endConversation', (data) => { const { recipient } = data; messages = messages.filter(msg => msg.recipient !== recipient); io.emit('receiveMessage', { type: 'conversationEnded', recipient }); }); socket.on('disconnect', () => { console.log('User disconnected'); }); }); server.listen(3001, () => { console.log('Server running on port 3001'); });