1app.factory('AuthInterceptor', [ '$injector', '$rootScope', '$q', 'AUTH_EVENTS', 2function($injector, $rootScope, $q, AUTH_EVENTS) { 3 var onFlyAuthRequest = null; 4 var contextPath = window.location.pathname.substring(0, window.location.pathname.indexOf("/",2)); 5 return { 6 request: function(config) { 7 config.headers = config.headers || {}; 8 if (config.url.indexOf('.html') == -1 && keycloak.token){ 9 config.headers.user_ref_id = $rootScope.user_ref_id; 10 config.headers.Authorization = 'Bearer ' + keycloak.token; 11 } 12 if (config.url.indexOf('.html') == -1 && $rootScope.authToken) { 13 config.headers["Boss-Auth-Token"] = $rootScope.authToken; 14 config.headers.user_ref_id = $rootScope.user_ref_id; 15 } 16 return config; 17 }, 18 19 responseError : function(response) { 20 console.log("From layout AuthInterceptor"); 21 var deferred = $q.defer(); 22 switch (response.status) { 23 case 401: 24 if(!localStorage.getItem('isUserAlive') || localStorage.getItem('isUserAlive')=="false"){ 25 window.location.href = $rootScope.logoutURL + "/sso/logout"; 26 } 27 console.assert(true, "response - 401: ", response); 28 if(response.config.headers.authToken && $rootScope.authToken){ 29 if(!onFlyAuthRequest) { 30 onFlyAuthRequest = $injector.get("$http").get(contextPath + '/user/refreshToken', {params: { 'clientUser':$rootScope.currentUser.userId, }}); 31 }// IF 32 33 onFlyAuthRequest.then(function(res) { 34 onFlyAuthRequest = null; 35 console.assert(true, "validateResponse: ", res); 36 if(res.data.refreshToken){ 37 $rootScope.authToken = res.data.refreshToken; 38 sessionStorage.authToken = res.data.refreshToken; 39 response.config.headers.authToken = res.data.refreshToken; 40 $injector.get("$http")(response.config).then(function(resp) { 41 deferred.resolve(resp); 42 },function(resp) { 43 deferred.reject(); 44 }); 45 }else if(parseInt(res.data.status) == 403){ 46 $rootScope.$broadcast({ 403 : AUTH_EVENTS.notAuthorized, }[response.status], response); 47 if(!$rootScope.preventErrorMsg){ 48 let errorMsg= response.data?.message; 49 errorMsg = errorMsg ? errorMsg : response.statusText; 50 $rootScope.displayExceptionToUser(response.status, 51 errorMsg, 52 response.config.url, 53 response.config.method); 54 } 55 } 56 }).catch(function(fallback) { 57 onFlyAuthRequest = null; 58 console.error("Error while refresh the token: ", fallback); 59 return; 60 }); 61 return deferred.promise; 62 }else{ 63 $rootScope.$broadcast({ 401 : AUTH_EVENTS.notAuthenticated, }[response.status], response); 64 if(!$rootScope.preventErrorMsg){ 65 $rootScope.displayExceptionToUser(response.status, response.statusText, response.config.url, response.config.method); 66 } 67 } 68 69 break; 70 71 default: 72 $rootScope.$broadcast({ 73 //401 : AUTH_EVENTS.notAuthenticated, 74 403 : AUTH_EVENTS.notAuthorized, 75 419 : AUTH_EVENTS.sessionTimeout, 76 440 : AUTH_EVENTS.sessionTimeout 77 }[response.status], response); 78 /* 79 if (response.status > 399) { // assuming that any code over 399 is an error 80 $q.reject(response) 81 }*/ 82 //This method is defined on rootScope to display a modal with error. 83 if(!$rootScope.preventErrorMsg){ 84 let errorMsg = response.data?.message; 85 errorMsg = errorMsg ? errorMsg : response.statusText; 86 if (response.status === 403 && errorMsg && errorMsg.includes("Invalid authorization header")) { 87 response.config.headers.authToken = response.data.refreshToken; 88 $injector.get("$http")(response.config).then(function (resp) { 89 deferred.resolve(resp); 90 }, function (resp) { 91 deferred.reject(); 92 }); 93 } else { 94 if(!errorMsg){ 95 if (typeof response.data === 'object') { 96 errorMsg = response.data.error; 97 } else if(response.data && response.data.indexOf("<html")!=-1){ 98 const doc = new DOMParser().parseFromString(response.data, 'text/html'); 99 const paragraphs = doc.querySelectorAll('h2'); 100 if(paragraphs && paragraphs[0]){ 101 errorMsg = paragraphs[0].textContent; 102 } 103 } 104 } 105 $rootScope.displayExceptionToUser(response.status, 106 errorMsg, 107 response.config.url, 108 response.config.method); 109 } 110 } 111 return deferred.promise; 112 break; 113 }; // switch 114 } // end responseError 115 }; 116} ]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.