Added ManageAllDeviveGroup support in reports.
Ylian Saint-Hilaire committed
Sep 10, 2021 at 17:51 UTC
9563f34700bf72be3b2a276692170f25557183e3
2 files changed
+13
-4
meshrelay.js
+7
-2
@@ -649,6 +649,11 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) {
649
if (relayinfo.state == 2) {
650
var peer = (relayinfo.peer1 == obj) ? relayinfo.peer2 : relayinfo.peer1;
651
652
+ // Compute traffic
653
+ var inTraffc, outTraffc;
654
+ try { inTraffc = ws._socket.bytesRead + peer.ws._socket.bytesRead; } catch (ex) { }
655
+ try { outTraffc = ws._socket.bytesWritten + peer.ws._socket.bytesWritten; } catch (ex) { }
656
+
657
// Disconnect the peer
658
try { if (peer.relaySessionCounted) { parent.relaySessionCount--; delete peer.relaySessionCounted; } } catch (ex) { console.log(ex); }
659
parent.parent.debug('relay', 'Relay disconnect: ' + obj.id + ' (' + obj.req.clientIp + ' --> ' + peer.req.clientIp + ')');
@@ -668,11 +673,11 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) {
673
var meshid = (obj.meshid == null) ? peer.meshid : obj.meshid;
674
675
if (user) {
671
- var event = { etype: 'relay', action: 'relaylog', domain: domain.id, userid: user._id, username: user.name, msgid: msgid, msgArgs: [obj.id, obj.req.clientIp, obj.peer.req.clientIp, Math.floor((Date.now() - ws.time) / 1000)], msg: msg + ' \"' + obj.id + '\" from ' + obj.req.clientIp + ' to ' + obj.peer.req.clientIp + ', ' + Math.floor((Date.now() - ws.time) / 1000) + ' second(s)', protocol: obj.req.query.p, nodeid: obj.req.query.nodeid };
676
+ var event = { etype: 'relay', action: 'relaylog', domain: domain.id, userid: user._id, username: user.name, msgid: msgid, msgArgs: [obj.id, obj.req.clientIp, obj.peer.req.clientIp, Math.floor((Date.now() - ws.time) / 1000)], msg: msg + ' \"' + obj.id + '\" from ' + obj.req.clientIp + ' to ' + obj.peer.req.clientIp + ', ' + Math.floor((Date.now() - ws.time) / 1000) + ' second(s)', protocol: obj.req.query.p, nodeid: obj.req.query.nodeid, bytesin: inTraffc, bytesout: outTraffc };
677
if (obj.guestname) { event.guestname = obj.guestname; } else if (peer.guestname) { event.guestname = peer.guestname; } // If this is a sharing session, set the guest name here.
678
parent.parent.DispatchEvent(['*', user._id, nodeid, meshid], obj, event);
679
} else if (peer.user) {
675
- var event = { etype: 'relay', action: 'relaylog', domain: domain.id, userid: peer.user._id, username: peer.user.name, msgid: msgid, msgArgs: [obj.id, obj.req.clientIp, obj.peer.req.clientIp, Math.floor((Date.now() - ws.time) / 1000)], msg: msg + ' \"' + obj.id + '\" from ' + obj.req.clientIp + ' to ' + obj.peer.req.clientIp + ', ' + Math.floor((Date.now() - ws.time) / 1000) + ' second(s)', protocol: obj.req.query.p, nodeid: obj.req.query.nodeid };
680
+ var event = { etype: 'relay', action: 'relaylog', domain: domain.id, userid: peer.user._id, username: peer.user.name, msgid: msgid, msgArgs: [obj.id, obj.req.clientIp, obj.peer.req.clientIp, Math.floor((Date.now() - ws.time) / 1000)], msg: msg + ' \"' + obj.id + '\" from ' + obj.req.clientIp + ' to ' + obj.peer.req.clientIp + ', ' + Math.floor((Date.now() - ws.time) / 1000) + ' second(s)', protocol: obj.req.query.p, nodeid: obj.req.query.nodeid, bytesin: inTraffc, bytesout: outTraffc };
681
if (obj.guestname) { event.guestname = obj.guestname; } else if (peer.guestname) { event.guestname = peer.guestname; } // If this is a sharing session, set the guest name here.
682
parent.parent.DispatchEvent(['*', peer.user._id, nodeid, meshid], obj, event);
683
}
meshuser.js
+6
-2
@@ -5425,7 +5425,8 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5425
if (common.validateInt(command.type, 1, 1) == false) break; // Validate type
5426
if (common.validateInt(command.groupBy, 1, 3) == false) break; // Validate groupBy: 1 = User, 2 = Device, 3 = Day
5427
if ((typeof command.start != 'number') || (typeof command.end != 'number') || (command.start >= command.end)) break; // Validate start and end time
5428
- if ((command.devGroup != null) && ((user.links == null) || (user.links[command.devGroup] == null))) break; // Asking for a device group that is not allowed
5428
+ const manageAllDeviceGroups = ((user.siteadmin == 0xFFFFFFFF) && (parent.parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0));
5429
+ if ((command.devGroup != null) && (manageAllDeviceGroups == false) && ((user.links == null) || (user.links[command.devGroup] == null))) break; // Asking for a device group that is not allowed
5430
5431
if (command.type == 1) { // This is the remote session report. Shows desktop, terminal, files...
5432
// If we are not user administrator on this site, only search for events with our own user id.
@@ -5434,7 +5435,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5435
if (command.devGroup != null) {
5436
ids = [ user._id, command.devGroup ];
5437
} else {
5437
- if (user.links) { for (var i in user.links) { ids.push(i); } }
5438
+ if (manageAllDeviceGroups) { ids = ['*']; } else if (user.links) { for (var i in user.links) { ids.push(i); } }
5439
}
5440
}
5441
@@ -5477,6 +5478,9 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5478
// Add traffic data
5479
if (command.showTraffic) { entry.bytesin = docs[i].bytesin; entry.bytesout = docs[i].bytesout; }
5480
5481
+ // Add guest name if present
5482
+ if (docs[i].nodeid.guestname != null) { entry.guestname = docs[i].nodeid.guestname; }
5483
+
5484
// Session length
5485
if (((docs[i].msgid >= 10) && (docs[i].msgid <= 12)) && (docs[i].msgArgs != null) && (typeof docs[i].msgArgs == 'object') && (typeof docs[i].msgArgs[3] == 'number')) { entry.length = docs[i].msgArgs[3]; }
5486
else if ((docs[i].msgid >= 122) && (docs[i].msgid <= 126) && (docs[i].msgArgs != null) && (typeof docs[i].msgArgs == 'object') && (typeof docs[i].msgArgs[0] == 'number')) { entry.length = docs[i].msgArgs[0]; }