Fixed Server Peering, now requires SessionKey.
Ylian Saint-Hilaire committed
Jan 23, 2021 at 17:39 UTC
ddb429fccea825820883062a341d7ef6e7380a2b
2 files changed
+4
-3
meshcentral.js
+2
-1
@@ -1497,6 +1497,7 @@ function CreateMeshCentralServer(config, args) {
1497
obj.multiServer = require('./multiserver.js').CreateMultiServer(obj, obj.args);
1498
if (obj.multiServer != null) {
1499
if ((obj.db.databaseType != 3) || (obj.db.changeStream != true)) { console.log("ERROR: Multi-server support requires use of MongoDB with ReplicaSet and ChangeStream enabled."); process.exit(0); return; }
1500
+ if (typeof obj.args.sessionkey != 'string') { console.log("ERROR: Multi-server support requires \"SessionKey\" be set in the settings section of config.json, same key for all servers."); process.exit(0); return; }
1501
obj.serverId = obj.multiServer.serverid;
1502
for (var serverid in obj.config.peers.servers) { obj.peerConnectivityByNode[serverid] = {}; }
1503
}
@@ -1506,7 +1507,7 @@ function CreateMeshCentralServer(config, args) {
1507
1508
// Set the session length to 60 minutes if not set and set a random key if needed
1509
if ((obj.args.sessiontime != null) && ((typeof obj.args.sessiontime != 'number') || (obj.args.sessiontime < 1))) { delete obj.args.sessiontime; }
1509
- if (!obj.args.sessionkey) { obj.args.sessionkey = buf.toString('hex').toUpperCase(); }
1510
+ if (typeof obj.args.sessionkey != 'string') { obj.args.sessionkey = buf.toString('hex').toUpperCase(); }
1511
1512
// Create MQTT Broker to hook into webserver and mpsserver
1513
if ((typeof obj.config.settings.mqtt == 'object') && (typeof obj.config.settings.mqtt.auth == 'object') && (typeof obj.config.settings.mqtt.auth.keyid == 'string') && (typeof obj.config.settings.mqtt.auth.key == 'string')) { obj.mqttbroker = require("./mqttbroker.js").CreateMQTTBroker(obj, obj.db, obj.args); }
multiserver.js
+2
-2
@@ -463,7 +463,7 @@ module.exports.CreateMultiServer = function (parent, args) {
463
// Process a message coming from a peer server
464
obj.ProcessPeerServerMessage = function (server, peerServerId, msg) {
465
var userid, i;
466
- //console.log('ProcessPeerServerMessage', peerServerId, msg);
466
+ //console.log('ProcessPeerServerMessage', peerServerId, msg.action);
467
switch (msg.action) {
468
case 'mqtt': {
469
if ((obj.parent.mqttbroker != null) && (msg.nodeid != null)) { obj.parent.mqttbroker.publishNoPeers(msg.nodeid, msg.topic, msg.message); } // Dispatch in the MQTT broker
@@ -531,7 +531,7 @@ module.exports.CreateMultiServer = function (parent, args) {
531
if (peerServerId > obj.parent.serverId) {
532
// We must initiate the connection to the peer
533
userid = null;
534
- if (rsession.peer1.req.session != null) { userid = rsession.peer1.req.session.userid; } // TODO: Seems like there is a race condition here, need to investigate.
534
+ if (rsession.peer1.user != null) { userid = rsession.peer1.user._id; }
535
obj.createPeerRelay(rsession.peer1.ws, rsession.peer1.req, peerServerId, userid);
536
delete obj.parent.webserver.wsrelays[msg.id];
537
}