adal-angular
Version:
Windows Azure Active Directory Client Library for js
2 lines • 8.11 kB
JavaScript
/*! adal-angular v1.0.17 2018-02-27 */
!function(){"use strict";if("undefined"!=typeof module&&module.exports&&(module.exports.inject=function(a){return new AuthenticationContext(a)}),angular){var a=angular.module("AdalAngular",[]);a.provider("adalAuthenticationService",function(){var a=null,b={isAuthenticated:!1,userName:"",loginError:"",profile:""},c=function(c){var d=a.getCachedToken(c);b.isAuthenticated=null!==d&&d.length>0;var e=a.getCachedUser()||{userName:""};b.userName=e.userName,b.profile=e.profile,b.loginError=a.getLoginError()};this.init=function(b,d){if(!b)throw new Error("You must set configOptions, when calling init");b.isAngular=!0,d&&d.interceptors&&d.interceptors.push("ProtectedResourceInterceptor"),a=new AuthenticationContext(b),c(a.config.loginResource)},this.$get=["$rootScope","$window","$q","$location","$timeout","$injector",function(d,e,f,g,h,i){function j(a,b){return b.requireADLogin?!1!==a.requireADLogin:!!a.requireADLogin}function k(b){if(a.config&&a.config.anonymousEndpoints)for(var c=0;c<a.config.anonymousEndpoints.length;c++)if(b.indexOf(a.config.anonymousEndpoints[c])>-1)return!0;return!1}function l(a){var b=null,c=[];if(a.hasOwnProperty("parent"))for(b=a;b;)c.unshift(b),b=i.get("$state").get(b.parent);else for(var d=a.name.split("."),e=0,f=d[0];e<d.length;e++)b=i.get("$state").get(f),b&&c.push(b),f+="."+d[e+1];return c}function m(a){s(null,a.to(),a.params("to"),a.from(),a.params("from"))}function n(a){t(null,a.to(),a.params("to"),a.from(),a.params("from"),a.error())}var o=function(e,f,i){if(a.verbose("Location change event from "+i+" to "+f),g.$$html5)var j=g.hash();else var j="#"+g.path();p(j,e),h(function(){c(a.config.loginResource),d.userInfo=b},1)},p=function(f,j){if(a.isCallback(f)){var k=!1;a._openedWindows.length>0&&a._openedWindows[a._openedWindows.length-1].opener&&a._openedWindows[a._openedWindows.length-1].opener._adalInstance?(a=a._openedWindows[a._openedWindows.length-1].opener._adalInstance,k=!0):e.parent&&e.parent._adalInstance&&(a=e.parent._adalInstance),a.verbose("Processing the hash: "+f);var l=a.getRequestInfo(f);a.saveTokenFromHash(l);var m=l.parameters.access_token||l.parameters.id_token,n=l.parameters.error,o=l.parameters.error_description,p=null,q=a._callBackMappedToRenewStates[l.stateResponse]||a.callback;if(l.stateMatch){if(l.requestType===a.REQUEST_TYPE.RENEW_TOKEN?(p=a.CONSTANTS.ACCESS_TOKEN,a._renewActive=!1,e.parent!==e||a._callBackMappedToRenewStates[l.stateResponse]||(m?d.$broadcast("adal:acquireTokenSuccess",m):n&&o&&d.$broadcast("adal:acquireTokenFailure",o,n))):l.requestType===a.REQUEST_TYPE.LOGIN&&(p=a.CONSTANTS.ID_TOKEN,c(a.config.loginResource),b.userName?(h(function(){c(a.config.loginResource),d.userInfo=b},1),d.$broadcast("adal:loginSuccess",m)):d.$broadcast("adal:loginFailure",o,n)),q&&"function"==typeof q&&q(o,m,n,p),window.parent!==window)return void(j&&j.preventDefault&&j.preventDefault());if(e.parent===window&&!k)if(a.config.navigateToLoginRequestUrl){var r=a._getItem(a.CONSTANTS.STORAGE.LOGIN_REQUEST);void 0!==r&&r&&0!==r.length&&(a.verbose("Redirecting to start page: "+r),!g.$$html5&&r.indexOf("#")>-1&&g.url(r.substring(r.indexOf("#")+1)),e.location.href=r)}else g.$$html5?g.hash(""):g.path("")}else d.$broadcast("adal:stateMismatch",o,n)}else if(c(a.config.loginResource),!b.isAuthenticated&&b.userName&&!a._renewActive){var s=i.get("adalAuthenticationService");s.acquireToken(a.config.loginResource).then(function(a){a&&(b.isAuthenticated=!0)},function(a){var b=a.split("|");d.$broadcast("adal:loginFailure",b[0],b[1])})}},q=function(b){b&&a._saveItem(a.CONSTANTS.STORAGE.ANGULAR_LOGIN_REQUEST,b),a.config&&a.config.localLoginUrl?(a.info("Login event for:"+a.config.localLoginUrl),g.path(a.config.localLoginUrl)):(a.info("Start login at:"+e.location.href),d.$broadcast("adal:loginRedirect"),a.login())},r=function(c,d){if(d&&d.$$route)if(j(d.$$route,a.config))b.isAuthenticated||a._renewActive||a.loginInProgress()||(a.info("Route change event for:"+g.$$url),q());else{var e;e="function"==typeof d.$$route.templateUrl?d.$$route.templateUrl(d.params):d.$$route.templateUrl,e&&!k(e)&&a.config.anonymousEndpoints.push(e)}},s=function(c,d,e,f,h){if(d)for(var m=l(d),n=null,o=0;o<m.length;o++)if(n=m[o],j(n,a.config)){if(!b.isAuthenticated&&!a._renewActive&&!a.loginInProgress()){a.info("State change event for:"+g.$$url);var p=i.get("$state"),r=p.href(d,e,{absolute:!0});q(r)}}else if(n.templateUrl){var s;s="function"==typeof n.templateUrl?n.templateUrl(e):n.templateUrl,s&&!k(s)&&a.config.anonymousEndpoints.push(s)}},t=function(b,c,d,e,f,g){a.verbose("State change error occured. Error: "+typeof g=="string"?g:JSON.stringify(g)),g&&g.data&&(a.info("Setting defaultPrevented to true if state change error occured because adal rejected a request. Error: "+g.data),b&&b.preventDefault())};if(i.has("$transitions")){var u=i.get("$transitions");u.onStart({},m),u.onError({},n)}return d.$on("$routeChangeStart",r),d.$on("$stateChangeStart",s),d.$on("$locationChangeStart",o),d.$on("$stateChangeError",t),e.addEventListener("adal:popUpHashChanged",function(a){p(a.detail)}),e.addEventListener("adal:popUpClosed",function(b){var c=b.detail.split("|");a._loginInProgress?(d.$broadcast("adal:loginFailure",c[0],c[1]),a._loginInProgress=!1):a._acquireTokenInProgress&&(d.$broadcast("adal:acquireTokenFailure",c[0],c[1]),a._acquireTokenInProgress=!1)}),c(a.config.loginResource),d.userInfo=b,{config:a.config,login:function(){a.login()},loginInProgress:function(){return a.loginInProgress()},logOut:function(){a.logOut()},getCachedToken:function(b){return a.getCachedToken(b)},userInfo:b,acquireToken:function(b){var c=f.defer();return a._renewActive=!0,a.acquireToken(b,function(e,f,g){a._renewActive=!1,g?(d.$broadcast("adal:acquireTokenFailure",e,g),a.error("Error when acquiring token for resource: "+b,g),c.reject(e+"|"+g)):(d.$broadcast("adal:acquireTokenSuccess",f),c.resolve(f))}),c.promise},acquireTokenPopup:function(b,c,e){var g=f.defer();return a.acquireTokenPopup(b,c,e,function(c,e,f){f?(d.$broadcast("adal:acquireTokenFailure",c,f),a.error("Error when acquiring token for resource: "+b,f),g.reject(c+"|"+f)):(d.$broadcast("adal:acquireTokenSuccess",e),g.resolve(e))}),g.promise},acquireTokenRedirect:function(b,c,d){a.acquireTokenRedirect(b,c,d)},getUser:function(){var b=f.defer();return a.getUser(function(c,d){c?(a.error("Error when getting user",c),b.reject(c)):b.resolve(d)}),b.promise},getResourceForEndpoint:function(b){return a.getResourceForEndpoint(b)},clearCache:function(){a.clearCache()},clearCacheForResource:function(b){a.clearCacheForResource(b)},info:function(b){a.info(b)},verbose:function(b){a.verbose(b)}}}]}),a.factory("ProtectedResourceInterceptor",["adalAuthenticationService","$q","$rootScope","$templateCache",function(a,b,c,d){return{request:function(e){if(e){if(e.headers=e.headers||{},d.get(e.url))return e;var f=a.getResourceForEndpoint(e.url);if(a.verbose("Url: "+e.url+" maps to resource: "+f),null===f)return e;var g=a.getCachedToken(f);if(g)return a.info("Token is available for this url "+e.url),e.headers.Authorization="Bearer "+g,e;if(a.loginInProgress()){if(a.config.popUp){a.info("Url: "+e.url+" will be loaded after login is successful");var h=b.defer();return c.$on("adal:loginSuccess",function(b,c){c&&(a.info("Login completed, sending request for "+e.url),e.headers.Authorization="Bearer "+g,h.resolve(e))}),c.$on("adal:loginFailure",function(a,b){b&&(e.data=b,h.reject(e))}),h.promise}return a.info("login is in progress."),e.data="login in progress, cancelling the request for "+e.url,b.reject(e)}var h=b.defer();return a.acquireToken(f).then(function(b){a.verbose("Token is available"),e.headers.Authorization="Bearer "+b,h.resolve(e)},function(a){e.data=a,h.reject(e)}),h.promise}},responseError:function(d){if(a.info("Getting error in the response: "+JSON.stringify(d)),d){if(401===d.status){var e=a.getResourceForEndpoint(d.config.url);a.clearCacheForResource(e),c.$broadcast("adal:notAuthorized",d,e)}else c.$broadcast("adal:errorResponse",d);return b.reject(d)}}}}])}else console.error("Angular.JS is not included")}();