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) {