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® 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® 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