mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-12-25 23:15:01 +03:00
Merge branch 'master' of https://github.com/Ylianst/MeshCentral
This commit is contained in:
commit
0118f5209e
23
db.js
23
db.js
@ -281,7 +281,27 @@ module.exports.CreateDB = function (parent) {
|
|||||||
|
|
||||||
// Database actions on the main collection
|
// Database actions on the main collection
|
||||||
obj.Set = function (data, func) { obj.file.update({ _id: data._id }, data, { upsert: true }, func); };
|
obj.Set = function (data, func) { obj.file.update({ _id: data._id }, data, { upsert: true }, func); };
|
||||||
obj.Get = function (id, func) { obj.file.find({ _id: id }, func); };
|
obj.Get = function (id, func)
|
||||||
|
{
|
||||||
|
if (arguments.length > 2)
|
||||||
|
{
|
||||||
|
var parms = [func];
|
||||||
|
for (var parmx = 2; parmx < arguments.length; ++parmx) { parms.push(arguments[parmx]); }
|
||||||
|
var func2 = function _func2(arg1, arg2)
|
||||||
|
{
|
||||||
|
var userCallback = _func2.userArgs.shift();
|
||||||
|
_func2.userArgs.unshift(arg2);
|
||||||
|
_func2.userArgs.unshift(arg1);
|
||||||
|
userCallback.apply(obj, _func2.userArgs);
|
||||||
|
};
|
||||||
|
func2.userArgs = parms;
|
||||||
|
obj.file.find({ _id: id }, func2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
obj.file.find({ _id: id }, func);
|
||||||
|
}
|
||||||
|
};
|
||||||
obj.GetAll = function (func) { obj.file.find({}, func); };
|
obj.GetAll = function (func) { obj.file.find({}, func); };
|
||||||
obj.GetAllTypeNoTypeField = function (type, domain, func) { obj.file.find({ type: type, domain: domain }, { type: 0 }, func); };
|
obj.GetAllTypeNoTypeField = function (type, domain, func) { obj.file.find({ type: type, domain: domain }, { type: 0 }, func); };
|
||||||
obj.GetAllTypeNoTypeFieldMeshFiltered = function (meshes, domain, type, id, func) { var x = { type: type, domain: domain, meshid: { $in: meshes } }; if (id) { x._id = id; } obj.file.find(x, { type: 0 }, func); };
|
obj.GetAllTypeNoTypeFieldMeshFiltered = function (meshes, domain, type, id, func) { var x = { type: type, domain: domain, meshid: { $in: meshes } }; if (id) { x._id = id; } obj.file.find(x, { type: 0 }, func); };
|
||||||
@ -422,6 +442,7 @@ module.exports.CreateDB = function (parent) {
|
|||||||
|
|
||||||
// This is used to rate limit a number of operation per day. Returns a startValue each new days, but you can substract it and save the value in the db.
|
// This is used to rate limit a number of operation per day. Returns a startValue each new days, but you can substract it and save the value in the db.
|
||||||
obj.getValueOfTheDay = function (id, startValue, func) { obj.Get(id, function (err, docs) { var date = new Date(), t = date.toLocaleDateString(); if (docs.length == 1) { var r = docs[0]; if (r.day == t) { func({ _id: id, value: r.value, day: t }); return; } } func({ _id: id, value: startValue, day: t }); }); };
|
obj.getValueOfTheDay = function (id, startValue, func) { obj.Get(id, function (err, docs) { var date = new Date(), t = date.toLocaleDateString(); if (docs.length == 1) { var r = docs[0]; if (r.day == t) { func({ _id: id, value: r.value, day: t }); return; } } func({ _id: id, value: startValue, day: t }); }); };
|
||||||
|
obj.escapeBase64 = function escapeBase64(val) { return (val.replace(/\+/g, '@').replace(/\//g, '$')); }
|
||||||
|
|
||||||
function Clone(v) { return JSON.parse(JSON.stringify(v)); }
|
function Clone(v) { return JSON.parse(JSON.stringify(v)); }
|
||||||
|
|
||||||
|
27
meshagent.js
27
meshagent.js
@ -773,14 +773,17 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
|
|||||||
//console.log('recoveryAgentCoreIsStable()');
|
//console.log('recoveryAgentCoreIsStable()');
|
||||||
|
|
||||||
// Fetch the the real agent nodeid
|
// Fetch the the real agent nodeid
|
||||||
db.Get('da' + obj.dbNodeKey, function (err, nodes) {
|
db.Get('da' + obj.dbNodeKey, function (err, nodes, self)
|
||||||
if (nodes.length == 1) {
|
{
|
||||||
obj.realNodeKey = nodes[0].raid;
|
if (nodes.length == 1)
|
||||||
obj.send(JSON.stringify({ action: 'diagnostic', value: { command: 'query', value: obj.realNodeKey } }));
|
{
|
||||||
} else {
|
self.realNodeKey = nodes[0].raid;
|
||||||
obj.send(JSON.stringify({ action: 'diagnostic', value: { command: 'query', value: null } }));
|
self.send(JSON.stringify({ action: 'diagnostic', value: { command: 'query', value: self.realNodeKey } }));
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
self.send(JSON.stringify({ action: 'diagnostic', value: { command: 'query', value: null } }));
|
||||||
}
|
}
|
||||||
});
|
}, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
function agentCoreIsStable() {
|
function agentCoreIsStable() {
|
||||||
@ -1105,9 +1108,10 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
|
|||||||
switch (command.value.command) {
|
switch (command.value.command) {
|
||||||
case 'register': {
|
case 'register': {
|
||||||
// Only main agent can do this
|
// Only main agent can do this
|
||||||
if (((obj.agentInfo.capabilities & 0x40) == 0) && (typeof command.value.command.value == 'string') && (command.value.command.value.length == 64)) {
|
if (((obj.agentInfo.capabilities & 0x40) == 0) && (typeof command.value.value == 'string') && (command.value.value.length == 64))
|
||||||
|
{
|
||||||
// Store links to diagnostic agent id
|
// Store links to diagnostic agent id
|
||||||
var daNodeKey = 'node/' + domain.id + '/' + command.value.command.value;
|
var daNodeKey = 'node/' + domain.id + '/' + db.escapeBase64(command.value.value);
|
||||||
db.Set({ _id: 'da' + daNodeKey, domain: domain.id, time: obj.connectTime, raid: obj.dbNodeKey }); // DiagnosticAgent --> Agent
|
db.Set({ _id: 'da' + daNodeKey, domain: domain.id, time: obj.connectTime, raid: obj.dbNodeKey }); // DiagnosticAgent --> Agent
|
||||||
db.Set({ _id: 'ra' + obj.dbNodeKey, domain: domain.id, time: obj.connectTime, daid: daNodeKey }); // Agent --> DiagnosticAgent
|
db.Set({ _id: 'ra' + obj.dbNodeKey, domain: domain.id, time: obj.connectTime, daid: daNodeKey }); // Agent --> DiagnosticAgent
|
||||||
}
|
}
|
||||||
@ -1130,9 +1134,10 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
|
|||||||
}
|
}
|
||||||
case 'log': {
|
case 'log': {
|
||||||
// Only the diagnostic agent can do
|
// Only the diagnostic agent can do
|
||||||
if (((obj.agentInfo.capabilities & 0x40) != 0) && (typeof command.value.command.value == 'string') && (command.value.command.value.length < 256)) {
|
if (((obj.agentInfo.capabilities & 0x40) != 0) && (typeof command.value.value == 'string') && (command.value.value.length < 256))
|
||||||
|
{
|
||||||
// Log a value in the event log of the main again
|
// Log a value in the event log of the main again
|
||||||
var event = { etype: 'node', action: 'diagnostic', nodeid: obj.dbNodeKey, domain: domain.id, msg: command.value.command.value };
|
var event = { etype: 'node', action: 'diagnostic', nodeid: obj.realNodeKey, domain: domain.id, msg: command.value.value };
|
||||||
parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, event);
|
parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, event);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user