Updated to support Connection Bar for KVM
Bryan Roe committed
Oct 11, 2019 at 10:53 UTC
e3419f4d9dcca0198f0cbb515ff69395d4be4211
1 file changed
+93
-6
agents/meshcore.js
+93
-6
@@ -1192,7 +1192,8 @@ function createMeshCore(agent)
1192
this.httprequest.desktop.kvm.parent = this.httprequest.desktop;
1193
this.desktop = this.httprequest.desktop;
1194
1195
- this.end = function () {
1195
+ this.end = function ()
1196
+ {
1197
--this.desktop.kvm.connectionCount;
1198
1199
// Unpipe the web socket
@@ -1205,14 +1206,55 @@ function createMeshCore(agent)
1206
this.httprequest.desktop.kvm.unpipe(this.rtcchannel);
1207
}
1208
1208
- if (this.desktop.kvm.connectionCount == 0) {
1209
+ if (this.desktop.kvm.connectionCount == 0)
1210
+ {
1211
// Display a toast message. This may not be supported on all platforms.
1212
// try { require('toaster').Toast('MeshCentral', 'Remote Desktop Control Ended.'); } catch (ex) { }
1213
1214
this.httprequest.desktop.kvm.end();
1215
+ if(this.httprequest.desktop.kvm.connectionBar)
1216
+ {
1217
+ this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
1218
+ this.httprequest.desktop.kvm.connectionBar.close();
1219
+ this.httprequest.desktop.kvm.connectionBar = null;
1220
+ }
1221
+ }
1222
+ else
1223
+ {
1224
+ for(var i in this.httprequest.desktop.kvm.users)
1225
+ {
1226
+ if(this.httprequest.desktop.kvm.users[i] == this.httprequest.username)
1227
+ {
1228
+ this.httprequest.desktop.kvm.users.splice(i, 1);
1229
+ this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
1230
+ this.httprequest.desktop.kvm.connectionBar.close();
1231
+
1232
+ this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')('Sharing desktop with: ' + this.httprequest.desktop.kvm.users.sort().join(', '));
1233
+ this.httprequest.desktop.kvm.connectionBar.httprequest = this.httprequest;
1234
+ this.httprequest.desktop.kvm.connectionBar.on('close', function ()
1235
+ {
1236
+ MeshServerLog('Remote Desktop Connection forcefully closed by local user (' + this.httprequest.remoteaddr + ')', this.httprequest);
1237
+ for (var i in this.httprequest.desktop.kvm._pipedStreams)
1238
+ {
1239
+ this.httprequest.desktop.kvm._pipedStreams[i].end();
1240
+ }
1241
+ this.httprequest.desktop.kvm.end();
1242
+ });
1243
+ break;
1244
+ }
1245
+ }
1246
}
1247
};
1215
- if (this.httprequest.desktop.kvm.hasOwnProperty("connectionCount")) { this.httprequest.desktop.kvm.connectionCount++; } else { this.httprequest.desktop.kvm.connectionCount = 1; }
1248
+ if (this.httprequest.desktop.kvm.hasOwnProperty("connectionCount"))
1249
+ {
1250
+ this.httprequest.desktop.kvm.connectionCount++;
1251
+ this.httprequest.desktop.kvm.users.push(this.httprequest.username);
1252
+ }
1253
+ else
1254
+ {
1255
+ this.httprequest.desktop.kvm.connectionCount = 1;
1256
+ this.httprequest.desktop.kvm.users = [this.httprequest.username];
1257
+ }
1258
1259
if ((this.httprequest.rights == 0xFFFFFFFF) || (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) != 0) && ((this.httprequest.rights & MESHRIGHT_REMOTEVIEW) == 0))) {
1260
// If we have remote control rights, pipe the KVM input
@@ -1239,10 +1281,32 @@ function createMeshCore(agent)
1281
// Success
1282
MeshServerLog('Starting remote desktop after local user accepted (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1283
this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: null }));
1242
- if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 1)) {
1284
+ if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 1))
1285
+ {
1286
// User Notifications is required
1287
try { require('toaster').Toast('MeshCentral', this.ws.httprequest.username + ' started a remote desktop session.'); } catch (ex) { }
1288
}
1289
+ if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 0x40))
1290
+ {
1291
+ // Connection Bar is required
1292
+ MeshServerLog('Remote Desktop Connection Bar Activated/Updated (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1293
+ if (this.ws.httprequest.desktop.kvm.connectionBar)
1294
+ {
1295
+ this.ws.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
1296
+ this.ws.httprequest.desktop.kvm.connectionBar.close();
1297
+ }
1298
+ this.ws.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')('Sharing desktop with: ' + this.ws.httprequest.desktop.kvm.users.sort().join(', '));
1299
+ this.ws.httprequest.desktop.kvm.connectionBar.httprequest = this.ws.httprequest;
1300
+ this.ws.httprequest.desktop.kvm.connectionBar.on('close', function ()
1301
+ {
1302
+ MeshServerLog('Remote Desktop Connection forcefully closed by local user (' + this.httprequest.remoteaddr + ')', this.httprequest);
1303
+ for (var i in this.httprequest.desktop.kvm._pipedStreams)
1304
+ {
1305
+ this.httprequest.desktop.kvm._pipedStreams[i].end();
1306
+ }
1307
+ this.httprequest.desktop.kvm.end();
1308
+ });
1309
+ }
1310
this.ws.httprequest.desktop.kvm.pipe(this.ws, { dataTypeSkip: 1 });
1311
this.ws.resume();
1312
},
@@ -1256,13 +1320,36 @@ function createMeshCore(agent)
1320
else
1321
{
1322
// User Consent Prompt is not required
1259
- if (this.httprequest.consent && (this.httprequest.consent & 1)) {
1323
+ if (this.httprequest.consent && (this.httprequest.consent & 1))
1324
+ {
1325
// User Notifications is required
1326
MeshServerLog('Started remote desktop with toast notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1327
try { require('toaster').Toast('MeshCentral', this.httprequest.username + ' started a remote desktop session.'); } catch (ex) { }
1263
- } else {
1328
+ } else
1329
+ {
1330
MeshServerLog('Started remote desktop without notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1331
}
1332
+ if (this.httprequest.consent && (this.httprequest.consent & 0x40))
1333
+ {
1334
+ // Connection Bar is required
1335
+ MeshServerLog('Remote Desktop Connection Bar Activated/Updated (' + this.httprequest.remoteaddr + ')', this.httprequest);
1336
+ if(this.httprequest.desktop.kvm.connectionBar)
1337
+ {
1338
+ this.httprequest.desktop.kvm.connectionBar.removeAllListeners('close');
1339
+ this.httprequest.desktop.kvm.connectionBar.close();
1340
+ }
1341
+ this.httprequest.desktop.kvm.connectionBar = require('notifybar-desktop')('Sharing desktop with: ' + this.httprequest.desktop.kvm.users.sort().join(', '));
1342
+ this.httprequest.desktop.kvm.connectionBar.httprequest = this.httprequest;
1343
+ this.httprequest.desktop.kvm.connectionBar.on('close', function ()
1344
+ {
1345
+ MeshServerLog('Remote Desktop Connection forcefully closed by local user (' + this.httprequest.remoteaddr + ')', this.httprequest);
1346
+ for (var i in this.httprequest.desktop.kvm._pipedStreams)
1347
+ {
1348
+ this.httprequest.desktop.kvm._pipedStreams[i].end();
1349
+ }
1350
+ this.httprequest.desktop.kvm.end();
1351
+ });
1352
+ }
1353
this.httprequest.desktop.kvm.pipe(this, { dataTypeSkip: 1 });
1354
}
1355