Updated connection bar logic, to log an event if it fails

Bryan Roe committed Oct 25, 2019 at 10:33 UTC a31e3040a2f3f83594fb2ab23cdd8687256d8138
1 file changed +76 -20
agents/meshcore.js
+76 -20
@@ -1201,7 +1201,7 @@ function createMeshCore(agent) {
1201 {
1202 for(var i in this.httprequest.desktop.kvm.users)
1203 {
1204 - if(this.httprequest.desktop.kvm.users[i] == this.httprequest.username)
1204 + if (this.httprequest.desktop.kvm.users[i] == this.httprequest.username && this.httprequest.desktop.kvm.connectionBar)
1205 {
1206 this.httprequest.desktop.kvm.users.splice(i, 1);
1207 this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
@@ -1265,23 +1265,36 @@ function createMeshCore(agent) {
1265 if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 0x40))
1266 {
1267 // Connection Bar is required
1268 - MeshServerLog('Remote Desktop Connection Bar Activated/Updated (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1268 if (this.ws.httprequest.desktop.kvm.connectionBar)
1269 {
1270 this.ws.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
1271 this.ws.httprequest.desktop.kvm.connectionBar.close();
1272 }
1274 - this.ws.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')('Sharing desktop with: ' + this.ws.httprequest.desktop.kvm.users.sort().join(', '));
1275 - this.ws.httprequest.desktop.kvm.connectionBar.httprequest = this.ws.httprequest;
1276 - this.ws.httprequest.desktop.kvm.connectionBar.on('close', function ()
1273 + try
1274 {
1278 - MeshServerLog('Remote Desktop Connection forcefully closed by local user (' + this.httprequest.remoteaddr + ')', this.httprequest);
1279 - for (var i in this.httprequest.desktop.kvm._pipedStreams)
1275 + this.ws.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')('Sharing desktop with: ' + this.ws.httprequest.desktop.kvm.users.sort().join(', '));
1276 + MeshServerLog('Remote Desktop Connection Bar Activated/Updated (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1277 + }
1278 + catch(xx)
1279 + {
1280 + if(process.platform != 'darwin')
1281 {
1281 - this.httprequest.desktop.kvm._pipedStreams[i].end();
1282 + MeshServerLog('Remote Desktop Connection Bar Failed or Not Supported (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1283 }
1283 - this.httprequest.desktop.kvm.end();
1284 - });
1284 + }
1285 + if (this.ws.httprequest.desktop.kvm.connectionBar)
1286 + {
1287 + this.ws.httprequest.desktop.kvm.connectionBar.httprequest = this.ws.httprequest;
1288 + this.ws.httprequest.desktop.kvm.connectionBar.on('close', function ()
1289 + {
1290 + MeshServerLog('Remote Desktop Connection forcefully closed by local user (' + this.httprequest.remoteaddr + ')', this.httprequest);
1291 + for (var i in this.httprequest.desktop.kvm._pipedStreams)
1292 + {
1293 + this.httprequest.desktop.kvm._pipedStreams[i].end();
1294 + }
1295 + this.httprequest.desktop.kvm.end();
1296 + });
1297 + }
1298 }
1299 this.ws.httprequest.desktop.kvm.pipe(this.ws, { dataTypeSkip: 1 });
1300 this.ws.resume();
@@ -1306,23 +1319,33 @@ function createMeshCore(agent) {
1319 if (this.httprequest.consent && (this.httprequest.consent & 0x40))
1320 {
1321 // Connection Bar is required
1309 - MeshServerLog('Remote Desktop Connection Bar Activated/Updated (' + this.httprequest.remoteaddr + ')', this.httprequest);
1322 if(this.httprequest.desktop.kvm.connectionBar)
1323 {
1324 this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
1325 this.httprequest.desktop.kvm.connectionBar.close();
1326 }
1315 - this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')('Sharing desktop with: ' + this.httprequest.desktop.kvm.users.sort().join(', '));
1316 - this.httprequest.desktop.kvm.connectionBar.httprequest = this.httprequest;
1317 - this.httprequest.desktop.kvm.connectionBar.on('close', function ()
1327 + try
1328 {
1319 - MeshServerLog('Remote Desktop Connection forcefully closed by local user (' + this.httprequest.remoteaddr + ')', this.httprequest);
1320 - for (var i in this.httprequest.desktop.kvm._pipedStreams)
1329 + this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')('Sharing desktop with: ' + this.httprequest.desktop.kvm.users.sort().join(', '));
1330 + MeshServerLog('Remote Desktop Connection Bar Activated/Updated (' + this.httprequest.remoteaddr + ')', this.httprequest);
1331 + }
1332 + catch(xx)
1333 + {
1334 + MeshServerLog('Remote Desktop Connection Bar Failed or not Supported (' + this.httprequest.remoteaddr + ')', this.httprequest);
1335 + }
1336 + if (this.httprequest.desktop.kvm.connectionBar)
1337 + {
1338 + this.httprequest.desktop.kvm.connectionBar.httprequest = this.httprequest;
1339 + this.httprequest.desktop.kvm.connectionBar.on('close', function ()
1340 {
1322 - this.httprequest.desktop.kvm._pipedStreams[i].end();
1323 - }
1324 - this.httprequest.desktop.kvm.end();
1325 - });
1341 + MeshServerLog('Remote Desktop Connection forcefully closed by local user (' + this.httprequest.remoteaddr + ')', this.httprequest);
1342 + for (var i in this.httprequest.desktop.kvm._pipedStreams)
1343 + {
1344 + this.httprequest.desktop.kvm._pipedStreams[i].end();
1345 + }
1346 + this.httprequest.desktop.kvm.end();
1347 + });
1348 + }
1349 }
1350 this.httprequest.desktop.kvm.pipe(this, { dataTypeSkip: 1 });
1351 }
@@ -1764,6 +1787,39 @@ function createMeshCore(agent) {
1787 response = 'Available commands: \r\n' + fin + '.';
1788 break;
1789 }
1790 + case 'safemode':
1791 + if (process.platform != 'win32')
1792 + {
1793 + response = 'safemode only supported on Windows Platforms'
1794 + }
1795 + else
1796 + {
1797 + if (args['_'].length != 1)
1798 + {
1799 + response = 'Proper usage: safemode (ON|OFF|STATUS)'; // Display usage
1800 + }
1801 + else
1802 + {
1803 + switch(args['_'][0].toUpperCase())
1804 + {
1805 + default:
1806 + response = 'Proper usage: safemode (ON|OFF|STATUS)'; // Display usage
1807 + break;
1808 + case 'ON':
1809 + require('win-bcd').setKey('safeboot', 'Network');
1810 + require('win-bcd').enableSafeModeService('Mesh Agent');
1811 + break;
1812 + case 'OFF':
1813 + require('win-bcd').deleteKey('safeboot');
1814 + break;
1815 + case 'STATUS':
1816 + var nextboot = require('win-bcd').getKey('safeboot');
1817 + response = 'Current: ' + require('win-bcd').bootMode + ' , NextBoot: ' + (nextboot ? nextboot : 'NORMAL');
1818 + break;
1819 + }
1820 + }
1821 + }
1822 + break;
1823 /*
1824 case 'border':
1825 {