Last active
July 23, 2017 12:42
-
-
Save gognjanovski/5a29358eb215062778e54c37453b818f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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