More work on RDP integration to Desktop tab.

Ylian Saint-Hilaire committed May 3, 2022 at 13:31 UTC 3d549dc18706e040ed8d66b62e649e9044b7e8c6
4 files changed +28 -19
agents/meshcmd.js
+3 -2
@@ -244,6 +244,7 @@ function run(argv) {
244 console.log('Starts MicroLMS on this computer, allowing local access to Intel AMT on TCP ports 16992 and 16993 when applicable. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. These certificates hashes are used by Intel AMT when performing activation into ACM mode. Example usage:\r\n\r\n meshcmd microlms');
245 console.log('\r\nPossible arguments:\r\n');
246 console.log(' --noconsole MeshCommander for LMS will no be available on port 16994.');
247 + console.log(' --bindany Bind to all network interfaces.');
248 console.log('\r\nRun as a background service:\r\n');
249 console.log(' microlms install/uninstall/start/stop.');
250 } else if (action == 'amtccm') {
@@ -1586,7 +1587,7 @@ function startLms(func, lmscommander, tag) {
1587 amtMei.on('error', function (e) { console.log('startLms() error: ' + e); exit(1); return; });
1588 //console.log("PTHI Connected.");
1589
1589 - try { amtLms = new lme_heci({ debug: settings.lmsdebug }); } catch (ex) { if (func != null) { func(0, tag); } return; }
1590 + try { amtLms = new lme_heci({ debug: settings.lmsdebug, bindany: settings.bindany }); } catch (ex) { if (func != null) { func(0, tag); } return; }
1591 amtLms.promise = ret;
1592 amtLms.on('error', function (e) {
1593 //console.log('LME connection failed', e);
@@ -1631,7 +1632,7 @@ function startLms(func, lmscommander, tag) {
1632 }
1633
1634 });
1634 - return (ret);
1635 + return ret;
1636 }
1637
1638 function startMeshCommanderLms() {
public/scripts/agent-rdp-0.0.1.js
+5 -2
@@ -118,6 +118,7 @@ var CreateRDPDesktop = function (canvasid) {
118 obj.m.mousemove = function (e) {
119 if (!obj.socket || (obj.State != 3)) return;
120 var m = getMousePosition(e);
121 + if ((m.x < 0) || (m.y < 0) || (m.x > obj.ScreenWidth) || (m.y > obj.ScreenHeight)) return;
122 obj.mouseNagleData = ['mouse', m.x, m.y, 0, false];
123 if (obj.mouseNagleTimer == null) { obj.mouseNagleTimer = setTimeout(function () { obj.socket.send(JSON.stringify(obj.mouseNagleData)); obj.mouseNagleTimer = null; }, 50); }
124 e.preventDefault();
@@ -125,16 +126,18 @@ var CreateRDPDesktop = function (canvasid) {
126 }
127 obj.m.mouseup = function (e) {
128 if (!obj.socket || (obj.State != 3)) return;
128 - if (obj.mouseNagleTimer != null) { clearTimeout(obj.mouseNagleTimer); obj.mouseNagleTimer = null; }
129 var m = getMousePosition(e);
130 + if ((m.x < 0) || (m.y < 0) || (m.x > obj.ScreenWidth) || (m.y > obj.ScreenHeight)) return;
131 + if (obj.mouseNagleTimer != null) { clearTimeout(obj.mouseNagleTimer); obj.mouseNagleTimer = null; }
132 obj.socket.send(JSON.stringify(['mouse', m.x, m.y, mouseButtonMap(e.button), false]));
133 e.preventDefault();
134 return false;
135 }
136 obj.m.mousedown = function (e) {
137 if (!obj.socket || (obj.State != 3)) return;
136 - if (obj.mouseNagleTimer != null) { clearTimeout(obj.mouseNagleTimer); obj.mouseNagleTimer = null; }
138 var m = getMousePosition(e);
139 + if ((m.x < 0) || (m.y < 0) || (m.x > obj.ScreenWidth) || (m.y > obj.ScreenHeight)) return;
140 + if (obj.mouseNagleTimer != null) { clearTimeout(obj.mouseNagleTimer); obj.mouseNagleTimer = null; }
141 obj.socket.send(JSON.stringify(['mouse', m.x, m.y, mouseButtonMap(e.button), true]));
142 e.preventDefault();
143 return false;
rdp/core/type.js
+1 -1
@@ -145,7 +145,7 @@ Type.prototype.read = function(s) {
145
146 if(oldValue !== this.value) {
147 log.error('constant value mismatch ' + oldValue + ' != ' + this.value);
148 - throw new error.ProtocolError("NODE_RDP_CORE_TYPE_CONSTANT_VALUE_MISMATCH", oldValue, this.value);
148 + throw new error.ProtocolError("NODE_RDP_CORE_TYPE_CONSTANT_VALUE_MISMATCH, OLD:" + oldValue + ", NEW:" + this.value);
149 }
150 }
151 else {
views/default.handlebars
+19 -14
@@ -88,10 +88,9 @@
88 <div class="cmtext" onclick="cmtermaction(100,event)">Login Shell</div>
89 </div>
90 <div id="deskConnectContextMenu" class="contextMenu noselect" style="display:none;min-width:0px">
91 - <div id="deskConnectContextMenu1" class="cmtext" onclick="cmdeskaction(1,event)">Ask Consent + Bar</div>
92 - <div id="deskConnectContextMenu2" class="cmtext" onclick="cmdeskaction(2,event)">Ask Consent</div>
93 - <div id="deskConnectContextMenu3" class="cmtext" onclick="cmdeskaction(3,event)">Privacy Bar</div>
94 - <div id="deskConnectContextMenu4" class="cmtext" onclick="cmdeskaction(4,event)">RDP</div>
91 + <div class="cmtext" onclick="cmdeskaction(1,event)">Ask Consent + Bar</div>
92 + <div class="cmtext" onclick="cmdeskaction(2,event)">Ask Consent</div>
93 + <div class="cmtext" onclick="cmdeskaction(3,event)">Privacy Bar</div>
94 </div>
95 <div id="deskDisconnectContextMenu" class="contextMenu noselect" style="display:none;min-width:0px">
96 <div class="cmtext" onclick="cmdeskaction(10,event)">Disconnect and Lock</div>
@@ -646,7 +645,13 @@
645 <div id="desktopCustomUiButtons" style="float:left"></div>
646 </div>
647 <div>
649 - <input type="button" id="autoconnectbutton1" value="AutoConnect" onclick=autoConnectDesktop(event) onkeypress="return false" onkeydown="return false" style="display:none;margin-right:4px" /><span id=connectbutton1span style="margin-right:4px"><input type=button id=connectbutton1 cmenu="deskConnectButton" value="Connect" onclick=connectDesktop(event,3) onkeypress="return false" onkeydown="return false" disabled="disabled" /></span><span id=connectbutton1hspan style="margin-right:4px"><input type=button id=connectbutton1h value="HW Connect" title="Connect using Intel&reg; AMT hardware KVM" onclick=connectDesktop(event,2) onkeypress="return false" onkeydown="return false" disabled="disabled" /></span><span id=disconnectbutton1span style="margin-right:4px"><input type=button id=disconnectbutton1 cmenu="deskDisconnectButton" value="Disconnect" onclick=connectDesktop(event,0) onkeypress="return false" onkeydown="return false" /></span><span id="deskstatus" style="line-height:22px">Disconnected</span><span id="deskmetadata"></span>
648 + <input type="button" id="autoconnectbutton1" value="AutoConnect" onclick=autoConnectDesktop(event) onkeypress="return false" onkeydown="return false" style="display:none;margin-right:4px" />
649 + <span id=connectbutton1span><input type=button id=connectbutton1 cmenu="deskConnectButton" title="Connect using MeshAgent remote desktop" value="Connect" onclick=connectDesktop(event,3) onkeypress="return false" onkeydown="return false" disabled="disabled" /></span>
650 + <span id=connectbutton1rspan><input type=button id=connectbutton1r cmenu="altPortContextMenu" value="RDP Connect" title="Connect using RDP" onclick=askRdpCredentials() onkeypress="return false" onkeydown="return false" disabled="disabled" /></span>
651 + <span id=connectbutton1hspan><input type=button id=connectbutton1h value="HW Connect" title="Connect using Intel&reg; AMT hardware KVM" onclick=connectDesktop(event,2) onkeypress="return false" onkeydown="return false" disabled="disabled" /></span>
652 + <span id=disconnectbutton1span><input type=button id=disconnectbutton1 cmenu="deskDisconnectButton" value="Disconnect" onclick=connectDesktop(event,0) onkeypress="return false" onkeydown="return false" /></span>
653 + <span id="deskstatus" style="line-height:22px">Disconnected</span>
654 + <span id="deskmetadata"></span>
655 </div>
656 </div>
657 <div id=deskarea3x>
@@ -5778,10 +5783,6 @@
5783 // Desktop connect button context menu
5784 if ((currentNode == null) || (currentNode.agent == null)) return true;
5785 contextelement = elem;
5781 - QV('deskConnectContextMenu1', currentNode.mtype == 2); // Ask Consent + Bar
5782 - QV('deskConnectContextMenu2', currentNode.mtype == 2); // Ask Consent
5783 - QV('deskConnectContextMenu3', currentNode.mtype == 2); // Privacy Bar
5784 - QV('deskConnectContextMenu4', (currentNode.agent.id == 3) || (currentNode.agent.id == 4)); // RDP
5786 showContextMenuDiv(document.getElementById('deskConnectContextMenu'), event.pageX, event.pageY);
5787 break;
5788 }
@@ -7157,7 +7158,7 @@
7158 // mesh.mtype: 1 = Intel AMT only, 2 = Mesh Agent, 3 = Local Device
7159 // node.agent.caps (bitmask): 1 = Desktop, 2 = Terminal, 4 = Files, 8 = Console
7160 QV('MainDevDesktop', desktopAccess && ((((node.agent == null) && (node.intelamt != null) && ((typeof node.intelamt.sku !== 'number') || ((node.intelamt.sku & 8) != 0)))
7160 - || ((node.agent != null) && ((node.agent.caps == null) || ((node.agent.caps & 1) != 0) || (node.intelamt && (node.intelamt.state == 2)))))
7161 + || ((node.agent != null) && ((node.agent.caps == null) || ((node.agent.caps & 1) != 0) || (node.intelamt && (node.intelamt.state == 2)))) || ((node.mtype == 3) && ((node.agent.id == 3) || (node.agent.id == 4))))
7162 && ((meshrights & 8) || (meshrights & 256)))
7163 );
7164 QV('MainDevTerminal', (((node.agent == null) && (node.intelamt != null)) || ((node.agent) && (node.agent.caps == null)) || ((node.agent) && ((node.agent.caps & 2) != 0)) || (node.intelamt && (node.intelamt.state == 2))) && (meshrights & 8) && terminalAccess);
@@ -8251,6 +8252,7 @@
8252 // Show the right buttons
8253 QV('disconnectbutton1span', (deskState != 0));
8254 QV('connectbutton1span', (deskState == 0) && ((rights & 8) || (rights & 256)) && (currentNode.agent != null) && (currentNode.agent.caps & 1));
8255 + QV('connectbutton1rspan', ((features & 0x40000000) == 0) && (deskState == 0) && (rights & 8) && (currentNode.agent != null) && ((currentNode.agent.id == 4) || (currentNode.agent.id == 5)));
8256 if (mtype == 1) {
8257 QV('connectbutton1hspan',
8258 (deskState == 0) &&
@@ -8282,6 +8284,7 @@
8284 var inputAllowed = ((features2 & 0x2000) == 0) && ((currentNode.agent == null) || (currentNode.agent.id != 14)) && ((rights == 0xFFFFFFFF) || (((rights & 8) != 0) && ((rights & 256) == 0) && ((rights & 4096) == 0)));
8285 var online = ((currentNode.conn & 1) != 0); // If Agent (1) connected, enable remote desktop
8286 QE('connectbutton1', online);
8287 + QE('connectbutton1r', online || (currentNode.mtype == 3));
8288 var hwonline = ((currentNode.conn & 6) != 0); // If CIRA (2) or AMT (4) connected, enable hardware terminal
8289 QE('connectbutton1h', hwonline);
8290 QV('deskFocusBtn', (desktop != null) && (desktop.contype == 2) && (deskState != 0) && (desktopsettings.showfocus));
@@ -8298,9 +8301,9 @@
8301 QV('DeskTimer', deskState == 3);
8302
8303 // Enable browser clipboard read if supported
8301 - QV('DeskClipboardOutButton', online && inputAllowed && ((features2 & 0x1000) == 0) && (navigator.clipboard != null) && (navigator.clipboard.readText != null) && ((desktopsettings.autoclipboard != true) || (navigator.clipboard == null) || (navigator.clipboard.readText == null)));
8304 + QV('DeskClipboardOutButton', online && inputAllowed && ((desktop == null) || (desktop.contype != 4)) && ((features2 & 0x1000) == 0) && (navigator.clipboard != null) && (navigator.clipboard.readText != null) && ((desktopsettings.autoclipboard != true) || (navigator.clipboard == null) || (navigator.clipboard.readText == null)));
8305 QV('d7deskAutoClipboardLabel', (navigator.clipboard.readText != null) && ((features2 & 0x1000) == 0));
8303 - QV('DeskClipboardInButton', online && inputAllowed && ((features2 & 0x0800) == 0) && (navigator.clipboard != null) && (navigator.clipboard.writeText != null) && ((desktopsettings.autoclipboard != true) || (navigator.clipboard == null) || (navigator.clipboard.readText == null)));
8306 + QV('DeskClipboardInButton', online && inputAllowed && ((desktop == null) || (desktop.contype != 4)) && ((features2 & 0x0800) == 0) && (navigator.clipboard != null) && (navigator.clipboard.writeText != null) && ((desktopsettings.autoclipboard != true) || (navigator.clipboard == null) || (navigator.clipboard.readText == null)));
8307
8308 if (deskState != 3) {
8309 QV('DeskInputLockedButton', false);
@@ -8510,7 +8513,7 @@
8513 x += addHtmlValue("Domain", '<input type=text id=d2domain style=width:230px maxlength=128 />');
8514 x += addHtmlValue("Username", '<input type=text id=d2user style=width:230px onKeyUp=askRdpCredentialsValidate() maxlength=128 />');
8515 x += addHtmlValue("Password", '<input type=password id=d2pass style=width:230px maxlength=128 autocomplete=off />');
8513 - x += addHtmlValue("", '<label><input type="checkbox" id=d2savecred>' + "Remember credentials" + '</label>');
8516 + if ((features2 & 0x00400000) == 0) { x += addHtmlValue("", '<label><input type="checkbox" id=d2savecred>' + "Remember credentials" + '</label>'); }
8517 x + '</div></div>';
8518 setDialogMode(2, "RDP Credentials", 3, askRdpCredentialsEx, x);
8519 }
@@ -8525,7 +8528,9 @@
8528 if ((currentNode.rdp == 1) && (Q('d2mode').value == 1)) {
8529 connectDesktop(null, 4, { servercred: true });
8530 } else {
8528 - connectDesktop(null, 4, { domain: Q('d2domain').value, username: Q('d2user').value, password: Q('d2pass').value, savecred: Q('d2savecred').checked });
8531 + savecred = false;
8532 + if ((features2 & 0x00400000) == 0) { savecred = Q('d2savecred').checked; }
8533 + connectDesktop(null, 4, { domain: Q('d2domain').value, username: Q('d2user').value, password: Q('d2pass').value, savecred: savecred });
8534 }
8535 }
8536