Completed work on session recording by user groups, #3127
Ylian Saint-Hilaire committed
Sep 13, 2021 at 18:04 UTC
409b00548a4b954121940b7d62ed649731078a4d
3 files changed
+44
-15
meshdesktopmultiplex.js
+19
-4
@@ -133,7 +133,22 @@ function CreateDesktopMultiplexor(parent, domain, nodeid, func) {
133
134
// Check session recording
135
var startRecord = false;
136
- if ((typeof domain.sessionrecording == 'object') && (domain.sessionrecording.onlyselectedusers === true) && (peer.user != null) && (peer.user.flags != null) && ((peer.user.flags & 2) != 0)) { startRecord = true; }
136
+ if (typeof domain.sessionrecording == 'object') {
137
+ // Check if this user is set to record all sessions
138
+ if ((domain.sessionrecording.onlyselectedusers === true) && (peer.user != null) && (peer.user.flags != null) && ((peer.user.flags & 2) != 0)) { startRecord = true; }
139
+ else if (domain.sessionrecording.onlyselectedusergroups === true) {
140
+ // Check if there is a usergroup that requires recording of the session
141
+ var user = parent.users[peer.user._id];
142
+ if ((user != null) && (user.links != null) && (user.links[obj.meshid] == null) && (user.links[obj.nodeid] == null)) {
143
+ // This user does not have a direct link to the device group or device. Find all user groups the would cause the link.
144
+ for (var i in user.links) {
145
+ var ugrp = parent.userGroups[i];
146
+ if ((ugrp != null) && (typeof ugrp.flags == 'number') && ((ugrp.flags & 2) != 0) && (ugrp.links != null) && ((ugrp.links[obj.meshid] != null) || (ugrp.links[obj.nodeid] != null))) { startRecord = true; }
147
+ }
148
+ }
149
+ }
150
+ }
151
+
152
startRecording(domain, startRecord, function () {
153
// Indicated we are connected
154
obj.sendToViewer(peer, obj.recordingFile ? 'cr' : 'c');
@@ -810,6 +825,7 @@ function CreateDesktopMultiplexor(parent, domain, nodeid, func) {
825
});
826
}
827
828
+ // Here, we check if we have to record the device, regardless of what user is looking at it.
829
function recordingSetup(domain, func) {
830
var record = false;
831
@@ -818,8 +834,8 @@ function CreateDesktopMultiplexor(parent, domain, nodeid, func) {
834
record = true;
835
836
// Check again to make sure we need to start recording
821
- if ((typeof domain.sessionrecording == 'object') && ((domain.sessionrecording.onlyselecteddevicegroups === true) || (domain.sessionrecording.onlyselectedusers === true))) {
822
- record = false;
837
+ if ((typeof domain.sessionrecording == 'object') && ((domain.sessionrecording.onlyselecteddevicegroups === true) || (domain.sessionrecording.onlyselectedusergroups === true) || (domain.sessionrecording.onlyselectedusers === true))) {
838
+ record = false;
839
840
// Check device group recording
841
if (domain.sessionrecording.onlyselecteddevicegroups === true) {
@@ -828,7 +844,6 @@ function CreateDesktopMultiplexor(parent, domain, nodeid, func) {
844
}
845
}
846
}
831
-
847
startRecording(domain, record, func);
848
}
849
meshrelay.js
+23
-9
@@ -348,27 +348,41 @@ function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) {
348
recordSession = true;
349
xtextSession = 2; // 1 = Raw recording of all strings, 2 = Record chat session messages only.
350
}
351
+ // See if any other recording may occur
352
if ((obj.req.query.p != null) && (obj.req.query.nodeid != null) && (sessionUser != null) && (domain.sessionrecording == true || ((typeof domain.sessionrecording == 'object') && ((domain.sessionrecording.protocols == null) || (domain.sessionrecording.protocols.indexOf(parseInt(obj.req.query.p)) >= 0))))) { recordSession = true; }
352
-
353
+
354
if (recordSession) {
355
// Get the computer name
356
parent.db.Get(obj.req.query.nodeid, function (err, nodes) {
357
var xusername = '', xdevicename = '', xdevicename2 = null, node = null, record = true;
358
if ((nodes != null) && (nodes.length == 1)) { node = nodes[0]; xdevicename2 = node.name; xdevicename = '-' + parent.common.makeFilename(node.name); }
359
359
- // Check again if we need to do messenger recording
360
- if ((typeof domain.sessionrecording == 'object') && ((domain.sessionrecording.onlyselectedusers === true) || (domain.sessionrecording.onlyselecteddevicegroups === true))) {
360
+ // Check again if we need to do session recording
361
+ if ((typeof domain.sessionrecording == 'object') && ((domain.sessionrecording.onlyselectedusers === true) || (domain.sessionrecording.onlyselectedusergroups === true) || (domain.sessionrecording.onlyselecteddevicegroups === true))) {
362
record = false;
363
364
+ // Check if this user needs to be recorded
365
+ if ((sessionUser != null) && (domain.sessionrecording.onlyselectedusers === true)) {
366
+ if ((sessionUser.flags != null) && ((sessionUser.flags & 2) != 0)) { record = true; }
367
+ }
368
+
369
// Check if this device group needs to be recorded
364
- if ((node == null) || (domain.sessionrecording.onlyselecteddevicegroups === true)) {
365
- var mesh = null;
366
- if (node != null) { mesh = parent.meshes[node.meshid]; }
367
- if ((node != null) && (mesh != null) && (mesh.flags != null) && ((mesh.flags & 4) != 0)) { record = true; }
370
+ if ((record == false) && (node != null) && (domain.sessionrecording.onlyselecteddevicegroups === true)) {
371
+ var mesh = parent.meshes[node.meshid];
372
+ if ((mesh != null) && (mesh.flags != null) && ((mesh.flags & 4) != 0)) { record = true; }
373
}
374
370
- // Check if this user needs to be recorded
371
- if ((sessionUser != null) && (sessionUser.flags != null) && ((sessionUser.flags & 2) != 0)) { record = true; }
375
+ // Check if any user groups need to be recorded
376
+ if ((record == false) && (domain.sessionrecording.onlyselectedusergroups === true)) {
377
+ // Check if there is a usergroup that requires recording of the session
378
+ if ((sessionUser != null) && (sessionUser.links != null) && (sessionUser.links[node.meshid] == null) && (sessionUser.links[node._id] == null)) {
379
+ // This user does not have a direct link to the device group or device. Find all user groups the would cause the link.
380
+ for (var i in sessionUser.links) {
381
+ var ugrp = parent.userGroups[i];
382
+ if ((ugrp != null) && (typeof ugrp.flags == 'number') && ((ugrp.flags & 2) != 0) && (ugrp.links != null) && ((ugrp.links[node.meshid] != null) || (ugrp.links[node._id] != null))) { record = true; }
383
+ }
384
+ }
385
+ }
386
}
387
388
// Do not record the session, just send session start
views/default.handlebars
+2
-2
@@ -10021,7 +10021,7 @@
10021
10022
var msg;
10023
if ((event.msgid == null) || (eventsMessageId[event.msgid] == null)) {
10024
- msg = EscapeHtml(event.msg).split('(R)').join('®');
10024
+ if (typeof event.msg == 'string') { msg = EscapeHtml(event.msg).split('(R)').join('®'); } else { msg = ''; }
10025
} else {
10026
msg = eventsMessageId[event.msgid];
10027
for (var i in event.msgArgs) {
@@ -14676,7 +14676,7 @@
14676
14677
var msg;
14678
if ((event.msgid == null) || (eventsMessageId[event.msgid] == null)) {
14679
- msg = EscapeHtml(event.msg).split('(R)').join('®');
14679
+ if (typeof event.msg == 'string') { msg = EscapeHtml(event.msg).split('(R)').join('®'); } else { msg = ''; }
14680
} else {
14681
msg = eventsMessageId[event.msgid];
14682
for (var i in event.msgArgs) {