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