diff --git a/rtc-server/auth.js b/rtc-server/auth.js index 74c6f65..1543fc2 100644 --- a/rtc-server/auth.js +++ b/rtc-server/auth.js @@ -13,6 +13,9 @@ exports.verify = function(token) { * @retusn false on failure */ console.log('given token: ', token) + const vconfig = { + clockTolerance: 3, + } try { const decoded = jsonwebtoken.verify(token, USER_HMAC, vconfig); return 'user' @@ -21,7 +24,6 @@ exports.verify = function(token) { const decoded = jsonwebtoken.verify(token, SERVER_HMAC, {ignoreNotBefore: true}) return 'server' } catch (err) { - console.log('failed server check: ', err) return false } } diff --git a/rtc-server/main.js b/rtc-server/main.js index 9c6c007..6d0b6a6 100644 --- a/rtc-server/main.js +++ b/rtc-server/main.js @@ -1,43 +1,44 @@ const ws = require('ws') -const peersapi = require('./peers.js') const auth = require('./auth.js') -const server = new ws.Server({ port: 5648 }) -const peers = new peersapi.PeerMap() +const server = new ws.Server({ + port: 5648, + clientTracking: true +}) - -server.on('connection', function(ws, req) { +server.on('connection', function(socket, req) { let [jwt, path] = auth.prepare_auth(req) let conn = auth.verify(jwt) if(conn == 'server') { console.log('[WSS] New server connection') - // Peer map initialization - ws.on('open', function() { - peers.add_server(ws) - }) - ws.on('close', function() { - console.log('server left') - peers.remove_server(ws) + + socket.on('close', function() { + console.log('[WSS] Server connection closed') }) - ws.on('message', function(message) { - peers.notify(message) + socket.on('message', function(message) { + // do some parsing, then emit to everyone + server.clients.forEach(client => { + if (client !== socket && client.readyState === ws.OPEN) { + client.send(message) + } + }) }) } else if(conn == 'user') { - ws.on('open', function() { - console.log('adding with path', req.url) - peers.add_user(ws, req.url) + socket.on('message', function(message) { + // some kind of parsing here + // no actual emitting to all users + server.clients.forEach(client => { + if (client !== socket && client.readyState === ws.OPEN) { + client.send(message) + } + }) }) - ws.on('close', function() { - peers.remove_user(ws) - }) - - console.log('[WSS] New user conncetion') } else { - console.log('[WSS] No valid auth') - ws.close() + console.log('[WSS] No valid auth', conn) + socket.close() } }) diff --git a/rtc-server/package.json b/rtc-server/package.json index e7bdb21..388a0da 100644 --- a/rtc-server/package.json +++ b/rtc-server/package.json @@ -4,7 +4,7 @@ "description": "RTC for Freechat", "main": "main.js", "scripts": { - "start": "node main.js", + "start": "node main.js", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { diff --git a/rtc-server/peers.js b/rtc-server/peers.js deleted file mode 100644 index e56680d..0000000 --- a/rtc-server/peers.js +++ /dev/null @@ -1,69 +0,0 @@ -class Event { - /** - * @param raw {String} - * - */ - constructor(raw) { - this._raw = raw - let obj = JSON.parse(raw) - this.type = obj['type'] - if(this.type == 'message') { - this.message = obj['message'] - } else if (this.type == 'channel') { - this.channel = obj['channel'] - } - } -} - -class Peer { - /* - * @param type {String} - * @param channel {String} - */ - constructor(type, channel) { - this.type = type - this.channel = channel - } -} - -exports.PeerMap = class { - /* - * @field users Map - * @field server Map - */ - constructor() { - // Map of sockets -> Peer - this.users = {} - this.server = {} - } - - /** - * @params message {String|JSON} Used for emitting server messages to user peers - */ - notify(message) { - let e_type = new Event(message) - if(e_type.type) { - for(const conn of Object.keys(this.users)) { - } - } else { - console.log('[WSS] Invalid event type given from server') - } - } - - // As the names imply these methods help maintain the peer map - add_server(socket) { - this.server[socket] = new Peer('server', null) - } - remove_server(socket) { - delete this.server[socket] - } - add_user(socket, channel) { - this.users[socket] = new Peer('user', channel) - } - remove_user(socket) { - delete this.user[socket] - } - -} - -