diff --git a/server/lib/Room.js b/server/lib/Room.js index b6ee85b..4950123 100644 --- a/server/lib/Room.js +++ b/server/lib/Room.js @@ -3,7 +3,6 @@ const axios = require('axios'); const Logger = require('./Logger'); const Lobby = require('./Lobby'); const { v4: uuidv4 } = require('uuid'); -const jwt = require('jsonwebtoken'); const userRoles = require('../userRoles'); const config = require('../config/config'); @@ -128,31 +127,15 @@ class Room extends EventEmitter { logger.info('handlePeer() [peer:"%s", roles:"%s", token:"%s"]', peer.id, peer.roles, token); - let verifiedPeer = false; + // This peer is returning, reconnect + const verifiedPeer = token && token === this._uuid; - if (token) - { - try - { - const decoded = jwt.verify(token, this._uuid); - - if (decoded.id === peer.id) - verifiedPeer = true; - } - catch (err) - { - logger.warn('handlePeer() | invalid token'); - } - } - - // Allow reconnections, remove old peer + // Should not happen if (this._peers[peer.id]) { logger.warn( 'handleConnection() | there is already a peer with same peerId [peer:"%s"]', peer.id); - - this._peers[peer.id].close(); } // Returning user @@ -373,9 +356,7 @@ class Room extends EventEmitter } else { - const token = jwt.sign({ id: peer.id }, this._uuid, { noTimestamp: true }); - - peer.socket.handshake.session.token = token; + peer.socket.handshake.session.token = this._uuid; peer.socket.handshake.session.save(); diff --git a/server/package.json b/server/package.json index ae1f3b9..50a6831 100644 --- a/server/package.json +++ b/server/package.json @@ -25,7 +25,6 @@ "express-socket.io-session": "^1.3.5", "helmet": "^3.21.2", "ims-lti": "^3.0.2", - "jsonwebtoken": "^8.5.1", "mediasoup": "^3.5.5", "openid-client": "^3.7.3", "passport": "^0.4.0", diff --git a/server/server.js b/server/server.js index 2e50a8c..5e19248 100755 --- a/server/server.js +++ b/server/server.js @@ -464,11 +464,30 @@ async function runWebSocketServer() queue.push(async () => { - const room = await getOrCreateRoom({ roomId }); - const peer = new Peer({ id: peerId, roomId, socket }); - const { token } = socket.handshake.session; + const room = await getOrCreateRoom({ roomId }); + + let peer = peers.get(peerId); + + if (peer) + { + if (token) + { + peer.close(); + + peer = null; + } + else + { + socket.disconnect(true); + + return; + } + } + + peer = new Peer({ id: peerId, roomId, socket }); + peers.set(peerId, peer); peer.on('close', () => peers.delete(peerId));