mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-03-09 15:40:18 +00:00
Compare commits
13 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88a765bb13 | ||
|
|
7ad4b917be | ||
|
|
d10173a018 | ||
|
|
0e3a6b4915 | ||
|
|
b949cecc5f | ||
|
|
c7cbf2f12a | ||
|
|
d49afdd7bf | ||
|
|
133e77c8c6 | ||
|
|
e404e86b9f | ||
|
|
c6da201af8 | ||
|
|
9a27d7637c | ||
|
|
5aa2467409 | ||
|
|
9398afd07e |
22 changed files with 10795 additions and 10345 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -295,8 +295,9 @@ if (process.platform == 'win32' && require('user-sessions').isRoot()) {
|
||||||
// Check the Agent Uninstall MetaData for correctness, as the installer may have written an incorrect value
|
// Check the Agent Uninstall MetaData for correctness, as the installer may have written an incorrect value
|
||||||
try {
|
try {
|
||||||
var writtenSize = 0, actualSize = Math.floor(require('fs').statSync(process.execPath).size / 1024);
|
var writtenSize = 0, actualSize = Math.floor(require('fs').statSync(process.execPath).size / 1024);
|
||||||
try { writtenSize = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize'); } catch (ex) { }
|
var serviceName = (_MSH().serviceName ? _MSH().serviceName : (require('_agentNodeId').serviceName() ? require('_agentNodeId').serviceName() : 'Mesh Agent'));
|
||||||
if (writtenSize != actualSize) { try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize', actualSize); } catch (ex) { } }
|
try { writtenSize = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + serviceName, 'EstimatedSize'); } catch (ex) { }
|
||||||
|
if (writtenSize != actualSize) { try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + serviceName, 'EstimatedSize', actualSize); } catch (ex) { } }
|
||||||
} catch (ex) { }
|
} catch (ex) { }
|
||||||
|
|
||||||
// Check to see if we are the Installed Mesh Agent Service, if we are, make sure we can run in Safe Mode
|
// Check to see if we are the Installed Mesh Agent Service, if we are, make sure we can run in Safe Mode
|
||||||
|
|
@ -310,6 +311,16 @@ if (process.platform == 'win32' && require('user-sessions').isRoot()) {
|
||||||
try { meshCheck = require('service-manager').manager.getService(svcname).isMe(); } catch (ex) { }
|
try { meshCheck = require('service-manager').manager.getService(svcname).isMe(); } catch (ex) { }
|
||||||
if (meshCheck && require('win-bcd').isSafeModeService && !require('win-bcd').isSafeModeService(svcname)) { require('win-bcd').enableSafeModeService(svcname); }
|
if (meshCheck && require('win-bcd').isSafeModeService && !require('win-bcd').isSafeModeService(svcname)) { require('win-bcd').enableSafeModeService(svcname); }
|
||||||
} catch (ex) { }
|
} catch (ex) { }
|
||||||
|
|
||||||
|
// Check the Agent Uninstall MetaData for DisplayVersion and update if not the same and only on windows
|
||||||
|
if (process.platform == 'win32') {
|
||||||
|
try {
|
||||||
|
var writtenDisplayVersion = 0, actualDisplayVersion = process.versions.commitDate.toString();
|
||||||
|
var serviceName = (_MSH().serviceName ? _MSH().serviceName : (require('_agentNodeId').serviceName() ? require('_agentNodeId').serviceName() : 'Mesh Agent'));
|
||||||
|
try { writtenDisplayVersion = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + serviceName, 'DisplayVersion'); } catch (ex) { }
|
||||||
|
if (writtenDisplayVersion != actualDisplayVersion) { try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + serviceName, 'DisplayVersion', actualDisplayVersion); } catch (ex) { } }
|
||||||
|
} catch (ex) { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.platform != 'win32') {
|
if (process.platform != 'win32') {
|
||||||
|
|
@ -4573,10 +4584,11 @@ function processConsoleCommand(cmd, args, rights, sessionid) {
|
||||||
if (process.platform == 'win32') {
|
if (process.platform == 'win32') {
|
||||||
// Check the Agent Uninstall MetaData for correctness, as the installer may have written an incorrect value
|
// Check the Agent Uninstall MetaData for correctness, as the installer may have written an incorrect value
|
||||||
var writtenSize = 0;
|
var writtenSize = 0;
|
||||||
try { writtenSize = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize'); } catch (ex) { response = ex; }
|
var serviceName = (_MSH().serviceName ? _MSH().serviceName : (require('_agentNodeId').serviceName() ? require('_agentNodeId').serviceName() : 'Mesh Agent'));
|
||||||
|
try { writtenSize = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + serviceName, 'EstimatedSize'); } catch (ex) { response = ex; }
|
||||||
if (writtenSize != actualSize) {
|
if (writtenSize != actualSize) {
|
||||||
response = "Size updated from: " + writtenSize + " to: " + actualSize;
|
response = "Size updated from: " + writtenSize + " to: " + actualSize;
|
||||||
try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MeshCentralAgent', 'EstimatedSize', actualSize); } catch (ex) { response = ex; }
|
try { require('win-registry').WriteKey(require('win-registry').HKEY.LocalMachine, 'Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\' + serviceName, 'EstimatedSize', actualSize); } catch (ex) { response = ex; }
|
||||||
} else
|
} else
|
||||||
{ response = "Agent Size: " + actualSize + " kb"; }
|
{ response = "Agent Size: " + actualSize + " kb"; }
|
||||||
} else
|
} else
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -123,6 +123,10 @@ Use of the optional file `plugin_name.js` in the optional folder `modules_meshco
|
||||||
Much of MeshCentral revolves around returning objects for your structures, and plugins are no different. Within your plugin you can traverse all the way up to the web server and MeshCentral Server classes to access all the functionality those layers provide. This is done by passing the current object to newly created objects, and assigning that reference to a `parent` variable within that object.
|
Much of MeshCentral revolves around returning objects for your structures, and plugins are no different. Within your plugin you can traverse all the way up to the web server and MeshCentral Server classes to access all the functionality those layers provide. This is done by passing the current object to newly created objects, and assigning that reference to a `parent` variable within that object.
|
||||||
|
|
||||||
|
|
||||||
|
## Ping-Pong
|
||||||
|
|
||||||
|
If you build a plugin which makes use of `meshrelay.ashx`, keep in mind to either handle ping-pong messages (`serverPing`, `serverPong`) on the control channel or to request MeshCentral to not send such messages through sending the `noping=1` parameter in the connection URL. For a deeper sight search for "PING/PONG" in `meshrelay.js`.
|
||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
Versioning your plugin correctly and consistently is essential to ensure users of your plugin are prompted to upgrade when it is available. Semantic versioning is recommended.
|
Versioning your plugin correctly and consistently is essential to ensure users of your plugin are prompted to upgrade when it is available. Semantic versioning is recommended.
|
||||||
|
|
|
||||||
19
meshuser.js
19
meshuser.js
|
|
@ -601,11 +601,11 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
}
|
}
|
||||||
if (typeof domain.userconsentflags == 'number') { serverinfo.consent = domain.userconsentflags; }
|
if (typeof domain.userconsentflags == 'number') { serverinfo.consent = domain.userconsentflags; }
|
||||||
if ((typeof domain.usersessionidletimeout == 'number') && (domain.usersessionidletimeout > 0)) {serverinfo.timeout = (domain.usersessionidletimeout * 60 * 1000); }
|
if ((typeof domain.usersessionidletimeout == 'number') && (domain.usersessionidletimeout > 0)) {serverinfo.timeout = (domain.usersessionidletimeout * 60 * 1000); }
|
||||||
if (typeof domain.logoutOnIdleSessionTimeout == 'boolean') {
|
if (typeof domain.logoutonidlesessiontimeout == 'boolean') {
|
||||||
serverinfo.logoutOnIdleSessionTimeout = domain.logoutOnIdleSessionTimeout;
|
serverinfo.logoutonidlesessiontimeout = domain.logoutonidlesessiontimeout;
|
||||||
} else {
|
} else {
|
||||||
// Default
|
// Default
|
||||||
serverinfo.logoutOnIdleSessionTimeout = true;
|
serverinfo.logoutonidlesessiontimeout = true;
|
||||||
}
|
}
|
||||||
if (user.siteadmin === SITERIGHT_ADMIN) {
|
if (user.siteadmin === SITERIGHT_ADMIN) {
|
||||||
if (parent.parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0) { serverinfo.manageAllDeviceGroups = true; }
|
if (parent.parent.config.settings.managealldevicegroups.indexOf(user._id) >= 0) { serverinfo.manageAllDeviceGroups = true; }
|
||||||
|
|
@ -5077,9 +5077,18 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
if ((common.validateStrArray(command.nodeids, 1) == false) && (command.nodeids != null)) break; // Check nodeids
|
if ((common.validateStrArray(command.nodeids, 1) == false) && (command.nodeids != null)) break; // Check nodeids
|
||||||
if (common.validateString(command.type, 3, 4) == false) break; // Check type
|
if (common.validateString(command.type, 3, 4) == false) break; // Check type
|
||||||
|
|
||||||
|
const links = parent.GetAllMeshIdWithRights(user);
|
||||||
|
const extraids = getUserExtraIds();
|
||||||
|
db.GetAllTypeNoTypeFieldMeshFiltered(links, extraids, domain.id, 'node', null, obj.deviceSkip, obj.deviceLimit, function (err, docs) {
|
||||||
|
if (docs == null) return;
|
||||||
|
const ids = [];
|
||||||
|
if (command.nodeids != null) {
|
||||||
// Create a list of node ids and query them for last device connection time
|
// Create a list of node ids and query them for last device connection time
|
||||||
const ids = []
|
|
||||||
for (var i in command.nodeids) { ids.push('lc' + command.nodeids[i]); }
|
for (var i in command.nodeids) { ids.push('lc' + command.nodeids[i]); }
|
||||||
|
} else {
|
||||||
|
// Create a list of node ids for this user and query them for last device connection time
|
||||||
|
for (var i in docs) { ids.push('lc' + docs[i]._id); }
|
||||||
|
}
|
||||||
db.GetAllIdsOfType(ids, domain.id, 'lastconnect', function (err, docs) {
|
db.GetAllIdsOfType(ids, domain.id, 'lastconnect', function (err, docs) {
|
||||||
const lastConnects = {};
|
const lastConnects = {};
|
||||||
if (docs != null) { for (var i in docs) { lastConnects[docs[i]._id] = docs[i]; } }
|
if (docs != null) { for (var i in docs) { lastConnects[docs[i]._id] = docs[i]; } }
|
||||||
|
|
@ -5355,7 +5364,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
try { ws.send(JSON.stringify({ action: 'getDeviceDetails', data: output, type: type })); } catch (ex) { }
|
try { ws.send(JSON.stringify({ action: 'getDeviceDetails', data: output, type: type })); } catch (ex) { }
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'endDesktopMultiplex': {
|
case 'endDesktopMultiplex': {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "meshcentral",
|
"name": "meshcentral",
|
||||||
"version": "1.1.40",
|
"version": "1.1.42",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Remote Device Management",
|
"Remote Device Management",
|
||||||
"Remote Device Monitoring",
|
"Remote Device Monitoring",
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,7 @@ module.exports.pluginHandler = function (parent) {
|
||||||
try {
|
try {
|
||||||
obj.plugins[p][hookName](...args);
|
obj.plugins[p][hookName](...args);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("Error occurred while running plugin hook" + p + ':' + hookName + ' (' + e + ')');
|
console.log("Error occurred while running plugin hook " + p + ':' + hookName, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
2
public/scripts/amt-wsman-0.2.0-min.js
vendored
2
public/scripts/amt-wsman-0.2.0-min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -39,6 +39,7 @@ var meshCentralSourceFiles = [
|
||||||
"../views/messenger.handlebars",
|
"../views/messenger.handlebars",
|
||||||
"../views/player.handlebars",
|
"../views/player.handlebars",
|
||||||
"../views/sharing.handlebars",
|
"../views/sharing.handlebars",
|
||||||
|
"../views/sharing-mobile.handlebars",
|
||||||
"../views/mstsc.handlebars",
|
"../views/mstsc.handlebars",
|
||||||
"../views/ssh.handlebars",
|
"../views/ssh.handlebars",
|
||||||
"../emails/account-check.html",
|
"../emails/account-check.html",
|
||||||
|
|
|
||||||
20439
translate/translate.json
20439
translate/translate.json
File diff suppressed because it is too large
Load diff
|
|
@ -1524,10 +1524,24 @@
|
||||||
function setSessionActivity() { sessionActivity = Date.now(); }
|
function setSessionActivity() { sessionActivity = Date.now(); }
|
||||||
function checkIdleSessionTimeout() {
|
function checkIdleSessionTimeout() {
|
||||||
var delta = (Date.now() - sessionActivity);
|
var delta = (Date.now() - sessionActivity);
|
||||||
if (delta > serverinfo.timeout && serverinfo.logoutOnIdleSessionTimeout) {
|
if (delta > serverinfo.timeout) {
|
||||||
|
if (desktop != null) { // Disconnect remote desktop
|
||||||
|
desktop.Stop();
|
||||||
|
desktopNode = desktop = null;
|
||||||
|
}
|
||||||
|
if (terminal != null) { // Disconnect terminal
|
||||||
|
terminal.Stop();
|
||||||
|
terminal = null;
|
||||||
|
}
|
||||||
|
if (files != null) { // Disconnect files
|
||||||
|
files.Stop();
|
||||||
|
files = null;
|
||||||
|
}
|
||||||
|
if (serverinfo.logoutonidlesessiontimeout) {
|
||||||
window.location.href = 'logout';
|
window.location.href = 'logout';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function onMessage(server, message) {
|
function onMessage(server, message) {
|
||||||
switch (message.action) {
|
switch (message.action) {
|
||||||
|
|
@ -6805,7 +6819,19 @@
|
||||||
if (e.shiftKey == true) { meshserver.send({ action: 'uploadagentcore', nodeid: consoleNode._id, type: 'default' }); } // Upload default core
|
if (e.shiftKey == true) { meshserver.send({ action: 'uploadagentcore', nodeid: consoleNode._id, type: 'default' }); } // Upload default core
|
||||||
else if (e.altKey == true) { meshserver.send({ action: 'uploadagentcore', nodeid: consoleNode._id, type: 'clear' }); } // Clear the core
|
else if (e.altKey == true) { meshserver.send({ action: 'uploadagentcore', nodeid: consoleNode._id, type: 'clear' }); } // Clear the core
|
||||||
else if (e.ctrlKey == true) { p15uploadCore2(); } // Upload the core from a file
|
else if (e.ctrlKey == true) { p15uploadCore2(); } // Upload the core from a file
|
||||||
else { setDialogMode(2, "Perform Agent Action", 3, p15uploadCoreEx, addHtmlValue("Action", '<select id=d3coreMode style=width:230px><option value=1>' + "Upload default server core" + '</option><option value=2>' + "Clear the core" + '</option><option value=6>' + "Upload recovery core" + '</option><option value=7>' + "Upload tiny core" + '</option><option value=3>' + "Upload a core file" + '</option><option value=4>' + "Soft disconnect agent" + '</option><option value=5>' + "Hard disconnect agent" + '</option><option value=8>' + "Restart agent service" + '</select>')); }
|
else {
|
||||||
|
var htmlValue = '<select id=d3coreMode style=width:230px>' +
|
||||||
|
'<option value=1>' + "Upload default server core" + '</option>' +
|
||||||
|
'<option value=2>' + "Clear the core" + '</option>' +
|
||||||
|
'<option value=3>' + "Upload a core file" + '</option>' +
|
||||||
|
'<option value=4>' + "Soft disconnect agent" + '</option>' +
|
||||||
|
'<option value=5>' + "Hard disconnect agent" + '</option>' +
|
||||||
|
'<option value=6>' + "Upload recovery core" + '</option>' +
|
||||||
|
'<option value=7>' + "Upload tiny core" + '</option>' +
|
||||||
|
'<option value=8>' + "Restart agent service" + '</option>' +
|
||||||
|
'<option value=9>' + "Force agent update" + '</option></select>';
|
||||||
|
setDialogMode(2, "Perform Agent Action", 3, p15uploadCoreEx, addHtmlValue("Action", htmlValue));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function p15uploadCoreEx() {
|
function p15uploadCoreEx() {
|
||||||
|
|
@ -6833,6 +6859,9 @@
|
||||||
} else if (Q('d3coreMode').value == 8) {
|
} else if (Q('d3coreMode').value == 8) {
|
||||||
// Restart MeshAgent service
|
// Restart MeshAgent service
|
||||||
meshserver.send({ action: 'msg', type: 'console', nodeid: consoleNode._id, value:'service restart' });
|
meshserver.send({ action: 'msg', type: 'console', nodeid: consoleNode._id, value:'service restart' });
|
||||||
|
} else if (Q('d3coreMode').value == 9) {
|
||||||
|
// Update mesh agent
|
||||||
|
meshserver.send({ action: 'updateAgents', nodeids: [consoleNode._id] });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2447,18 +2447,29 @@
|
||||||
files.Stop();
|
files.Stop();
|
||||||
files = null;
|
files = null;
|
||||||
}
|
}
|
||||||
if (serverinfo.logoutOnIdleSessionTimeout) {
|
if (serverinfo.logoutonidlesessiontimeout) {
|
||||||
window.location.href = 'logout';
|
window.location.href = 'logout';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var ds = Math.round((serverinfo.timeout - delta) / 1000);
|
var ds = Math.round((serverinfo.timeout - delta) / 1000);
|
||||||
|
var sessionInProgress = desktop != null || terminal != null || files != null;
|
||||||
|
var show = serverinfo.logoutonidlesessiontimeout || sessionInProgress;
|
||||||
|
var isLogout = serverinfo.logoutonidlesessiontimeout;
|
||||||
|
var theText = ''; // Initialize theText
|
||||||
if (ds <= 60) {
|
if (ds <= 60) {
|
||||||
QH('idleTimeoutNotify', '<br />' + format((ds == 1)?"1 second until disconnect":"{0} seconds until disconnect", ds));
|
theText = isLogout
|
||||||
|
? (ds == 1 ? "1 second until logout" : "{0} seconds until logout")
|
||||||
|
: (ds == 1 ? "1 second until disconnect" : "{0} seconds until disconnect");
|
||||||
} else {
|
} else {
|
||||||
ds = Math.round(ds / 60);
|
ds = Math.round(ds / 60);
|
||||||
if (ds <= 5) { QH('idleTimeoutNotify', '<br />' + format((ds == 1)?"1 minute until disconnect":"{0} minutes until disconnect", ds)); }
|
if (ds <= 5) {
|
||||||
|
theText = isLogout
|
||||||
|
? (ds == 1 ? "1 minute until logout" : "{0} minutes until logout")
|
||||||
|
: (ds == 1 ? "1 minute until disconnect" : "{0} minutes until disconnect");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
QH('idleTimeoutNotify', show && theText ? '<br />' + format(theText, ds) : '');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onMessage(server, message) {
|
function onMessage(server, message) {
|
||||||
|
|
@ -12733,7 +12744,19 @@
|
||||||
if (e.shiftKey == true) { meshserver.send({ action: 'uploadagentcore', nodeids: [ consoleNode._id ], type: 'default' }); } // Upload default core
|
if (e.shiftKey == true) { meshserver.send({ action: 'uploadagentcore', nodeids: [ consoleNode._id ], type: 'default' }); } // Upload default core
|
||||||
else if (e.altKey == true) { meshserver.send({ action: 'uploadagentcore', nodeids: [ consoleNode._id ], type: 'clear' }); } // Clear the core
|
else if (e.altKey == true) { meshserver.send({ action: 'uploadagentcore', nodeids: [ consoleNode._id ], type: 'clear' }); } // Clear the core
|
||||||
else if (e.ctrlKey == true) { p15uploadCore2(); } // Upload the core from a file
|
else if (e.ctrlKey == true) { p15uploadCore2(); } // Upload the core from a file
|
||||||
else { setDialogMode(2, "Perform Agent Action", 3, p15uploadCoreEx, addHtmlValue("Action", '<select id=d3coreMode style=width:230px><option value=1>' + "Upload default server core" + '</option><option value=2>' + "Clear the core" + '</option><option value=6>' + "Upload recovery core" + '</option><option value=7>' + "Upload tiny core" + '</option><option value=3>' + "Upload a core file" + '</option><option value=4>' + "Soft disconnect agent" + '</option><option value=5>' + "Hard disconnect agent" + '</option><option value=8>' + "Restart agent service" + '</select>')); }
|
else {
|
||||||
|
var htmlValue = '<select id=d3coreMode style=width:230px>' +
|
||||||
|
'<option value=1>' + "Upload default server core" + '</option>' +
|
||||||
|
'<option value=2>' + "Clear the core" + '</option>' +
|
||||||
|
'<option value=3>' + "Upload a core file" + '</option>' +
|
||||||
|
'<option value=4>' + "Soft disconnect agent" + '</option>' +
|
||||||
|
'<option value=5>' + "Hard disconnect agent" + '</option>' +
|
||||||
|
'<option value=6>' + "Upload recovery core" + '</option>' +
|
||||||
|
'<option value=7>' + "Upload tiny core" + '</option>' +
|
||||||
|
'<option value=8>' + "Restart agent service" + '</option>' +
|
||||||
|
'<option value=9>' + "Force agent update" + '</option></select>';
|
||||||
|
setDialogMode(2, "Perform Agent Action", 3, p15uploadCoreEx, addHtmlValue("Action", htmlValue));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function p15uploadCoreEx() {
|
function p15uploadCoreEx() {
|
||||||
|
|
@ -12761,6 +12784,9 @@
|
||||||
} else if (Q('d3coreMode').value == 8) {
|
} else if (Q('d3coreMode').value == 8) {
|
||||||
// Restart MeshAgent service
|
// Restart MeshAgent service
|
||||||
meshserver.send({ action: 'msg', type: 'console', nodeid: consoleNode._id, value:'service restart' });
|
meshserver.send({ action: 'msg', type: 'console', nodeid: consoleNode._id, value:'service restart' });
|
||||||
|
} else if (Q('d3coreMode').value == 9) {
|
||||||
|
// Update mesh agent
|
||||||
|
meshserver.send({ action: 'updateAgents', nodeids: [ consoleNode._id ] });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2897,18 +2897,29 @@
|
||||||
files.Stop();
|
files.Stop();
|
||||||
files = null;
|
files = null;
|
||||||
}
|
}
|
||||||
if (serverinfo.logoutOnIdleSessionTimeout) {
|
if (serverinfo.logoutonidlesessiontimeout) {
|
||||||
window.location.href = 'logout';
|
window.location.href = 'logout';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var ds = Math.round((serverinfo.timeout - delta) / 1000);
|
var ds = Math.round((serverinfo.timeout - delta) / 1000);
|
||||||
|
var sessionInProgress = (desktop != null || terminal != null || files != null);
|
||||||
|
var show = serverinfo.logoutonidlesessiontimeout || sessionInProgress;
|
||||||
|
var isLogout = serverinfo.logoutonidlesessiontimeout;
|
||||||
|
var theText = '';
|
||||||
if (ds <= 60) {
|
if (ds <= 60) {
|
||||||
QH('idleTimeoutNotify', '<br />' + format((ds == 1) ? "1 second until disconnect" : "{0} seconds until disconnect", ds));
|
theText = isLogout
|
||||||
|
? (ds == 1 ? "1 second until logout" : "{0} seconds until logout")
|
||||||
|
: (ds == 1 ? "1 second until disconnect" : "{0} seconds until disconnect");
|
||||||
} else {
|
} else {
|
||||||
ds = Math.round(ds / 60);
|
ds = Math.round(ds / 60);
|
||||||
if (ds <= 5) { QH('idleTimeoutNotify', '<br />' + format((ds == 1) ? "1 minute until disconnect" : "{0} minutes until disconnect", ds)); }
|
if (ds <= 5) {
|
||||||
|
theText = isLogout
|
||||||
|
? (ds == 1 ? "1 minute until logout" : "{0} minutes until logout")
|
||||||
|
: (ds == 1 ? "1 minute until disconnect" : "{0} minutes until disconnect");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
QH('idleTimeoutNotify', show && theText ? '<br />' + format(theText, ds) : '');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onMessage(server, message) {
|
function onMessage(server, message) {
|
||||||
|
|
@ -12150,7 +12161,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function p13openfilefolder() {
|
function p13openfilefolder() {
|
||||||
setModalContent('xxAddAgent', "Open File/Folder", 'Are you sure you want to open this file/folder on the remote devices desktop ?');
|
setModalContent('xxAddAgent', "Open File/Folder", "Are you sure you want to open this file/folder on the remote devices desktop?");
|
||||||
showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13openfilefolderEx());
|
showModal('xxAddAgentModal', 'idx_dlgOkButton', () => p13openfilefolderEx());
|
||||||
}
|
}
|
||||||
function p13openfilefolderEx() {
|
function p13openfilefolderEx() {
|
||||||
|
|
@ -13567,7 +13578,17 @@
|
||||||
else if (e.altKey == true) { meshserver.send({ action: 'uploadagentcore', nodeids: [consoleNode._id], type: 'clear' }); } // Clear the core
|
else if (e.altKey == true) { meshserver.send({ action: 'uploadagentcore', nodeids: [consoleNode._id], type: 'clear' }); } // Clear the core
|
||||||
else if (e.ctrlKey == true) { p15uploadCore2(); } // Upload the core from a file
|
else if (e.ctrlKey == true) { p15uploadCore2(); } // Upload the core from a file
|
||||||
else {
|
else {
|
||||||
setModalContent('xxAddAgent', "Perform Agent Action", addHtmlFormFloating("Action", '<select id=d3coreMode class="form-select me-2"><option value=1>' + "Upload default server core" + '</option><option value=2>' + "Clear the core" + '</option><option value=6>' + "Upload recovery core" + '</option><option value=7>' + "Upload tiny core" + '</option><option value=3>' + "Upload a core file" + '</option><option value=4>' + "Soft disconnect agent" + '</option><option value=5>' + "Hard disconnect agent" + '</option><option value=8>' + "Restart agent service" + '</select>'));
|
var htmlValue = '<select id=d3coreMode class="form-select me-2">' +
|
||||||
|
'<option value=1>' + "Upload default server core" + '</option>' +
|
||||||
|
'<option value=2>' + "Clear the core" + '</option>' +
|
||||||
|
'<option value=3>' + "Upload a core file" + '</option>' +
|
||||||
|
'<option value=4>' + "Soft disconnect agent" + '</option>' +
|
||||||
|
'<option value=5>' + "Hard disconnect agent" + '</option>' +
|
||||||
|
'<option value=6>' + "Upload recovery core" + '</option>' +
|
||||||
|
'<option value=7>' + "Upload tiny core" + '</option>' +
|
||||||
|
'<option value=8>' + "Restart agent service" + '</option>' +
|
||||||
|
'<option value=9>' + "Force agent update" + '</option></select>';
|
||||||
|
setModalContent('xxAddAgent', "Perform Agent Action", addHtmlFormFloating("Action", htmlValue));
|
||||||
showModal('xxAddAgentModal', 'idx_dlgOkButton', p15uploadCoreEx);
|
showModal('xxAddAgentModal', 'idx_dlgOkButton', p15uploadCoreEx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -13597,6 +13618,9 @@
|
||||||
} else if (Q('d3coreMode').value == 8) {
|
} else if (Q('d3coreMode').value == 8) {
|
||||||
// Restart MeshAgent service
|
// Restart MeshAgent service
|
||||||
meshserver.send({ action: 'msg', type: 'console', nodeid: consoleNode._id, value:'service restart' });
|
meshserver.send({ action: 'msg', type: 'console', nodeid: consoleNode._id, value:'service restart' });
|
||||||
|
} else if (Q('d3coreMode').value == 9) {
|
||||||
|
// Update mesh agent
|
||||||
|
meshserver.send({ action: 'updateAgents', nodeids: [consoleNode._id] });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -746,7 +746,7 @@
|
||||||
var domainUrl = '{{{domainurl}}}';
|
var domainUrl = '{{{domainurl}}}';
|
||||||
var authCookie = '{{{authCookie}}}';
|
var authCookie = '{{{authCookie}}}';
|
||||||
var authRelayCookie = '{{{authRelayCookie}}}';
|
var authRelayCookie = '{{{authRelayCookie}}}';
|
||||||
var viewOnly = (parseInt('{{{viewOnly}}}') == 1);
|
var viewOnly = parseInt('{{{viewOnly}}}');
|
||||||
var authCookieRenewTimer = null;
|
var authCookieRenewTimer = null;
|
||||||
var serverPublicNamePort = '{{{serverDnsName}}}:{{{serverPublicPort}}}';
|
var serverPublicNamePort = '{{{serverDnsName}}}:{{{serverPublicPort}}}';
|
||||||
var debugmode = false;
|
var debugmode = false;
|
||||||
|
|
@ -822,10 +822,24 @@
|
||||||
function setSessionActivity() { sessionActivity = Date.now(); }
|
function setSessionActivity() { sessionActivity = Date.now(); }
|
||||||
function checkIdleSessionTimeout() {
|
function checkIdleSessionTimeout() {
|
||||||
var delta = (Date.now() - sessionActivity);
|
var delta = (Date.now() - sessionActivity);
|
||||||
if (delta > serverinfo.timeout && serverinfo.logoutOnIdleSessionTimeout) {
|
if (delta > serverinfo.timeout) {
|
||||||
|
if (desktop != null) { // Disconnect remote desktop
|
||||||
|
desktop.Stop();
|
||||||
|
desktopNode = desktop = null;
|
||||||
|
}
|
||||||
|
if (terminal != null) { // Disconnect terminal
|
||||||
|
terminal.Stop();
|
||||||
|
terminal = null;
|
||||||
|
}
|
||||||
|
if (files != null) { // Disconnect files
|
||||||
|
files.Stop();
|
||||||
|
files = null;
|
||||||
|
}
|
||||||
|
if (serverinfo.logoutonidlesessiontimeout) {
|
||||||
window.location.href = 'logout';
|
window.location.href = 'logout';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Menu System
|
// Menu System
|
||||||
|
|
@ -850,7 +864,7 @@
|
||||||
gotKeyPressEvent = true;
|
gotKeyPressEvent = true;
|
||||||
Q('softKeyboard').value = '';
|
Q('softKeyboard').value = '';
|
||||||
// Check what keys we are allows to send
|
// Check what keys we are allows to send
|
||||||
if (viewOnly) return false;
|
if (viewOnly == 1) return false;
|
||||||
return desktop.m.handleKeys(e);
|
return desktop.m.handleKeys(e);
|
||||||
}
|
}
|
||||||
if (terminal && !xxdialogMode && (xxcurrentView == 10) && (currentDevicePanel == 5) && (t !== 1)) {
|
if (terminal && !xxdialogMode && (xxcurrentView == 10) && (currentDevicePanel == 5) && (t !== 1)) {
|
||||||
|
|
@ -878,7 +892,7 @@
|
||||||
gotKeyPressEvent = false;
|
gotKeyPressEvent = false;
|
||||||
Q('softKeyboard').value = '';
|
Q('softKeyboard').value = '';
|
||||||
// Check what keys we are allows to send
|
// Check what keys we are allows to send
|
||||||
if (viewOnly) return false;
|
if (viewOnly == 1) return false;
|
||||||
return desktop.m.handleKeyDown(e);
|
return desktop.m.handleKeyDown(e);
|
||||||
}
|
}
|
||||||
if (terminal && !xxdialogMode && (xxcurrentView == 10) && (currentDevicePanel == 5) && (t !== 1)) {
|
if (terminal && !xxdialogMode && (xxcurrentView == 10) && (currentDevicePanel == 5) && (t !== 1)) {
|
||||||
|
|
@ -907,7 +921,7 @@
|
||||||
var inputStr = Q('softKeyboard').value;
|
var inputStr = Q('softKeyboard').value;
|
||||||
Q('softKeyboard').value = '';
|
Q('softKeyboard').value = '';
|
||||||
// Check what keys we are allows to send
|
// Check what keys we are allows to send
|
||||||
if (viewOnly) return;
|
if (viewOnly == 1) return;
|
||||||
if ((gotKeyPressEvent == false) && (inputStr.length > 0) && desktop.m.SendKeyUnicode) {
|
if ((gotKeyPressEvent == false) && (inputStr.length > 0) && desktop.m.SendKeyUnicode) {
|
||||||
// This is a mobile keyboard, we need to send that is in the input control.
|
// This is a mobile keyboard, we need to send that is in the input control.
|
||||||
var inputchar = inputStr[inputStr.length - 1].charCodeAt(0);
|
var inputchar = inputStr[inputStr.length - 1].charCodeAt(0);
|
||||||
|
|
@ -1067,6 +1081,7 @@
|
||||||
desktop = CreateAmtRedirect(CreateAmtRemoteDesktop('Desk'), authCookie);
|
desktop = CreateAmtRedirect(CreateAmtRemoteDesktop('Desk'), authCookie);
|
||||||
desktop.debugmode = debugmode;
|
desktop.debugmode = debugmode;
|
||||||
desktop.onStateChanged = onDesktopStateChange;
|
desktop.onStateChanged = onDesktopStateChange;
|
||||||
|
desktop.m.stopInput = (viewOnly == 1);
|
||||||
desktop.m.bpp = (desktopsettings.encoding == 1 || desktopsettings.encoding == 3) ? 1 : 2;
|
desktop.m.bpp = (desktopsettings.encoding == 1 || desktopsettings.encoding == 3) ? 1 : 2;
|
||||||
desktop.m.useZRLE = (desktopsettings.encoding < 3);
|
desktop.m.useZRLE = (desktopsettings.encoding < 3);
|
||||||
desktop.m.showmouse = true;
|
desktop.m.showmouse = true;
|
||||||
|
|
@ -1076,6 +1091,8 @@
|
||||||
} else if ((contype == null) || (contype == 1) || ((contype == 3))) {
|
} else if ((contype == null) || (contype == 1) || ((contype == 3))) {
|
||||||
// Setup the Mesh Agent remote desktop
|
// Setup the Mesh Agent remote desktop
|
||||||
desktop = CreateAgentRedirect(null, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort, authCookie, null, domainUrl);
|
desktop = CreateAgentRedirect(null, CreateAgentRemoteDesktop('Desk'), serverPublicNamePort, authCookie, null, domainUrl);
|
||||||
|
desktop.m.stopInput = (viewOnly == 1);
|
||||||
|
desktop.m.mouseCursorActive(true);
|
||||||
desktop.debugmode = debugmode;
|
desktop.debugmode = debugmode;
|
||||||
desktop.m.debugmode = debugmode;
|
desktop.m.debugmode = debugmode;
|
||||||
desktop.attemptWebRTC = attemptWebRTC;
|
desktop.attemptWebRTC = attemptWebRTC;
|
||||||
|
|
@ -1447,7 +1464,7 @@
|
||||||
QV('deskarea4', !fullscreen);
|
QV('deskarea4', !fullscreen);
|
||||||
QV('termarea1', !fullscreen);
|
QV('termarea1', !fullscreen);
|
||||||
QV('termarea4', !fullscreen);
|
QV('termarea4', !fullscreen);
|
||||||
var inputAllowed = !viewOnly;
|
var inputAllowed = (viewOnly == 0);
|
||||||
|
|
||||||
// Show full screen buttons if needed
|
// Show full screen buttons if needed
|
||||||
QV('deskkeybutton1', fullscreen);
|
QV('deskkeybutton1', fullscreen);
|
||||||
|
|
|
||||||
|
|
@ -7092,7 +7092,10 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Login failed
|
// Login failed
|
||||||
handleRootRequestEx(req, res, domain, direct);
|
parent.debug('web', 'handleRootRequest: login authorization failed when returning from Duo 2FA.');
|
||||||
|
req.session.loginmode = 1;
|
||||||
|
res.redirect(domain.url + getQueryPortion(req)); // redirect back to main page
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue