mirror of
https://github.com/ansible/awx.git
synced 2026-02-21 13:10:11 -03:30
Major rename of package from lib to ansibleworks.
This commit is contained in:
107
ansibleworks/ui/static/lib/angular/http-auth-interceptor.js
vendored
Executable file
107
ansibleworks/ui/static/lib/angular/http-auth-interceptor.js
vendored
Executable file
@@ -0,0 +1,107 @@
|
||||
/*global angular:true, browser:true */
|
||||
|
||||
/**
|
||||
* @license HTTP Auth Interceptor Module for AngularJS
|
||||
* (c) 2012 Witold Szczerba
|
||||
* License: MIT
|
||||
*
|
||||
* https://github.com/witoldsz/angular-http-auth/blob/master/README.md
|
||||
*
|
||||
*/
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
angular.module('http-auth-interceptor', ['http-auth-interceptor-buffer'])
|
||||
|
||||
.factory('authService', ['$rootScope','httpBuffer', function($rootScope, httpBuffer) {
|
||||
return {
|
||||
/**
|
||||
* call this function to indicate that authentication was successfull and trigger a
|
||||
* retry of all deferred requests.
|
||||
* @param data an optional argument to pass on to $broadcast which may be useful for
|
||||
* example if you need to pass through details of the user that was logged in
|
||||
*/
|
||||
loginConfirmed: function(data) {
|
||||
$rootScope.$broadcast('event:auth-loginConfirmed', data);
|
||||
httpBuffer.retryAll();
|
||||
}
|
||||
};
|
||||
}])
|
||||
|
||||
/**
|
||||
* $http interceptor.
|
||||
* On 401 response (without 'ignoreAuthModule' option) stores the request
|
||||
* and broadcasts 'event:angular-auth-loginRequired'.
|
||||
*/
|
||||
.config(['$httpProvider', function($httpProvider) {
|
||||
|
||||
var interceptor = ['$rootScope', '$q', 'httpBuffer', function($rootScope, $q, httpBuffer) {
|
||||
function success(response) {
|
||||
return response;
|
||||
}
|
||||
|
||||
function error(response) {
|
||||
if (response.status === 401 && !response.config.ignoreAuthModule) {
|
||||
var deferred = $q.defer();
|
||||
httpBuffer.append(response.config, deferred);
|
||||
$rootScope.$broadcast('event:auth-loginRequired');
|
||||
return deferred.promise;
|
||||
}
|
||||
// otherwise, default behaviour
|
||||
return $q.reject(response);
|
||||
}
|
||||
|
||||
return function(promise) {
|
||||
return promise.then(success, error);
|
||||
};
|
||||
|
||||
}];
|
||||
$httpProvider.responseInterceptors.push(interceptor);
|
||||
}]);
|
||||
|
||||
/**
|
||||
* Private module, an utility, required internally by 'http-auth-interceptor'.
|
||||
*/
|
||||
angular.module('http-auth-interceptor-buffer', [])
|
||||
|
||||
.factory('httpBuffer', ['$injector', function($injector) {
|
||||
/** Holds all the requests, so they can be re-requested in future. */
|
||||
var buffer = [];
|
||||
|
||||
/** Service initialized later because of circular dependency problem. */
|
||||
var $http;
|
||||
|
||||
function retryHttpRequest(config, deferred) {
|
||||
function successCallback(response) {
|
||||
deferred.resolve(response);
|
||||
}
|
||||
function errorCallback(response) {
|
||||
deferred.reject(response);
|
||||
}
|
||||
$http = $http || $injector.get('$http');
|
||||
$http(config).then(successCallback, errorCallback);
|
||||
}
|
||||
|
||||
return {
|
||||
/**
|
||||
* Appends HTTP request configuration object with deferred response attached to buffer.
|
||||
*/
|
||||
append: function(config, deferred) {
|
||||
buffer.push({
|
||||
config: config,
|
||||
deferred: deferred
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Retries all the buffered requests clears the buffer.
|
||||
*/
|
||||
retryAll: function() {
|
||||
for (var i = 0; i < buffer.length; ++i) {
|
||||
retryHttpRequest(buffer[i].config, buffer[i].deferred);
|
||||
}
|
||||
buffer = [];
|
||||
}
|
||||
};
|
||||
}]);
|
||||
})();
|
||||
Reference in New Issue
Block a user