diff --git a/agents/MeshCentralRouter.dmg b/agents/MeshCentralRouter.dmg
new file mode 100644
index 00000000..2dad1296
Binary files /dev/null and b/agents/MeshCentralRouter.dmg differ
diff --git a/meshcentral.js b/meshcentral.js
index 762844cd..3de11080 100644
--- a/meshcentral.js
+++ b/meshcentral.js
@@ -2205,7 +2205,8 @@ function CreateMeshCentralServer(config, args) {
// List of possible mesh agent install scripts
var meshToolsList = {
'MeshCentralRouter': { localname: 'MeshCentralRouter.exe', dlname: 'winrouter' },
- 'MeshCentralAssistant': { localname: 'MeshCentralAssistant.exe', dlname: 'winassistant' }
+ 'MeshCentralAssistant': { localname: 'MeshCentralAssistant.exe', dlname: 'winassistant' },
+ 'MeshCentralRouterMacOS': { localname: 'MeshCentralRouter.dmg', dlname: 'MeshCentralRouter.dmg' }
};
// Update the list of available mesh agents
diff --git a/meshuser.js b/meshuser.js
index a7b4fa9b..e13c0266 100644
--- a/meshuser.js
+++ b/meshuser.js
@@ -447,7 +447,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
// Build server information object
var serverinfo = { domain: domain.id, name: domain.dns ? domain.dns : parent.certificates.CommonName, mpsname: parent.certificates.AmtMpsName, mpsport: mpsport, mpspass: args.mpspass, port: httpport, emailcheck: ((parent.parent.mailserver != null) && (domain.auth != 'sspi') && (domain.auth != 'ldap') && (args.lanonly != true) && (parent.certificates.CommonName != null) && (parent.certificates.CommonName.indexOf('.') != -1) && (user._id.split('/')[2].startsWith('~') == false)), domainauth: (domain.auth == 'sspi'), serverTime: Date.now() };
serverinfo.languages = parent.renderLanguages;
- serverinfo.tlshash = Buffer.from(parent.webCertificateHashs[domain.id], 'binary').toString('hex').toUpperCase(); // SHA384 of server HTTPS certificate
+ serverinfo.tlshash = Buffer.from(parent.webCertificateFullHashs[domain.id], 'binary').toString('hex').toUpperCase(); // SHA384 of server HTTPS certificate
if ((domain.sessionrecording) && (domain.sessionrecording.onlyselecteddevicegroups === true)) { serverinfo.devGroupSessionRecording = 1; } // Allow enabling of session recording
if ((parent.parent.config.domains[domain.id].amtacmactivation != null) && (parent.parent.config.domains[domain.id].amtacmactivation.acmmatch != null)) {
var matchingDomains = [];
diff --git a/views/default.handlebars b/views/default.handlebars
index 454b0cd3..73c41f75 100644
--- a/views/default.handlebars
+++ b/views/default.handlebars
@@ -3672,7 +3672,7 @@
}
if ((userinfo.siteadmin == 0xFFFFFFFF) || ((userinfo.siteadmin & 128) == 0)) {
r += '' + "MeshCmd" + ' ';
- if (navigator.platform.toLowerCase() == 'win32') { r += '' + "Router" + ' '; }
+ if ((navigator.platform.toLowerCase() == 'win32') || (navigator.platform.toLowerCase() == 'macintel')) { r += '' + "Router" + ' '; }
}
r += '
';
@@ -5978,11 +5978,15 @@
if ((args.xterm === 0) && (node.agent) && ((node.agent.caps & 2) != 0) && ((meshrights & 8) != 0) && ((meshrights == 0xFFFFFFFF) || ((meshrights & 512) == 0))) { x += '' + "XTerm" + ' '; }
// RDP link, show this link only of the remote machine is Windows.
- if (((connectivity & 1) != 0) && (windowsBrowser == true) && (node.agent) && ((meshrights & 8) != 0)) {
+ if (((connectivity & 1) != 0) && (node.agent) && ((meshrights & 8) != 0)) {
if ((node.agent.id > 0) && (node.agent.id < 5)) { x += '' + "RDP" + ' '; }
if (node.agent.id > 4) {
- x += '' + "Putty" + ' ';
- x += '' + "WinSCP" + ' ';
+ if ((navigator.platform.toLowerCase() == 'win32') || (navigator.platform.toLowerCase() == 'macintel')) {
+ x += '' + "SSH" + ' ';
+ }
+ if (navigator.platform.toLowerCase() == 'win32') {
+ x += '' + "SCP" + ' ';
+ }
}
}
@@ -6694,6 +6698,7 @@
if (xxdialogMode) return;
var x = '