diff --git a/core/js/js.js b/core/js/js.js index 1d5219eff12103bf2c45fc165f4f35c25ded5305..a8dd9ca889d34b6f5b74e4504807dc4c8eb4b147 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -968,6 +968,8 @@ function initCore() { * time out */ function initSessionHeartBeat(){ + // max interval in seconds set to 24 hours + var maxInterval = 24 * 3600; // interval in seconds var interval = 900; if (oc_config.session_lifetime) { @@ -977,6 +979,9 @@ function initCore() { if (interval < 60) { interval = 60; } + if (interval > maxInterval) { + interval = maxInterval; + } var url = OC.generateUrl('/heartbeat'); setInterval(function(){ $.post(url); diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js index 3c62b976779bcb27a0b648acb9b7bf52c9441621..dd9d4a79277d3a3cfeb9d2b9584344cbd6de0736 100644 --- a/core/js/tests/specs/coreSpec.js +++ b/core/js/tests/specs/coreSpec.js @@ -19,7 +19,6 @@ * */ -/* global OC */ describe('Core base tests', function() { describe('Base values', function() { it('Sets webroots', function() { @@ -235,10 +234,12 @@ describe('Core base tests', function() { }); afterEach(function() { clock.restore(); + /* jshint camelcase: false */ window.oc_config = oldConfig; routeStub.restore(); }); it('sends heartbeat half the session lifetime when heartbeat enabled', function() { + /* jshint camelcase: false */ window.oc_config = { session_keepalive: true, session_lifetime: 300 @@ -265,6 +266,7 @@ describe('Core base tests', function() { expect(counter).toEqual(2); }); it('does no send heartbeat when heartbeat disabled', function() { + /* jshint camelcase: false */ window.oc_config = { session_keepalive: false, session_lifetime: 300 @@ -279,6 +281,26 @@ describe('Core base tests', function() { // still nothing expect(counter).toEqual(0); }); + it('limits the heartbeat between one minute and one day', function() { + /* jshint camelcase: false */ + var setIntervalStub = sinon.stub(window, 'setInterval'); + window.oc_config = { + session_keepalive: true, + session_lifetime: 5 + }; + window.initCore(); + expect(setIntervalStub.getCall(0).args[1]).toEqual(60 * 1000); + setIntervalStub.reset(); + + window.oc_config = { + session_keepalive: true, + session_lifetime: 48 * 3600 + }; + window.initCore(); + expect(setIntervalStub.getCall(0).args[1]).toEqual(24 * 3600 * 1000); + + setIntervalStub.restore(); + }); }); describe('Parse query string', function() { it('Parses query string from full URL', function() {