diff --git a/apprelays.js b/apprelays.js index 3e203f9c..5b86c18c 100644 --- a/apprelays.js +++ b/apprelays.js @@ -61,11 +61,12 @@ module.exports.CreateMstscRelay = function (parent, db, ws, req, args, domain) { var inTraffc = obj.ws._socket.bytesRead, outTraffc = obj.ws._socket.bytesWritten; if (obj.wsClient != null) { inTraffc += obj.wsClient._socket.bytesRead; outTraffc += obj.wsClient._socket.bytesWritten; } const sessionSeconds = Math.round((Date.now() - obj.startTime) / 1000); - var user = parent.users[obj.cookie.userid]; - var username = (user != null) ? user.name : null; - var event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: obj.cookie.userid, username: username, msgid: 125, msgArgs: [sessionSeconds], msg: "Left Web-RDP session after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBRDP, bytesin: inTraffc, bytesout: outTraffc }; + const user = parent.users[obj.cookie.userid]; + const username = (user != null) ? user.name : null;e + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: obj.cookie.userid, username: username, sessionid: obj.sessionid, msgid: 125, msgArgs: [sessionSeconds, obj.sessionid], msg: "Left Web-RDP session \"" + obj.sessionid + "\" after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBRDP, bytesin: inTraffc, bytesout: outTraffc }; parent.parent.DispatchEvent(['*', obj.nodeid, obj.cookie.userid, obj.meshid], obj, event); delete obj.startTime; + delete obj.sessionid; } if (obj.wsClient) { obj.wsClient.close(); delete obj.wsClient; } @@ -140,7 +141,16 @@ module.exports.CreateMstscRelay = function (parent, db, ws, req, args, domain) { }).on('connect', function () { send(['rdp-connect']); if ((typeof obj.infos.options == 'object') && (obj.infos.options.savepass == true)) { saveRdpCredentials(); } // Save the credentials if needed + obj.sessionid = Buffer.from(parent.crypto.randomBytes(9), 'binary').toString('base64'); obj.startTime = Date.now(); + + // Event session start + try { + const user = parent.users[obj.cookie.userid]; + const username = (user != null) ? user.name : null; + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: obj.cookie.userid, username: username, sessionid: obj.sessionid, msgid: 150, msgArgs: [obj.sessionid], msg: "Started Web-RDP session \"" + obj.sessionid + "\".", protocol: PROTOCOL_WEBRDP }; + parent.parent.DispatchEvent(['*', obj.nodeid, obj.cookie.userid, obj.meshid], obj, event); + } catch (ex) { console.log(ex); } }).on('bitmap', function (bitmap) { try { ws.send(bitmap.data); } catch (ex) { } // Send the bitmap data as binary delete bitmap.data; @@ -287,11 +297,12 @@ module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) { var inTraffc = obj.ws._socket.bytesRead, outTraffc = obj.ws._socket.bytesWritten; if (obj.wsClient != null) { inTraffc += obj.wsClient._socket.bytesRead; outTraffc += obj.wsClient._socket.bytesWritten; } const sessionSeconds = Math.round((Date.now() - obj.startTime) / 1000); - var user = parent.users[obj.cookie.userid]; - var username = (user != null) ? user.name : null; - var event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: obj.cookie.userid, username: username, msgid: 123, msgArgs: [sessionSeconds], msg: "Left Web-SSH session after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBSSH, bytesin: inTraffc, bytesout: outTraffc }; + const user = parent.users[obj.cookie.userid]; + const username = (user != null) ? user.name : null; + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: obj.cookie.userid, username: username, sessionid: obj.sessionid, msgid: 123, msgArgs: [sessionSeconds, obj.sessionid], msg: "Left Web-SSH session \"" + obj.sessionid + "\" after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBSSH, bytesin: inTraffc, bytesout: outTraffc }; parent.parent.DispatchEvent(['*', obj.nodeid, obj.cookie.userid, obj.meshid], obj, event); delete obj.startTime; + delete obj.sessionid; } if (obj.sshShell) { @@ -384,8 +395,17 @@ module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) { obj.sshClient.on('ready', function () { // Authentication was successful. // If requested, save the credentials if (obj.keep === true) saveSshCredentials(); + obj.sessionid = Buffer.from(parent.crypto.randomBytes(9), 'binary').toString('base64'); obj.startTime = Date.now(); + // Event start of session + try { + const user = parent.users[obj.cookie.userid]; + const username = (user != null) ? user.name : null; + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: user._id, username: user.name, msgid: 148, msgArgs: [obj.sessionid], msg: "Started Web-SSH session \"" + obj.sessionid + "\".", protocol: PROTOCOL_WEBSSH }; + parent.parent.DispatchEvent(['*', obj.nodeid, user._id, obj.meshid], obj, event); + } catch (ex) { console.log(ex); } + obj.sshClient.shell(function (err, stream) { // Start a remote shell if (err) { obj.close(); return; } obj.sshShell = stream; @@ -550,9 +570,10 @@ module.exports.CreateSshTerminalRelay = function (parent, db, ws, req, domain, u var inTraffc = obj.ws._socket.bytesRead, outTraffc = obj.ws._socket.bytesWritten; if (obj.wsClient != null) { inTraffc += obj.wsClient._socket.bytesRead; outTraffc += obj.wsClient._socket.bytesWritten; } const sessionSeconds = Math.round((Date.now() - obj.startTime) / 1000); - var event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: user._id, username: user.name, msgid: 123, msgArgs: [sessionSeconds], msg: "Left Web-SSH session after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBSSH, bytesin: inTraffc, bytesout: outTraffc }; + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: user._id, username: user.name, msgid: 123, msgArgs: [sessionSeconds, obj.sessionid], msg: "Left Web-SSH session \"" + obj.sessionid + "\" after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBSSH, bytesin: inTraffc, bytesout: outTraffc }; parent.parent.DispatchEvent(['*', obj.nodeid, user._id, obj.meshid], obj, event); delete obj.startTime; + delete obj.sessionid; } if (obj.sshShell) { @@ -641,8 +662,17 @@ module.exports.CreateSshTerminalRelay = function (parent, db, ws, req, domain, u obj.sshClient.on('ready', function () { // Authentication was successful. // If requested, save the credentials if (obj.keep === true) saveSshCredentials(); + obj.sessionid = Buffer.from(parent.crypto.randomBytes(9), 'binary').toString('base64'); obj.startTime = Date.now(); + try { + // Event start of session + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: user._id, username: user.name, msgid: 148, msgArgs: [obj.sessionid], msg: "Started Web-SSH session \"" + obj.sessionid + "\".", protocol: PROTOCOL_WEBSSH }; + parent.parent.DispatchEvent(['*', obj.nodeid, user._id, obj.meshid], obj, event); + } catch (ex) { + console.log(ex); + } + obj.sshClient.shell(function (err, stream) { // Start a remote shell if (err) { obj.close(); return; } obj.sshShell = stream; @@ -839,9 +869,10 @@ module.exports.CreateSshFilesRelay = function (parent, db, ws, req, domain, user var inTraffc = obj.ws._socket.bytesRead, outTraffc = obj.ws._socket.bytesWritten; if (obj.wsClient != null) { inTraffc += obj.wsClient._socket.bytesRead; outTraffc += obj.wsClient._socket.bytesWritten; } const sessionSeconds = Math.round((Date.now() - obj.startTime) / 1000); - var event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: user._id, username: user.name, msgid: 124, msgArgs: [sessionSeconds], msg: "Left Web-SFTP session after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBSFTP, bytesin: inTraffc, bytesout: outTraffc }; + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: user._id, username: user.name, sessionid: obj.sessionid, msgid: 124, msgArgs: [sessionSeconds, obj.sessionid], msg: "Left Web-SFTP session \"" + obj.sessionid + "\" after " + sessionSeconds + " second(s).", protocol: PROTOCOL_WEBSFTP, bytesin: inTraffc, bytesout: outTraffc }; parent.parent.DispatchEvent(['*', obj.nodeid, user._id, obj.meshid], obj, event); delete obj.startTime; + delete obj.sessionid; } if (obj.sshClient) { @@ -923,8 +954,15 @@ module.exports.CreateSshFilesRelay = function (parent, db, ws, req, domain, user obj.sshClient.on('ready', function () { // Authentication was successful. // If requested, save the credentials if (obj.keep === true) saveSshCredentials(); + obj.sessionid = Buffer.from(parent.crypto.randomBytes(9), 'binary').toString('base64'); obj.startTime = Date.now(); + // Event start of session + try { + const event = { etype: 'relay', action: 'relaylog', domain: domain.id, nodeid: obj.nodeid, userid: user._id, username: user.name, msgid: 149, msgArgs: [obj.sessionid], msg: "Started Web-SFTP session \"" + obj.sessionid + "\".", protocol: PROTOCOL_WEBSFTP }; + parent.parent.DispatchEvent(['*', obj.nodeid, user._id, obj.meshid], obj, event); + } catch (ex) { console.log(ex); } + obj.sshClient.sftp(function(err, sftp) { if (err) { obj.close(); return; } obj.connected = true; diff --git a/views/default.handlebars b/views/default.handlebars index 6c8a45cc..02f07f52 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -13465,9 +13465,9 @@ 120: "Started local relay session \"{0}\", protocol {1} to {2}", 121: "Ended local relay session \"{0}\", protocol {1} to {2}, {3} second(s)", 122: "Left the desktop multiplex session after {0} second(s).", // No longer in use, replaced with 144 - 123: "Left Web-SSH session after {0} second(s).", - 124: "Left Web-SFTP session after {0} second(s).", - 125: "Left Web-RDP session after {0} second(s).", + 123: "Left Web-SSH session \"{1}\" after {0} second(s).", + 124: "Left Web-SFTP session \"{1}\" after {0} second(s).", + 125: "Left Web-RDP session \"{1}\" after {0} second(s).", 126: "Left Web-VNC session after {0} second(s).", 127: "Changed account display name to {0}.", 128: "Account created, name is {0}.", @@ -13489,7 +13489,11 @@ 144: "Left the desktop multiplex session \"{0}\" after {1} second(s).", 145: "Started desktop multiplex session \"{0}\"", 146: "Finished recording session \"{0}\", {1} second(s)", - 147: "Closed desktop multiplex session \"{0}\", {1} second(s)" + 147: "Closed desktop multiplex session \"{0}\", {1} second(s)", + 148: "Started Web-SSH session \"{0}\".", + 149: "Started Web-SFTP session \"{0}\".", + 150: "Started Web-RDP session \"{0}\".", + 151: "Started Web-VNC session \"{0}\"." // Not in use yet }; var eventsShortMessageId = {