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';
})
This commit is contained in:
Eden Tyler-Moss 2019-10-07 17:55:53 +01:00
parent 910bf3f674
commit 2552e9d5f1
4 changed files with 16 additions and 13 deletions

View File

@ -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;

View File

@ -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.

View File

@ -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) {

View File

@ -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();