diff --git a/agents/meshcore.js b/agents/meshcore.js index 1b1b6d27..a2d31975 100644 --- a/agents/meshcore.js +++ b/agents/meshcore.js @@ -1610,7 +1610,7 @@ function onTunnelClosed() { function onTunnelSendOk() { /*sendConsoleText("Tunnel #" + this.index + " SendOK.", this.sessionid);*/ } function onTunnelData(data) { //console.log("OnTunnelData"); - //sendConsoleText('OnTunnelData, ' + data.length + ', ' + typeof data + ', ' + data); + sendConsoleText('OnTunnelData, ' + data.length + ', ' + typeof data + ', ' + data); // If this is upload data, save it to file if ((this.httprequest.uploadFile) && (typeof data == 'object') && (data[0] != 123)) { @@ -2547,30 +2547,25 @@ function onTunnelControlData(data, ws) { if (ws == null) { ws = this; } if (typeof data == 'string') { try { obj = JSON.parse(data); } catch (e) { sendConsoleText('Invalid control JSON: ' + data); return; } } else if (typeof data == 'object') { obj = data; } else { return; } - //sendConsoleText('onTunnelControlData(' + ws.httprequest.protocol + '): ' + JSON.stringify(data)); + sendConsoleText('onTunnelControlData(' + ws.httprequest.protocol + '): ' + JSON.stringify(data)); //console.log('onTunnelControlData: ' + JSON.stringify(data)); - if (obj.action) { - switch (obj.action) { - case 'lock': { - // Lock the current user out of the desktop - try { - if (process.platform == 'win32') { - MeshServerLogEx(53, null, "Locking remote user out of desktop", ws.httprequest); - var child = require('child_process'); - child.execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'RunDll32.exe user32.dll,LockWorkStation'], { type: 1 }); - } - } catch (e) { } - break; - } - default: - // Unknown action, ignore it. - break; - } - return; - } - switch (obj.type) { + case 'lock': { + // Look for a TSID + var tsid = null; + if ((ws.httprequest.xoptions != null) && (typeof ws.httprequest.xoptions.tsid == 'number')) { tsid = ws.httprequest.xoptions.tsid; } + + // Lock the current user out of the desktop + try { + if (process.platform == 'win32') { + MeshServerLogEx(53, null, "Locking remote user out of desktop", ws.httprequest); + var child = require('child_process'); + child.execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'RunDll32.exe user32.dll,LockWorkStation'], { type: 1, uid: tsid }); + } + } catch (e) { } + break; + } case 'options': { // These are additional connection options passed in the control channel. //sendConsoleText('options: ' + JSON.stringify(obj)); diff --git a/views/default.handlebars b/views/default.handlebars index 64303116..eddde3ec 100644 --- a/views/default.handlebars +++ b/views/default.handlebars @@ -6762,9 +6762,9 @@ meshserver.send({ action: 'toast', nodeids: [ currentNode._id ], title: decodeURIComponent('{{{extitle}}}'), msg: Q('d2devToast').value }); } + // Lock desktop function deviceLockFunction() { - if (xxdialogMode) return; - if ((desktop != null) && (desktop.contype == 1)) { desktop.sendCtrlMsg('{"action":"lock"}'); } // Lock desktop + if ((xxdialogMode == null) && (desktop != null) && (desktop.contype == 1)) { setDialogMode(2, "Lock Desktop", 3, function() { if ((desktop != null) && (desktop.contype == 1)) { desktop.sendCtrlMsg('{"ctrlChannel":"102938","type":"lock"}'); } }, "Lock user desktop?"); } } function showShareDevice() { @@ -7465,8 +7465,7 @@ QV('DeskRecordButton', (deskState == 3) && (Q('Desk')['toBlob'] != null) && (desktop.m.StartRecording != null)); QV('DeskChatButton', ((rights & 16384) != 0) && (browserfullscreen == false) && (inputAllowed) && (currentNode.agent) && online); QV('DeskNotifyButton', ((rights & 16384) != 0) && (browserfullscreen == false) && (currentNode.agent) && (currentNode.agent.id < 5) && (inputAllowed) && (currentNode.agent) && online); - //QV('DeskLockButton', ((rights & 16384) != 0) && (browserfullscreen == false) && (currentNode.agent) && (currentNode.agent.id < 5) && (inputAllowed) && (currentNode.agent) && (deskState == 3)); - QV('DeskLockButton', false); // TODO: Work on adding remote desktop lock feature. + QV('DeskLockButton', ((rights & 16384) != 0) && (browserfullscreen == false) && (currentNode.agent) && (currentNode.agent.id < 5) && (inputAllowed) && (currentNode.agent) && (deskState == 3)); QV('DeskToolsButton', (deskState == 3) && (currentNode.agent) && online); QE('DeskToolsButton', inputAllowed); QV('DeskOpenWebButton', (browserfullscreen == false) && (inputAllowed) && (currentNode.agent) && online);