Cookie session is now auto-refreshed.
Ylian Saint-Hilaire committed
Jun 12, 2020 at 12:00 UTC
dfdaac0549d82349b418da7ee9e750dd53e5c76f
3 files changed
+30
-1
views/default-mobile.handlebars
+12
@@ -739,6 +739,7 @@
739
var debugLevel = parseInt('{{{debuglevel}}}');
740
var features = parseInt('{{{features}}}');
741
var sessionTime = parseInt('{{{sessiontime}}}');
742
+ var sessionRefreshTimer = null;
743
var domain = '{{{domain}}}';
744
var domainUrl = '{{{domainurl}}}';
745
var authCookie = '{{{authCookie}}}';
@@ -799,6 +800,17 @@
800
801
attemptWebRTC = 0; // For now, default WebRTC off unless we set it in the URL.
802
if (args.webrtc != null) { attemptWebRTC = (args.webrtc == 1); }
803
+
804
+ // Session Refresh Timer
805
+ sessionRefreshTimer = setInterval(function () {
806
+ var xdr = null;
807
+ try { xdr = new XDomainRequest(); } catch (e) { }
808
+ if (!xdr) xdr = new XMLHttpRequest();
809
+ xdr.open('GET', window.location.origin + domainUrl + 'refresh.ashx');
810
+ xdr.timeout = 15000;
811
+ xdr.onload = xdr.onerror = xdr.ontimeout = function () { };
812
+ xdr.send();
813
+ }, Math.round((sessionTime * 60000) * 0.8))
814
}
815
816
function onStateChanged(server, state, prevState, errorCode) {
views/default.handlebars
+13
-1
@@ -1219,6 +1219,7 @@
1219
var debugLevel = parseInt('{{{debuglevel}}}');
1220
var features = parseInt('{{{features}}}');
1221
var sessionTime = parseInt('{{{sessiontime}}}');
1222
+ var sessionRefreshTimer = null;
1223
var domain = '{{{domain}}}';
1224
var domainUrl = '{{{domainurl}}}';
1225
var authCookie = '{{{authCookie}}}';
@@ -1419,6 +1420,17 @@
1420
QH('devCustomUIBar', x);
1421
}
1422
}
1423
+
1424
+ // Session Refresh Timer
1425
+ sessionRefreshTimer = setInterval(function () {
1426
+ var xdr = null;
1427
+ try { xdr = new XDomainRequest(); } catch (e) { }
1428
+ if (!xdr) xdr = new XMLHttpRequest();
1429
+ xdr.open('GET', window.location.origin + domainUrl + 'refresh.ashx');
1430
+ xdr.timeout = 15000;
1431
+ xdr.onload = xdr.onerror = xdr.ontimeout = function () { };
1432
+ xdr.send();
1433
+ }, Math.round((sessionTime * 60000) * 0.8))
1434
}
1435
1436
// Generic handling of custom actions
@@ -5025,7 +5037,7 @@
5037
//for(var i = meshOptions.options.length - 1 ; i > 0 ; i--) { meshOptions.remove(i); }
5038
}
5039
5028
- // Make a http get call- Replace this with AJAX get if jquery is used
5040
+ // Make a http get call
5041
function getSearchLocation() {
5042
try {
5043
var searchdata = Q('mapSearchLocation').value.trim();
webserver.js
+5
@@ -2187,6 +2187,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2187
var customui = '';
2188
if (domain.customui != null) { customui = encodeURIComponent(JSON.stringify(domain.customui)); }
2189
2190
+ // Refresh the session
2191
render(req, res, getRenderPage('default', req, domain), getRenderArgs({ authCookie: authCookie, authRelayCookie: authRelayCookie, viewmode: viewmode, currentNode: currentNode, logoutControls: encodeURIComponent(JSON.stringify(logoutcontrols)).replace(/'/g, '%27'), domain: domain.id, debuglevel: parent.debugLevel, serverDnsName: obj.getWebServerName(domain), serverRedirPort: args.redirport, serverPublicPort: httpsPort, noServerBackup: (args.noserverbackup == 1 ? 1 : 0), features: features, sessiontime: args.sessiontime, mpspass: args.mpspass, passRequirements: passRequirements, customui: customui, webcerthash: Buffer.from(obj.webCertificateFullHashs[domain.id], 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'), footer: (domain.footer == null) ? '' : domain.footer, webstate: encodeURIComponent(webstate), pluginHandler: (parent.pluginHandler == null) ? 'null' : parent.pluginHandler.prepExports() }, req, domain));
2192
});
2193
} else {
@@ -4227,6 +4228,9 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
4228
// Check the session if bound to the external IP address
4229
if ((req.session.ip != null) && (req.clientIp != null) && (req.session.ip != req.clientIp)) { req.session = {}; }
4230
4231
+ // Extend the session time by forcing a change to the session every minute.
4232
+ req.session.nowInMinutes = Math.floor(Date.now() / 60e3);
4233
+
4234
// Detect if this is a file sharing domain, if so, just share files.
4235
if ((domain != null) && (domain.share != null)) {
4236
var rpath;
@@ -4284,6 +4288,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
4288
var url = domain.url;
4289
obj.app.get(url, handleRootRequest);
4290
obj.app.post(url, handleRootPostRequest);
4291
+ obj.app.get(url + 'refresh.ashx', function (req, res) { res.sendStatus(200); });
4292
obj.app.get(url + 'backup.zip', handleBackupRequest);
4293
obj.app.post(url + 'restoreserver.ashx', handleRestoreRequest);
4294
obj.app.get(url + 'terms', handleTermsRequest);