mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-03-09 15:40:18 +00:00
Lots of work on email notification of device connect/disconnect.
This commit is contained in:
parent
f6888d4e61
commit
44dec3bf87
13 changed files with 349 additions and 97 deletions
|
@ -2081,6 +2081,46 @@ function CreateMeshCentralServer(config, args) {
|
|||
}
|
||||
};
|
||||
|
||||
// See if we need to notifiy any user of device state change
|
||||
obj.NotifyUserOfDeviceStateChange = function (meshid, nodeid, connectTime, connectType, powerState, serverid, stateSet, extraInfo) {
|
||||
// Check if there is a email server for this domain
|
||||
const meshSplit = meshid.split('/');
|
||||
if (meshSplit.length != 3) return;
|
||||
const domainId = meshSplit[1];
|
||||
const mailserver = obj.config.domains[domainId].mailserver;;
|
||||
if (mailserver == null) return;
|
||||
|
||||
// Get the device group for this device
|
||||
const mesh = obj.webserver.meshes[meshid];
|
||||
if ((mesh == null) || (mesh.links == null)) return;
|
||||
|
||||
// Check if any user needs email notification
|
||||
for (var i in mesh.links) {
|
||||
if (i.startsWith('user/')) {
|
||||
const user = obj.webserver.users[i];
|
||||
if ((user != null) && (user.email != null) && (user.emailVerified == true)) {
|
||||
const meshLinks = user.links[meshid];
|
||||
if ((meshLinks != null) && (meshLinks.notify != null) && ((meshLinks.notify & 48) != 0)) {
|
||||
if (stateSet == true) {
|
||||
if ((meshLinks.notify & 16) != 0) {
|
||||
mailserver.notifyDeviceConnect(user, meshid, nodeid, connectTime, connectType, powerState, serverid, extraInfo);
|
||||
} else {
|
||||
mailserver.cancelNotifyDeviceDisconnect(user, meshid, nodeid, connectTime, connectType, powerState, serverid, extraInfo);
|
||||
}
|
||||
}
|
||||
else if (stateSet == false) {
|
||||
if ((meshLinks.notify & 32) != 0) {
|
||||
mailserver.notifyDeviceDisconnect(user, meshid, nodeid, connectTime, connectType, powerState, serverid, extraInfo);
|
||||
} else {
|
||||
mailserver.cancelNotifyDeviceConnect(user, meshid, nodeid, connectTime, connectType, powerState, serverid, extraInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set the connectivity state of a node and setup the server so that messages can be routed correctly.
|
||||
// meshId: mesh identifier of format mesh/domain/meshidhex
|
||||
// nodeId: node identifier of format node/domain/nodeidhex
|
||||
|
@ -2091,7 +2131,7 @@ function CreateMeshCentralServer(config, args) {
|
|||
//var powerStateStrings = ['Unknown', 'Powered', 'Sleep', 'Sleep', 'Deep Sleep', 'Hibernating', 'Soft-Off', 'Present'];
|
||||
obj.SetConnectivityState = function (meshid, nodeid, connectTime, connectType, powerState, serverid, extraInfo) {
|
||||
//console.log('SetConnectivity for ' + nodeid.substring(0, 16) + ', Type: ' + connectTypeStrings[connectType] + ', Power: ' + powerStateStrings[powerState] + (serverid == null ? ('') : (', ServerId: ' + serverid)));
|
||||
if ((serverid == null) && (obj.multiServer != null)) { obj.multiServer.DispatchMessage({ action: 'SetConnectivityState', meshid: meshid, nodeid: nodeid, connectTime: connectTime, connectType: connectType, powerState: powerState }); }
|
||||
if ((serverid == null) && (obj.multiServer != null)) { obj.multiServer.DispatchMessage({ action: 'SetConnectivityState', meshid: meshid, nodeid: nodeid, connectTime: connectTime, connectType: connectType, powerState: powerState, extraInfo: extraInfo }); }
|
||||
|
||||
if (obj.multiServer == null) {
|
||||
// Single server mode
|
||||
|
@ -2131,6 +2171,9 @@ function CreateMeshCentralServer(config, args) {
|
|||
const lc = { _id: 'lc' + nodeid, type: 'lastconnect', domain: nodeid.split('/')[1], meshid: meshid, time: Date.now(), cause: 1, connectType: connectType };
|
||||
if (extraInfo && extraInfo.remoteaddrport) { lc.addr = extraInfo.remoteaddrport; }
|
||||
obj.db.Set(lc);
|
||||
|
||||
// Notify any users of device connection
|
||||
obj.NotifyUserOfDeviceStateChange(meshid, nodeid, connectTime, connectType, powerState, serverid, true, extraInfo);
|
||||
}
|
||||
} else {
|
||||
// Multi server mode
|
||||
|
@ -2175,6 +2218,9 @@ function CreateMeshCentralServer(config, args) {
|
|||
if (extraInfo && extraInfo.remoteaddrport) { lc.addr = extraInfo.remoteaddrport; }
|
||||
obj.db.Set(lc);
|
||||
}
|
||||
|
||||
// Notify any users of device connection
|
||||
obj.NotifyUserOfDeviceStateChange(meshid, nodeid, connectTime, connectType, powerState, serverid, true, extraInfo);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -2185,7 +2231,7 @@ function CreateMeshCentralServer(config, args) {
|
|||
// connectType: Bitmask, 1 = MeshAgent, 2 = Intel AMT CIRA, 3 = Intel AMT local.
|
||||
obj.ClearConnectivityState = function (meshid, nodeid, connectType, serverid, extraInfo) {
|
||||
//console.log('ClearConnectivity for ' + nodeid.substring(0, 16) + ', Type: ' + connectTypeStrings[connectType] + (serverid == null?(''):(', ServerId: ' + serverid)));
|
||||
if ((serverid == null) && (obj.multiServer != null)) { obj.multiServer.DispatchMessage({ action: 'ClearConnectivityState', meshid: meshid, nodeid: nodeid, connectType: connectType }); }
|
||||
if ((serverid == null) && (obj.multiServer != null)) { obj.multiServer.DispatchMessage({ action: 'ClearConnectivityState', meshid: meshid, nodeid: nodeid, connectType: connectType, extraInfo: extraInfo }); }
|
||||
|
||||
if (obj.multiServer == null) {
|
||||
// Single server mode
|
||||
|
@ -2223,6 +2269,9 @@ function CreateMeshCentralServer(config, args) {
|
|||
// Event the node connection change
|
||||
if (eventConnectChange == 1) {
|
||||
obj.DispatchEvent(obj.webserver.CreateNodeDispatchTargets(meshid, nodeid), obj, { action: 'nodeconnect', meshid: meshid, nodeid: nodeid, domain: nodeid.split('/')[1], conn: state.connectivity, pwr: state.powerState, nolog: 1, nopeers: 1 });
|
||||
|
||||
// Notify any users of device disconnection
|
||||
obj.NotifyUserOfDeviceStateChange(meshid, nodeid, Date.now(), connectType, -1, serverid, false, extraInfo);
|
||||
}
|
||||
} else {
|
||||
// Multi server mode
|
||||
|
@ -2246,6 +2295,9 @@ function CreateMeshCentralServer(config, args) {
|
|||
|
||||
// If the node is completely disconnected, clean it up completely
|
||||
if (state.connectivity == 0) { delete obj.peerConnectivityByNode[serverid][nodeid]; state.powerState = 0; }
|
||||
|
||||
// Notify any users of device disconnection
|
||||
obj.NotifyUserOfDeviceStateChange(meshid, nodeid, Date.now(), connectType, -1, serverid, false, extraInfo);
|
||||
}
|
||||
|
||||
// Clear node power state
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue