mirror of
https://github.com/ansible/awx.git
synced 2026-05-16 13:57:39 -02:30
Adding an extra session check for when a user closes tower
before the session times out and returns to Tower. Also changed the login route controller to a resolve to ensure that the login modal appears.
This commit is contained in:
@@ -870,11 +870,17 @@ var tower = angular.module('Tower', [
|
|||||||
|
|
||||||
if (!Authorization.getToken() || !Authorization.isUserLoggedIn()) {
|
if (!Authorization.getToken() || !Authorization.isUserLoggedIn()) {
|
||||||
// User not authenticated, redirect to login page
|
// User not authenticated, redirect to login page
|
||||||
$rootScope.sessionExpired = false;
|
|
||||||
$cookieStore.put('sessionExpired', false);
|
|
||||||
$rootScope.configReady = true;
|
|
||||||
$location.path('/login');
|
$location.path('/login');
|
||||||
} else {
|
} else {
|
||||||
|
var lastUser = $cookieStore.get('current_user'),
|
||||||
|
timestammp = Store('sessionTime');
|
||||||
|
if(lastUser && lastUser.id && timestammp && timestammp[lastUser.id]){
|
||||||
|
var stime = timestammp[lastUser.id].time,
|
||||||
|
now = new Date().getTime();
|
||||||
|
if ((stime - now) <= 0) {
|
||||||
|
$location.path('/login');
|
||||||
|
}
|
||||||
|
}
|
||||||
// If browser refresh, set the user_is_superuser value
|
// If browser refresh, set the user_is_superuser value
|
||||||
$rootScope.user_is_superuser = Authorization.getUserInfo('is_superuser');
|
$rootScope.user_is_superuser = Authorization.getUserInfo('is_superuser');
|
||||||
// state the user refreshes we want to open the socket, except if the user is on the login page, which should happen after the user logs in (see the AuthService module for that call to OpenSocket)
|
// state the user refreshes we want to open the socket, except if the user is on the login page, which should happen after the user logs in (see the AuthService module for that call to OpenSocket)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<div id="bread_crumb" class="BreadCrumb" ng-class="{'is-loggedOut' : !$root.current_user.username}">
|
<div id="bread_crumb" class="BreadCrumb" ng-class="{'is-loggedOut' : !current_user.username}">
|
||||||
<div ng-hide="licenseMissing" ncy-breadcrumb></div>
|
<div ng-hide="licenseMissing" ncy-breadcrumb></div>
|
||||||
<div class="BreadCrumb-menuLink"
|
<div class="BreadCrumb-menuLink"
|
||||||
id="bread_crumb_activity_stream"
|
id="bread_crumb_activity_stream"
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<footer class='Footer'>
|
<footer class='Footer'>
|
||||||
<div class="Footer-copyright" ng-class="{'is-loggedOut' : !$root.current_user.username}">Copyright © 2016 <a class="Footer-link" href="http://www.redhat.com" target="_blank">Red Hat</a>, Inc.</div>
|
<div class="Footer-copyright" ng-class="{'is-loggedOut' : !current_user.username}">Copyright © 2016 <a class="Footer-link" href="http://www.redhat.com" target="_blank">Red Hat</a>, Inc.</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
|
|
||||||
export default
|
export default
|
||||||
['$http', '$rootScope', '$location', '$cookieStore', 'GetBasePath', 'Store',
|
['$http', '$rootScope', '$location', '$cookieStore', 'GetBasePath', 'Store',
|
||||||
'$injector',
|
'$injector', '$q',
|
||||||
function ($http, $rootScope, $location, $cookieStore, GetBasePath, Store,
|
function ($http, $rootScope, $location, $cookieStore, GetBasePath, Store,
|
||||||
$injector) {
|
$injector, $q) {
|
||||||
return {
|
return {
|
||||||
setToken: function (token, expires) {
|
setToken: function (token, expires) {
|
||||||
// set the session cookie
|
// set the session cookie
|
||||||
@@ -63,10 +63,13 @@ export default
|
|||||||
// the following puts our primary scope up for garbage collection, which
|
// the following puts our primary scope up for garbage collection, which
|
||||||
// should prevent content flash from the prior user.
|
// should prevent content flash from the prior user.
|
||||||
|
|
||||||
var x,
|
var x, deferred = $q.defer(),
|
||||||
ConfigService = $injector.get('ConfigService'),
|
ConfigService = $injector.get('ConfigService'),
|
||||||
scope = angular.element(document.getElementById('main-view')).scope();
|
scope = angular.element(document.getElementById('main-view')).scope();
|
||||||
scope.$destroy();
|
|
||||||
|
if(scope){
|
||||||
|
scope.$destroy();
|
||||||
|
}
|
||||||
//$rootScope.$destroy();
|
//$rootScope.$destroy();
|
||||||
|
|
||||||
if($cookieStore.get('lastPath')==='/portal'){
|
if($cookieStore.get('lastPath')==='/portal'){
|
||||||
@@ -101,7 +104,7 @@ export default
|
|||||||
$rootScope.current_user = {};
|
$rootScope.current_user = {};
|
||||||
$rootScope.license_tested = undefined;
|
$rootScope.license_tested = undefined;
|
||||||
$rootScope.userLoggedIn = false;
|
$rootScope.userLoggedIn = false;
|
||||||
// $rootScope.sessionExpired = false;
|
$rootScope.sessionExpired = false;
|
||||||
$rootScope.licenseMissing = true;
|
$rootScope.licenseMissing = true;
|
||||||
$rootScope.token = null;
|
$rootScope.token = null;
|
||||||
$rootScope.token_expires = null;
|
$rootScope.token_expires = null;
|
||||||
@@ -110,6 +113,8 @@ export default
|
|||||||
if ($rootScope.sessionTimer) {
|
if ($rootScope.sessionTimer) {
|
||||||
$rootScope.sessionTimer.clearTimers();
|
$rootScope.sessionTimer.clearTimers();
|
||||||
}
|
}
|
||||||
|
deferred.resolve();
|
||||||
|
return deferred.promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
licenseTested: function () {
|
licenseTested: function () {
|
||||||
|
|||||||
@@ -10,12 +10,18 @@ export default {
|
|||||||
name: 'signIn',
|
name: 'signIn',
|
||||||
route: '/login',
|
route: '/login',
|
||||||
templateUrl: templateUrl('login/loginBackDrop'),
|
templateUrl: templateUrl('login/loginBackDrop'),
|
||||||
controller: ['$rootScope', 'Authorization', function($rootScope, Authorization) {
|
resolve: {
|
||||||
if (Authorization.isUserLoggedIn()) {
|
obj: ['$rootScope', 'Authorization',
|
||||||
Authorization.logout();
|
function($rootScope, Authorization) {
|
||||||
}
|
$rootScope.configReady = true;
|
||||||
$(".LoginModal-dialog").remove();
|
if (Authorization.isUserLoggedIn()) {
|
||||||
}],
|
Authorization.logout().then(function(){
|
||||||
|
$(".LoginModal-dialog").remove();
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
},
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
skip: true
|
skip: true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,10 +61,8 @@ export default ['$log', '$cookieStore', '$compile', '$window', '$rootScope',
|
|||||||
function ($log, $cookieStore, $compile, $window, $rootScope, $location,
|
function ($log, $cookieStore, $compile, $window, $rootScope, $location,
|
||||||
Authorization, ToggleClass, Alert, Wait, Timer, Empty, ClearScope,
|
Authorization, ToggleClass, Alert, Wait, Timer, Empty, ClearScope,
|
||||||
scope, pendoService, ConfigService, CheckLicense, FeaturesService) {
|
scope, pendoService, ConfigService, CheckLicense, FeaturesService) {
|
||||||
|
|
||||||
var lastPath, lastUser, sessionExpired, loginAgain;
|
var lastPath, lastUser, sessionExpired, loginAgain;
|
||||||
|
|
||||||
$rootScope.configReady = true;
|
|
||||||
loginAgain = function() {
|
loginAgain = function() {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
$location.path('/logout');
|
$location.path('/logout');
|
||||||
@@ -75,6 +73,7 @@ export default ['$log', '$cookieStore', '$compile', '$window', '$rootScope',
|
|||||||
scope.login_username = '';
|
scope.login_username = '';
|
||||||
scope.login_password = '';
|
scope.login_password = '';
|
||||||
|
|
||||||
|
|
||||||
lastPath = function () {
|
lastPath = function () {
|
||||||
return (Empty($rootScope.lastPath)) ? $cookieStore.get('lastPath') : $rootScope.lastPath;
|
return (Empty($rootScope.lastPath)) ? $cookieStore.get('lastPath') : $rootScope.lastPath;
|
||||||
};
|
};
|
||||||
@@ -104,12 +103,6 @@ export default ['$log', '$cookieStore', '$compile', '$window', '$rootScope',
|
|||||||
scope.customLoginInfoPresent = (scope.customLoginInfo) ? true : false;
|
scope.customLoginInfoPresent = (scope.customLoginInfo) ? true : false;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Reset the login form
|
|
||||||
//scope.loginForm.login_username.$setPristine();
|
|
||||||
//scope.loginForm.login_password.$setPristine();
|
|
||||||
//$rootScope.userLoggedIn = false; //hide the logout link. if you got here, you're logged out.
|
|
||||||
//$cookieStore.put('userLoggedIn', false); //gets set back to true by Authorization.setToken().
|
|
||||||
|
|
||||||
if (scope.removeAuthorizationGetLicense) {
|
if (scope.removeAuthorizationGetLicense) {
|
||||||
scope.removeAuthorizationGetLicense();
|
scope.removeAuthorizationGetLicense();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<div id="login-modal" class="LoginModal">
|
<div id="login-modal" class="LoginModal">
|
||||||
<div class="LoginModal-backDrop"
|
<div class="LoginModal-backDrop"
|
||||||
ng-class="{'is-loggedOut' : !$root || !$root.current_user.username}"></div>
|
ng-class="{'is-loggedOut' : !current_user.username}"></div>
|
||||||
<div class="LoginModal-dialog">
|
<div class="LoginModal-dialog">
|
||||||
<div class="LoginModal-content"
|
<div class="LoginModal-content"
|
||||||
ng-class="{'is-loggedOut' : !$root || !$root.current_user.username}">
|
ng-class="{'is-loggedOut' : !current_user.username}">
|
||||||
<div class="LoginModal-header">
|
<div class="LoginModal-header">
|
||||||
<img id="login_modal_image" class="LoginModal-logoImage"
|
<img id="login_modal_image" class="LoginModal-logoImage"
|
||||||
ng-class="{'LoginModal-logoImage--notCustom': !customLogoPresent}"
|
ng-class="{'LoginModal-logoImage--notCustom': !customLogoPresent}"
|
||||||
|
|||||||
@@ -10,8 +10,11 @@ export default {
|
|||||||
name: 'signOut',
|
name: 'signOut',
|
||||||
route: '/logout',
|
route: '/logout',
|
||||||
controller: ['Authorization', '$state', function(Authorization, $state) {
|
controller: ['Authorization', '$state', function(Authorization, $state) {
|
||||||
Authorization.logout();
|
Authorization.logout().then(function(){
|
||||||
$state.go('signIn');
|
$state.go('signIn');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
}],
|
}],
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
skip: true
|
skip: true
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
<a id="main_menu_logo"
|
<a id="main_menu_logo"
|
||||||
href="/#/"
|
href="/#/"
|
||||||
class="MainMenu-logo ng-cloak"
|
class="MainMenu-logo ng-cloak"
|
||||||
ng-class="{'is-loggedOut' : !$root.current_user.username, 'MainMenu-logoImage--licenseMissing': licenseMissing}">
|
ng-class="{'is-loggedOut' : !current_user.username, 'MainMenu-logoImage--licenseMissing': licenseMissing}">
|
||||||
<img class="MainMenu-logoImage"
|
<img class="MainMenu-logoImage"
|
||||||
ng-class="{'MainMenu-logoImage--licenseMissing': licenseMissing}"
|
ng-class="{'MainMenu-logoImage--licenseMissing': licenseMissing}"
|
||||||
ng-src="/static/assets/tower-logo-header.svg">
|
ng-src="/static/assets/tower-logo-header.svg">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- Mobile menu items -->
|
<!-- Mobile menu items -->
|
||||||
<span id="main_menu_mobile_items" class="MainMenu-mobileItems" ng-class="{'is-hiddenOnMobile': isHiddenOnMobile, 'is-loggedOut' : !$root.current_user.username}">
|
<span id="main_menu_mobile_items" class="MainMenu-mobileItems" ng-class="{'is-hiddenOnMobile': isHiddenOnMobile, 'is-loggedOut' : !current_user.username}">
|
||||||
<a class="MainMenu-item"
|
<a class="MainMenu-item"
|
||||||
id="main_menu_projects_mobile_link"
|
id="main_menu_projects_mobile_link"
|
||||||
href="/#/projects"
|
href="/#/projects"
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
id="main_menu_projects_link"
|
id="main_menu_projects_link"
|
||||||
href="/#/projects"
|
href="/#/projects"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('projects'), 'is-loggedOut' : !$root.current_user.username}">
|
ng-class="{'is-currentRoute' : isCurrentState('projects'), 'is-loggedOut' : !current_user.username}">
|
||||||
<span class="MainMenu-itemText">
|
<span class="MainMenu-itemText">
|
||||||
PROJECTS
|
PROJECTS
|
||||||
</span>
|
</span>
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
id="main_menu_inventories_link"
|
id="main_menu_inventories_link"
|
||||||
href="/#/inventories"
|
href="/#/inventories"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('inventories'), 'is-loggedOut' : !$root.current_user.username}">
|
ng-class="{'is-currentRoute' : isCurrentState('inventories'), 'is-loggedOut' : !current_user.username}">
|
||||||
<span class="MainMenu-itemText">
|
<span class="MainMenu-itemText">
|
||||||
INVENTORIES
|
INVENTORIES
|
||||||
</span>
|
</span>
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
id="main_menu_job_templates_link"
|
id="main_menu_job_templates_link"
|
||||||
href="/#/job_templates"
|
href="/#/job_templates"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('jobTemplates'), 'is-loggedOut' : !$root.current_user.username}">
|
ng-class="{'is-currentRoute' : isCurrentState('jobTemplates'), 'is-loggedOut' : !current_user.username}">
|
||||||
<span class="MainMenu-itemText">
|
<span class="MainMenu-itemText">
|
||||||
JOB TEMPLATES
|
JOB TEMPLATES
|
||||||
</span>
|
</span>
|
||||||
@@ -117,7 +117,7 @@
|
|||||||
id="main_menu_jobs_link"
|
id="main_menu_jobs_link"
|
||||||
href="/#/jobs"
|
href="/#/jobs"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('jobs'), 'is-loggedOut' : !$root.current_user.username}">
|
ng-class="{'is-currentRoute' : isCurrentState('jobs'), 'is-loggedOut' : !current_user.username}">
|
||||||
<span class="MainMenu-itemText">
|
<span class="MainMenu-itemText">
|
||||||
JOBS
|
JOBS
|
||||||
</span>
|
</span>
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
id="main_menu_current_user_link"
|
id="main_menu_current_user_link"
|
||||||
ng-href="/#/users/{{ $root.current_user.id }}"
|
ng-href="/#/users/{{ $root.current_user.id }}"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('users.edit'), 'is-loggedOut' : !$root.current_user.username}"
|
ng-class="{'is-currentRoute' : isCurrentState('users.edit'), 'is-loggedOut' : !current_user.username}"
|
||||||
aw-tool-tip="{{currentUserTip}}"
|
aw-tool-tip="{{currentUserTip}}"
|
||||||
aw-tip-watch="currentUserTip"
|
aw-tip-watch="currentUserTip"
|
||||||
data-placement="bottom"
|
data-placement="bottom"
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
id="main_menu_setup_link"
|
id="main_menu_setup_link"
|
||||||
ng-href="/#/setup"
|
ng-href="/#/setup"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('setup'), 'is-loggedOut' : !$root.current_user.username}"
|
ng-class="{'is-currentRoute' : isCurrentState('setup'), 'is-loggedOut' : !current_user.username}"
|
||||||
aw-tool-tip="Settings"
|
aw-tool-tip="Settings"
|
||||||
data-placement="bottom"
|
data-placement="bottom"
|
||||||
data-trigger="hover"
|
data-trigger="hover"
|
||||||
@@ -156,7 +156,7 @@
|
|||||||
id="main_menu_portal_link"
|
id="main_menu_portal_link"
|
||||||
ng-href="/#/portal"
|
ng-href="/#/portal"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('portalMode'), 'is-loggedOut' : !$root.current_user.username}"
|
ng-class="{'is-currentRoute' : isCurrentState('portalMode'), 'is-loggedOut' : !current_user.username}"
|
||||||
aw-tool-tip="My View"
|
aw-tool-tip="My View"
|
||||||
data-placement="bottom"
|
data-placement="bottom"
|
||||||
data-trigger="hover"
|
data-trigger="hover"
|
||||||
@@ -169,7 +169,7 @@
|
|||||||
id="main_menu_docs_link"
|
id="main_menu_docs_link"
|
||||||
ng-href="http://docs.ansible.com/ansible-tower/"
|
ng-href="http://docs.ansible.com/ansible-tower/"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-loggedOut' : !$root.current_user.username}"
|
ng-class="{'is-loggedOut' : !current_user.username}"
|
||||||
aw-tool-tip="View Documentation"
|
aw-tool-tip="View Documentation"
|
||||||
data-placement="bottom"
|
data-placement="bottom"
|
||||||
data-trigger="hover"
|
data-trigger="hover"
|
||||||
@@ -183,7 +183,7 @@
|
|||||||
id="main_menu_logout_link"
|
id="main_menu_logout_link"
|
||||||
ng-href="/#/logout"
|
ng-href="/#/logout"
|
||||||
ng-class="{'is-currentRoute' : isCurrentState('logout'),
|
ng-class="{'is-currentRoute' : isCurrentState('logout'),
|
||||||
'is-loggedOut' : !$root.current_user.username,
|
'is-loggedOut' : !current_user.username,
|
||||||
'MainMenu-item--licenseMissing' : licenseMissing}"
|
'MainMenu-item--licenseMissing' : licenseMissing}"
|
||||||
aw-tool-tip="Log Out"
|
aw-tool-tip="Log Out"
|
||||||
data-placement="bottom"
|
data-placement="bottom"
|
||||||
@@ -205,7 +205,7 @@
|
|||||||
data-placement="bottom"
|
data-placement="bottom"
|
||||||
data-trigger="hover"
|
data-trigger="hover"
|
||||||
data-container="body"
|
data-container="body"
|
||||||
ng-class="{'is-loggedOut' : !$root.current_user.username}"
|
ng-class="{'is-loggedOut' : !current_user.username}"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-if="socketStatus && socketStatus !== 'ok'">
|
ng-if="socketStatus && socketStatus !== 'ok'">
|
||||||
<i class="fa MainMenu-socketImage"
|
<i class="fa MainMenu-socketImage"
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
id="main_menu_mobile_toggle_button"
|
id="main_menu_mobile_toggle_button"
|
||||||
class="MainMenu-toggle"
|
class="MainMenu-toggle"
|
||||||
ng-hide="licenseMissing"
|
ng-hide="licenseMissing"
|
||||||
ng-class="{'is-active': !isHiddenOnMobile, 'is-loggedOut' : !$root.current_user.username}"
|
ng-class="{'is-active': !isHiddenOnMobile, 'is-loggedOut' : !current_user.username}"
|
||||||
ng-click="toggleMenu()">
|
ng-click="toggleMenu()">
|
||||||
<i class="fa fa-bars MainMenu-toggleImage"></i>
|
<i class="fa fa-bars MainMenu-toggleImage"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user