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);