Added serverstate.txt file in data folder
Ylian Saint-Hilaire committed
Mar 14, 2018 at 12:10 UTC
2429a00907105ee6988be8c75aaf3594ab3a0dac
8 files changed
+41
-7
MeshCentralServer.njsproj
+1
@@ -36,6 +36,7 @@
36
<Compile Include="agents\modules_meshcore\amt-scanner.js" />
37
<Compile Include="agents\modules_meshcore\amt-xml.js" />
38
<Compile Include="agents\modules_meshcore\smbios.js" />
39
+ <Compile Include="agents\modules_meshcore\wifi-scanner-windows.js" />
40
<Compile Include="agents\modules_meshcore\wifi-scanner.js" />
41
<Compile Include="agents\testsuite.js" />
42
<Compile Include="agents\tinycore.js" />
certoperations.js
+2
-1
@@ -130,7 +130,7 @@ module.exports.CertificateOperations = function () {
130
}
131
132
// Returns the web server TLS certificate and private key, if not present, create demonstration ones.
133
- obj.GetMeshServerCertificate = function (directory, args, config, func) {
133
+ obj.GetMeshServerCertificate = function (directory, args, config, parent, func) {
134
var certargs = args.cert;
135
var mpscertargs = args.mpscert;
136
var strongCertificate = (args.fastcert ? false : true);
@@ -304,6 +304,7 @@ module.exports.CertificateOperations = function () {
304
}
305
}
306
console.log('Generating certificates, may take a few minutes...');
307
+ parent.updateServerState('state', 'generatingcertificates');
308
309
// If a certificate is missing, but web certificate is present and --cert is not used, set the names to be the same as the web certificate
310
if ((certargs == null) && (r.web != null)) {
meshcentral.js
+21
-1
@@ -196,6 +196,9 @@ function CreateMeshCentralServer(config) {
196
obj.performServerCertUpdate = function () { console.log('Updating server certificates...'); process.exit(200); }
197
198
obj.StartEx = function () {
199
+ // Write the server state
200
+ obj.updateServerState('state', 'starting');
201
+
202
// Look to see if data and/or file path is specified
203
if (obj.args.datapath) { obj.datapath = obj.args.datapath; }
204
if (obj.args.filespath) { obj.filespath = obj.args.filespath; }
@@ -323,7 +326,7 @@ function CreateMeshCentralServer(config) {
326
obj.StartEx2 = function () {
327
// Load server certificates
328
obj.certificateOperations = require('./certoperations.js').CertificateOperations()
326
- obj.certificateOperations.GetMeshServerCertificate(obj.datapath, obj.args, obj.config, function (certs) {
329
+ obj.certificateOperations.GetMeshServerCertificate(obj.datapath, obj.args, obj.config, obj, function (certs) {
330
if (obj.config.letsencrypt == null) {
331
obj.StartEx3(certs); // Just use the configured certificates
332
} else {
@@ -425,6 +428,7 @@ function CreateMeshCentralServer(config) {
428
}
429
430
obj.debug(1, 'Server started');
431
+ obj.updateServerState('state', 'running');
432
});
433
});
434
}
@@ -474,6 +478,9 @@ function CreateMeshCentralServer(config) {
478
process.exit(0);
479
}
480
});
481
+
482
+ // Update the server state
483
+ obj.updateServerState('state', 'stopped');
484
}
485
486
// Event Dispatch
@@ -994,6 +1001,19 @@ function CreateMeshCentralServer(config) {
1001
else if (arguments.length == 4) { console.log(arguments[1], arguments[2], arguments[3]); }
1002
else if (arguments.length == 5) { console.log(arguments[1], arguments[2], arguments[3], arguments[4]); }
1003
}
1004
+
1005
+ // Update server state. Writes a server state file.
1006
+ var meshServerState = {};
1007
+ obj.updateServerState = function(name, val) {
1008
+ if ((name != null) && (val != null)) {
1009
+ var changed = false;
1010
+ if ((name != null) && (meshServerState[name] != val)) { if ((val == null) && (meshServerState[name] != null)) { delete meshServerState[name]; changed = true; } else { if (meshServerState[name] != val) { meshServerState[name] = val; changed = true; } } }
1011
+ if (changed == false) return;
1012
+ }
1013
+ r = 'time=' + Date.now() + '\r\n';
1014
+ for (var i in meshServerState) { r += (i + '=' + meshServerState[i] + '\r\n'); }
1015
+ obj.fs.writeFileSync(obj.path.join(obj.datapath, 'serverstate.txt'), r);
1016
+ }
1017
1018
// Logging funtions
1019
function logException(e) { e += ''; logErrorEvent(e); }
mpsserver.js
+4
-1
@@ -25,7 +25,10 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
25
}
26
27
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(); } });
28
-
28
+ obj.parent.updateServerState('mps-port', args.mpsport);
29
+ obj.parent.updateServerState('mps-name', certificates.AmtMpsName);
30
+ if (args.mpsaliasport != null) { obj.parent.updateServerState('mps-alias-port', args.mpsaliasport); }
31
+
32
var APFProtocol = {
33
UNKNOWN: 0,
34
DISCONNECT: 1,
package.json
+1
-1
@@ -1,6 +1,6 @@
1
{
2
"name": "meshcentral",
3
- "version": "0.1.4-y",
3
+ "version": "0.1.5-a",
4
"keywords": [
5
"Remote Management",
6
"Intel AMT",
redirserver.js
+1
@@ -95,6 +95,7 @@ module.exports.CreateRedirServer = function (parent, db, args, func) {
95
obj.tcpServer = obj.app.listen(port, function () {
96
obj.port = port;
97
console.log('MeshCentral HTTP redirection web server running on port ' + port + '.');
98
+ obj.parent.updateServerState('redirect-port', port);
99
func(obj.port);
100
}).on('error', function (err) {
101
if ((err.code == 'EACCES') && (port < 65535)) { StartRedirServer(port + 1); } else { console.log(err); func(obj.port); }
swarmserver.js
+1
-1
@@ -116,7 +116,7 @@ module.exports.CreateSwarmServer = function (parent, db, args, certificates) {
116
}
117
118
obj.server = tls.createServer({ key: certificates.swarmserver.key, cert: certificates.swarmserver.cert, requestCert: true }, onConnection);
119
- obj.server.listen(args.swarmport, function () { console.log('MeshCentral Legacy Swarm Server running on ' + certificates.CommonName + ':' + args.swarmport + '.'); }).on('error', function (err) { console.error('ERROR: MeshCentral Swarm Server server port ' + args.swarmport + ' is not available.'); if (args.exactports) { process.exit(); } });
119
+ obj.server.listen(args.swarmport, function () { console.log('MeshCentral Legacy Swarm Server running on ' + certificates.CommonName + ':' + args.swarmport + '.'); obj.parent.updateServerState('swarm-port', args.swarmport); }).on('error', function (err) { console.error('ERROR: MeshCentral Swarm Server server port ' + args.swarmport + ' is not available.'); if (args.exactports) { process.exit(); } });
120
loadMigrationAgents();
121
122
// Load all migration agents along with full executable in memory
webserver.js
+10
-2
@@ -1604,13 +1604,16 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
1604
// Two more headers to take a look at:
1605
// 'Public-Key-Pins': 'pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; max-age=10'
1606
// 'strict-transport-security': 'max-age=31536000; includeSubDomains'
1607
+ var headers = null;
1608
if (obj.args.notls) {
1609
// Default headers if no TLS is used
1609
- res.set({ 'Referrer-Policy': 'no-referrer', 'x-frame-options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'Content-Security-Policy': "default-src http: ws: data: 'self';script-src http: 'unsafe-inline';style-src http: 'unsafe-inline'" });
1610
+ headers = { 'Referrer-Policy': 'no-referrer', 'x-frame-options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'Content-Security-Policy': "default-src http: ws: data: 'self';script-src http: 'unsafe-inline';style-src http: 'unsafe-inline'" };
1611
} else {
1612
// Default headers if TLS is used
1612
- res.set({ 'Referrer-Policy': 'no-referrer', 'x-frame-options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'Content-Security-Policy': "default-src https: wss: data: 'self';script-src https: 'unsafe-inline';style-src https: 'unsafe-inline'" });
1613
+ headers = { 'Referrer-Policy': 'no-referrer', 'x-frame-options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'Content-Security-Policy': "default-src https: wss: data: 'self';script-src https: 'unsafe-inline';style-src https: 'unsafe-inline'" };
1614
}
1615
+ if (parent.config.settings.accesscontrolalloworigin != null) { headers['Access-Control-Allow-Origin'] = parent.config.settings.accesscontrolalloworigin; }
1616
+ res.set(headers);
1617
return next();
1618
}
1619
});
@@ -1673,9 +1676,14 @@ module.exports.CreateWebServer = function (parent, db, args, secret, certificate
1676
obj.tcpServer = obj.tlsServer.listen(port, function () { console.log('MeshCentral HTTPS web server running on port ' + port + ((args.aliasport != null) ? (', alias port ' + args.aliasport) : '') + '.'); });
1677
} else {
1678
obj.tcpServer = obj.tlsServer.listen(port, function () { console.log('MeshCentral HTTPS web server running on ' + certificates.CommonName + ':' + port + ((args.aliasport != null) ? (', alias port ' + args.aliasport) : '') + '.'); });
1679
+ obj.parent.updateServerState('servername', certificates.CommonName);
1680
}
1681
+ obj.parent.updateServerState('https-port', port);
1682
+ if (args.aliasport != null) { obj.parent.updateServerState('https-aliasport', args.aliasport); }
1683
} else {
1684
obj.tcpServer = obj.app.listen(port, function () { console.log('MeshCentral HTTP web server running on port ' + port + ((args.aliasport != null) ? (', alias port ' + args.aliasport) : '') + '.'); });
1685
+ obj.parent.updateServerState('http-port', port);
1686
+ if (args.aliasport != null) { obj.parent.updateServerState('http-aliasport', args.aliasport); }
1687
}
1688
}
1689