mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-02-12 19:11:51 +00:00
Added MPS server aliasing support.
This commit is contained in:
parent
205c7d96e0
commit
618dfbe42e
26 changed files with 354 additions and 160 deletions
|
@ -22,18 +22,20 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="agents\meshcmd.js" />
|
<Compile Include="agents\meshcmd.js" />
|
||||||
<Compile Include="agents\meshcore.js" />
|
<Compile Include="agents\meshcore.js" />
|
||||||
<Compile Include="agents\modules_meshcmd\amt-0.2.0.js" />
|
<Compile Include="agents\modules_meshcmd\amt-lme.js" />
|
||||||
|
<Compile Include="agents\modules_meshcmd\amt-mei.js" />
|
||||||
<Compile Include="agents\modules_meshcmd\amt-scanner.js" />
|
<Compile Include="agents\modules_meshcmd\amt-scanner.js" />
|
||||||
<Compile Include="agents\modules_meshcmd\amt-script-0.2.0.js" />
|
<Compile Include="agents\modules_meshcmd\amt-script.js" />
|
||||||
<Compile Include="agents\modules_meshcmd\amt-wsman-0.2.0.js" />
|
<Compile Include="agents\modules_meshcmd\amt-wsman-duk.js" />
|
||||||
<Compile Include="agents\modules_meshcmd\amt-wsman-duk-0.2.0.js" />
|
<Compile Include="agents\modules_meshcmd\amt-wsman.js" />
|
||||||
<Compile Include="agents\modules_meshcmd\amt_heci.js" />
|
<Compile Include="agents\modules_meshcmd\amt-xml.js" />
|
||||||
<Compile Include="agents\modules_meshcmd\lme_heci.js" />
|
<Compile Include="agents\modules_meshcmd\amt.js" />
|
||||||
<Compile Include="agents\modules_meshcore\amt-lme.js" />
|
<Compile Include="agents\modules_meshcore\amt-lme.js" />
|
||||||
<Compile Include="agents\modules_meshcore\amt-mei.js" />
|
<Compile Include="agents\modules_meshcore\amt-mei.js" />
|
||||||
<Compile Include="agents\modules_meshcore\amt-scanner.js" />
|
<Compile Include="agents\modules_meshcore\amt-scanner.js" />
|
||||||
<Compile Include="agents\modules_meshcore\amt-xml.js" />
|
<Compile Include="agents\modules_meshcore\amt-xml.js" />
|
||||||
<Compile Include="agents\modules_meshcore\wifi-scanner.js" />
|
<Compile Include="agents\modules_meshcore\wifi-scanner.js" />
|
||||||
|
<Compile Include="agents\testsuite.js" />
|
||||||
<Compile Include="agents\tinycore.js" />
|
<Compile Include="agents\tinycore.js" />
|
||||||
<Compile Include="amtevents.js" />
|
<Compile Include="amtevents.js" />
|
||||||
<Compile Include="amtscanner.js" />
|
<Compile Include="amtscanner.js" />
|
||||||
|
@ -71,6 +73,20 @@
|
||||||
<Compile Include="public\scripts\meshcentral.js" />
|
<Compile Include="public\scripts\meshcentral.js" />
|
||||||
<Compile Include="redirserver.js" />
|
<Compile Include="redirserver.js" />
|
||||||
<Compile Include="webserver.js" />
|
<Compile Include="webserver.js" />
|
||||||
|
<Content Include="agents\meshagent_arm" />
|
||||||
|
<Content Include="agents\meshagent_pi" />
|
||||||
|
<Content Include="agents\meshagent_pogo" />
|
||||||
|
<Content Include="agents\meshagent_poky" />
|
||||||
|
<Content Include="agents\meshagent_poky64" />
|
||||||
|
<Content Include="agents\meshagent_x86" />
|
||||||
|
<Content Include="agents\meshagent_x86-64" />
|
||||||
|
<Content Include="agents\meshagent_x86-64_nokvm" />
|
||||||
|
<Content Include="agents\meshagent_x86_nokvm" />
|
||||||
|
<Content Include="agents\MeshCommander-Small.gz" />
|
||||||
|
<Content Include="agents\meshinstall-initd.sh" />
|
||||||
|
<Content Include="agents\meshinstall-linux.sh" />
|
||||||
|
<Content Include="agents\MeshService.exe" />
|
||||||
|
<Content Include="agents\MeshService64.exe" />
|
||||||
<Content Include="LICENSE" />
|
<Content Include="LICENSE" />
|
||||||
<Content Include="package.json" />
|
<Content Include="package.json" />
|
||||||
<Content Include="public\clickonce\minirouter\Application Files\MeshMiniRouter_1_0_0_70\MeshMiniRouter.application" />
|
<Content Include="public\clickonce\minirouter\Application Files\MeshMiniRouter_1_0_0_70\MeshMiniRouter.application" />
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -290,11 +290,8 @@ function lme_heci(options) {
|
||||||
var notify = null;
|
var notify = null;
|
||||||
try { notify = xmlParser.ParseWsman(httpData); } catch (e) { }
|
try { notify = xmlParser.ParseWsman(httpData); } catch (e) { }
|
||||||
|
|
||||||
// Translate the event
|
|
||||||
var notifyString = _lmsNotifyToString(notify);
|
|
||||||
|
|
||||||
// Event the http data
|
// Event the http data
|
||||||
if (notify != null) { this.LMS.emit('notify', notify, channel.options, notifyString); }
|
if (notify != null) { this.LMS.emit('notify', notify, channel.options, _lmsNotifyToString(notify), _lmsNotifyToCode(notify)); }
|
||||||
|
|
||||||
// Send channel close
|
// Send channel close
|
||||||
var buffer = Buffer.alloc(5);
|
var buffer = Buffer.alloc(5);
|
||||||
|
@ -437,6 +434,13 @@ function parseHttp(httpData) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _lmsNotifyToCode(notify) {
|
||||||
|
if ((notify == null) || (notify.Body == null) || (notify.Body.MessageID == null)) return null;
|
||||||
|
var msgid = notify.Body.MessageID;
|
||||||
|
try { msgid += '-' + notify.Body.MessageArguments[0]; } catch (e) { }
|
||||||
|
return msgid;
|
||||||
|
}
|
||||||
|
|
||||||
function _lmsNotifyToString(notify) {
|
function _lmsNotifyToString(notify) {
|
||||||
if ((notify == null) || (notify.Body == null) || (notify.Body.MessageID == null)) return null;
|
if ((notify == null) || (notify.Body == null) || (notify.Body.MessageID == null)) return null;
|
||||||
var msgid = notify.Body.MessageID;
|
var msgid = notify.Body.MessageID;
|
||||||
|
@ -520,7 +524,7 @@ var lmsEvents = {
|
||||||
"iAMT0055-0": "User Notification Alert - Provisioning state change notification - Pre-configuration.",
|
"iAMT0055-0": "User Notification Alert - Provisioning state change notification - Pre-configuration.",
|
||||||
"iAMT0055-1": "User Notification Alert - Provisioning state change notification - In configuration.",
|
"iAMT0055-1": "User Notification Alert - Provisioning state change notification - In configuration.",
|
||||||
"iAMT0055-2": "User Notification Alert - Provisioning state change notification - Post-configuration.",
|
"iAMT0055-2": "User Notification Alert - Provisioning state change notification - Post-configuration.",
|
||||||
"iAMT0055-3": "User Notification Alert - Provisioning state change notification - unprovision process has started.",
|
"iAMT0055-3": "User Notification Alert - Provisioning state change notification - Unprovision process has started.",
|
||||||
"iAMT0056": "User Notification Alert - System Defense change notification.",
|
"iAMT0056": "User Notification Alert - System Defense change notification.",
|
||||||
"iAMT0057": "User Notification Alert - Network State change notification.",
|
"iAMT0057": "User Notification Alert - Network State change notification.",
|
||||||
"iAMT0058": "User Notification Alert - Remote Access change notification.",
|
"iAMT0058": "User Notification Alert - Remote Access change notification.",
|
||||||
|
|
|
@ -231,7 +231,7 @@ function amt_heci() {
|
||||||
var optional = [];
|
var optional = [];
|
||||||
for (var i = 1; i < arguments.length; ++i) { optional.push(arguments[i]); }
|
for (var i = 1; i < arguments.length; ++i) { optional.push(arguments[i]); }
|
||||||
this.sendCommand(103, Buffer.alloc(40), function (header, fn, opt) {
|
this.sendCommand(103, Buffer.alloc(40), function (header, fn, opt) {
|
||||||
if (header.Data.length == 68) { opt.unshift({ user: trim(header.Data.slice(0, 34).toString()), pass: trim(header.Data.slice(34, 67).toString()), raw: header.Data }); } else { opt.unshift(null); }
|
if (header.Data.length == 68) { opt.unshift({ user: trim(header.Data.slice(0, 33).toString()), pass: trim(header.Data.slice(33, 67).toString()), raw: header.Data }); } else { opt.unshift(null); }
|
||||||
fn.apply(this, opt);
|
fn.apply(this, opt);
|
||||||
}, callback, optional);
|
}, callback, optional);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,17 +36,21 @@ function ReadShortX(v, p) { return (v[p + 1] << 8) + v[p]; }
|
||||||
function ReadInt(v, p) { return (v[p] * 0x1000000) + (v[p + 1] << 16) + (v[p + 2] << 8) + v[p + 3]; } // We use "*0x1000000" instead of "<<24" because the shift converts the number to signed int32.
|
function ReadInt(v, p) { return (v[p] * 0x1000000) + (v[p + 1] << 16) + (v[p + 2] << 8) + v[p + 3]; } // We use "*0x1000000" instead of "<<24" because the shift converts the number to signed int32.
|
||||||
function ReadSInt(v, p) { return (v[p] << 24) + (v[p + 1] << 16) + (v[p + 2] << 8) + v[p + 3]; }
|
function ReadSInt(v, p) { return (v[p] << 24) + (v[p + 1] << 16) + (v[p + 2] << 8) + v[p + 3]; }
|
||||||
function ReadIntX(v, p) { return (v[p + 3] * 0x1000000) + (v[p + 2] << 16) + (v[p + 1] << 8) + v[p]; }
|
function ReadIntX(v, p) { return (v[p + 3] * 0x1000000) + (v[p + 2] << 16) + (v[p + 1] << 8) + v[p]; }
|
||||||
function ShortToStr(v) { var b = Buffer.alloc(2); b.writeInt16BE(v); return b; }
|
function ShortToStr(v) { return String.fromCharCode((v >> 8) & 0xFF, v & 0xFF); }
|
||||||
function ShortToStrX(v) { var b = Buffer.alloc(2); b.writeInt16LE(v); return b; }
|
function ShortToStrX(v) { return String.fromCharCode(v & 0xFF, (v >> 8) & 0xFF); }
|
||||||
function IntToStr(v) { var b = Buffer.alloc(4); b.writeInt32BE(v); return b; }
|
function IntToStr(v) { return String.fromCharCode((v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF); }
|
||||||
function IntToStrX(v) { var b = Buffer.alloc(4); b.writeInt32LE(v); return b; }
|
function IntToStrX(v) { return String.fromCharCode(v & 0xFF, (v >> 8) & 0xFF, (v >> 16) & 0xFF, (v >> 24) & 0xFF); }
|
||||||
function btoa(x) { return Buffer.from(x).toString('base64'); }
|
//function ShortToStr(v) { var b = Buffer.alloc(2); b.writeInt16BE(v); return b; }
|
||||||
|
//function ShortToStrX(v) { var b = Buffer.alloc(2); b.writeInt16LE(v); return b; }
|
||||||
|
//function IntToStr(v) { var b = Buffer.alloc(4); b.writeInt32BE(v); return b; }
|
||||||
|
//function IntToStrX(v) { var b = Buffer.alloc(4); b.writeInt32LE(v); return b; }
|
||||||
|
function btoa(x) { return Buffer.from(x).toString('base64');}
|
||||||
function atob(x) { var z = null; try { z = Buffer.from(x, 'base64').toString(); } catch (e) { console.log(e); } return z; }
|
function atob(x) { var z = null; try { z = Buffer.from(x, 'base64').toString(); } catch (e) { console.log(e); } return z; }
|
||||||
function passwordcheck(p) { if (p.length < 8) return false; var upper = 0, lower = 0, number = 0, nonalpha = 0; for (var i in p) { var c = p.charCodeAt(i); if ((c > 64) && (c < 91)) { upper = 1; } else if ((c > 96) && (c < 123)) { lower = 1; } else if ((c > 47) && (c < 58)) { number = 1; } else { nonalpha = 1; } } return ((upper + lower + number + nonalpha) == 4); }
|
function passwordcheck(p) { if (p.length < 8) return false; var upper = 0, lower = 0, number = 0, nonalpha = 0; for (var i in p) { var c = p.charCodeAt(i); if ((c > 64) && (c < 91)) { upper = 1; } else if ((c > 96) && (c < 123)) { lower = 1; } else if ((c > 47) && (c < 58)) { number = 1; } else { nonalpha = 1; } } return ((upper + lower + number + nonalpha) == 4); }
|
||||||
function hex2rstr(x) { Buffer.from(x, 'hex').toString(); }
|
function hex2rstr(x) { Buffer.from(x, 'hex').toString(); }
|
||||||
function rstr2hex(x) { Buffer.from(x).toString('hex'); }
|
function rstr2hex(x) { Buffer.from(x).toString('hex'); }
|
||||||
function random() { return 0; } // TODO
|
function random() { return Math.floor(Math.random()*max); }
|
||||||
function rstr_md5(x) { return null; } // TODO
|
function rstr_md5(str) { return hex2rstr(hex_md5(str)); }
|
||||||
function getItem(x, y, z) { for (var i in x) { if (x[i][y] == z) return x[i]; } return null; }
|
function getItem(x, y, z) { for (var i in x) { if (x[i][y] == z) return x[i]; } return null; }
|
||||||
|
|
||||||
var httpErrorTable = {
|
var httpErrorTable = {
|
||||||
|
@ -63,9 +67,6 @@ var httpErrorTable = {
|
||||||
// Setup the script state
|
// Setup the script state
|
||||||
module.exports.setup = function(binary, startvars) {
|
module.exports.setup = function(binary, startvars) {
|
||||||
var obj = { startvars: startvars, onCompleted: null };
|
var obj = { startvars: startvars, onCompleted: null };
|
||||||
obj.wsRetryCall = null;
|
|
||||||
obj.wsRetryArgs = null;
|
|
||||||
obj.wsRetryTimes = null;
|
|
||||||
if (binary.length < 6) { console.error('Invalid script length'); return null; } // Script must have at least 6 byte header
|
if (binary.length < 6) { console.error('Invalid script length'); return null; } // Script must have at least 6 byte header
|
||||||
if (ReadInt(binary, 0) != 0x247D2945) { console.error('Invalid binary script'); return null; } // Check the script magic header
|
if (ReadInt(binary, 0) != 0x247D2945) { console.error('Invalid binary script'); return null; } // Check the script magic header
|
||||||
if (ReadShort(binary, 4) > 1) { console.error('Unsupported script version'); return null; } // Check the script version
|
if (ReadShort(binary, 4) > 1) { console.error('Unsupported script version'); return null; } // Check the script version
|
||||||
|
@ -121,7 +122,6 @@ module.exports.setup = function(binary, startvars) {
|
||||||
if (argtyp < 2) {
|
if (argtyp < 2) {
|
||||||
// Get the value and replace all {var} with variable values
|
// Get the value and replace all {var} with variable values
|
||||||
argval = argval.toString();
|
argval = argval.toString();
|
||||||
//console.log(argval);
|
|
||||||
while (argval.split("{").length > 1) { var t = argval.split("{").pop().split("}").shift(); argval = argval.replace('{' + t + '}', obj.getVar(t)); }
|
while (argval.split("{").length > 1) { var t = argval.split("{").pop().split("}").shift(); argval = argval.replace('{' + t + '}', obj.getVar(t)); }
|
||||||
if (argtyp == 1) { obj.variables['__' + i] = decodeURI(argval); argval = '__' + i; } // If argtyp is 1, this is a literal. Store in temp variable.
|
if (argtyp == 1) { obj.variables['__' + i] = decodeURI(argval); argval = '__' + i; } // If argtyp is 1, this is a literal. Store in temp variable.
|
||||||
args.push(argval);
|
args.push(argval);
|
||||||
|
@ -133,8 +133,6 @@ module.exports.setup = function(binary, startvars) {
|
||||||
argptr += (2 + arglen);
|
argptr += (2 + arglen);
|
||||||
}
|
}
|
||||||
|
|
||||||
//console.log('CMD: ' + cmdid, args.join(', '));
|
|
||||||
|
|
||||||
// Move instruction pointer forward by command size
|
// Move instruction pointer forward by command size
|
||||||
obj.ip += cmdlen;
|
obj.ip += cmdlen;
|
||||||
|
|
||||||
|
@ -142,19 +140,13 @@ module.exports.setup = function(binary, startvars) {
|
||||||
var argsval = [];
|
var argsval = [];
|
||||||
for (var i = 0; i < 10; i++) { argsval.push(obj.getVar(args[i])); }
|
for (var i = 0; i < 10; i++) { argsval.push(obj.getVar(args[i])); }
|
||||||
var storeInArg0;
|
var storeInArg0;
|
||||||
|
|
||||||
//console.log('VAR: ' + JSON.stringify(obj.variables));
|
|
||||||
//console.log('CMD: ' + cmdid, argsval.join(', '));
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (cmdid < 10000) {
|
if (cmdid < 10000) {
|
||||||
// Lets run the actual command
|
// Lets run the actual command
|
||||||
//console.log(cmdid);
|
|
||||||
switch (cmdid) {
|
switch (cmdid) {
|
||||||
case 0: // nop
|
case 0: // nop
|
||||||
break;
|
break;
|
||||||
case 1: // jump(label) or jump(label, a, compare, b)
|
case 1: // jump(label) or jump(label, a, compare, b)
|
||||||
//console.log('JUMP ' + argsval[1] + ' ' + argsval[2] + ' ' + argsval[3]);
|
|
||||||
if (argsval[2]) {
|
if (argsval[2]) {
|
||||||
if (
|
if (
|
||||||
(argsval[2] == '<' && argsval[1] < argsval[3]) ||
|
(argsval[2] == '<' && argsval[1] < argsval[3]) ||
|
||||||
|
@ -171,10 +163,7 @@ module.exports.setup = function(binary, startvars) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: // set(variable, value)
|
case 2: // set(variable, value)
|
||||||
if (args[1] == undefined) { if (obj.variables[args[0]]) { delete obj.variables[args[0]]; } } else {
|
if (args[1] == undefined) delete obj.variables[args[0]]; else obj.setVar(args[0], argsval[1]);
|
||||||
//console.log('SET ' + args[0] + ' TO ' + argsval[1]);
|
|
||||||
obj.setVar(args[0], argsval[1]);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 3: // print(message)
|
case 3: // print(message)
|
||||||
var v = obj.toString(argsval[0]);
|
var v = obj.toString(argsval[0]);
|
||||||
|
@ -254,7 +243,7 @@ module.exports.setup = function(binary, startvars) {
|
||||||
obj.amtstack.UnSubscribe(argsval[0], obj.xxWsmanReturn, obj, 0, argsval[1]);
|
obj.amtstack.UnSubscribe(argsval[0], obj.xxWsmanReturn, obj, 0, argsval[1]);
|
||||||
break;
|
break;
|
||||||
case 24: // readchar(str, pos)
|
case 24: // readchar(str, pos)
|
||||||
//console.log('readchar', argsval[1], argsval[2], argsval[1].charCodeAt(argsval[2]));
|
console.log(argsval[1], argsval[2], argsval[1].charCodeAt(argsval[2]));
|
||||||
storeInArg0 = argsval[1].charCodeAt(argsval[2]);
|
storeInArg0 = argsval[1].charCodeAt(argsval[2]);
|
||||||
break;
|
break;
|
||||||
case 25: // signWithDummyCa
|
case 25: // signWithDummyCa
|
||||||
|
@ -270,7 +259,6 @@ module.exports.setup = function(binary, startvars) {
|
||||||
// functions of type ARG1 = func(ARG2, ARG3, ARG4, ARG5, ARG6)
|
// functions of type ARG1 = func(ARG2, ARG3, ARG4, ARG5, ARG6)
|
||||||
storeInArg0 = script_functionTableX2[cmdid - 10000](argsval[1], argsval[2], argsval[3], argsval[4], argsval[5], argsval[6]);
|
storeInArg0 = script_functionTableX2[cmdid - 10000](argsval[1], argsval[2], argsval[3], argsval[4], argsval[5], argsval[6]);
|
||||||
} else {
|
} else {
|
||||||
//if (cmdid == 20009) { console.log('--------------------------------------'); }
|
|
||||||
// Optional functions of type ARG1 = func(ARG2, ARG3, ARG4, ARG5, ARG6)
|
// Optional functions of type ARG1 = func(ARG2, ARG3, ARG4, ARG5, ARG6)
|
||||||
//if (script_functionTableX3 && script_functionTableX3[cmdid - 20000]) {
|
//if (script_functionTableX3 && script_functionTableX3[cmdid - 20000]) {
|
||||||
// storeInArg0 = script_functionTableX3[cmdid - 20000](obj, argsval[1], argsval[2], argsval[3], argsval[4], argsval[5], argsval[6]); // Note that optional calls start with "obj" as first argument.
|
// storeInArg0 = script_functionTableX3[cmdid - 20000](obj, argsval[1], argsval[2], argsval[3], argsval[4], argsval[5], argsval[6]); // Note that optional calls start with "obj" as first argument.
|
||||||
|
@ -281,7 +269,6 @@ module.exports.setup = function(binary, startvars) {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (typeof e == 'object') { e = e.message; }
|
if (typeof e == 'object') { e = e.message; }
|
||||||
obj.setVar('_exception', e);
|
obj.setVar('_exception', e);
|
||||||
console.log('EXCEPTION: ' + e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,7 @@ module.exports.CertificateOperations = function () {
|
||||||
// Returns the web server TLS certificate and private key, if not present, create demonstration ones.
|
// Returns the web server TLS certificate and private key, if not present, create demonstration ones.
|
||||||
obj.GetMeshServerCertificate = function (directory, args, config, func) {
|
obj.GetMeshServerCertificate = function (directory, args, config, func) {
|
||||||
var certargs = args.cert;
|
var certargs = args.cert;
|
||||||
|
var mpscertargs = args.mpscert;
|
||||||
var strongCertificate = (args.fastcert ? false : true);
|
var strongCertificate = (args.fastcert ? false : true);
|
||||||
var rcountmax = 5;
|
var rcountmax = 5;
|
||||||
// commonName, country, organization
|
// commonName, country, organization
|
||||||
|
@ -218,7 +219,7 @@ module.exports.CertificateOperations = function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode certificate arguments
|
// Decode certificate arguments
|
||||||
var commonName = 'un-configured', country, organization, forceWebCertGen = 0;
|
var commonName = 'un-configured', country, organization, forceWebCertGen = 0, forceMpsCertGen = 0;
|
||||||
if (certargs != undefined) {
|
if (certargs != undefined) {
|
||||||
var args = certargs.split(',');
|
var args = certargs.split(',');
|
||||||
if (args.length > 0) commonName = args[0];
|
if (args.length > 0) commonName = args[0];
|
||||||
|
@ -226,6 +227,15 @@ module.exports.CertificateOperations = function () {
|
||||||
if (args.length > 2) organization = args[2];
|
if (args.length > 2) organization = args[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Decode MPS certificate arguments, this is for the Intel AMT CIRA server
|
||||||
|
var mpsCommonName = commonName, mpsCountry = country, mpsOrganization = organization;
|
||||||
|
if (mpscertargs != undefined) {
|
||||||
|
var args = mpscertargs.split(',');
|
||||||
|
if (args.length > 0) mpsCommonName = args[0];
|
||||||
|
if (args.length > 1) mpsCountry = args[1];
|
||||||
|
if (args.length > 2) mpsOrganization = args[2];
|
||||||
|
}
|
||||||
|
|
||||||
// Look for domains that have DNS names and load their certificates
|
// Look for domains that have DNS names and load their certificates
|
||||||
r.dns = {};
|
r.dns = {};
|
||||||
for (var i in config.domains) {
|
for (var i in config.domains) {
|
||||||
|
@ -275,12 +285,23 @@ module.exports.CertificateOperations = function () {
|
||||||
r.CommonName = webCertificate.subject.getField('CN').value;
|
r.CommonName = webCertificate.subject.getField('CN').value;
|
||||||
var rootCertificate = obj.pki.certificateFromPem(r.root.cert);
|
var rootCertificate = obj.pki.certificateFromPem(r.root.cert);
|
||||||
r.RootName = rootCertificate.subject.getField('CN').value;
|
r.RootName = rootCertificate.subject.getField('CN').value;
|
||||||
if (certargs == undefined) { if (func != undefined) { func(r); } return r }; // If no certificate arguments are given, keep the certificate
|
|
||||||
|
if ((certargs == null) && (mpscertargs == null)) { if (func != undefined) { func(r); } return r }; // If no certificate arguments are given, keep the certificate
|
||||||
var xcountry, xcountryField = webCertificate.subject.getField('C');
|
var xcountry, xcountryField = webCertificate.subject.getField('C');
|
||||||
if (xcountryField != null) { xcountry = xcountryField.value; }
|
if (xcountryField != null) { xcountry = xcountryField.value; }
|
||||||
var xorganization, xorganizationField = webCertificate.subject.getField('O');
|
var xorganization, xorganizationField = webCertificate.subject.getField('O');
|
||||||
if (xorganizationField != null) { xorganization = xorganizationField.value; }
|
if (xorganizationField != null) { xorganization = xorganizationField.value; }
|
||||||
if ((r.CommonName == commonName) && (xcountry == country) && (xorganization == organization) && (r.AmtMpsName == commonName)) { if (func != undefined) { func(r); } return r; } else { forceWebCertGen = 1; } // If the certificate matches what we want, keep it.
|
if (certargs == null) { commonName = r.CommonName; country = xcountry; organization = xorganization; }
|
||||||
|
|
||||||
|
// Check if we have correct certificates
|
||||||
|
if ((r.CommonName == commonName) && (xcountry == country) && (xorganization == organization) && (r.AmtMpsName == mpsCommonName)) {
|
||||||
|
// Certificate matches what we want, keep it.
|
||||||
|
if (func != undefined) { func(r); } return r;
|
||||||
|
} else {
|
||||||
|
// Check what certificates we really need to re-generate.
|
||||||
|
if ((r.CommonName != commonName) || (xcountry != country) || (xorganization != organization)) { forceWebCertGen = 1; }
|
||||||
|
if (r.AmtMpsName != mpsCommonName) { forceMpsCertGen = 1; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
console.log('Generating certificates, may take a few minutes...');
|
console.log('Generating certificates, may take a few minutes...');
|
||||||
|
|
||||||
|
@ -345,9 +366,9 @@ module.exports.CertificateOperations = function () {
|
||||||
|
|
||||||
// If the Intel AMT MPS certificate does not exist, create one
|
// If the Intel AMT MPS certificate does not exist, create one
|
||||||
var mpsCertAndKey, mpsCertificate, mpsPrivateKey;
|
var mpsCertAndKey, mpsCertificate, mpsPrivateKey;
|
||||||
if ((r.mps == null) || (forceWebCertGen == 1)) {
|
if ((r.mps == null) || (forceMpsCertGen == 1)) {
|
||||||
console.log('Generating Intel AMT MPS certificate...');
|
console.log('Generating Intel AMT MPS certificate...');
|
||||||
mpsCertAndKey = obj.IssueWebServerCertificate(rootCertAndKey, false, commonName, country, organization, null, false);
|
mpsCertAndKey = obj.IssueWebServerCertificate(rootCertAndKey, false, mpsCommonName, mpsCountry, mpsOrganization, null, false);
|
||||||
mpsCertificate = obj.pki.certificateToPem(mpsCertAndKey.cert);
|
mpsCertificate = obj.pki.certificateToPem(mpsCertAndKey.cert);
|
||||||
mpsPrivateKey = obj.pki.privateKeyToPem(mpsCertAndKey.key);
|
mpsPrivateKey = obj.pki.privateKeyToPem(mpsCertAndKey.key);
|
||||||
obj.fs.writeFileSync(directory + '/mpsserver-cert-public.crt', mpsCertificate);
|
obj.fs.writeFileSync(directory + '/mpsserver-cert-public.crt', mpsCertificate);
|
||||||
|
@ -376,7 +397,7 @@ module.exports.CertificateOperations = function () {
|
||||||
amtConsoleName = consoleCertAndKey.cert.subject.getField('CN').value;
|
amtConsoleName = consoleCertAndKey.cert.subject.getField('CN').value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var r = { root: { cert: rootCertificate, key: rootPrivateKey }, web: { cert: webCertificate, key: webPrivateKey, ca: [] }, mps: { cert: mpsCertificate, key: mpsPrivateKey }, agent: { cert: agentCertificate, key: agentPrivateKey }, console: { cert: consoleCertificate, key: consolePrivateKey }, ca: calist, CommonName: commonName, RootName: rootName, AmtConsoleName: amtConsoleName, dns: {} };
|
var r = { root: { cert: rootCertificate, key: rootPrivateKey }, web: { cert: webCertificate, key: webPrivateKey, ca: [] }, mps: { cert: mpsCertificate, key: mpsPrivateKey }, agent: { cert: agentCertificate, key: agentPrivateKey }, console: { cert: consoleCertificate, key: consolePrivateKey }, ca: calist, CommonName: commonName, RootName: rootName, AmtConsoleName: amtConsoleName, AmtMpsName: mpsCommonName, dns: {} };
|
||||||
|
|
||||||
// Look for domains with DNS names that have no certificates and generated them.
|
// Look for domains with DNS names that have no certificates and generated them.
|
||||||
for (var i in config.domains) {
|
for (var i in config.domains) {
|
||||||
|
@ -411,6 +432,34 @@ module.exports.CertificateOperations = function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the swarm server certificate exist, load it (This is an optional certificate)
|
||||||
|
if (obj.fileExists(directory + '/swarmserver-cert-public.crt') && obj.fileExists(directory + '/swarmserver-cert-private.key')) {
|
||||||
|
var swarmServerCertificate = obj.fs.readFileSync(directory + '/swarmserver-cert-public.crt', 'utf8');
|
||||||
|
var swarmServerPrivateKey = obj.fs.readFileSync(directory + '/swarmserver-cert-private.key', 'utf8');
|
||||||
|
r.swarmserver = { cert: swarmServerCertificate, key: swarmServerPrivateKey };
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the swarm server root certificate exist, load it (This is an optional certificate)
|
||||||
|
if (obj.fileExists(directory + '/swarmserverroot-cert-public.crt')) {
|
||||||
|
var swarmServerRootCertificate = obj.fs.readFileSync(directory + '/swarmserverroot-cert-public.crt', 'utf8');
|
||||||
|
r.swarmserverroot = { cert: swarmServerRootCertificate };
|
||||||
|
}
|
||||||
|
|
||||||
|
// If CA certificates are present, load them
|
||||||
|
if (r.web != null) {
|
||||||
|
var caok, caindex = 1, calist = [];
|
||||||
|
do {
|
||||||
|
caok = false;
|
||||||
|
if (obj.fileExists(directory + '/webserver-cert-chain' + caindex + '.crt')) {
|
||||||
|
var caCertificate = obj.fs.readFileSync(directory + '/webserver-cert-chain' + caindex + '.crt', 'utf8');
|
||||||
|
calist.push(caCertificate);
|
||||||
|
caok = true;
|
||||||
|
}
|
||||||
|
caindex++;
|
||||||
|
} while (caok == true);
|
||||||
|
r.web.ca = calist;
|
||||||
|
}
|
||||||
|
|
||||||
if (func != undefined) { func(r); }
|
if (func != undefined) { func(r); }
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ function CreateMeshCentralServer(config) {
|
||||||
try { require('./pass').hash('test', function () { }); } catch (e) { console.log('Old version of node, must upgrade.'); return; } // TODO: Not sure if this test works or not.
|
try { require('./pass').hash('test', function () { }); } catch (e) { console.log('Old version of node, must upgrade.'); return; } // TODO: Not sure if this test works or not.
|
||||||
|
|
||||||
// Check for invalid arguments
|
// Check for invalid arguments
|
||||||
var validArguments = ['_', 'notls', 'user', 'port', 'mpsport', 'redirport', 'cert', 'deletedomain', 'deletedefaultdomain', 'showall', 'showusers', 'shownodes', 'showmeshes', 'showevents', 'showpower', 'clearpower', 'showiplocations', 'help', 'exactports', 'install', 'uninstall', 'start', 'stop', 'restart', 'debug', 'filespath', 'datapath', 'noagentupdate', 'launch', 'noserverbackup', 'mongodb', 'mongodbcol', 'wanonly', 'lanonly', 'nousers', 'mpsdebug', 'mpspass', 'ciralocalfqdn', 'dbexport', 'dbimport', 'selfupdate', 'tlsoffload', 'userallowedip', 'fastcert', 'swarmport', 'swarmdebug', 'logintoken', 'logintokenkey', 'logintokengen', 'logintokengen', 'mailtokengen'];
|
var validArguments = ['_', 'notls', 'user', 'port', 'mpsport', 'mpsaliasport', 'redirport', 'cert', 'mpscert', 'deletedomain', 'deletedefaultdomain', 'showall', 'showusers', 'shownodes', 'showmeshes', 'showevents', 'showpower', 'clearpower', 'showiplocations', 'help', 'exactports', 'install', 'uninstall', 'start', 'stop', 'restart', 'debug', 'filespath', 'datapath', 'noagentupdate', 'launch', 'noserverbackup', 'mongodb', 'mongodbcol', 'wanonly', 'lanonly', 'nousers', 'mpsdebug', 'mpspass', 'ciralocalfqdn', 'dbexport', 'dbimport', 'selfupdate', 'tlsoffload', 'userallowedip', 'fastcert', 'swarmport', 'swarmdebug', 'logintoken', 'logintokenkey', 'logintokengen', 'logintokengen', 'mailtokengen'];
|
||||||
for (var arg in obj.args) { obj.args[arg.toLocaleLowerCase()] = obj.args[arg]; if (validArguments.indexOf(arg.toLocaleLowerCase()) == -1) { console.log('Invalid argument "' + arg + '", use --help.'); return; } }
|
for (var arg in obj.args) { obj.args[arg.toLocaleLowerCase()] = obj.args[arg]; if (validArguments.indexOf(arg.toLocaleLowerCase()) == -1) { console.log('Invalid argument "' + arg + '", use --help.'); return; } }
|
||||||
if (obj.args.mongodb == true) { console.log('Must specify: --mongodb [connectionstring] \r\nSee https://docs.mongodb.com/manual/reference/connection-string/ for MongoDB connection string.'); return; }
|
if (obj.args.mongodb == true) { console.log('Must specify: --mongodb [connectionstring] \r\nSee https://docs.mongodb.com/manual/reference/connection-string/ for MongoDB connection string.'); return; }
|
||||||
for (var i in obj.config.settings) { obj.args[i] = obj.config.settings[i]; } // Place all settings into arguments, arguments have already been placed into settings so arguments take precedence.
|
for (var i in obj.config.settings) { obj.args[i] = obj.config.settings[i]; } // Place all settings into arguments, arguments have already been placed into settings so arguments take precedence.
|
||||||
|
@ -106,7 +106,7 @@ function CreateMeshCentralServer(config) {
|
||||||
|
|
||||||
// Check if we need to install, start, stop, remove ourself as a background service
|
// Check if we need to install, start, stop, remove ourself as a background service
|
||||||
if ((obj.service != null) && ((obj.args.install == true) || (obj.args.uninstall == true) || (obj.args.start == true) || (obj.args.stop == true) || (obj.args.restart == true))) {
|
if ((obj.service != null) && ((obj.args.install == true) || (obj.args.uninstall == true) || (obj.args.start == true) || (obj.args.stop == true) || (obj.args.restart == true))) {
|
||||||
var env = [], xenv = ['user', 'port', 'mpsport', 'redirport', 'exactport', 'debug'];
|
var env = [], xenv = ['user', 'port', 'mpsport', 'mpsaliasport', 'redirport', 'exactport', 'debug'];
|
||||||
for (var i in xenv) { if (obj.args[xenv[i]] != null) { env.push({ name: 'mesh' + xenv[i], value: obj.args[xenv[i]] }); } } // Set some args as service environement variables.
|
for (var i in xenv) { if (obj.args[xenv[i]] != null) { env.push({ name: 'mesh' + xenv[i], value: obj.args[xenv[i]] }); } } // Set some args as service environement variables.
|
||||||
var svc = new obj.service({ name: 'MeshCentral', description: 'MeshCentral Remote Management Server', script: obj.path.join(__dirname, 'meshcentral.js'), env: env, wait: 2, grow: .5 });
|
var svc = new obj.service({ name: 'MeshCentral', description: 'MeshCentral Remote Management Server', script: obj.path.join(__dirname, 'meshcentral.js'), env: env, wait: 2, grow: .5 });
|
||||||
svc.on('install', function () { console.log('MeshCentral service installed.'); svc.start(); });
|
svc.on('install', function () { console.log('MeshCentral service installed.'); svc.start(); });
|
||||||
|
@ -201,7 +201,7 @@ function CreateMeshCentralServer(config) {
|
||||||
if (obj.args.filespath) { obj.filespath = obj.args.filespath; }
|
if (obj.args.filespath) { obj.filespath = obj.args.filespath; }
|
||||||
|
|
||||||
// Read environment variables. For a subset of arguments, we allow them to be read from environment variables.
|
// Read environment variables. For a subset of arguments, we allow them to be read from environment variables.
|
||||||
var xenv = ['user', 'port', 'mpsport', 'redirport', 'exactport', 'debug'];
|
var xenv = ['user', 'port', 'mpsport', 'mpsaliasport', 'redirport', 'exactport', 'debug'];
|
||||||
for (var i in xenv) { if ((obj.args[xenv[i]] == null) && (process.env['mesh' + xenv[i]])) { obj.args[xenv[i]] = obj.common.toNumber(process.env['mesh' + xenv[i]]); } }
|
for (var i in xenv) { if ((obj.args[xenv[i]] == null) && (process.env['mesh' + xenv[i]])) { obj.args[xenv[i]] = obj.common.toNumber(process.env['mesh' + xenv[i]]); } }
|
||||||
|
|
||||||
// Validate the domains, this is used for multi-hosting
|
// Validate the domains, this is used for multi-hosting
|
||||||
|
@ -225,6 +225,7 @@ function CreateMeshCentralServer(config) {
|
||||||
if ((obj.args.ciralocalfqdn != null) && (obj.args.ciralocalfqdn.split(',').length > 4)) { console.log("WARNING: Can't have more than 4 CIRA local FQDN's. Ignoring value."); obj.args.ciralocalfqdn = null; }
|
if ((obj.args.ciralocalfqdn != null) && (obj.args.ciralocalfqdn.split(',').length > 4)) { console.log("WARNING: Can't have more than 4 CIRA local FQDN's. Ignoring value."); obj.args.ciralocalfqdn = null; }
|
||||||
if (obj.args.port == null || typeof obj.args.port != 'number') { if (obj.args.notls == null) { obj.args.port = 443; } else { obj.args.port = 80; } }
|
if (obj.args.port == null || typeof obj.args.port != 'number') { if (obj.args.notls == null) { obj.args.port = 443; } else { obj.args.port = 80; } }
|
||||||
if (obj.args.mpsport == null || typeof obj.args.mpsport != 'number') obj.args.mpsport = 4433;
|
if (obj.args.mpsport == null || typeof obj.args.mpsport != 'number') obj.args.mpsport = 4433;
|
||||||
|
if (obj.args.mpsaliasport != null && (typeof obj.args.mpsaliasport != 'number')) obj.args.mpsaliasport = null;
|
||||||
if (obj.args.notls == null && obj.args.redirport == null) obj.args.redirport = 80;
|
if (obj.args.notls == null && obj.args.redirport == null) obj.args.redirport = 80;
|
||||||
if (typeof obj.args.debug == 'number') obj.debugLevel = obj.args.debug;
|
if (typeof obj.args.debug == 'number') obj.debugLevel = obj.args.debug;
|
||||||
if (obj.args.debug == true) obj.debugLevel = 1;
|
if (obj.args.debug == true) obj.debugLevel = 1;
|
||||||
|
|
13
meshuser.js
13
meshuser.js
|
@ -926,12 +926,15 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain) {
|
||||||
if (obj.parent.parent.multiServer != null) { obj.parent.parent.multiServer.DispatchMessage({ action: 'sessionEnd', sessionid: ws.sessionId }); }
|
if (obj.parent.parent.multiServer != null) { obj.parent.parent.multiServer.DispatchMessage({ action: 'sessionEnd', sessionid: ws.sessionId }); }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Figure out the MPS port, use the alias if set
|
||||||
|
var mpsport = ((obj.args.mpsaliasport != null) ? obj.args.mpsaliasport : obj.args.mpsport);
|
||||||
|
|
||||||
|
// Build server information object
|
||||||
|
var serverinfo = { name: obj.parent.certificates.CommonName, mpsname: obj.parent.certificates.AmtMpsName, mpsport: mpsport, mpspass: obj.args.mpspass, port: obj.args.port, emailcheck: obj.parent.parent.mailserver != null }
|
||||||
|
if (obj.args.notls != true) { serverinfo.https = false; } else { serverinfo.https = true; serverinfo.redirport = obj.args.redirport; }
|
||||||
|
|
||||||
// Send server information
|
// Send server information
|
||||||
if (obj.args.notls == true) {
|
ws.send(JSON.stringify({ action: 'serverinfo', serverinfo: serverinfo }));
|
||||||
ws.send(JSON.stringify({ action: 'serverinfo', serverinfo: { name: obj.parent.certificates.CommonName, mpsport: obj.args.mpsport, mpspass: obj.args.mpspass, port: obj.args.port, https: false, emailcheck: obj.parent.parent.mailserver != null } }));
|
|
||||||
} else {
|
|
||||||
ws.send(JSON.stringify({ action: 'serverinfo', serverinfo: { name: obj.parent.certificates.CommonName, mpsport: obj.args.mpsport, mpspass: obj.args.mpspass, redirport: obj.args.redirport, port: obj.args.port, https: true, emailcheck: obj.parent.parent.mailserver != null } }));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send user information to web socket, this is the first thing we send
|
// Send user information to web socket, this is the first thing we send
|
||||||
var userinfo = obj.common.Clone(obj.parent.users[req.session.userid]);
|
var userinfo = obj.common.Clone(obj.parent.users[req.session.userid]);
|
||||||
|
|
|
@ -24,7 +24,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
|
||||||
obj.server = tls.createServer({ key: certificates.mps.key, cert: certificates.mps.cert, requestCert: true, rejectUnauthorized: false }, onConnection);
|
obj.server = tls.createServer({ key: certificates.mps.key, cert: certificates.mps.cert, requestCert: true, rejectUnauthorized: false }, onConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
obj.server.listen(args.mpsport, function () { console.log('MeshCentral Intel(R) AMT server running on ' + certificates.CommonName + ':' + args.mpsport + '.'); }).on('error', function (err) { console.error('ERROR: MeshCentral Intel(R) AMT server port ' + args.mpsport + ' is not available.'); if (args.exactports) { process.exit(); } });
|
obj.server.listen(args.mpsport, function () { console.log('MeshCentral Intel(R) AMT server running on ' + certificates.AmtMpsName + ':' + args.mpsport + ((args.mpsaliasport != null) ? (', alias port ' + args.mpsaliasport):'') + '.'); }).on('error', function (err) { console.error('ERROR: MeshCentral Intel(R) AMT server port ' + args.mpsport + ' is not available.'); if (args.exactports) { process.exit(); } });
|
||||||
|
|
||||||
var APFProtocol = {
|
var APFProtocol = {
|
||||||
UNKNOWN: 0,
|
UNKNOWN: 0,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "meshcentral",
|
"name": "meshcentral",
|
||||||
"version": "0.1.4-m",
|
"version": "0.1.4-s",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Remote Management",
|
"Remote Management",
|
||||||
"Intel AMT",
|
"Intel AMT",
|
||||||
|
|
|
@ -476,8 +476,8 @@ th {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="dialog" style="z-index:1000;background-color:#EEE;box-shadow:0px 0px 15px #666;font-family:Arial, Helvetica, sans-serif;border-radius:5px;position:fixed;top:160px;width:400px;display:none">
|
<div id="dialog" style="z-index:1000;background-color:#EEE;box-shadow:0px 0px 15px #666;font-family:Arial, Helvetica, sans-serif;border-radius:5px;position:fixed;overflow:auto;top:75px;width:400px;max-height:550px;display:none">
|
||||||
<div style="width:100%;background-color:#003366;color:#FFF;border-radius:5px 5px 0 0">
|
<div style="width:100%;background-color:#003366;color:#FFF;border-radius:5px 5px 0 0">
|
||||||
<div id='id_dialogclose' style="float:right;padding:5px;cursor:pointer" onclick="setDialogMode()"><b>X</b></div>
|
<div id='id_dialogclose' style="float:right;padding:5px;cursor:pointer" onclick="setDialogMode()"><b>X</b></div>
|
||||||
<div id='id_dialogtitle' style="padding:5px"></div>
|
<div id='id_dialogtitle' style="padding:5px"></div>
|
||||||
<div style="width:100%;margin:6px"></div>
|
<div style="width:100%;margin:6px"></div>
|
||||||
|
@ -33274,6 +33274,7 @@ if (typeof module !== "undefined" && module.exports) {
|
||||||
xxFilterStatisticsTimerActive = false;
|
xxFilterStatisticsTimerActive = false;
|
||||||
QH('id_TableSystemDefense', LoadingHtml);
|
QH('id_TableSystemDefense', LoadingHtml);
|
||||||
|
|
||||||
|
|
||||||
// Start pulling Intel AMT information
|
// Start pulling Intel AMT information
|
||||||
amtstack.BatchEnum("", ["CIM_SoftwareIdentity", "*AMT_SetupAndConfigurationService"], processSystemVersion); // Get Intel AMT version information and plenty more
|
amtstack.BatchEnum("", ["CIM_SoftwareIdentity", "*AMT_SetupAndConfigurationService"], processSystemVersion); // Get Intel AMT version information and plenty more
|
||||||
//amtstack.Enum("CIM_LogicalElement", processSystemVersion); // Get Intel AMT version information and plenty more
|
//amtstack.Enum("CIM_LogicalElement", processSystemVersion); // Get Intel AMT version information and plenty more
|
||||||
|
@ -36550,7 +36551,8 @@ if (typeof module !== "undefined" && module.exports) {
|
||||||
r["LockSleepButton"] = false;
|
r["LockSleepButton"] = false;
|
||||||
r["ReflashBIOS"] = false;
|
r["ReflashBIOS"] = false;
|
||||||
r["UseIDER"] = ((action > 199) && (action < 300));
|
r["UseIDER"] = ((action > 199) && (action < 300));
|
||||||
r["UseSOL"] = ((currentView == 13) && (action != 8) && (action != 300) && (action != 301)); // If we are looking at the terminal, turn on SOL. SOL can't be used with diagnostic mode (300/301)
|
//r["UseSOL"] = ((currentView == 13) && (action != 8) && (action != 300) && (action != 301)); // If we are looking at the terminal, turn on SOL. SOL can't be used with diagnostic mode (300/301)
|
||||||
|
r["UseSOL"] = ((currentView == 13) && (action != 8)); // If we are looking at the terminal, turn on SOL.
|
||||||
r["UseSafeMode"] = false;
|
r["UseSafeMode"] = false;
|
||||||
r["UserPasswordBypass"] = false;
|
r["UserPasswordBypass"] = false;
|
||||||
if (r["SecureErase"]) { r["SecureErase"] = ((action == 104) && (amtPowerBootCapabilities["SecureErase"] == true)); }
|
if (r["SecureErase"]) { r["SecureErase"] = ((action == 104) && (amtPowerBootCapabilities["SecureErase"] == true)); }
|
||||||
|
@ -36679,9 +36681,8 @@ if (typeof module !== "undefined" && module.exports) {
|
||||||
if (status == 200) {
|
if (status == 200) {
|
||||||
QV('go21', true); // Show Storage Panel
|
QV('go21', true); // Show Storage Panel
|
||||||
|
|
||||||
var len;
|
var len; // Remove all chars that are below 32, this will allow parsing even the the firmware gives us garbage.
|
||||||
do { len = data.length; data = data.replace('\x00',''); } while (len > data.length); // Remove all zero's, this is needed because firmware sometimes returns garbage we must fix.
|
for (var i = 0; i < 32; i++) { do { len = data.length; data = data.replace(String.fromCharCode(i),''); } while (len > data.length); }
|
||||||
do { len = data.length; data = data.replace('\x22\x01\x22','\x22\x22'); } while (len > data.length); // "\x01", this is needed because firmware sometimes returns garbage we must fix.
|
|
||||||
try { xxStorage = JSON.parse(data); } catch (e) { return; }
|
try { xxStorage = JSON.parse(data); } catch (e) { return; }
|
||||||
xxStorageVendors = [];
|
xxStorageVendors = [];
|
||||||
xxStorageApplications = [];
|
xxStorageApplications = [];
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#container {
|
#container {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
width: 960px;
|
width: 960px;
|
||||||
|
min-width: 960px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
border-right: 1px solid #b7b7b7;
|
border-right: 1px solid #b7b7b7;
|
||||||
|
@ -41,7 +42,7 @@
|
||||||
#footer {
|
#footer {
|
||||||
clear: both;
|
clear: both;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
width: 960px;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: #113962;
|
background-color: #113962;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
|
|
10
readme.txt
10
readme.txt
|
@ -5,9 +5,9 @@ For more information, [visit MeshCommander.com/MeshCentral2](http://www.meshcomm
|
||||||
|
|
||||||
Download the [full PDF user's guide](http://info.meshcentral.com/downloads/meshcentral2/MeshCentral2UserGuide.pdf) with more information on installing, configuring and running MeshCentral2.
|
Download the [full PDF user's guide](http://info.meshcentral.com/downloads/meshcentral2/MeshCentral2UserGuide.pdf) with more information on installing, configuring and running MeshCentral2.
|
||||||
|
|
||||||
This is a full computer management web site. With MeshCentral, you can run your own web server and it to remotely manage and control computers on a local network or anywhere on the internet. Once you get the server started, will create a mesh (a group of computers) and then download and install a mesh agent on each computer you want to manage. A minute later, the new computer will show up on the web site and you can take control of it, etc. MeshCentral includes full web-based remote desktop, terminal and file management capability.
|
This is a full computer management web site. With MeshCentral, you can run your own web server to remotely manage and control computers on a local network or anywhere on the internet. Once you get the server started, create a mesh (a group of computers) and then download and install a mesh agent on each computer you want to manage. A minute later, the new computer will show up on the web site and you can take control of it. MeshCentral includes full web-based remote desktop, terminal and file management capability.
|
||||||
|
|
||||||
This version of MeshCentral that is completely rebuild of the original MeshCentral coded in C#. It's simpler and includes many other design improvements over the original. At some point in the future, [MeshCentral.com](http://meshcentral.com) that is still running the older code will switch to using this code base. For now, this is early software, preview quality at best.
|
This version of MeshCentral that is completely rebuild of the original MeshCentral coded in C#. It's simpler and includes many other design improvements over the original. At some point in the future, [MeshCentral.com](http://meshcentral.com) that is still running the older code will switch to using this code base.
|
||||||
|
|
||||||
This version is BETA and should not be used in production.
|
This version is BETA and should not be used in production.
|
||||||
|
|
||||||
|
@ -149,17 +149,17 @@ Tutorials
|
||||||
|
|
||||||
How to install MeshCentral2 in a few minutes.
|
How to install MeshCentral2 in a few minutes.
|
||||||
|
|
||||||
[![MeshCentral2 - Installation](http://img.youtube.com/vi/LSiWuu71k_U/mqdefault.jpg)](http://www.youtube.com/watch?v=LSiWuu71k_U)
|
[![MeshCentral2 - Installation](https://img.youtube.com/vi/LSiWuu71k_U/mqdefault.jpg)](https://www.youtube.com/watch?v=LSiWuu71k_U)
|
||||||
|
|
||||||
|
|
||||||
Demonstration of MeshCentral2 usages and more tips & tricks.
|
Demonstration of MeshCentral2 usages and more tips & tricks.
|
||||||
|
|
||||||
[![MeshCentral2 - Usages](http://img.youtube.com/vi/1E3NqGJzYds/mqdefault.jpg)](http://www.youtube.com/watch?v=1E3NqGJzYds)
|
[![MeshCentral2 - Usages](https://img.youtube.com/vi/1E3NqGJzYds/mqdefault.jpg)](https://www.youtube.com/watch?v=1E3NqGJzYds)
|
||||||
|
|
||||||
|
|
||||||
How to setup Intel® AMT client initiated remote access (CIRA) to connect to MeshCentral2.
|
How to setup Intel® AMT client initiated remote access (CIRA) to connect to MeshCentral2.
|
||||||
|
|
||||||
[![MeshCentral2 - Intel AMT CIRA](http://img.youtube.com/vi/rA2KHa2jkO0/mqdefault.jpg)](http://www.youtube.com/watch?v=rA2KHa2jkO0)
|
[![MeshCentral2 - Intel AMT CIRA](https://img.youtube.com/vi/rA2KHa2jkO0/mqdefault.jpg)](https://www.youtube.com/watch?v=rA2KHa2jkO0)
|
||||||
|
|
||||||
|
|
||||||
License
|
License
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
<td id=MainMenuMyEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(3)>My Events</td>
|
<td id=MainMenuMyEvents style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(3)>My Events</td>
|
||||||
<td id=MainMenuMyFiles style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(5)>My Files</td>
|
<td id=MainMenuMyFiles style=width:100px;height:24px;cursor:pointer class=style3 onclick=go(5)>My Files</td>
|
||||||
<td id=MainMenuMyUsers style=width:100px;height:24px;cursor:pointer;display:none class=style3 onclick=go(4)>My Users</td>
|
<td id=MainMenuMyUsers style=width:100px;height:24px;cursor:pointer;display:none class=style3 onclick=go(4)>My Users</td>
|
||||||
<td class=style3 style=height:24px> </td>
|
<td class=style3 style="text-align:right;height:24px"><span title="Toggle full width" style="cursor:pointer;opacity:0.2" onclick="toggleFullScreen(1)">↔</span> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<div id="MainSubMenuSpan" style=display:none>
|
<div id="MainSubMenuSpan" style=display:none>
|
||||||
|
@ -126,7 +126,7 @@
|
||||||
<div style=float:right id=devListToolbarView>
|
<div style=float:right id=devListToolbarView>
|
||||||
View
|
View
|
||||||
<select id=viewselect onchange=onDeviceViewChange()>
|
<select id=viewselect onchange=onDeviceViewChange()>
|
||||||
<option value=1>3 wide</option>
|
<option value=1>Columns</option>
|
||||||
<option value=2>List</option>
|
<option value=2>List</option>
|
||||||
<option id=viewselectmapoption value=3>Map</option>
|
<option id=viewselectmapoption value=3>Map</option>
|
||||||
</select>
|
</select>
|
||||||
|
@ -189,7 +189,8 @@
|
||||||
( <a onclick=account_createMesh() style=cursor:pointer><img height=12 src="images/icon-addnew.png" width=12 border=0 /> New</a> )
|
( <a onclick=account_createMesh() style=cursor:pointer><img height=12 src="images/icon-addnew.png" width=12 border=0 /> New</a> )
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<div id=p2meshes></div>
|
<div id=p2meshes></div>
|
||||||
<div id=p2noMeshFound style=margin-left:40px;display:none>No meshes. <a onclick=account_createMesh() style=cursor:pointer><strong>Get started here!</strong></a><br /><br /></div>
|
<div id=p2noMeshFound style=margin-left:40px;display:none>No meshes. <a onclick=account_createMesh() style=cursor:pointer><strong>Get started here!</strong></a></div>
|
||||||
|
<br style=clear:both />
|
||||||
</div>
|
</div>
|
||||||
<div id=p3 style=display:none>
|
<div id=p3 style=display:none>
|
||||||
<h1>My Events</h1>
|
<h1>My Events</h1>
|
||||||
|
@ -651,6 +652,8 @@
|
||||||
var debugmode = false;
|
var debugmode = false;
|
||||||
var clickOnce = (((features & 256) != 0) && detectClickOnce());
|
var clickOnce = (((features & 256) != 0) && detectClickOnce());
|
||||||
var attemptWebRTC = ((features & 128) != 0);
|
var attemptWebRTC = ((features & 128) != 0);
|
||||||
|
var webPageFullScreen = getstore('webPageFullScreen', false);;
|
||||||
|
if (webPageFullScreen == 'false') { webPageFullScreen = false; }
|
||||||
|
|
||||||
function startup() {
|
function startup() {
|
||||||
if ((features & 32) == 0) {
|
if ((features & 32) == 0) {
|
||||||
|
@ -660,6 +663,8 @@
|
||||||
if (top != self && (loc == null || top.active == false)) { top.location = self.location; return; }
|
if (top != self && (loc == null || top.active == false)) { top.location = self.location; return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleFullScreen();
|
||||||
|
|
||||||
// Check if we are in debug mode
|
// Check if we are in debug mode
|
||||||
args = parseUriArgs();
|
args = parseUriArgs();
|
||||||
debugmode = (args.debug == 1);
|
debugmode = (args.debug == 1);
|
||||||
|
@ -752,6 +757,26 @@
|
||||||
QH('specialkeylist', x);
|
QH('specialkeylist', x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Toggle the web page to full screen
|
||||||
|
function toggleFullScreen(toggle) {
|
||||||
|
if (toggle === 1) { webPageFullScreen = !webPageFullScreen; putstore('webPageFullScreen', webPageFullScreen); }
|
||||||
|
if (webPageFullScreen == false) {
|
||||||
|
QS('container').width = '960px';
|
||||||
|
QS('container')['border-right'] = '1px solid #b7b7b7';
|
||||||
|
QS('container')['border-left'] = '1px solid #b7b7b7';
|
||||||
|
QS('container')['min-width'] = '960px';
|
||||||
|
//QS('column_l').padding = '0 15px';
|
||||||
|
QS('column_l').width = '930px';
|
||||||
|
} else {
|
||||||
|
QS('container').width = '100%';
|
||||||
|
QS('container')['border-right'] = '0';
|
||||||
|
QS('container')['border-left'] = '0';
|
||||||
|
QS('container')['min-width'] = '700px';
|
||||||
|
//QS('column_l').padding = '0';
|
||||||
|
QS('column_l').width = 'calc(100% - 30px)';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getNodeFromId(id) {
|
function getNodeFromId(id) {
|
||||||
for (var i in nodes) { if (nodes[i]._id == id) return nodes[i]; }
|
for (var i in nodes) { if (nodes[i]._id == id) return nodes[i]; }
|
||||||
return null;
|
return null;
|
||||||
|
@ -1352,9 +1377,9 @@
|
||||||
if (meshes[nodes[i].meshid].mtype == 1) { extra = '<span class=devHeaderx>, Intel® AMT only</span>'; }
|
if (meshes[nodes[i].meshid].mtype == 1) { extra = '<span class=devHeaderx>, Intel® AMT only</span>'; }
|
||||||
var meshrights = meshlinks.rights;
|
var meshrights = meshlinks.rights;
|
||||||
if ((view == 1) && (current != null)) { if (c == 2) { r += '<td><div style=width:301px></div></td>'; } r += '</tr></table>'; }
|
if ((view == 1) && (current != null)) { if (c == 2) { r += '<td><div style=width:301px></div></td>'; } r += '</tr></table>'; }
|
||||||
r += '<table style=width:100%;padding-top:4px cellpadding=0 cellspacing=0><tr><td colspan=3 class=DevSt><span style=float:right>';
|
r += '<div class=DevSt style=width:100%;padding-top:4px><span style=float:right>';
|
||||||
r += getMeshActions(mesh2, meshrights);
|
r += getMeshActions(mesh2, meshrights);
|
||||||
r += '</span><span id=MxMESH style=cursor:pointer onclick=gotoMesh("' + nodes[i].meshid + '")>' + EscapeHtml(meshes[nodes[i].meshid].name) + '</span>' + extra + '<span id=DevxHeader' + deviceHeaderId + ' class=devHeaderx></span></td></tr><tr>';
|
r += '</span><span id=MxMESH style=cursor:pointer onclick=gotoMesh("' + nodes[i].meshid + '")>' + EscapeHtml(meshes[nodes[i].meshid].name) + '</span>' + extra + '<span id=DevxHeader' + deviceHeaderId + ' class=devHeaderx></span></div>';
|
||||||
current = nodes[i].meshid;
|
current = nodes[i].meshid;
|
||||||
displayedMeshes[current] = 1;
|
displayedMeshes[current] = 1;
|
||||||
c = 0;
|
c = 0;
|
||||||
|
@ -1364,20 +1389,16 @@
|
||||||
if (nodes[i].pwr !== current) {
|
if (nodes[i].pwr !== current) {
|
||||||
deviceHeaderSet();
|
deviceHeaderSet();
|
||||||
if ((view == 1) && (current !== null)) { if (c == 2) { r += '<td><div style=width:301px></div></td>'; } r += '</tr></table>'; }
|
if ((view == 1) && (current !== null)) { if (c == 2) { r += '<td><div style=width:301px></div></td>'; } r += '</tr></table>'; }
|
||||||
r += '<table style=width:100%;padding-top:4px cellpadding=0 cellspacing=0><tr><td colspan=3 class=DevSt><span>' + PowerStateStr2(nodes[i].pwr) + '</span><span id=DevxHeader' + deviceHeaderId + ' class="devHeaderx"></span></td></tr><tr>';
|
r += '<div class=DevSt style=width:100%;padding-top:4px><span>' + PowerStateStr2(nodes[i].pwr) + '</span><span id=DevxHeader' + deviceHeaderId + ' class="devHeaderx"></span></div>';
|
||||||
current = nodes[i].pwr;
|
current = nodes[i].pwr;
|
||||||
c = 0;
|
c = 0;
|
||||||
}
|
}
|
||||||
} else if (sort == 2) {
|
} else if (sort == 2) {
|
||||||
// Device header
|
// Device header
|
||||||
if (current == null) { r += '<table style=width:100%;padding-top:4px cellpadding=0 cellspacing=0><tr>'; current = '1'; }
|
if (current == null) { current = '1'; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// Node positioning
|
|
||||||
if ((view == 1) && (c > 2)) { r += '</tr><tr>'; c = 0; }
|
|
||||||
c++;
|
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
var title = EscapeHtml(nodes[i].name);
|
var title = EscapeHtml(nodes[i].name);
|
||||||
if (title.length == 0) { title = '<i>None</i>'; }
|
if (title.length == 0) { title = '<i>None</i>'; }
|
||||||
if ((nodes[i].host != null) && (nodes[i].host.length > 0)) { title += " / " + EscapeHtml(nodes[i].host); }
|
if ((nodes[i].host != null) && (nodes[i].host.length > 0)) { title += " / " + EscapeHtml(nodes[i].host); }
|
||||||
|
@ -1390,10 +1411,15 @@
|
||||||
var nodestate = NodeStateStr(nodes[i]);
|
var nodestate = NodeStateStr(nodes[i]);
|
||||||
if ((!nodes[i].conn) || (nodes[i].conn == 0)) { icon += ' gray'; }
|
if ((!nodes[i].conn) || (nodes[i].conn == 0)) { icon += ' gray'; }
|
||||||
if (view == 1) {
|
if (view == 1) {
|
||||||
r += '<td><div id=devs style=width:301px;height:50px;padding-top:1px;padding-bottom:1px><div style=width:22px;height:50%;float:left;padding-top:12px><input class="' + nodes[i].meshid + ' DeviceCheckbox" onclick=p1updateInfo() value=devid_' + nodes[i]._id + ' type=checkbox></div><div style=height:100%;cursor:pointer onclick=gotoDevice(\'' + nodes[i]._id + '\')><div class="i' + icon + '" style=width:50px;float:left></div><div style=height:100%><div class=g1></div><div class=e2><div class=e1 title="' + title + '">' + name + '</div><div>' + nodestate + '</div></div><div class=g2></div></div></div></div></td>';
|
r += '<div id=devs style=display:inline-block;width:301px;height:50px;padding-top:1px;padding-bottom:1px><div style=width:22px;height:50%;float:left;padding-top:12px><input class="' + nodes[i].meshid + ' DeviceCheckbox" onclick=p1updateInfo() value=devid_' + nodes[i]._id + ' type=checkbox></div><div style=height:100%;cursor:pointer onclick=gotoDevice(\'' + nodes[i]._id + '\')><div class="i' + icon + '" style=width:50px;float:left></div><div style=height:100%><div class=g1></div><div class=e2><div class=e1 title="' + title + '">' + name + '</div><div>' + nodestate + '</div></div><div class=g2></div></div></div></div>';
|
||||||
} else {
|
} else {
|
||||||
r += '<td><div id=devs style=width:924px;height:20px;padding-top:1px;padding-bottom:1px><div style=width:22px;height:50%;float:left;padding-top:2px><input class="' + nodes[i].meshid + ' DeviceCheckbox" onclick=p1updateInfo() value=devid_' + nodes[i]._id + ' type=checkbox></div><div style=height:100%;cursor:pointer onclick=gotoDevice(\'' + nodes[i]._id + '\')><div class="j' + icon + '" style=width:16px;float:left;margin-top:3px></div><div style=height:100%><div class=g1></div><div class=e2 style=width:858px><div style=float:right;margin-top:1px>' + nodestate + '</div><div style=margin-top:1px title="' + title + '">' + name + '</div></div><div class=g2></div></div></div></div></td></tr><tr>';
|
r += '<tr><td><div id=devs class=bar18 style=height:18px;width:100%;font-size:medium>';
|
||||||
|
r += '<div style=width:22px;float:left;background-color:white><input class="' + nodes[i].meshid + ' DeviceCheckbox" onclick=p1updateInfo() value=devid_' + nodes[i]._id + ' type=checkbox></div>';
|
||||||
|
r += '<div style=float:left;height:18px;width:18px;background-color:white onclick=gotoDevice(\'' + nodes[i]._id + '\')><div class=j' + icon + ' style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>';
|
||||||
|
r += '<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>';
|
||||||
|
r += '<div style=cursor:pointer;font-size:14px title="' + title + '" onclick=gotoDevice(\'' + nodes[i]._id + '\')><span style=float:right>' + nodestate + '</span><span style=width:300px>' + name + '</span></div></div></td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceHeaderTotal++;
|
deviceHeaderTotal++;
|
||||||
if (typeof deviceHeaderCount[nodes[i].state] == 'undefined') { deviceHeaderCount[nodes[i].state] = 1; } else { deviceHeaderCount[nodes[i].state]++; }
|
if (typeof deviceHeaderCount[nodes[i].state] == 'undefined') { deviceHeaderCount[nodes[i].state] = 1; } else { deviceHeaderCount[nodes[i].state]++; }
|
||||||
}
|
}
|
||||||
|
@ -1550,7 +1576,7 @@
|
||||||
x += addHtmlValue('Root Certificate', '<a href="MeshServerRootCert.cer" target="_blank">Root Certificate File</a>');
|
x += addHtmlValue('Root Certificate', '<a href="MeshServerRootCert.cer" target="_blank">Root Certificate File</a>');
|
||||||
x += addHtmlValue('Username', '<input style=width:230px readonly value="' + meshidx.substring(0, 16) + '" />');
|
x += addHtmlValue('Username', '<input style=width:230px readonly value="' + meshidx.substring(0, 16) + '" />');
|
||||||
if (serverinfo.mpspass) { x += addHtmlValue('Password', '<input style=width:230px readonly value="' + EscapeHtml(serverinfo.mpspass) + '" />'); }
|
if (serverinfo.mpspass) { x += addHtmlValue('Password', '<input style=width:230px readonly value="' + EscapeHtml(serverinfo.mpspass) + '" />'); }
|
||||||
if (serverinfo != null) { x += addHtmlValue('MPS Server', '<input style=width:230px readonly value="' + EscapeHtml(serverinfo.name) + ':' + serverinfo.mpsport + '" />'); }
|
if (serverinfo != null) { x += addHtmlValue('MPS Server', '<input style=width:230px readonly value="' + EscapeHtml(serverinfo.mpsname) + ':' + serverinfo.mpsport + '" />'); }
|
||||||
x += "</div>";
|
x += "</div>";
|
||||||
|
|
||||||
// Setup CIRA with certificate authentication (Really difficult, only is allowed)
|
// Setup CIRA with certificate authentication (Really difficult, only is allowed)
|
||||||
|
@ -1558,7 +1584,7 @@
|
||||||
x += "<div id=dlgAddCira2 style=display:none>To add a new Intel® AMT device to mesh " + EscapeHtml(mesh.name) + " with CIRA, load the following certificate as trusted root within Intel AMT, authenticate using a client certificate with the following common name and connect to the following server.<br /><br />";
|
x += "<div id=dlgAddCira2 style=display:none>To add a new Intel® AMT device to mesh " + EscapeHtml(mesh.name) + " with CIRA, load the following certificate as trusted root within Intel AMT, authenticate using a client certificate with the following common name and connect to the following server.<br /><br />";
|
||||||
x += addHtmlValue('Root Certificate', '<a href="MeshServerRootCert.cer" target="_blank">Root Certificate File</a>');
|
x += addHtmlValue('Root Certificate', '<a href="MeshServerRootCert.cer" target="_blank">Root Certificate File</a>');
|
||||||
x += addHtmlValue('Organization', '<input style=width:230px readonly value="' + meshidx + '" />');
|
x += addHtmlValue('Organization', '<input style=width:230px readonly value="' + meshidx + '" />');
|
||||||
if (serverinfo != null) { x += addHtmlValue('MPS Server', '<input style=width:230px readonly value="' + EscapeHtml(serverinfo.name) + ':' + serverinfo.mpsport + '" />'); }
|
if (serverinfo != null) { x += addHtmlValue('MPS Server', '<input style=width:230px readonly value="' + EscapeHtml(serverinfo.mpsname) + ':' + serverinfo.mpsport + '" />'); }
|
||||||
x += "</div>";
|
x += "</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1610,7 +1636,8 @@
|
||||||
// Windows agent install
|
// Windows agent install
|
||||||
//x += "<div id=agins_windows>To add a new computer to mesh " + EscapeHtml(mesh.name) + ", download the mesh agent and configuration file and install the agent on the computer to manage.<br /><br />";
|
//x += "<div id=agins_windows>To add a new computer to mesh " + EscapeHtml(mesh.name) + ", download the mesh agent and configuration file and install the agent on the computer to manage.<br /><br />";
|
||||||
x += "<div id=agins_windows>To add a new computer to mesh " + EscapeHtml(mesh.name) + ", download the mesh agent and install it the computer to manage. This agent has server and mesh information embedded within it.<br /><br />";
|
x += "<div id=agins_windows>To add a new computer to mesh " + EscapeHtml(mesh.name) + ", download the mesh agent and install it the computer to manage. This agent has server and mesh information embedded within it.<br /><br />";
|
||||||
x += addHtmlValue('Mesh Agent', '<a href="meshagents?id=3&meshid=' + meshid.split('/')[2] + '" target="_blank">Windows executable (.exe)</a>');
|
x += addHtmlValue('Mesh Agent', '<a href="meshagents?id=3&meshid=' + meshid.split('/')[2] + '" target="_blank" title="32bit version of the MeshAgent">Windows (.exe)</a>');
|
||||||
|
x += addHtmlValue('Mesh Agent', '<a href="meshagents?id=4&meshid=' + meshid.split('/')[2] + '" target="_blank" title="64bit version of the MeshAgent">Windows x64 (.exe)</a>');
|
||||||
if (debugmode == true) { x += addHtmlValue('Settings File', '<a href="meshsettings?id=' + meshid.split('/')[2] + '" target="_blank">' + EscapeHtml(mesh.name) + ' settings (.msh)</a>'); }
|
if (debugmode == true) { x += addHtmlValue('Settings File', '<a href="meshsettings?id=' + meshid.split('/')[2] + '" target="_blank">' + EscapeHtml(mesh.name) + ' settings (.msh)</a>'); }
|
||||||
x += "</div>";
|
x += "</div>";
|
||||||
|
|
||||||
|
@ -1621,7 +1648,8 @@
|
||||||
|
|
||||||
// Windows agent uninstall
|
// Windows agent uninstall
|
||||||
x += "<div id=agins_windows_un style=display:none>To remove a mesh agent, download the file below, run it and click \"uninstall\".<br /><br />";
|
x += "<div id=agins_windows_un style=display:none>To remove a mesh agent, download the file below, run it and click \"uninstall\".<br /><br />";
|
||||||
x += addHtmlValue('Mesh Agent', '<a href="meshagents?id=3" target="_blank">Windows executable (.exe)</a>');
|
x += addHtmlValue('Mesh Agent', '<a href="meshagents?id=3" target="_blank" title="32bit version of the MeshAgent">Windows (.exe)</a>');
|
||||||
|
x += addHtmlValue('Mesh Agent', '<a href="meshagents?id=3" target="_blank" title="64bit version of the MeshAgent">Windows x64 (.exe)</a>');
|
||||||
x += "</div>";
|
x += "</div>";
|
||||||
|
|
||||||
// Linux agent uninstall
|
// Linux agent uninstall
|
||||||
|
@ -3076,6 +3104,7 @@
|
||||||
QS('container')['border-left'] = '1px solid #b7b7b7';
|
QS('container')['border-left'] = '1px solid #b7b7b7';
|
||||||
QS('column_l').padding = '0 15px';
|
QS('column_l').padding = '0 15px';
|
||||||
QS('column_l').width = '930px';
|
QS('column_l').width = '930px';
|
||||||
|
toggleFullScreen();
|
||||||
}
|
}
|
||||||
deskAdjust();
|
deskAdjust();
|
||||||
}
|
}
|
||||||
|
@ -4006,7 +4035,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateMeshes() {
|
function updateMeshes() {
|
||||||
var r = '<table><tr>';
|
var r = '';
|
||||||
var c = 0, count = 0;
|
var c = 0, count = 0;
|
||||||
for (i in meshes) {
|
for (i in meshes) {
|
||||||
// Mesh positioning
|
// Mesh positioning
|
||||||
|
@ -4016,9 +4045,8 @@
|
||||||
|
|
||||||
// Mesh
|
// Mesh
|
||||||
var rights = 'Administrator'; // TODO
|
var rights = 'Administrator'; // TODO
|
||||||
r += '<td><div style=width:431px;height:50px;padding-top:1px;padding-bottom:1px;float:left><div style=float:left;width:30px;height:100%></div><div style=height:100%;cursor:pointer onclick=gotoMesh(\'' + i + '\')><div class=mi style=float:left;width:50px;height:50px></div><div style=height:100%><div class=g1></div><div class=e2 style=width:300px><div class=e1>' + EscapeHtml(meshes[i].name) + '</div><div>' + rights + '</div></div><div class=g2 style=float:left></div></div></div></div></td>';
|
r += '<div style=display:inline-block;width:431px;height:50px;padding-top:1px;padding-bottom:1px;float:left><div style=float:left;width:30px;height:100%></div><div style=height:100%;cursor:pointer onclick=gotoMesh(\'' + i + '\')><div class=mi style=float:left;width:50px;height:50px></div><div style=height:100%><div class=g1></div><div class=e2 style=width:300px><div class=e1>' + EscapeHtml(meshes[i].name) + '</div><div>' + rights + '</div></div><div class=g2 style=float:left></div></div></div></div>';
|
||||||
}
|
}
|
||||||
r += '</tr></table>';
|
|
||||||
|
|
||||||
meshcount = count;
|
meshcount = count;
|
||||||
QH('p2meshes', r);
|
QH('p2meshes', r);
|
||||||
|
@ -4465,7 +4493,10 @@
|
||||||
|
|
||||||
var msg = event.msg.split('(R)').join('®');
|
var msg = event.msg.split('(R)').join('®');
|
||||||
if (event.username && event.username != userinfo.name) { msg += ': ' + event.username; }
|
if (event.username && event.username != userinfo.name) { msg += ': ' + event.username; }
|
||||||
x += '<tr><td><div class=' + icon + ' style=float:left;width:16px;margin-top:2px;margin-left:2px;height:16px></div><div class=g1 style=height:18px></div><div class=bar18 style=height:18px;width:140px;font-size:14px>' + time.toLocaleTimeString() + '</div><div class=bar18 style=height:18px;width:724px;font-size:14px>' + msg + '</div><div class=g2 style=height:18px;float:left></div><div class=bar182 style=float:none></div></td></tr>';
|
x += '<tr><td><div class=bar18 style=height:18px;width:100%;font-size:medium>';
|
||||||
|
x += '<div style=float:left;height:18px;width:18px;background-color:white><div class=' + icon + ' style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>';
|
||||||
|
x += '<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>';
|
||||||
|
x += '<div style=font-size:14px><span style=width:300px>' + time.toLocaleTimeString() + ' - ' + msg + '</span></div></div></td></tr>';
|
||||||
}
|
}
|
||||||
if (dateHeader != null) x += '</table>';
|
if (dateHeader != null) x += '</table>';
|
||||||
if (x == '') x = "<br><i>No Events Found</i><br><br>";
|
if (x == '') x = "<br><i>No Events Found</i><br><br>";
|
||||||
|
@ -4519,12 +4550,13 @@
|
||||||
}
|
}
|
||||||
if ((user.quota != null) && ((user.siteadmin & 8) != 0)) { msg += ", " + (user.quota / 1024) + " k"; }
|
if ((user.quota != null) && ((user.siteadmin & 8) != 0)) { msg += ", " + (user.quota / 1024) + " k"; }
|
||||||
if (user.name != userinfo.name) { msg += "</a>"; }
|
if (user.name != userinfo.name) { msg += "</a>"; }
|
||||||
if (user.email != null) {
|
var username = EscapeHtml(user.name);
|
||||||
msg = '<table style=width:100%><tr><td>' + EscapeHtml(user.name) + ', <a onclick=doemail(event,\"' + user.email + '\")>' + user.email + '</a>' + (((serverinfo.emailcheck == true) && (user.emailVerified != true))?' (unverified)':'') + '<td align=right>' + msg + '</table>';
|
if (user.email != null) { username += ', <a onclick=doemail(event,\"' + user.email + '\")>' + user.email + '</a>' + (((serverinfo.emailcheck == true) && (user.emailVerified != true))?' (unverified)':''); }
|
||||||
} else {
|
x += '<tr><td style=cursor:pointer onclick=showUserInfoDialog(\"' + user._id + '\")>';
|
||||||
msg = '<table style=width:100%><tr><td>' + EscapeHtml(user.name) + '<td align=right>' + msg + '</table>';
|
x += '<div class=bar style=height:24px;width:100%;font-size:medium>';
|
||||||
}
|
x += '<div style=float:left;height:24px;width:24px;background-color:white><div class=' + icon + ' style=width:16px;margin-top:4px;margin-left:2px;height:16px></div></div>';
|
||||||
x += '<tr><td style=cursor:pointer onclick=showUserInfoDialog(\"' + user._id + '\")><div class=' + icon + ' style=float:left;width:16px;margin-top:4px;margin-left:2px;height:16px></div><div class=g1 style=height:24px></div><div class=bar style=height:24px;width:864px;font-size:medium>' + msg + '</div><div class=g2 style=height:24px;float:left></div><div class=bar2 style=float:none></div></td></tr>';
|
x += '<div class=g1 style=height:24px;float:left></div><div class=g2 style=height:24px;float:right></div>';
|
||||||
|
x += '<div><span>' + username + '</span><span style=float:right>' + msg + '</span></div></div></td></tr>';
|
||||||
}
|
}
|
||||||
x += '</table>';
|
x += '</table>';
|
||||||
QH('p3users', x);
|
QH('p3users', x);
|
||||||
|
|
24
webserver.js
24
webserver.js
|
@ -740,7 +740,11 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
|
||||||
if (req.query.type == 1) {
|
if (req.query.type == 1) {
|
||||||
var filename = 'cira_setup.mescript';
|
var filename = 'cira_setup.mescript';
|
||||||
res.set({ 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Type': 'application/octet-stream', 'Content-Disposition': 'attachment; filename=' + filename });
|
res.set({ 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Type': 'application/octet-stream', 'Content-Disposition': 'attachment; filename=' + filename });
|
||||||
var serverNameSplit = obj.certificates.CommonName.split('.');
|
var serverNameSplit = obj.certificates.AmtMpsName.split('.');
|
||||||
|
|
||||||
|
// Figure out the MPS port, use the alias if set
|
||||||
|
var mpsport = ((obj.args.mpsaliasport != null) ? obj.args.mpsaliasport : obj.args.mpsport);
|
||||||
|
|
||||||
if ((serverNameSplit.length == 4) && (parseInt(serverNameSplit[0]) == serverNameSplit[0]) && (parseInt(serverNameSplit[1]) == serverNameSplit[1]) && (parseInt(serverNameSplit[2]) == serverNameSplit[2]) && (parseInt(serverNameSplit[3]) == serverNameSplit[3])) {
|
if ((serverNameSplit.length == 4) && (parseInt(serverNameSplit[0]) == serverNameSplit[0]) && (parseInt(serverNameSplit[1]) == serverNameSplit[1]) && (parseInt(serverNameSplit[2]) == serverNameSplit[2]) && (parseInt(serverNameSplit[3]) == serverNameSplit[3])) {
|
||||||
// Server name is an IPv4 address
|
// Server name is an IPv4 address
|
||||||
var filepath = obj.parent.path.join(__dirname, 'public/scripts/cira_setup_script_ip.mescript');
|
var filepath = obj.parent.path.join(__dirname, 'public/scripts/cira_setup_script_ip.mescript');
|
||||||
|
@ -750,13 +754,13 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
|
||||||
|
|
||||||
// Change a few things in the script
|
// Change a few things in the script
|
||||||
scriptFile.scriptBlocks[2].vars.CertBin.value = getRootCertBase64(); // Set the root certificate
|
scriptFile.scriptBlocks[2].vars.CertBin.value = getRootCertBase64(); // Set the root certificate
|
||||||
scriptFile.scriptBlocks[3].vars.IP.value = obj.certificates.CommonName; // Set the server IPv4 address name
|
scriptFile.scriptBlocks[3].vars.IP.value = obj.certificates.AmtMpsName; // Set the server IPv4 address name
|
||||||
scriptFile.scriptBlocks[3].vars.ServerName.value = obj.certificates.CommonName; // Set the server certificate name
|
scriptFile.scriptBlocks[3].vars.ServerName.value = obj.certificates.AmtMpsName; // Set the server certificate name
|
||||||
scriptFile.scriptBlocks[3].vars.Port.value = obj.args.mpsport; // Set the server MPS port
|
scriptFile.scriptBlocks[3].vars.Port.value = mpsport; // Set the server MPS port
|
||||||
scriptFile.scriptBlocks[3].vars.username.value = req.query.meshid; // Set the username
|
scriptFile.scriptBlocks[3].vars.username.value = req.query.meshid; // Set the username
|
||||||
scriptFile.scriptBlocks[3].vars.password.value = obj.args.mpspass ? obj.args.mpspass : 'A@xew9rt'; // Set the password
|
scriptFile.scriptBlocks[3].vars.password.value = obj.args.mpspass ? obj.args.mpspass : 'A@xew9rt'; // Set the password
|
||||||
scriptFile.scriptBlocks[4].vars.AccessInfo1.value = obj.certificates.CommonName + ':' + obj.args.mpsport; // Set the primary server name:port to set periodic timer
|
scriptFile.scriptBlocks[4].vars.AccessInfo1.value = obj.certificates.AmtMpsName + ':' + mpsport; // Set the primary server name:port to set periodic timer
|
||||||
//scriptFile.scriptBlocks[4].vars.AccessInfo2.value = obj.certificates.CommonName + ':' + obj.args.mpsport; // Set the secondary server name:port to set periodic timer
|
//scriptFile.scriptBlocks[4].vars.AccessInfo2.value = obj.certificates.AmtMpsName + ':' + mpsport; // Set the secondary server name:port to set periodic timer
|
||||||
if (obj.args.ciralocalfqdn != null) { scriptFile.scriptBlocks[6].vars.DetectionStrings.value = obj.args.ciralocalfqdn; } // Set the environment detection local FQDN's
|
if (obj.args.ciralocalfqdn != null) { scriptFile.scriptBlocks[6].vars.DetectionStrings.value = obj.args.ciralocalfqdn; } // Set the environment detection local FQDN's
|
||||||
|
|
||||||
// Compile the script
|
// Compile the script
|
||||||
|
@ -776,12 +780,12 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
|
||||||
|
|
||||||
// Change a few things in the script
|
// Change a few things in the script
|
||||||
scriptFile.scriptBlocks[2].vars.CertBin.value = getRootCertBase64(); // Set the root certificate
|
scriptFile.scriptBlocks[2].vars.CertBin.value = getRootCertBase64(); // Set the root certificate
|
||||||
scriptFile.scriptBlocks[3].vars.FQDN.value = obj.certificates.CommonName; // Set the server DNS name
|
scriptFile.scriptBlocks[3].vars.FQDN.value = obj.certificates.AmtMpsName; // Set the server DNS name
|
||||||
scriptFile.scriptBlocks[3].vars.Port.value = obj.args.mpsport; // Set the server MPS port
|
scriptFile.scriptBlocks[3].vars.Port.value = mpsport; // Set the server MPS port
|
||||||
scriptFile.scriptBlocks[3].vars.username.value = req.query.meshid; // Set the username
|
scriptFile.scriptBlocks[3].vars.username.value = req.query.meshid; // Set the username
|
||||||
scriptFile.scriptBlocks[3].vars.password.value = obj.args.mpspass ? obj.args.mpspass : 'A@xew9rt'; // Set the password
|
scriptFile.scriptBlocks[3].vars.password.value = obj.args.mpspass ? obj.args.mpspass : 'A@xew9rt'; // Set the password
|
||||||
scriptFile.scriptBlocks[4].vars.AccessInfo1.value = obj.certificates.CommonName + ':' + obj.args.mpsport; // Set the primary server name:port to set periodic timer
|
scriptFile.scriptBlocks[4].vars.AccessInfo1.value = obj.certificates.AmtMpsName + ':' + mpsport; // Set the primary server name:port to set periodic timer
|
||||||
//scriptFile.scriptBlocks[4].vars.AccessInfo2.value = obj.certificates.CommonName + ':' + obj.args.mpsport; // Set the secondary server name:port to set periodic timer
|
//scriptFile.scriptBlocks[4].vars.AccessInfo2.value = obj.certificates.AmtMpsName + ':' + mpsport; // Set the secondary server name:port to set periodic timer
|
||||||
if (obj.args.ciralocalfqdn != null) { scriptFile.scriptBlocks[6].vars.DetectionStrings.value = obj.args.ciralocalfqdn; } // Set the environment detection local FQDN's
|
if (obj.args.ciralocalfqdn != null) { scriptFile.scriptBlocks[6].vars.DetectionStrings.value = obj.args.ciralocalfqdn; } // Set the environment detection local FQDN's
|
||||||
|
|
||||||
// Compile the script
|
// Compile the script
|
||||||
|
|
Loading…
Reference in a new issue