Browse Source

Merge "Avoid forced logout when 403 error encountered" into stable/queens

changes/13/726713/1
Zuul 2 months ago
committed by Gerrit Code Review
parent
commit
560ffbbb74
4 changed files with 17 additions and 15 deletions
  1. +10
    -7
      horizon/static/framework/framework.module.js
  2. +1
    -2
      horizon/static/framework/framework.module.spec.js
  3. +1
    -1
      horizon/static/framework/widgets/wizard/wizard.controller.js
  4. +5
    -5
      horizon/static/framework/widgets/wizard/wizard.controller.spec.js

+ 10
- 7
horizon/static/framework/framework.module.js View File

@@ -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');
}

})();

+ 1
- 2
horizon/static/framework/framework.module.spec.js View File

@@ -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();
})


+ 1
- 1
horizon/static/framework/widgets/wizard/wizard.controller.js View File

@@ -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;


+ 5
- 5
horizon/static/framework/widgets/wizard/wizard.controller.spec.js View File

@@ -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);


Loading…
Cancel
Save