소스 검색

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 년 전
부모
커밋
2552e9d5f1
4개의 변경된 파일16개의 추가작업 그리고 13개의 파일을 삭제
  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();