You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rz...@apache.org on 2015/10/22 00:32:06 UTC
ambari git commit: AMBARI-13512. Show a warning popup before user is
about to be logged out (rzang)
Repository: ambari
Updated Branches:
refs/heads/trunk 8ef5beb85 -> ac51d8b6c
AMBARI-13512. Show a warning popup before user is about to be logged out (rzang)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ac51d8b6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ac51d8b6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ac51d8b6
Branch: refs/heads/trunk
Commit: ac51d8b6cee62aee30b940d38da10f0f266ba7a5
Parents: 8ef5beb
Author: Richard Zang <rz...@apache.org>
Authored: Wed Oct 21 15:30:30 2015 -0700
Committer: Richard Zang <rz...@apache.org>
Committed: Wed Oct 21 15:31:21 2015 -0700
----------------------------------------------------------------------
.../app/scripts/controllers/mainCtrl.js | 49 +++++++++++++-----
.../ui/admin-web/app/scripts/services/Auth.js | 5 ++
.../app/views/modals/TimeoutWarning.html | 28 +++++++++++
ambari-web/app/config.js | 1 +
ambari-web/app/controllers/main.js | 52 ++++++++++++++++----
ambari-web/app/messages.js | 5 ++
6 files changed, 119 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/ac51d8b6/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js
index 2c9e1c9..1213d0d 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js
+++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/controllers/mainCtrl.js
@@ -20,12 +20,6 @@
angular.module('ambariAdminConsole')
.controller('MainCtrl',['$scope','$rootScope','$window','Auth', 'Alert', '$modal', 'Cluster', 'View', function($scope, $rootScope, $window, Auth, Alert, $modal, Cluster, View) {
$scope.signOut = function() {
- var data = JSON.parse(localStorage.ambari);
- delete data.app.authenticated;
- delete data.app.loginName;
- delete data.app.user;
- localStorage.ambari = JSON.stringify(data);
- $scope.hello = "hello";
Auth.signout().finally(function() {
$window.location.pathname = '';
});
@@ -93,7 +87,6 @@ angular.module('ambariAdminConsole')
var lastActiveTime = Date.now();
var keepActive = function() {
- //console.error('keepActive');
if (active) {
lastActiveTime = Date.now();
}
@@ -104,15 +97,46 @@ angular.module('ambariAdminConsole')
$(window).bind('click', keepActive);
var checkActiveness = function() {
- //console.error("checkActiveness " + lastActiveTime + " : " + Date.now());
- if (Date.now() - lastActiveTime > TIME_OUT) {
- //console.error("LOGOUT!");
+ var remainTime = TIME_OUT - (Date.now() - lastActiveTime);
+ if (remainTime < 0) {
active = false;
$(window).unbind('mousemove', keepActive);
$(window).unbind('keypress', keepActive);
$(window).unbind('click', keepActive);
clearInterval($rootScope.userActivityTimeoutInterval);
$scope.signOut();
+ } else if (remainTime < 60000 && !$rootScope.timeoutModal) {
+ $rootScope.timeoutModal = $modal.open({
+ templateUrl: 'views/modals/TimeoutWarning.html',
+ backdrop: false,
+ controller: ['$scope', 'Auth', function($scope, Auth) {
+ $scope.remainTime = 60;
+ $scope.title = 'Automatic Logout';
+ $scope.primaryText = 'Remain Logged In';
+ $scope.secondaryText = 'Log Out Now';
+ $scope.remain = function() {
+ $rootScope.timeoutModal.close();
+ delete $rootScope.timeoutModal;
+ };
+ $scope.logout = function() {
+ $rootScope.timeoutModal.close();
+ delete $rootScope.timeoutModal;
+ Auth.signout().finally(function() {
+ $window.location.pathname = '';
+ });
+ };
+ $scope.countDown = function() {
+ $scope.remainTime--;
+ $scope.$apply();
+ if ($scope.remainTime == 0) {
+ Auth.signout().finally(function() {
+ $window.location.pathname = '';
+ });
+ }
+ };
+ setInterval($scope.countDown, 1000);
+ }]
+ });
}
};
$rootScope.userActivityTimeoutInterval = window.setInterval(checkActiveness, 1000);
@@ -125,8 +149,9 @@ angular.module('ambariAdminConsole')
if (!$rootScope.userActivityTimeoutInterval) {
Cluster.getAmbariTimeout().then(function(timeout) {
- if (Number(timeout) > 0)
- $scope.startInactiveTimeoutMonitoring(timeout * 1000);
+ $rootScope.userTimeout = Number(timeout) * 1000;
+ if ($rootScope.userTimeout > 0)
+ $scope.startInactiveTimeoutMonitoring($rootScope.userTimeout);
});
}
if (!$rootScope.noopPollingInterval) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/ac51d8b6/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js
index a73c540..14c04c1 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js
+++ b/ambari-admin/src/main/resources/ui/admin-web/app/scripts/services/Auth.js
@@ -29,6 +29,11 @@ angular.module('ambariAdminConsole')
}
return {
signout: function() {
+ var data = JSON.parse(localStorage.ambari);
+ delete data.app.authenticated;
+ delete data.app.loginName;
+ delete data.app.user;
+ localStorage.ambari = JSON.stringify(data);
// Workaround for sign off within Basic Authorization
var origin = $window.location.protocol + '//' + Date.now() + ':' + Date.now() + '@' +
$window.location.hostname + ($window.location.port ? ':' + $window.location.port : '');
http://git-wip-us.apache.org/repos/asf/ambari/blob/ac51d8b6/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/TimeoutWarning.html
----------------------------------------------------------------------
diff --git a/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/TimeoutWarning.html b/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/TimeoutWarning.html
new file mode 100644
index 0000000..ad5c3a0
--- /dev/null
+++ b/ambari-admin/src/main/resources/ui/admin-web/app/views/modals/TimeoutWarning.html
@@ -0,0 +1,28 @@
+<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<div class="modal-header">
+ <h4 class="modal-title">{{title}}</h4>
+</div>
+<div class="modal-body">
+ You will be automatically logged out in <b>{{remainTime}}</b> seconds due to inactivity.
+</div>
+<div class="modal-footer">
+ <button class="btn btn-default" ng-click="logout()">{{secondaryText}}</button>
+ <button class="btn btn-primary" ng-click="remain()">{{primaryText}}</button>
+</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/ac51d8b6/ambari-web/app/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/config.js b/ambari-web/app/config.js
index 26f0553..2ab8544 100644
--- a/ambari-web/app/config.js
+++ b/ambari-web/app/config.js
@@ -56,6 +56,7 @@ App.isStormMetricsSupported = true;
App.healthStatusRed = '#ff0000';
App.healthStatusGreen = '#5AB400';
App.healthStatusOrange = '#FF8E00';
+App.inactivityRemainTime = 60; // in seconds
App.stackVersionsAvailable = true;
http://git-wip-us.apache.org/repos/asf/ambari/blob/ac51d8b6/ambari-web/app/controllers/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main.js b/ambari-web/app/controllers/main.js
index fb73770..0f6e33a 100644
--- a/ambari-web/app/controllers/main.js
+++ b/ambari-web/app/controllers/main.js
@@ -25,6 +25,7 @@ App.MainController = Em.Controller.extend({
checkActivenessInterval: null,
lastUserActiveTime: null,
userTimeOut: 0,
+ userTimeOutModal: null,
updateTitle: function(){
var name = App.router.get('clusterController.clusterName');
@@ -191,7 +192,6 @@ App.MainController = Em.Controller.extend({
},
monitorInactivity: function() {
- //console.error('======MONITOR==START========');
var timeout = Number(App.router.get('clusterController.ambariProperties')['user.inactivity.timeout.default']);
var readonly_timeout = Number(App.router.get('clusterController.ambariProperties')['user.inactivity.timeout.role.readonly.default']);
var isAdmin = App.get('isAdmin');
@@ -218,7 +218,6 @@ App.MainController = Em.Controller.extend({
/* this will be triggerred by user driven events: 'mousemove', 'keypress' and 'click' */
keepActive: function() {
var scope = App.router.get('mainController');
- //console.error('keepActive');
if (scope.get('isUserActive')) {
scope.set('lastUserActiveTime', Date.now());
}
@@ -226,13 +225,48 @@ App.MainController = Em.Controller.extend({
checkActiveness: function() {
var scope = App.router.get('mainController');
- //console.error("checkActiveness " + scope.get('lastUserActiveTime') + " : " + Date.now());
- if (Date.now() - scope.get('lastUserActiveTime') > scope.get('userTimeOut') && !scope.isOnWizard()) {
- scope.set('isUserActive', false);
- //console.error("LOGOUT!");
- scope.unbindActivityEventMonitors();
- clearInterval(scope.get('checkActivenessInterval'));
- App.router.logOff({});
+ if (!scope.isOnWizard()) {
+ var remainTime = scope.get('userTimeOut') - (Date.now() - scope.get('lastUserActiveTime'));
+ if (remainTime < 0) {
+ scope.set('isUserActive', false);
+ scope.unbindActivityEventMonitors();
+ clearInterval(scope.get('checkActivenessInterval'));
+ App.router.logOff({});
+ } else if (remainTime < App.inactivityRemainTime * 1000 && !scope.userTimeOutModal) {
+ // show alert 60 seconds before logging user out
+ scope.userTimeOutModal = App.ModalPopup.show({
+ primary: Em.I18n.t('common.timeout.warning.popup.primary'),
+ secondary: Em.I18n.t('common.timeout.warning.popup.secondary'),
+ third: false,
+ header: Em.I18n.t('common.timeout.warning.popup.header'),
+ showCloseButton: false,
+ bodyClass: Ember.View.extend({
+ template: Ember.Handlebars.compile('<p>{{view.beforeMsg}}<b>{{view.remainTime}}</b>{{view.afterMsg}}</p>'),
+ beforeMsg: Em.I18n.t('common.timeout.warning.popup.body.before'),
+ afterMsg: Em.I18n.t('common.timeout.warning.popup.body.after'),
+ remainTime: App.inactivityRemainTime,
+ didInsertElement: function() {
+ var self = this;
+ setInterval(function(){self.countDown();}, 1000)
+ },
+ countDown: function() {
+ this.set('remainTime', this.get('remainTime') - 1);
+ if (this.get('remainTime') == 0) {
+ App.router.logOff({});
+ }
+ }
+ }),
+ onPrimary: function() {
+ scope.userTimeOutModal.hide();
+ delete scope.userTimeOutModal;
+ },
+ onSecondary: function() {
+ scope.userTimeOutModal.hide();
+ delete scope.userTimeOutModal;
+ App.router.logOff({});
+ }
+ });
+ }
}
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/ac51d8b6/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 1c19b7d..8ee266c 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -284,6 +284,11 @@ Em.I18n.translations = {
'common.loading.eclipses': 'Loading...',
'common.running': 'Running',
'common.stopped': 'Stopped',
+ 'common.timeout.warning.popup.header': 'Automatic Logout',
+ 'common.timeout.warning.popup.body.before': 'You will be automatically logged out in ',
+ 'common.timeout.warning.popup.body.after': ' seconds due to inactivity',
+ 'common.timeout.warning.popup.primary': 'Remain Logged In',
+ 'common.timeout.warning.popup.secondary': 'Log Out Now',
'models.alert_instance.tiggered.verbose': "Occurred on {0} <br> Checked on {1}",
'models.alert_definition.triggered.verbose': "Occurred on {0}",