Skip to content

Instantly share code, notes, and snippets.

@gognjanovski
Last active July 23, 2017 12:42
Show Gist options
  • Save gognjanovski/5a29358eb215062778e54c37453b818f to your computer and use it in GitHub Desktop.
Save gognjanovski/5a29358eb215062778e54c37453b818f to your computer and use it in GitHub Desktop.
(function () {
'use strict';
var core = angular.module('config');
core.config(configure);
configure.$inject = ['$httpProvider'];
/* @ngInject */
function configure($httpProvider) {
//Intercept all http requests
$httpProvider.interceptors.push(['$injector', '$q', "AuthorizationTokenService", function ($injector, $q, AuthorizationTokenService) {
var cachedRequest = null;
return {
request: function (config) {
//If request is for refreshToken pass it without Authorization header
if(config.url.indexOf("refreshToken") !== -1) {
return config;
}
//If request if for API attach Authorization header with Access Token
else if (config.url.indexOf("api") != -1) {
var accessToken = AuthorizationTokenService.getLocalAccessToken();
config.headers['Authorization'] = 'Bearer ' + accessToken;
}
return config;
},
responseError: function (response) {
switch (response.status) {
//Detect if reponse error is 401 (Unauthorized)
case 401:
//Cache this request
var deferred = $q.defer();
if(!cachedRequest) {
//Cache request for renewing Access Token and wait for Promise
cachedRequest = AuthorizationTokenService.refreshAccessToken();
}
//When Promise is resolved, new Access Token is returend
cachedRequest.then(function(accessToken) {
cachedRequest = null;
if (accessToken) {
//Resend this request when Access Token is renewed
$injector.get("$http")(response.config).then(function(resp) {
//Resolve this request (successfully this time)
deferred.resolve(resp);
},function(resp) {
deferred.reject();
});
} else {
//If any error occurs reject the Promise
deferred.reject();
}
}, function(response) {
//If any error occurs reject the Promise
cachedRequest = null;
deferred.reject();
return;
});
return deferred.promise;
}
//If any error occurs reject the Promise
return $q.reject(response);
}
};
}]);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment