From 2552e9d5f1c55d873a85752cf638ea70f91ae3a7 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Mon, 7 Oct 2019 17:55:53 +0100 Subject: [PATCH] Added optional parameter to use a custom function to generate IDs. The third parameter passed to PeerServer or ExpressPeerServer can optionally be a function that returns any string value, which will be used as the client ID. Checking whether the ID is already taken is not to be handled by the function. For instance: ExpressPeerServer(,,() => { return 'abc'; }) --- src/api/index.js | 4 ++-- src/api/v1/public/index.js | 5 +++-- src/index.js | 12 ++++++------ src/models/realm.js | 8 +++++--- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index 86f3a07..e1adce1 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -3,7 +3,7 @@ const cors = require('cors'); const bodyParser = require('body-parser'); const publicContent = require('../../app.json'); -module.exports = ({ config, realm, messageHandler }) => { +module.exports = ({ config, realm, messageHandler, randomId }) => { const authMiddleware = require('./middleware/auth')({ config, realm }); const app = express.Router(); @@ -16,7 +16,7 @@ module.exports = ({ config, realm, messageHandler }) => { res.send(publicContent); }); - app.use('/:key', require('./v1/public')({ config, realm })); + app.use('/:key', require('./v1/public')({ config, realm, randomId })); app.use('/:key/:id/:token', authMiddleware, jsonParser, require('./v1/calls')({ realm, messageHandler })); return app; diff --git a/src/api/v1/public/index.js b/src/api/v1/public/index.js index a47a371..8a09752 100644 --- a/src/api/v1/public/index.js +++ b/src/api/v1/public/index.js @@ -1,12 +1,13 @@ const express = require('express'); -module.exports = ({ config, realm }) => { +module.exports = ({ config, realm, randomId }) => { const app = express.Router(); // Retrieve guaranteed random ID. app.get('/id', (req, res) => { res.contentType = 'text/html'; - res.send(realm.generateClientId()); + console.error('src/api/v1/public/index.js', randomId); + res.send(realm.generateClientId(randomId)); }); // Get a list of all peers for a key, enabled by the `allowDiscovery` flag. diff --git a/src/index.js b/src/index.js index ea3d9e0..0ec5087 100644 --- a/src/index.js +++ b/src/index.js @@ -6,11 +6,11 @@ const defaultConfig = require('../config'); const WebSocketServer = require('./services/webSocketServer'); const Realm = require('./models/realm'); -const init = ({ app, server, options }) => { +const init = ({ app, server, options, randomId }) => { const config = options; const realm = new Realm(); const messageHandler = require('./messageHandler')({ realm }); - const api = require('./api')({ config, realm, messageHandler }); + const api = require('./api')({ config, realm, messageHandler, randomId }); const { startMessagesExpiration } = require('./services/messagesExpire')({ realm, config, messageHandler }); const checkBrokenConnections = require('./services/checkBrokenConnections')({ @@ -62,7 +62,7 @@ const init = ({ app, server, options }) => { checkBrokenConnections.start(); }; -function ExpressPeerServer(server, options) { +function ExpressPeerServer(server, options, randomId) { const app = express(); options = { @@ -80,13 +80,13 @@ function ExpressPeerServer(server, options) { 'can\'t start PeerServer'); } - init({ app, server, options }); + init({ app, server, options, randomId }); }); return app; } -function PeerServer(options = {}, callback) { +function PeerServer(options = {}, callback, randomId) { const app = express(); options = { @@ -114,7 +114,7 @@ function PeerServer(options = {}, callback) { server = http.createServer(app); } - const peerjs = ExpressPeerServer(server, options); + const peerjs = ExpressPeerServer(server, options, randomId); app.use(peerjs); if (callback) { diff --git a/src/models/realm.js b/src/models/realm.js index fbc4e84..e0355fd 100644 --- a/src/models/realm.js +++ b/src/models/realm.js @@ -42,10 +42,12 @@ class Realm { this._messageQueues.delete(id); } - generateClientId () { - const randomId = () => (Math.random().toString(36) + '0000000000000000000').substr(2, 16); + generateClientId (_randomId) { + const randomId = typeof _randomId === 'function' ? + () => _randomId : + () => (Math.random().toString(36) + '0000000000000000000').substr(2, 16); - let clientId = randomId(); + let clientId = randomId(randomId)(); while (this.getClientById(clientId)) { clientId = randomId();