Added checks to catch MongoDB . in key exception.
Ylian Saint-Hilaire committed
Oct 10, 2019 at 13:46 UTC
483f270a23c96cb44ab85185e38b2ddc37539dbe
2 files changed
+77
-15
db.js
+76
-14
@@ -607,10 +607,20 @@ module.exports.CreateDB = function (parent, func) {
607
setupFunctions(func); // Completed setup of NeDB
608
}
609
610
+ // Check the object names for a "."
611
+ function checkObjectNames(r) {
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]);
616
+ }
617
+ }
618
+
619
function setupFunctions(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
624
obj.file.replaceOne({ _id: data._id }, performTypedRecordEncrypt(data), { upsert: true }, func);
625
};
626
obj.Get = function (id, func) {
@@ -640,11 +650,25 @@ module.exports.CreateDB = function (parent, func) {
650
obj.Remove = function (id) { obj.file.deleteOne({ _id: id }); };
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); };
643
- obj.InsertMany = function (data, func) { obj.file.insertMany(data, func); };
653
+ obj.InsertMany = function (data, func) {
654
+ checkObjectNames(data); // 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 }); };
645
- obj.MakeSiteAdmin = function (username, domain) { obj.Get('user/' + domain + '/' + username, function (err, docs) { if (docs.length == 1) { docs[0].siteadmin = 0xFFFFFFFF; obj.Set(docs[0]); } }); };
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
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); };
647
- obj.SetUser = function (user) { var u = Clone(user); if (u.subscriptions) { delete u.subscriptions; } obj.Set(u); };
667
+ obj.SetUser = function (user) {
668
+ checkObjectNames(user); // DEBUG CHECKING
669
+ var u = Clone(user);
670
+ if (u.subscriptions) { delete u.subscriptions; } obj.Set(u);
671
+ };
672
obj.dispose = function () { for (var x in obj) { if (obj[x].close) { obj[x].close(); } delete obj[x]; } };
673
obj.getLocalAmtNodes = function (func) { obj.file.find({ type: 'node', host: { $exists: true, $ne: null }, intelamt: { $exists: true } }).toArray(func); };
674
obj.getAmtUuidNode = function (meshid, uuid, func) { obj.file.find({ type: 'node', meshid: meshid, 'intelamt.uuid': uuid }).toArray(func); };
@@ -656,7 +680,10 @@ module.exports.CreateDB = function (parent, func) {
680
681
// Database actions on the events collection
682
obj.GetAllEvents = function (func) { obj.eventsfile.find({}).toArray(func); };
659
- obj.StoreEvent = function (event) { obj.eventsfile.insertOne(event); };
683
+ obj.StoreEvent = function (event) {
684
+ checkObjectNames(event); // 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); };
688
obj.GetEventsWithLimit = function (ids, domain, limit, func) { obj.eventsfile.find({ domain: domain, ids: { $in: ids } }).project({ type: 0, _id: 0, domain: 0, ids: 0, node: 0 }).sort({ time: -1 }).limit(limit).toArray(func); };
689
obj.GetUserEvents = function (ids, domain, username, func) { obj.eventsfile.find({ domain: domain, $or: [{ ids: { $in: ids } }, { username: username }] }).project({ type: 0, _id: 0, domain: 0, ids: 0, node: 0 }).sort({ time: -1 }).toArray(func); };
@@ -668,18 +695,27 @@ module.exports.CreateDB = function (parent, func) {
695
696
// Database actions on the power collection
697
obj.getAllPower = function (func) { obj.powerfile.find({}).toArray(func); };
671
- obj.storePowerEvent = function (event, multiServer, func) { if (multiServer != null) { event.server = multiServer.serverid; } obj.powerfile.insertOne(event, func); };
698
+ obj.storePowerEvent = function (event, multiServer, func) {
699
+ checkObjectNames(event); // 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); };
703
obj.removeAllPowerEvents = function () { obj.powerfile.deleteMany({}, { multi: true }); };
704
obj.removeAllPowerEventsForNode = function (nodeid) { obj.powerfile.deleteMany({ nodeid: nodeid }, { multi: true }); };
705
706
// Database actions on the SMBIOS collection
677
- obj.SetSMBIOS = function (smbios, func) { obj.smbiosfile.updateOne({ _id: smbios._id }, { $set: smbios }, { upsert: true }, func); };
707
+ obj.SetSMBIOS = function (smbios, func) {
708
+ checkObjectNames(smbios); // 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 }); };
712
obj.GetSMBIOS = function (id, func) { obj.smbiosfile.find({ _id: id }).toArray(func); };
713
714
// Database actions on the Server Stats collection
682
- obj.SetServerStats = function (data, func) { obj.serverstatsfile.insertOne(data, func); };
715
+ obj.SetServerStats = function (data, func) {
716
+ checkObjectNames(data); // 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); };
720
721
// Read a configuration file from the database
@@ -706,7 +742,11 @@ module.exports.CreateDB = function (parent, func) {
742
}
743
} else {
744
// Database actions on the main collection (NeDB and MongoJS)
709
- obj.Set = function (data, func) { var xdata = performTypedRecordEncrypt(data); obj.file.update({ _id: xdata._id }, xdata, { upsert: true }, func); };
745
+ obj.Set = function (data, func) {
746
+ checkObjectNames(data); // DEBUG CHECKING
747
+ var xdata = performTypedRecordEncrypt(data);
748
+ obj.file.update({ _id: xdata._id }, xdata, { upsert: true }, func);
749
+ };
750
obj.Get = function (id, func) {
751
if (arguments.length > 2) {
752
var parms = [func];
@@ -734,11 +774,24 @@ module.exports.CreateDB = function (parent, func) {
774
obj.Remove = function (id) { obj.file.remove({ _id: id }); };
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); };
737
- obj.InsertMany = function (data, func) { obj.file.insert(data, func); };
777
+ obj.InsertMany = function (data, func) {
778
+ checkObjectNames(data); // 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 }); };
739
- obj.MakeSiteAdmin = function (username, domain) { obj.Get('user/' + domain + '/' + username, function (err, docs) { if (docs.length == 1) { docs[0].siteadmin = 0xFFFFFFFF; obj.Set(docs[0]); } }); };
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
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); };
741
- obj.SetUser = function (user) { var u = Clone(user); if (u.subscriptions) { delete u.subscriptions; } obj.Set(u); };
791
+ obj.SetUser = function (user) {
792
+ checkObjectNames(user); // 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]; } };
796
obj.getLocalAmtNodes = function (func) { obj.file.find({ type: 'node', host: { $exists: true, $ne: null }, intelamt: { $exists: true } }, func); };
797
obj.getAmtUuidNode = function (meshid, uuid, func) { obj.file.find({ type: 'node', meshid: meshid, 'intelamt.uuid': uuid }, func); };
@@ -746,7 +799,10 @@ module.exports.CreateDB = function (parent, func) {
799
800
// Database actions on the events collection
801
obj.GetAllEvents = function (func) { obj.eventsfile.find({}, func); };
749
- obj.StoreEvent = function (event) { obj.eventsfile.insert(event); };
802
+ obj.StoreEvent = function (event) {
803
+ checkObjectNames(event); // 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); } };
807
obj.GetEventsWithLimit = function (ids, domain, limit, func) { if (obj.databaseType == 1) { obj.eventsfile.find({ domain: domain, ids: { $in: ids } }, { _id: 0, domain: 0, ids: 0, node: 0 }).sort({ time: -1 }).limit(limit).exec(func); } else { obj.eventsfile.find({ domain: domain, ids: { $in: ids } }, { type: 0, _id: 0, domain: 0, ids: 0, node: 0 }).sort({ time: -1 }).limit(limit, func); } };
808
obj.GetUserEvents = function (ids, domain, username, func) {
@@ -770,7 +826,10 @@ module.exports.CreateDB = function (parent, func) {
826
827
// Database actions on the power collection
828
obj.getAllPower = function (func) { obj.powerfile.find({}, func); };
773
- obj.storePowerEvent = function (event, multiServer, func) { if (multiServer != null) { event.server = multiServer.serverid; } obj.powerfile.insert(event, func); };
829
+ obj.storePowerEvent = function (event, multiServer, func) {
830
+ checkObjectNames(event); // 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); } };
834
obj.removeAllPowerEvents = function () { obj.powerfile.remove({}, { multi: true }); };
835
obj.removeAllPowerEventsForNode = function (nodeid) { obj.powerfile.remove({ nodeid: nodeid }, { multi: true }); };
@@ -781,7 +840,10 @@ module.exports.CreateDB = function (parent, func) {
840
obj.GetSMBIOS = function (id, func) { obj.smbiosfile.find({ _id: id }, func); };
841
842
// Database actions on the Server Stats collection
784
- obj.SetServerStats = function (data, func) { obj.serverstatsfile.insert(data, func); };
843
+ obj.SetServerStats = function (data, func) {
844
+ checkObjectNames(data); // 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); };
848
849
// Read a configuration file from the database
package.json
+1
-1
@@ -1,6 +1,6 @@
1
{
2
"name": "meshcentral",
3
- "version": "0.4.2-a",
3
+ "version": "0.4.2-b",
4
"keywords": [
5
"Remote Management",
6
"Intel AMT",