]> source.dussan.org Git - nextcloud-server.git/commitdiff
Added session_keepalive setting
authorVincent Petry <pvince81@owncloud.com>
Tue, 4 Feb 2014 12:56:10 +0000 (13:56 +0100)
committerVincent Petry <pvince81@owncloud.com>
Tue, 4 Feb 2014 12:56:10 +0000 (13:56 +0100)
When session_keepalive is true (default) the heartbeat will be send as
often as the half of the session timeout value.

config/config.sample.php
core/js/config.php
core/js/js.js

index 01abc583688f31845197aed59c51be6c0a56b085..ef5fb7ea5a5f685fa2a60e857d9738e9c37ad848 100755 (executable)
@@ -184,6 +184,13 @@ $CONFIG = array(
 /* Life time of a session after inactivity */
 "session_lifetime" => 60 * 60 * 24,
 
+/*
+ * Enable/disable session keep alive when a user is logged in in the Web UI.
+ * This is achieved by sending a "heartbeat" to the server to prevent
+ * the session timing out.
+ */
+"session_keepalive" => true,
+
 /* Custom CSP policy, changing this will overwrite the standard policy */
 "custom_csp_policy" => "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src *; img-src *; font-src 'self' data:; media-src *",
 
index dd46f7889d155ab80ff00fef7fcc892da516070e..517ea1615a8fdf4187cf98f3244fc319ce6d6caf 100644 (file)
@@ -55,6 +55,12 @@ $array = array(
                )
        ),
        "firstDay" => json_encode($l->l('firstday', 'firstday')) ,
+       "oc_config" => json_encode(
+               array(
+                       'session_lifetime' => \OCP\Config::getSystemValue('session_lifetime', 60 * 60 * 24),
+                       'session_keepalive' => \OCP\Config::getSystemValue('session_keepalive', true)
+               )
+       )
        );
 
 // Echo it
index 1c7d89ea055adbb0344c596111c67daca0f62102..cd9b8bd30100a608e7f4ddb1c1f009a2c6400569 100644 (file)
@@ -11,6 +11,8 @@ var oc_webroot;
 var oc_current_user = document.getElementsByTagName('head')[0].getAttribute('data-user');
 var oc_requesttoken = document.getElementsByTagName('head')[0].getAttribute('data-requesttoken');
 
+window.oc_config = window.oc_config || {};
+
 if (typeof oc_webroot === "undefined") {
        oc_webroot = location.pathname;
        var pos = oc_webroot.indexOf('/index.php/');
@@ -742,8 +744,39 @@ function fillWindow(selector) {
        console.warn("This function is deprecated! Use CSS instead");
 }
 
-$(document).ready(function(){
-       sessionHeartBeat();
+/**
+ * Initializes core
+ */
+function initCore() {
+
+       /**
+        * Calls the server periodically to ensure that session doesnt
+        * time out
+        */
+       function initSessionHeartBeat(){
+               // interval in seconds
+               var interval = 900;
+               if (oc_config.session_lifetime) {
+                       interval = Math.floor(oc_config.session_lifetime / 2);
+               }
+               // minimum one minute
+               if (interval < 60) {
+                       interval = 60;
+               }
+               OC.Router.registerLoadedCallback(function(){
+                       var url = OC.Router.generate('heartbeat');
+                       setInterval(function(){
+                               $.post(url);
+                       }, interval * 1000);
+               });
+       }
+
+       // session heartbeat (defalts to enabled)
+       if (typeof(oc_config.session_keepalive) === 'undefined' ||
+               !!oc_config.session_keepalive) {
+
+               initSessionHeartBeat();
+       }
 
        if(!SVGSupport()){ //replace all svg images with png images for browser that dont support svg
                replaceSVG();
@@ -856,7 +889,9 @@ $(document).ready(function(){
        $('input[type=text]').focus(function(){
                this.select();
        });
-});
+}
+
+$(document).ready(initCore);
 
 /**
  * Filter Jquery selector by attribute value
@@ -986,15 +1021,3 @@ jQuery.fn.exists = function(){
        return this.length > 0;
 };
 
-/**
- * Calls the server periodically every 15 mins to ensure that session doesnt
- * time out
- */
-function sessionHeartBeat(){
-       OC.Router.registerLoadedCallback(function(){
-               var url = OC.Router.generate('heartbeat');
-               setInterval(function(){
-                       $.post(url);
-               }, 900000);
-       });
-}