Probably fixed the MongoDB dot exception.
Ylian Saint-Hilaire committed
Oct 10, 2019 at 14:06 UTC
fcccb18cc8c02f0e7694c9bf046693821d5e7599
5 files changed
+30
-30
db.js
+18
-18
@@ -608,11 +608,11 @@ module.exports.CreateDB = function (parent, func) {
608
}
609
610
// Check the object names for a "."
611
- function checkObjectNames(r) {
611
+ function checkObjectNames(r, tag) {
612
if (typeof r != 'object') return;
613
for (var i in r) {
614
- if (i.indexOf('.') >= 0) { throw('BadDbName: ' + JSON.stringify(r)); }
615
- checkObjectNames(r[i]);
614
+ if (i.indexOf('.') >= 0) { throw('BadDbName (' + tag + '): ' + JSON.stringify(r)); }
615
+ checkObjectNames(r[i], tag);
616
}
617
}
618
@@ -620,7 +620,7 @@ module.exports.CreateDB = function (parent, func) {
620
if (obj.databaseType == 3) {
621
// Database actions on the main collection (MongoDB)
622
obj.Set = function (data, func) {
623
- checkObjectNames(data); // DEBUG CHECKING
623
+ checkObjectNames(data, 'x1'); // DEBUG CHECKING
624
obj.file.replaceOne({ _id: data._id }, performTypedRecordEncrypt(data), { upsert: true }, func);
625
};
626
obj.Get = function (id, func) {
@@ -651,21 +651,21 @@ module.exports.CreateDB = function (parent, func) {
651
obj.RemoveAll = function (func) { obj.file.deleteMany({}, { multi: true }, func); };
652
obj.RemoveAllOfType = function (type, func) { obj.file.deleteMany({ type: type }, { multi: true }, func); };
653
obj.InsertMany = function (data, func) {
654
- checkObjectNames(data); // DEBUG CHECKING
654
+ checkObjectNames(data, 'x2'); // DEBUG CHECKING
655
obj.file.insertMany(data, func);
656
};
657
obj.RemoveMeshDocuments = function (id) { obj.file.deleteMany({ meshid: id }, { multi: true }); obj.file.deleteOne({ _id: 'nt' + id }); };
658
obj.MakeSiteAdmin = function (username, domain) {
659
obj.Get('user/' + domain + '/' + username, function (err, docs) {
660
if (docs.length == 1) {
661
- checkObjectNames(docs[0]); // DEBUG CHECKING
661
+ checkObjectNames(docs[0], 'x3'); // DEBUG CHECKING
662
docs[0].siteadmin = 0xFFFFFFFF; obj.Set(docs[0]);
663
}
664
});
665
};
666
obj.DeleteDomain = function (domain, func) { obj.file.deleteMany({ domain: domain }, { multi: true }, func); };
667
obj.SetUser = function (user) {
668
- checkObjectNames(user); // DEBUG CHECKING
668
+ checkObjectNames(user, 'x4'); // DEBUG CHECKING
669
var u = Clone(user);
670
if (u.subscriptions) { delete u.subscriptions; } obj.Set(u);
671
};
@@ -681,7 +681,7 @@ module.exports.CreateDB = function (parent, func) {
681
// Database actions on the events collection
682
obj.GetAllEvents = function (func) { obj.eventsfile.find({}).toArray(func); };
683
obj.StoreEvent = function (event) {
684
- checkObjectNames(event); // DEBUG CHECKING
684
+ checkObjectNames(event, 'x5'); // DEBUG CHECKING
685
obj.eventsfile.insertOne(event);
686
};
687
obj.GetEvents = function (ids, domain, func) { obj.eventsfile.find({ domain: domain, ids: { $in: ids } }).project({ type: 0, _id: 0, domain: 0, ids: 0, node: 0 }).sort({ time: -1 }).toArray(func); };
@@ -696,7 +696,7 @@ module.exports.CreateDB = function (parent, func) {
696
// Database actions on the power collection
697
obj.getAllPower = function (func) { obj.powerfile.find({}).toArray(func); };
698
obj.storePowerEvent = function (event, multiServer, func) {
699
- checkObjectNames(event); // DEBUG CHECKING
699
+ checkObjectNames(event, 'x6'); // DEBUG CHECKING
700
if (multiServer != null) { event.server = multiServer.serverid; } obj.powerfile.insertOne(event, func);
701
};
702
obj.getPowerTimeline = function (nodeid, func) { obj.powerfile.find({ nodeid: { $in: ['*', nodeid] } }).project({ _id: 0, nodeid: 0, s: 0 }).sort({ time: 1 }).toArray(func); };
@@ -705,7 +705,7 @@ module.exports.CreateDB = function (parent, func) {
705
706
// Database actions on the SMBIOS collection
707
obj.SetSMBIOS = function (smbios, func) {
708
- checkObjectNames(smbios); // DEBUG CHECKING
708
+ checkObjectNames(smbios, 'x7'); // DEBUG CHECKING
709
obj.smbiosfile.updateOne({ _id: smbios._id }, { $set: smbios }, { upsert: true }, func);
710
};
711
obj.RemoveSMBIOS = function (id) { obj.smbiosfile.deleteOne({ _id: id }); };
@@ -713,7 +713,7 @@ module.exports.CreateDB = function (parent, func) {
713
714
// Database actions on the Server Stats collection
715
obj.SetServerStats = function (data, func) {
716
- checkObjectNames(data); // DEBUG CHECKING
716
+ checkObjectNames(data, 'x8'); // DEBUG CHECKING
717
obj.serverstatsfile.insertOne(data, func);
718
};
719
obj.GetServerStats = function (hours, func) { var t = new Date(); t.setTime(t.getTime() - (60 * 60 * 1000 * hours)); obj.serverstatsfile.find({ time: { $gt: t } }, { _id: 0, cpu: 0 }).toArray(func); };
@@ -743,7 +743,7 @@ module.exports.CreateDB = function (parent, func) {
743
} else {
744
// Database actions on the main collection (NeDB and MongoJS)
745
obj.Set = function (data, func) {
746
- checkObjectNames(data); // DEBUG CHECKING
746
+ checkObjectNames(data, 'x9'); // DEBUG CHECKING
747
var xdata = performTypedRecordEncrypt(data);
748
obj.file.update({ _id: xdata._id }, xdata, { upsert: true }, func);
749
};
@@ -775,21 +775,21 @@ module.exports.CreateDB = function (parent, func) {
775
obj.RemoveAll = function (func) { obj.file.remove({}, { multi: true }, func); };
776
obj.RemoveAllOfType = function (type, func) { obj.file.remove({ type: type }, { multi: true }, func); };
777
obj.InsertMany = function (data, func) {
778
- checkObjectNames(data); // DEBUG CHECKING
778
+ checkObjectNames(data, 'x10'); // DEBUG CHECKING
779
obj.file.insert(data, func);
780
};
781
obj.RemoveMeshDocuments = function (id) { obj.file.remove({ meshid: id }, { multi: true }); obj.file.remove({ _id: 'nt' + id }); };
782
obj.MakeSiteAdmin = function (username, domain) {
783
obj.Get('user/' + domain + '/' + username, function (err, docs) {
784
if (docs.length == 1) {
785
- checkObjectNames(docs[0]); // DEBUG CHECKING
785
+ checkObjectNames(docs[0], 'x11'); // DEBUG CHECKING
786
docs[0].siteadmin = 0xFFFFFFFF; obj.Set(docs[0]);
787
}
788
});
789
};
790
obj.DeleteDomain = function (domain, func) { obj.file.remove({ domain: domain }, { multi: true }, func); };
791
obj.SetUser = function (user) {
792
- checkObjectNames(user); // DEBUG CHECKING
792
+ checkObjectNames(user, 'x12'); // DEBUG CHECKING
793
var u = Clone(user); if (u.subscriptions) { delete u.subscriptions; } obj.Set(u);
794
};
795
obj.dispose = function () { for (var x in obj) { if (obj[x].close) { obj[x].close(); } delete obj[x]; } };
@@ -800,7 +800,7 @@ module.exports.CreateDB = function (parent, func) {
800
// Database actions on the events collection
801
obj.GetAllEvents = function (func) { obj.eventsfile.find({}, func); };
802
obj.StoreEvent = function (event) {
803
- checkObjectNames(event); // DEBUG CHECKING
803
+ checkObjectNames(event, 'x13'); // DEBUG CHECKING
804
obj.eventsfile.insert(event);
805
};
806
obj.GetEvents = function (ids, domain, func) { if (obj.databaseType == 1) { obj.eventsfile.find({ domain: domain, ids: { $in: ids } }, { _id: 0, domain: 0, ids: 0, node: 0 }).sort({ time: -1 }).exec(func); } else { obj.eventsfile.find({ domain: domain, ids: { $in: ids } }, { type: 0, _id: 0, domain: 0, ids: 0, node: 0 }).sort({ time: -1 }, func); } };
@@ -827,7 +827,7 @@ module.exports.CreateDB = function (parent, func) {
827
// Database actions on the power collection
828
obj.getAllPower = function (func) { obj.powerfile.find({}, func); };
829
obj.storePowerEvent = function (event, multiServer, func) {
830
- checkObjectNames(event); // DEBUG CHECKING
830
+ checkObjectNames(event, 'x14'); // DEBUG CHECKING
831
if (multiServer != null) { event.server = multiServer.serverid; } obj.powerfile.insert(event, func);
832
};
833
obj.getPowerTimeline = function (nodeid, func) { if (obj.databaseType == 1) { obj.powerfile.find({ nodeid: { $in: ['*', nodeid] } }, { _id: 0, nodeid: 0, s: 0 }).sort({ time: 1 }).exec(func); } else { obj.powerfile.find({ nodeid: { $in: ['*', nodeid] } }, { _id: 0, nodeid: 0, s: 0 }).sort({ time: 1 }, func); } };
@@ -841,7 +841,7 @@ module.exports.CreateDB = function (parent, func) {
841
842
// Database actions on the Server Stats collection
843
obj.SetServerStats = function (data, func) {
844
- checkObjectNames(data); // DEBUG CHECKING
844
+ checkObjectNames(data, 'x15'); // DEBUG CHECKING
845
obj.serverstatsfile.insert(data, func);
846
};
847
obj.GetServerStats = function (hours, func) { var t = new Date(); t.setTime(t.getTime() - (60 * 60 * 1000 * hours)); obj.serverstatsfile.find({ time: { $gt: t } }, { _id: 0, cpu: 0 }, func); };
meshagent.js
+3
-3
@@ -526,7 +526,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
526
if (adminUser.links == null) adminUser.links = {};
527
adminUser.links[obj.dbMeshKey] = { rights: 0xFFFFFFFF };
528
db.SetUser(adminUser);
529
- parent.parent.DispatchEvent(['*', obj.dbMeshKey, adminUser._id], obj, { etype: 'mesh', username: adminUser.name, meshid: obj.dbMeshKey, name: meshname, mtype: 2, desc: '', action: 'createmesh', links: links, msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
529
+ parent.parent.DispatchEvent(['*', obj.dbMeshKey, adminUser._id], obj, { etype: 'mesh', username: adminUser.name, meshid: obj.dbMeshKey, name: meshname, mtype: 2, desc: '', action: 'createmesh', msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
530
}
531
} else {
532
if ((mesh != null) && (mesh.deleted != null) && (mesh.links)) {
@@ -547,7 +547,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
547
}
548
549
// Send out an event indicating this mesh was "created"
550
- parent.parent.DispatchEvent(ids, obj, { etype: 'mesh', meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'createmesh', links: mesh.links, msg: 'Mesh undeleted: ' + mesh._id, domain: domain.id });
550
+ parent.parent.DispatchEvent(ids, obj, { etype: 'mesh', meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'createmesh', msg: 'Mesh undeleted: ' + mesh._id, domain: domain.id });
551
552
// Mark the mesh as active
553
delete mesh.deleted;
@@ -617,7 +617,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
617
adminUser.links[obj.meshid] = { rights: 0xFFFFFFFF };
618
//adminUser.subscriptions = parent.subscribe(adminUser._id, ws);
619
db.SetUser(user);
620
- parent.parent.DispatchEvent(['*', meshid, user._id], obj, { etype: 'mesh', username: user.name, meshid: obj.meshid, name: obj.meshid, mtype: 2, desc: '', action: 'createmesh', links: links, msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
620
+ parent.parent.DispatchEvent(['*', meshid, user._id], obj, { etype: 'mesh', username: user.name, meshid: obj.meshid, name: obj.meshid, mtype: 2, desc: '', action: 'createmesh', msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
621
}
622
}
623
meshuser.js
+7
-7
@@ -1110,7 +1110,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1110
if (mesh.links[deluser._id] != null) { delete mesh.links[deluser._id]; parent.db.Set(common.escapeLinksFieldName(mesh)); }
1111
// Notify mesh change
1112
change = 'Removed user ' + deluser.name + ' from group ' + mesh.name;
1113
- var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', links: mesh.links, msg: change, domain: domain.id };
1113
+ var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', msg: change, domain: domain.id };
1114
if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the mesh. Another event will come.
1115
parent.parent.DispatchEvent(['*', mesh._id, deluser._id, user._id], obj, event);
1116
}
@@ -1682,7 +1682,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1682
parent.parent.DispatchEvent(targets, obj, event);
1683
1684
// Event the device group creation
1685
- var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: meshid, name: command.meshname, mtype: command.meshtype, desc: command.desc, action: 'createmesh', links: links, msg: 'Device group created: ' + command.meshname, domain: domain.id };
1685
+ var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: meshid, name: command.meshname, mtype: command.meshtype, desc: command.desc, action: 'createmesh', msg: 'Device group created: ' + command.meshname, domain: domain.id };
1686
parent.parent.DispatchEvent(['*', meshid, user._id], obj, event); // Even if DB change stream is active, this event must be acted upon.
1687
1688
try { ws.send(JSON.stringify({ action: 'createmesh', responseid: command.responseid, result: 'ok', meshid: meshid })); } catch (ex) { }
@@ -1763,7 +1763,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1763
if ((common.validateInt(command.consent) == true) && (command.consent != mesh.consent)) { if (change != '') change += ' and consent changed'; else change += 'Group "' + mesh.name + '" consent changed'; mesh.consent = command.consent; }
1764
if (change != '') {
1765
db.Set(common.escapeLinksFieldName(mesh));
1766
- var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, flags: mesh.flags, consent: mesh.consent, action: 'meshchange', links: mesh.links, msg: change, domain: domain.id };
1766
+ var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, flags: mesh.flags, consent: mesh.consent, action: 'meshchange', msg: change, domain: domain.id };
1767
if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the mesh. Another event will come.
1768
parent.parent.DispatchEvent(['*', mesh._id, user._id], obj, event);
1769
}
@@ -1808,7 +1808,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1808
db.Set(common.escapeLinksFieldName(mesh));
1809
1810
// Notify mesh change
1811
- var event = { etype: 'mesh', username: newuser.name, userid: command.userid, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', links: mesh.links, msg: 'Added user ' + newuser.name + ' to mesh ' + mesh.name, domain: domain.id };
1811
+ var event = { etype: 'mesh', username: newuser.name, userid: command.userid, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', msg: 'Added user ' + newuser.name + ' to mesh ' + mesh.name, domain: domain.id };
1812
if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the mesh. Another event will come.
1813
parent.parent.DispatchEvent(['*', mesh._id, user._id, newuserid], obj, event);
1814
removedCount++;
@@ -1870,9 +1870,9 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1870
// Notify mesh change
1871
var event;
1872
if (deluser != null) {
1873
- event = { etype: 'mesh', username: user.name, userid: deluser.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', links: mesh.links, msg: 'Removed user ' + deluser.name + ' from group ' + mesh.name, domain: domain.id };
1873
+ event = { etype: 'mesh', username: user.name, userid: deluser.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', msg: 'Removed user ' + deluser.name + ' from group ' + mesh.name, domain: domain.id };
1874
} else {
1875
- event = { etype: 'mesh', username: user.name, userid: (deluserid.split('/')[2]), meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', links: mesh.links, msg: 'Removed user ' + (deluserid.split('/')[2]) + ' from group ' + mesh.name, domain: domain.id };
1875
+ event = { etype: 'mesh', username: user.name, userid: (deluserid.split('/')[2]), meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', msg: 'Removed user ' + (deluserid.split('/')[2]) + ' from group ' + mesh.name, domain: domain.id };
1876
}
1877
parent.parent.DispatchEvent(['*', mesh._id, user._id, command.userid], obj, event);
1878
if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'removemeshuser', responseid: command.responseid, result: 'ok' })); } catch (ex) { } }
@@ -1913,7 +1913,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1913
db.Set(common.escapeLinksFieldName(mesh));
1914
var amtpolicy2 = common.Clone(amtpolicy);
1915
delete amtpolicy2.password;
1916
- var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, amt: amtpolicy2, action: 'meshchange', links: mesh.links, msg: change, domain: domain.id };
1916
+ var event = { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, amt: amtpolicy2, action: 'meshchange', msg: change, domain: domain.id };
1917
if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the mesh. Another event will come.
1918
parent.parent.DispatchEvent(['*', mesh._id, user._id], obj, event);
1919
package.json
+1
-1
@@ -1,6 +1,6 @@
1
{
2
"name": "meshcentral",
3
- "version": "0.4.2-b",
3
+ "version": "0.4.2-d",
4
"keywords": [
5
"Remote Management",
6
"Intel AMT",
webserver.js
+1
-1
@@ -1229,7 +1229,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1229
if (mesh.links[userid] != null) { delete mesh.links[userid]; obj.db.Set(obj.common.escapeLinksFieldName(mesh)); }
1230
// Notify mesh change
1231
var change = 'Removed user ' + user.name + ' from group ' + mesh.name;
1232
- obj.parent.DispatchEvent(['*', mesh._id, user._id, userid], obj, { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', links: mesh.links, msg: change, domain: domain.id });
1232
+ obj.parent.DispatchEvent(['*', mesh._id, user._id, userid], obj, { etype: 'mesh', userid: user._id, username: user.name, meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'meshchange', msg: change, domain: domain.id });
1233
}
1234
}
1235
}