mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-02-12 11:01:52 +00:00
Fixed default session renew timer.
This commit is contained in:
parent
b6cc60c1ac
commit
0e697167e9
6 changed files with 66 additions and 10 deletions
|
@ -15,7 +15,7 @@
|
||||||
"WANonly": { "type": "boolean", "default": false, "description": "When enabled, only MeshCentral WAN features are enabled and agents will connect to the server using a well known DNS name." },
|
"WANonly": { "type": "boolean", "default": false, "description": "When enabled, only MeshCentral WAN features are enabled and agents will connect to the server using a well known DNS name." },
|
||||||
"LANonly": { "type": "boolean", "default": false, "description": "When enabled, only MeshCentral LAN features are enabled and agents will find the server using multicast LAN packets." },
|
"LANonly": { "type": "boolean", "default": false, "description": "When enabled, only MeshCentral LAN features are enabled and agents will find the server using multicast LAN packets." },
|
||||||
"maintenanceMode": { "type": "boolean", "default": false, "description": "When enabled the server is in maintenance mode, only administrators can login. Use the maintenance command in server console to change." },
|
"maintenanceMode": { "type": "boolean", "default": false, "description": "When enabled the server is in maintenance mode, only administrators can login. Use the maintenance command in server console to change." },
|
||||||
"sessionTime": { "type": "integer" },
|
"sessionTime": { "type": "integer", "default": 60, "description": "Duration of a session cookie in minutes. Changing this affects how often the session needs to be automatically refreshed." },
|
||||||
"sessionKey": { "type": "string" },
|
"sessionKey": { "type": "string" },
|
||||||
"sessionSameSite": { "type": "string" },
|
"sessionSameSite": { "type": "string" },
|
||||||
"dbEncryptKey": { "type": "string" },
|
"dbEncryptKey": { "type": "string" },
|
||||||
|
@ -273,7 +273,7 @@
|
||||||
"userBlockedIP": { "type": "string" },
|
"userBlockedIP": { "type": "string" },
|
||||||
"agentAllowedIP": { "type": "string" },
|
"agentAllowedIP": { "type": "string" },
|
||||||
"agentBlockedIP": { "type": "string" },
|
"agentBlockedIP": { "type": "string" },
|
||||||
"userSessionIdleTimeout": { "type": "integer" },
|
"userSessionIdleTimeout": { "type": "integer", "default": null, "description": "When set, idle users will be disconnected after a set amounts of minutes." },
|
||||||
"userConsentFlags": {
|
"userConsentFlags": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
|
|
|
@ -1543,6 +1543,7 @@ function CreateMeshCentralServer(config, args) {
|
||||||
for (var i in obj.mpsserver.ciraConnections) { data.conn.am += obj.mpsserver.ciraConnections[i].length; }
|
for (var i in obj.mpsserver.ciraConnections) { data.conn.am += obj.mpsserver.ciraConnections[i].length; }
|
||||||
}
|
}
|
||||||
if (obj.firstStats === true) { delete obj.firstStats; data.first = true; }
|
if (obj.firstStats === true) { delete obj.firstStats; data.first = true; }
|
||||||
|
if (obj.multiServer != null) { data.s = obj.multiServer.serverid; }
|
||||||
obj.db.SetServerStats(data); // Save the stats to the database
|
obj.db.SetServerStats(data); // Save the stats to the database
|
||||||
obj.DispatchEvent(['*'], obj, { action: 'servertimelinestats', data: data }); // Event the server stats
|
obj.DispatchEvent(['*'], obj, { action: 'servertimelinestats', data: data }); // Event the server stats
|
||||||
}, 300000);
|
}, 300000);
|
||||||
|
|
|
@ -558,9 +558,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
||||||
if ((user.siteadmin & 21) == 0) return; // Only site administrators with "site backup" or "site restore" or "site update" permissions can use this.
|
if ((user.siteadmin & 21) == 0) return; // Only site administrators with "site backup" or "site restore" or "site update" permissions can use this.
|
||||||
if (common.validateInt(command.hours, 0, 24 * 30) == false) return;
|
if (common.validateInt(command.hours, 0, 24 * 30) == false) return;
|
||||||
db.GetServerStats(command.hours, function (err, docs) {
|
db.GetServerStats(command.hours, function (err, docs) {
|
||||||
if (err == null) {
|
if (err == null) { try { ws.send(JSON.stringify({ action: 'servertimelinestats', events: docs })); } catch (ex) { } }
|
||||||
try { ws.send(JSON.stringify({ action: 'servertimelinestats', events: docs })); } catch (ex) { }
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
"_mongoDumpPath": "C:\\Program Files\\MongoDB\\Server\\4.2\\bin\\mongodump.exe",
|
"_mongoDumpPath": "C:\\Program Files\\MongoDB\\Server\\4.2\\bin\\mongodump.exe",
|
||||||
"_WANonly": true,
|
"_WANonly": true,
|
||||||
"_LANonly": true,
|
"_LANonly": true,
|
||||||
"_sessionTime": 30,
|
|
||||||
"_sessionKey": "MyReallySecretPassword1",
|
"_sessionKey": "MyReallySecretPassword1",
|
||||||
"_sessionSameSite": "strict",
|
"_sessionSameSite": "strict",
|
||||||
"_dbEncryptKey": "MyReallySecretPassword2",
|
"_dbEncryptKey": "MyReallySecretPassword2",
|
||||||
|
|
|
@ -994,6 +994,8 @@
|
||||||
<div id="p40title"><h1>My Server Stats</h1></div>
|
<div id="p40title"><h1>My Server Stats</h1></div>
|
||||||
<div class="areaHead">
|
<div class="areaHead">
|
||||||
<div class="toright2">
|
<div class="toright2">
|
||||||
|
<select id=p40server style="display:none" onchange=updateServerTimelineStats()>
|
||||||
|
</select>
|
||||||
<select id=p40type onchange=updateServerTimelineStats()>
|
<select id=p40type onchange=updateServerTimelineStats()>
|
||||||
<option value=0>Connections</option>
|
<option value=0>Connections</option>
|
||||||
<option value=1>Memory</option>
|
<option value=1>Memory</option>
|
||||||
|
@ -1248,7 +1250,7 @@
|
||||||
<audio id="chimes"><source src="sounds/chimes.mp3" type="audio/mp3" /></audio>
|
<audio id="chimes"><source src="sounds/chimes.mp3" type="audio/mp3" /></audio>
|
||||||
<iframe style=display:none name="fileDownloadFrame"></iframe>
|
<iframe style=display:none name="fileDownloadFrame"></iframe>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript" nonce="abc">
|
<script type="text/javascript">
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Process server-side web state
|
// Process server-side web state
|
||||||
|
@ -13377,6 +13379,15 @@
|
||||||
function setServerTimelineStats(stats) { serverTimelineStats = stats; updateServerTimelineStats(); }
|
function setServerTimelineStats(stats) { serverTimelineStats = stats; updateServerTimelineStats(); }
|
||||||
function addServerTimelineStats(stats) {
|
function addServerTimelineStats(stats) {
|
||||||
if (serverTimelineStats == null) return;
|
if (serverTimelineStats == null) return;
|
||||||
|
|
||||||
|
// Check if this new data is for our selected server
|
||||||
|
var selectedServer = null;
|
||||||
|
if (Q('p40server').value != null) {
|
||||||
|
selectedServer = decodeURIComponent(Q('p40server').value);
|
||||||
|
if (selectedServer == "") { selectedServer = null; }
|
||||||
|
}
|
||||||
|
if (stats.s != selectedServer) return;
|
||||||
|
|
||||||
serverTimelineStats.push(stats);
|
serverTimelineStats.push(stats);
|
||||||
var chartType = Q('p40type').value;
|
var chartType = Q('p40type').value;
|
||||||
if (chartType == 0) {
|
if (chartType == 0) {
|
||||||
|
@ -13406,7 +13417,8 @@
|
||||||
function setupServerTimelineStats() { window.serverMainStats = new Chart(document.getElementById('serverMainStats').getContext('2d'), serverTimelineConfig); }
|
function setupServerTimelineStats() { window.serverMainStats = new Chart(document.getElementById('serverMainStats').getContext('2d'), serverTimelineConfig); }
|
||||||
|
|
||||||
function updateServerTimelineStats() {
|
function updateServerTimelineStats() {
|
||||||
var data, chartType = Q('p40type').value, timeAfter = pastDate(Q('p40time').value);
|
var data, chartType = Q('p40type').value, timeAfter = pastDate(Q('p40time').value), servers = [], selectedServer = null, serverEmptyExists = false, serverAutoSelect = true;
|
||||||
|
if (Q('p40server').value != null) { selectedServer = decodeURIComponent(Q('p40server').value); if (selectedServer == "") { selectedServer = null; } serverAutoSelect = false; }
|
||||||
serverTimelineConfig.options.scales.xAxes[0].time = { min: timeAfter };
|
serverTimelineConfig.options.scales.xAxes[0].time = { min: timeAfter };
|
||||||
if (chartType == 0) { // Connections
|
if (chartType == 0) { // Connections
|
||||||
serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString = "Connection Count";
|
serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString = "Connection Count";
|
||||||
|
@ -13422,6 +13434,12 @@
|
||||||
};
|
};
|
||||||
for (var i = 0; i < serverTimelineStats.length; i++) {
|
for (var i = 0; i < serverTimelineStats.length; i++) {
|
||||||
var t = new Date(serverTimelineStats[i].time);
|
var t = new Date(serverTimelineStats[i].time);
|
||||||
|
if ((serverTimelineStats[i].s != null) && (servers.indexOf(serverTimelineStats[i].s) == -1)) {
|
||||||
|
servers.push(serverTimelineStats[i].s);
|
||||||
|
if (serverAutoSelect) { selectedServer = serverTimelineStats[i].s; serverAutoSelect = false; }
|
||||||
|
}
|
||||||
|
if (serverTimelineStats[i].s == null) { serverEmptyExists = true; }
|
||||||
|
if (serverTimelineStats[i].s != selectedServer) { continue; }
|
||||||
if (serverTimelineStats[i].first == true) {
|
if (serverTimelineStats[i].first == true) {
|
||||||
data.datasets[0].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
data.datasets[0].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
||||||
data.datasets[1].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
data.datasets[1].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
||||||
|
@ -13449,6 +13467,12 @@
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
for (var i = 0; i < serverTimelineStats.length; i++) {
|
for (var i = 0; i < serverTimelineStats.length; i++) {
|
||||||
|
if ((serverTimelineStats[i].s != null) && (servers.indexOf(serverTimelineStats[i].s) == -1)) {
|
||||||
|
servers.push(serverTimelineStats[i].s);
|
||||||
|
if (serverAutoSelect) { selectedServer = serverTimelineStats[i].s; serverAutoSelect = false; }
|
||||||
|
}
|
||||||
|
if (serverTimelineStats[i].s == null) { serverEmptyExists = true; }
|
||||||
|
if (serverTimelineStats[i].s != selectedServer) { continue; }
|
||||||
if (serverTimelineStats[i].first == true) {
|
if (serverTimelineStats[i].first == true) {
|
||||||
data.datasets[0].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
data.datasets[0].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
||||||
data.datasets[1].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
data.datasets[1].data.push({ x: serverTimelineStats[i].time - 1, y: NaN });
|
||||||
|
@ -13480,6 +13504,14 @@
|
||||||
}*/
|
}*/
|
||||||
serverTimelineConfig.data = data;
|
serverTimelineConfig.data = data;
|
||||||
window.serverMainStats.update();
|
window.serverMainStats.update();
|
||||||
|
|
||||||
|
if (servers.length > 0) {
|
||||||
|
var x = '';
|
||||||
|
for (var i = 0; i < servers.length; i++) { x += '<option value="' + encodeURIComponentEx(servers[i]) + '"' + ((selectedServer == servers[i])?' selected':'') + '>' + EscapeHtml(servers[i]) + '</option>'; }
|
||||||
|
if (serverEmptyExists) { x += '<option value=""' + ((selectedServer == null)?' selected':'') + '>' + "Null" + '</option>'; }
|
||||||
|
QH('p40server', x);
|
||||||
|
}
|
||||||
|
QV('p40server', servers.length > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function p40downloadEvents() {
|
function p40downloadEvents() {
|
||||||
|
|
30
webserver.js
30
webserver.js
|
@ -2458,7 +2458,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||||
serverfeatures: serverFeatures,
|
serverfeatures: serverFeatures,
|
||||||
features: features,
|
features: features,
|
||||||
features2: features2,
|
features2: features2,
|
||||||
sessiontime: args.sessiontime,
|
sessiontime: (args.sessiontime) ? args.sessiontime : 60,
|
||||||
mpspass: args.mpspass,
|
mpspass: args.mpspass,
|
||||||
passRequirements: passRequirements,
|
passRequirements: passRequirements,
|
||||||
customui: customui,
|
customui: customui,
|
||||||
|
@ -2562,7 +2562,33 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
||||||
if (domain.customui != null) { customui = encodeURIComponent(JSON.stringify(domain.customui)); }
|
if (domain.customui != null) { customui = encodeURIComponent(JSON.stringify(domain.customui)); }
|
||||||
|
|
||||||
// Render the login page
|
// Render the login page
|
||||||
render(req, res, getRenderPage((domain.sitestyle == 2) ? 'login2' : 'login', req, domain), getRenderArgs({ loginmode: loginmode, rootCertLink: getRootCertLink(), newAccount: newAccountsAllowed, newAccountPass: (((domain.newaccountspass == null) || (domain.newaccountspass == '')) ? 0 : 1), serverDnsName: obj.getWebServerName(domain), serverPublicPort: httpsPort, passlogin: (typeof domain.showpasswordlogin == 'boolean') ? domain.showpasswordlogin : true, emailcheck: emailcheck, features: features, sessiontime: args.sessiontime, passRequirements: passRequirements, customui: customui, footer: (domain.loginfooter == null) ? '' : domain.loginfooter, hkey: encodeURIComponent(hardwareKeyChallenge).replace(/'/g, '%27'), messageid: msgid, passhint: passhint, welcometext: domain.welcometext ? encodeURIComponent(domain.welcometext).split('\'').join('\\\'') : null, hwstate: hwstate, otpemail: otpemail, otpsms: otpsms, twoFactorCookieDays: twoFactorCookieDays, authStrategies: authStrategies.join(','), loginpicture: (typeof domain.loginpicture == 'string') }, req, domain, (domain.sitestyle == 2) ? 'login2' : 'login'));
|
render(req, res,
|
||||||
|
getRenderPage((domain.sitestyle == 2) ? 'login2' : 'login', req, domain),
|
||||||
|
getRenderArgs({
|
||||||
|
loginmode: loginmode,
|
||||||
|
rootCertLink: getRootCertLink(),
|
||||||
|
newAccount: newAccountsAllowed,
|
||||||
|
newAccountPass: (((domain.newaccountspass == null) || (domain.newaccountspass == '')) ? 0 : 1),
|
||||||
|
serverDnsName: obj.getWebServerName(domain),
|
||||||
|
serverPublicPort: httpsPort,
|
||||||
|
passlogin: (typeof domain.showpasswordlogin == 'boolean') ? domain.showpasswordlogin : true,
|
||||||
|
emailcheck: emailcheck,
|
||||||
|
features: features,
|
||||||
|
sessiontime: (args.sessiontime) ? args.sessiontime : 60,
|
||||||
|
passRequirements: passRequirements,
|
||||||
|
customui: customui,
|
||||||
|
footer: (domain.loginfooter == null) ? '' : domain.loginfooter,
|
||||||
|
hkey: encodeURIComponent(hardwareKeyChallenge).replace(/'/g, '%27'),
|
||||||
|
messageid: msgid,
|
||||||
|
passhint: passhint,
|
||||||
|
welcometext: domain.welcometext ? encodeURIComponent(domain.welcometext).split('\'').join('\\\'') : null,
|
||||||
|
hwstate: hwstate,
|
||||||
|
otpemail: otpemail,
|
||||||
|
otpsms: otpsms,
|
||||||
|
twoFactorCookieDays: twoFactorCookieDays,
|
||||||
|
authStrategies: authStrategies.join(','),
|
||||||
|
loginpicture: (typeof domain.loginpicture == 'string')
|
||||||
|
}, req, domain, (domain.sitestyle == 2) ? 'login2' : 'login'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle a post request on the root
|
// Handle a post request on the root
|
||||||
|
|
Loading…
Reference in a new issue