Browse Source

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';
})
Eden Tyler-Moss 5 years ago
parent
commit
2552e9d5f1
4 changed files with 16 additions and 13 deletions
  1. 2 2
      src/api/index.js
  2. 3 2
      src/api/v1/public/index.js
  3. 6 6
      src/index.js
  4. 5 3
      src/models/realm.js

+ 2 - 2
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;

+ 3 - 2
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.

+ 6 - 6
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) {

+ 5 - 3
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();