From 84095522751e3b2cb3a5c9575a3bedbc0c5f6813 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Thu, 3 Oct 2019 11:54:53 +0100 Subject: [PATCH 01/11] Added NPM installation instructions. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 5e64843..9aab426 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,10 @@ $> peerjs --port 9000 --key peerjs --path /myapp Or, create a custom server: +```bash +$> npm install peerjs-server +``` + ```javascript const PeerServer = require('peer').PeerServer; const server = PeerServer({port: 9000, path: '/myapp'}); From 910bf3f674e58a02948a6aaa951ac947c289ce1c Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Thu, 3 Oct 2019 12:01:56 +0100 Subject: [PATCH 02/11] Changed to ES6 import syntax. --- README.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9aab426..9bfdb74 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,8 @@ $> npm install peerjs-server ``` ```javascript -const PeerServer = require('peer').PeerServer; +import {PeerServer} from 'peerjs-server'; + const server = PeerServer({port: 9000, path: '/myapp'}); ``` @@ -46,8 +47,8 @@ Connecting to the server from PeerJS: Using HTTPS: Simply pass in PEM-encoded certificate and key. ```javascript -const fs = require('fs'); -const PeerServer = require('peer').PeerServer; +import fs from 'fs'; +import {PeerServer} from 'peerjs-server'; const server = PeerServer({ port: 9000, @@ -66,17 +67,18 @@ The option is passed verbatim to the if it is truthy. ```javascript -const PeerServer = require('peer').PeerServer; +import {PeerServer} from 'peerjs-server'; + const server = PeerServer({port: 9000, path: '/myapp', proxied: true}); ``` ### Combining with existing express app ```javascript -const express = require('express'); -const app = express(); -const ExpressPeerServer = require('peer').ExpressPeerServer; +import express from 'express'; +import {ExpressPeerServer} from 'peerjs-server'; +const app = express(); app.get('/', (req, res, next) => { res.send('Hello world!'); }); // ======= @@ -93,7 +95,9 @@ app.use('/api', peerserver); // == OR == -const server = require('http').createServer(app); +import http from 'http'; + +const server = http.createServer(app); const peerserver = ExpressPeerServer(server, options); app.use('/peerjs', peerserver); From 2552e9d5f1c55d873a85752cf638ea70f91ae3a7 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Mon, 7 Oct 2019 17:55:53 +0100 Subject: [PATCH 03/11] 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(); From ae5452b2e1b5203b37089b9e5e0ff5dacd1e5d55 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Tue, 8 Oct 2019 15:30:35 +0100 Subject: [PATCH 04/11] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9bfdb74..3564c94 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ # PeerServer: A server for PeerJS # +This fork of peerjs-server adds functionality to set a custom ID generation fucntion. [Commit](https://github.com/ajmar/peerjs-server/commit/2552e9d) + PeerServer helps broker connections between PeerJS clients. Data is not proxied through the server. ## [https://peerjs.com](https://peerjs.com) From e5c7ab517f809d489b5623e5bc06174e6efe7c65 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Wed, 23 Oct 2019 03:26:47 +0100 Subject: [PATCH 05/11] Fixed bug where using the original randomId function would break. --- src/models/realm.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/models/realm.js b/src/models/realm.js index e0355fd..e9221ce 100644 --- a/src/models/realm.js +++ b/src/models/realm.js @@ -43,9 +43,13 @@ class Realm { } generateClientId (_randomId) { + const originalRandomId = () => { + return (Math.random().toString(36) + '0000000000000000000').substr(2, 16); + } + const randomId = typeof _randomId === 'function' ? () => _randomId : - () => (Math.random().toString(36) + '0000000000000000000').substr(2, 16); + () => originalRandomId; let clientId = randomId(randomId)(); From 5ad788c41970b47c01b1f6e22a73142d3c1fd06a Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Wed, 23 Oct 2019 03:28:38 +0100 Subject: [PATCH 06/11] Removed unneeded console.error. --- src/api/v1/public/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/api/v1/public/index.js b/src/api/v1/public/index.js index 8a09752..78473e1 100644 --- a/src/api/v1/public/index.js +++ b/src/api/v1/public/index.js @@ -6,7 +6,6 @@ module.exports = ({ config, realm, randomId }) => { // Retrieve guaranteed random ID. app.get('/id', (req, res) => { res.contentType = 'text/html'; - console.error('src/api/v1/public/index.js', randomId); res.send(realm.generateClientId(randomId)); }); From 2eb7f9cfb198cd083bf53adcc6984360123a89cb Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Fri, 31 Jan 2020 10:11:49 +0000 Subject: [PATCH 07/11] Generate ID function passed in options object. Updated tests. --- src/api/index.js | 4 ++-- src/api/v1/public/index.js | 6 ++++-- src/index.js | 12 ++++++------ src/models/realm.js | 14 +++++++------- test/models/realm.js | 1 + 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index e1adce1..86f3a07 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, randomId }) => { +module.exports = ({ config, realm, messageHandler }) => { const authMiddleware = require('./middleware/auth')({ config, realm }); const app = express.Router(); @@ -16,7 +16,7 @@ module.exports = ({ config, realm, messageHandler, randomId }) => { res.send(publicContent); }); - app.use('/:key', require('./v1/public')({ config, realm, randomId })); + app.use('/:key', require('./v1/public')({ config, realm })); 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 78473e1..ba49de9 100644 --- a/src/api/v1/public/index.js +++ b/src/api/v1/public/index.js @@ -1,12 +1,14 @@ const express = require('express'); -module.exports = ({ config, realm, randomId }) => { +module.exports = ({ config, realm }) => { const app = express.Router(); // Retrieve guaranteed random ID. app.get('/id', (req, res) => { res.contentType = 'text/html'; - res.send(realm.generateClientId(randomId)); + res.send(realm.generateClientId( + config.genRandomId ? config.genRandomId : undefined + )); }); // 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 0ec5087..ea3d9e0 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, randomId }) => { +const init = ({ app, server, options }) => { const config = options; const realm = new Realm(); const messageHandler = require('./messageHandler')({ realm }); - const api = require('./api')({ config, realm, messageHandler, randomId }); + const api = require('./api')({ config, realm, messageHandler }); const { startMessagesExpiration } = require('./services/messagesExpire')({ realm, config, messageHandler }); const checkBrokenConnections = require('./services/checkBrokenConnections')({ @@ -62,7 +62,7 @@ const init = ({ app, server, options, randomId }) => { checkBrokenConnections.start(); }; -function ExpressPeerServer(server, options, randomId) { +function ExpressPeerServer(server, options) { const app = express(); options = { @@ -80,13 +80,13 @@ function ExpressPeerServer(server, options, randomId) { 'can\'t start PeerServer'); } - init({ app, server, options, randomId }); + init({ app, server, options }); }); return app; } -function PeerServer(options = {}, callback, randomId) { +function PeerServer(options = {}, callback) { const app = express(); options = { @@ -114,7 +114,7 @@ function PeerServer(options = {}, callback, randomId) { server = http.createServer(app); } - const peerjs = ExpressPeerServer(server, options, randomId); + const peerjs = ExpressPeerServer(server, options); app.use(peerjs); if (callback) { diff --git a/src/models/realm.js b/src/models/realm.js index e9221ce..cd84ea3 100644 --- a/src/models/realm.js +++ b/src/models/realm.js @@ -42,19 +42,19 @@ class Realm { this._messageQueues.delete(id); } - generateClientId (_randomId) { - const originalRandomId = () => { + generateClientId (_genRandomId) { + const originalGenRandomId = () => { return (Math.random().toString(36) + '0000000000000000000').substr(2, 16); } - const randomId = typeof _randomId === 'function' ? - () => _randomId : - () => originalRandomId; + const genRandomId = _genRandomId && typeof _genRandomId === 'function' ? + () => _genRandomId : + () => originalGenRandomId; - let clientId = randomId(randomId)(); + let clientId = genRandomId(); while (this.getClientById(clientId)) { - clientId = randomId(); + clientId = genRandomId(); } return clientId; diff --git a/test/models/realm.js b/test/models/realm.js index 16e0bd8..69e06d4 100644 --- a/test/models/realm.js +++ b/test/models/realm.js @@ -7,6 +7,7 @@ describe('Realm', () => { it('should generate a 16-character ID', () => { const realm = new Realm(); expect(realm.generateClientId().length).to.eq(16); + expect(realm.generateClientId(() => 'abcd').to.eq('abcd'); }); }); From 2a5d0b9cc3a9729b21e61e8ad88f5e2f7cc60123 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Fri, 31 Jan 2020 10:34:35 +0000 Subject: [PATCH 08/11] Fixed breaking syntax error with genRandomId function selection. --- src/api/v1/public/index.js | 4 +--- src/models/realm.js | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/api/v1/public/index.js b/src/api/v1/public/index.js index ba49de9..f500aa1 100644 --- a/src/api/v1/public/index.js +++ b/src/api/v1/public/index.js @@ -6,9 +6,7 @@ module.exports = ({ config, realm }) => { // Retrieve guaranteed random ID. app.get('/id', (req, res) => { res.contentType = 'text/html'; - res.send(realm.generateClientId( - config.genRandomId ? config.genRandomId : undefined - )); + res.send(realm.generateClientId(config.genRandomId)); }); // Get a list of all peers for a key, enabled by the `allowDiscovery` flag. diff --git a/src/models/realm.js b/src/models/realm.js index cd84ea3..73af397 100644 --- a/src/models/realm.js +++ b/src/models/realm.js @@ -48,8 +48,8 @@ class Realm { } const genRandomId = _genRandomId && typeof _genRandomId === 'function' ? - () => _genRandomId : - () => originalGenRandomId; + _genRandomId : + originalGenRandomId; let clientId = genRandomId(); From 167131b270739128b58717657a3b684846569b97 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Fri, 31 Jan 2020 10:53:42 +0000 Subject: [PATCH 09/11] Fixed syntax error in test. --- test/models/realm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/realm.js b/test/models/realm.js index 69e06d4..2c8ee39 100644 --- a/test/models/realm.js +++ b/test/models/realm.js @@ -7,7 +7,7 @@ describe('Realm', () => { it('should generate a 16-character ID', () => { const realm = new Realm(); expect(realm.generateClientId().length).to.eq(16); - expect(realm.generateClientId(() => 'abcd').to.eq('abcd'); + expect(realm.generateClientId(() => 'abcd')).to.eq('abcd'); }); }); From fdc57ba587d9ba217ccb707364480cef59920736 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Fri, 31 Jan 2020 11:46:31 +0000 Subject: [PATCH 10/11] Fixed syntax error. (Made genRandomId optional). --- src/models/realm.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/models/realm.ts b/src/models/realm.ts index f910829..2bbf85a 100644 --- a/src/models/realm.ts +++ b/src/models/realm.ts @@ -20,7 +20,7 @@ export interface IRealm { clearMessageQueue(id: string): void; - generateClientId(genRandomId: () => string): string; + generateClientId(genRandomId?: () => string): string; } export class Realm implements IRealm { @@ -69,7 +69,7 @@ export class Realm implements IRealm { this.messageQueues.delete(id); } - public generateClientId(genRandomId: () => string): string { + public generateClientId(genRandomId?: () => string): string { const _genRandomId = genRandomId ? genRandomId : uuidv4; From 1eea9d022cadeddb4f5dac4751a1ee5588d5df74 Mon Sep 17 00:00:00 2001 From: Eden Tyler-Moss Date: Fri, 31 Jan 2020 11:51:38 +0000 Subject: [PATCH 11/11] Better describe generateClientId test. --- test/models/realm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/realm.ts b/test/models/realm.ts index 6daf9c2..fb24624 100644 --- a/test/models/realm.ts +++ b/test/models/realm.ts @@ -4,7 +4,7 @@ import { Client } from '../../src/models/client'; describe('Realm', () => { describe('#generateClientId', () => { - it('should generate a 36-character UUID', () => { + it('should generate a 36-character UUID, or return function value', () => { const realm = new Realm(); expect(realm.generateClientId().length).to.eq(36); expect(realm.generateClientId(() => 'abcd')).to.eq('abcd');