You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ni...@apache.org on 2021/09/20 05:23:44 UTC

[ranger] branch master updated: RANGER-3388 : Session Inactivity Timeout: Ranger UI part.

This is an automated email from the ASF dual-hosted git repository.

ni3galave pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 321435f  RANGER-3388 : Session Inactivity Timeout: Ranger UI part.
321435f is described below

commit 321435f45ee6ea2090c5339d1eda6ed5b11693a1
Author: Nitin Galave <ni...@apache.org>
AuthorDate: Mon Aug 30 17:59:21 2021 +0530

    RANGER-3388 : Session Inactivity Timeout: Ranger UI part.
---
 .../main/webapp/scripts/controllers/Controller.js  | 11 ++-
 .../main/webapp/scripts/controllers/NController.js | 11 ++-
 .../webapp/scripts/modules/globalize/message/en.js |  7 +-
 .../src/main/webapp/scripts/utils/XAUtils.js       | 96 ++++++++++++++++++++++
 .../main/webapp/scripts/views/common/ProfileBar.js |  6 +-
 5 files changed, 126 insertions(+), 5 deletions(-)

diff --git a/security-admin/src/main/webapp/scripts/controllers/Controller.js b/security-admin/src/main/webapp/scripts/controllers/Controller.js
index 6b7bad9..5fc7e9f 100755
--- a/security-admin/src/main/webapp/scripts/controllers/Controller.js
+++ b/security-admin/src/main/webapp/scripts/controllers/Controller.js
@@ -25,12 +25,21 @@ define(function(require) {
 
     var MAppState = require('models/VAppState');
     var XAGlobals = require('utils/XAGlobals');
+    var XAUtil    = require('utils/XAUtils');
+    var moment    = require('moment');
 
     return Backbone.Marionette.Controller.extend({
 
         initialize: function(options) {
-
             console.log("initialize a Controller Controller");
+            if (App.userProfile && App.userProfile.get('configProperties') && App.userProfile.get('configProperties').inactivityTimeout
+                && App.userProfile.get('configProperties').inactivityTimeout != -1) {
+                XAUtil.setIdealActivityTime()
+                $('#contentBody').on("click mousemove keyup mousedown scroll keypress", function(e){
+                    // do preload here
+                    XAUtil.setIdealActivityTime()
+                })
+            }
             var vTopNav = require('views/common/TopNav');
             var vProfileBar = require('views/common/ProfileBar');
             var vFooter = require('views/common/Footer');
diff --git a/security-admin/src/main/webapp/scripts/controllers/NController.js b/security-admin/src/main/webapp/scripts/controllers/NController.js
index 7492956..612b0f2 100644
--- a/security-admin/src/main/webapp/scripts/controllers/NController.js
+++ b/security-admin/src/main/webapp/scripts/controllers/NController.js
@@ -24,12 +24,21 @@ define(function(require) {
     var App = require('App');
     var MAppState = require('models/VAppState');
     var XAGlobals = require('utils/XAGlobals');
+    var XAUtil    = require('utils/XAUtils');
+    var moment    = require('moment');
 
     return Backbone.Marionette.Controller.extend({
 
         initialize: function(options) {
-
             console.log("initialize a Controller Controller");
+            if (App.userProfile && App.userProfile.get('configProperties') && App.userProfile.get('configProperties').inactivityTimeout
+                && App.userProfile.get('configProperties').inactivityTimeout != -1) {
+                XAUtil.setIdealActivityTime()
+                $('#contentBody').on("click mousemove keyup mousedown scroll keypress", function(e){
+                    // do preload here
+                    XAUtil.setIdealActivityTime()
+                })
+            }
             var vTopNav = require('views/common/TopNav');
             var vProfileBar = require('views/common/ProfileBar');
             var vFooter = require('views/common/Footer');
diff --git a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
index d30ed4d..46e4c19 100644
--- a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
+++ b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
@@ -300,7 +300,9 @@ define(function(require) {
 				stayOnPage					: 'Stay on this page',
 				leavePage					: 'Leave this page',
 				setVisibility               : 'Set Visibility',
-				setStatus               	: 'Set Status'
+				setStatus               	: 'Set Status',
+				stayLoggdedIn				: 'Stay Logged In',
+				logOutNow					: 'Log Out Now'
 				
 			},
 			// h1, h2, h3, fieldset, title
@@ -512,7 +514,8 @@ define(function(require) {
 				preventNavUserForm : 'User form edit is in progress. Please save/cancel changes before navigating away!',
 				preventNavGroupForm : 'Group form edit is in progress. Please save/cancel changes before navigating away!',
 				preventNavUserList : 'Some Users/Groups have been edited. Kindly save your changes before navigating away!',
-				preventNavZoneForm : 'Zone form edit is in progress. Please save/cancel changes before navigating away!'
+				preventNavZoneForm : 'Zone form edit is in progress. Please save/cancel changes before navigating away!',
+				idelTimeOutMsg : 'Because you have been inactive, your session is about to expire.'
 				
 			},	
 			validationMessages : {
diff --git a/security-admin/src/main/webapp/scripts/utils/XAUtils.js b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
index 4266876..49f03d1 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
@@ -25,6 +25,7 @@ define(function(require) {
 	var XAUtils = {};
 	var notify = require('bootstrap-notify');
 	var bootbox = require('bootbox');
+    var moment = require('moment');
 
 	// ///////////////////////////////////////////////////////
 	// Enum utility methods
@@ -1909,5 +1910,100 @@ define(function(require) {
         }
     }
 
+    XAUtils.setIdealActivityTime = function() {
+        var App = require('App');
+        var INACTIVITY_TIME_OUT = 900;
+        if (App.userProfile && App.userProfile.get('configProperties') && App.userProfile.get('configProperties').inactivityTimeout) {
+            INACTIVITY_TIME_OUT = parseInt(App.userProfile.get('configProperties').inactivityTimeout);
+        }
+        INACTIVITY_TIME_OUT *= 1000;
+        localStorage.setItem('idealTimeOut', moment().add(INACTIVITY_TIME_OUT, 'milliseconds').valueOf());
+        localStorage.setItem('idleTimerLoggedOut', false);
+        XAUtils.setIdealActivityTime = function () {
+            localStorage.setItem('idealTimeOut', moment().add(INACTIVITY_TIME_OUT, 'milliseconds').valueOf());
+            var isLoggedOut = localStorage.getItem('idleTimerLoggedOut') == "true";
+            if (isLoggedOut) {
+                localStorage.setItem('idleTimerLoggedOut', false);
+            }
+            XAUtils.startIdealActivityInterval()
+        }
+    };
+
+    XAUtils.startIdealActivityInterval = function () {
+        clearInterval(XAUtils.activityIntervalID)
+        XAUtils.activityIntervalID = setInterval(function() {
+            var idealTimeVal = parseInt(localStorage.getItem('idealTimeOut'));
+            if(moment().isAfter(moment(idealTimeVal))) {
+                clearInterval(XAUtils.activityIntervalID)
+                var isLoggedOut = localStorage.getItem('idleTimerLoggedOut') == "true";
+                if(isLoggedOut) {
+                    localStorage.setItem('idleTimerLoggedOut', 'false');
+                    XAUtils.idealActivityLogout();
+                } else {
+                    XAUtils.idelTimePopup();
+                }
+            }
+        }, 2000);
+    };
+
+    XAUtils.idelTimePopup = function() {
+        var timeLeft = 15;
+        var $elem = '<div id="Timer"></div>';
+
+        function countdown() {
+            if (timeLeft == 0) {
+                clearTimeout(timerId);
+                localStorage.setItem('idleTimerLoggedOut', 'false');
+                XAUtils.idealActivityLogout();
+            } else {
+                var isLoggedOut = localStorage.getItem('idleTimerLoggedOut') == "true";
+                if(isLoggedOut) {
+                    clearTimeout(timerId);
+                    localStorage.setItem('idleTimerLoggedOut', 'false');
+                    XAUtils.idealActivityLogout();
+                } else {
+                    $.find('#Timer')[0].innerHTML ='Time left : '+ timeLeft + ' seconds remaining';
+                    timeLeft--;
+                }
+            }
+        }
+        bootbox.dialog({
+            title: 'Session Expiration Warning',
+            message: '<span class="inline-block">' + localization.tt('dialogMsg.idelTimeOutMsg') +'<br>'+ $elem + '</span>',
+            closeButton: false,
+            buttons: {
+                noclose: {
+                    "label" : localization.tt('btn.stayLoggdedIn'),
+                    "className" : "btn-success btn-sm",
+                    "callback" : function() {
+                        clearTimeout(timerId);
+                        XAUtils.setIdealActivityTime()
+                    }
+                },
+                cancel: {
+                    "label" : localization.tt('btn.logOutNow'),
+                    "className" : "btn-danger btn-sm",
+                    "callback" : function() {
+                        localStorage.setItem('idleTimerLoggedOut', 'false');
+                        XAUtils.idealActivityLogout();
+                    }
+                }
+            }
+        });
+
+        var timerId = setInterval(countdown, 1000);
+
+        return false;
+    };
+
+    XAUtils.idealActivityLogout = function () {
+        var App = require('App');
+        // localStorage.setItem('idleTimerLoggedOut', true);
+        if(localStorage.getItem('idleTimerLoggedOut') == "false") {
+        	localStorage.setItem('idleTimerLoggedOut', true);
+        	App.rTopProfileBar.currentView.checkKnoxSSO();
+        }
+    };
+
 	return XAUtils;
 });
\ No newline at end of file
diff --git a/security-admin/src/main/webapp/scripts/views/common/ProfileBar.js b/security-admin/src/main/webapp/scripts/views/common/ProfileBar.js
index 9dbfa9c..8a85303 100644
--- a/security-admin/src/main/webapp/scripts/views/common/ProfileBar.js
+++ b/security-admin/src/main/webapp/scripts/views/common/ProfileBar.js
@@ -95,7 +95,11 @@ define(function(require){
 					"cache-control" : "no-cache"
 				},
 				success : function(resp) {
-					that.onLogout(resp);
+					if (localStorage.getItem('idleTimerLoggedOut') == "true" && resp == "true") {
+						window.location.replace('index.html?action=timeout');
+					} else {
+						that.onLogout(resp);
+					}
 				},
 				error : function(jqXHR, textStatus, err ) {
 					if( jqXHR.status == 419 ){