diff options
author | Zuul <zuul@review.opendev.org> | 2019-10-01 06:57:29 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2019-10-01 06:57:29 +0000 |
commit | dc6b68cfbd15d2273c497f8ee5764ad5315adf08 (patch) | |
tree | 40a41d3a881d9834c2c761a5ae3f9f845f861cac | |
parent | 0075f4221c54e9ee51c41b5d2ea9fb87754956ad (diff) | |
parent | 81740d310f7078a10435ecbeb3e7a31bc62c7497 (diff) | |
download | horizon-dc6b68cfbd15d2273c497f8ee5764ad5315adf08.tar.gz |
Merge "Avoid forced logout when 403 error encountered" into stable/rocky
4 files changed, 17 insertions, 15 deletions
diff --git a/horizon/static/framework/framework.module.js b/horizon/static/framework/framework.module.js index fb3fb86ba..ad994c510 100644 --- a/horizon/static/framework/framework.module.js +++ b/horizon/static/framework/framework.module.js @@ -25,7 +25,7 @@ .run(run) .factory('horizon.framework.redirect', httpRedirectLogin) .constant('horizon.framework.events', { - FORCE_LOGOUT: 'FORCE_LOGOUT' + AUTH_ERROR: 'AUTH_ERROR' }); config.$inject = [ @@ -128,25 +128,28 @@ responseError: function (error) { if (error.status === 401) { var msg = gettext('Unauthorized. Redirecting to login'); - handleRedirectMessage(msg, $rootScope, $window, frameworkEvents, toastService); + handleRedirectMessage(msg, $rootScope, $window, frameworkEvents, toastService, true); } if (error.status === 403) { - var msg2 = gettext('Forbidden. Redirecting to login'); - handleRedirectMessage(msg2, $rootScope, $window, frameworkEvents, toastService); + var msg2 = gettext('Forbidden. Insufficient permissions of the requested operation'); + handleRedirectMessage(msg2, $rootScope, $window, frameworkEvents, toastService, false); } return $q.reject(error); } }; } - function handleRedirectMessage(msg, $rootScope, $window, frameworkEvents, toastService) { + function handleRedirectMessage( + msg, $rootScope, $window, frameworkEvents, toastService, forceLogout) { var toast = toastService.find('error', msg); //Suppress the multiple duplicate redirect toast messages. if (!toast) { toastService.add('error', msg); - $rootScope.$broadcast(frameworkEvents.FORCE_LOGOUT, msg); + $rootScope.$broadcast(frameworkEvents.AUTH_ERROR, msg); + } + if (forceLogout) { + $window.location.replace($window.WEBROOT + 'auth/logout'); } - $window.location.replace($window.WEBROOT + 'auth/logout'); } })(); diff --git a/horizon/static/framework/framework.module.spec.js b/horizon/static/framework/framework.module.spec.js index f998d2bd4..63f503886 100644 --- a/horizon/static/framework/framework.module.spec.js +++ b/horizon/static/framework/framework.module.spec.js @@ -56,7 +56,7 @@ }); describe('when forbidden', function() { - it('should redirect to /auth/logout and add a forbidden toast message ', inject( + it('should add a forbidden toast message ', inject( function($http, $httpBackend, $window, $injector, $rootScope) { $window.WEBROOT = '/dashboard/'; $httpBackend.when('GET', '/api').respond(403, ''); @@ -69,7 +69,6 @@ $http.get('/api').error(function() { expect(toastService.add).toHaveBeenCalled(); expect($rootScope.$broadcast).toHaveBeenCalled(); - expect($window.location.replace).toHaveBeenCalledWith('/dashboard/auth/logout'); }); $httpBackend.flush(); }) diff --git a/horizon/static/framework/widgets/wizard/wizard.controller.js b/horizon/static/framework/widgets/wizard/wizard.controller.js index eeb3c6ec0..e3f2de35f 100644 --- a/horizon/static/framework/widgets/wizard/wizard.controller.js +++ b/horizon/static/framework/widgets/wizard/wizard.controller.js @@ -142,7 +142,7 @@ $scope.$broadcast(wizardEvents.ON_INIT_ERROR); } - $scope.$on(frameworkEvents.FORCE_LOGOUT, function(evt, arg) { + $scope.$on(frameworkEvents.AUTH_ERROR, function(evt, arg) { viewModel.hasError = true; viewModel.errorMessage = arg; return; diff --git a/horizon/static/framework/widgets/wizard/wizard.controller.spec.js b/horizon/static/framework/widgets/wizard/wizard.controller.spec.js index d52538d66..e2951639b 100644 --- a/horizon/static/framework/widgets/wizard/wizard.controller.spec.js +++ b/horizon/static/framework/widgets/wizard/wizard.controller.spec.js @@ -62,14 +62,14 @@ expect(scope.viewModel.errorMessage).toBe('in valid'); }); - it('call onInitSuccess with logout event', function() { - rootScope.$broadcast(frameworkEvents.FORCE_LOGOUT, 'logout'); + it('call onInitSuccess with auth_error event', function() { + rootScope.$broadcast(frameworkEvents.AUTH_ERROR, 'auth_error'); ctrl.onInitSuccess(); scope.$apply(); expect(scope.viewModel.hasError).toBe(true); }); - it('call onInitSuccess without logout event', function() { + it('call onInitSuccess without auth_error event', function() { spyOn(scope, '$broadcast'); ctrl.onInitSuccess(); scope.$apply(); @@ -77,8 +77,8 @@ expect(scope.$broadcast).toHaveBeenCalledWith(wizardEvents.ON_INIT_SUCCESS); }); - it('call onInitError with logout event', function() { - rootScope.$broadcast(frameworkEvents.FORCE_LOGOUT, 'logout'); + it('call onInitError with auth_error event', function() { + rootScope.$broadcast(frameworkEvents.AUTH_ERROR, 'auth_error'); ctrl.onInitError(); scope.$apply(); expect(scope.viewModel.hasError).toBe(true); |