UNPKG

ngx-adal-8

Version:
200 lines 14.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, Inject } from '@angular/core'; import { bindCallback } from 'rxjs'; // import {ADAL_CONFIG, AUTHENTICATION_CONTEXT} from './di_tokens'; import { map } from 'rxjs/operators'; import * as i0 from "@angular/core"; export class NgxAdalService { /** * @param {?} adalConfig */ constructor(adalConfig) { this.adalConfig = adalConfig; adalConfig.redirectUri = `${window.location.origin}/${adalConfig.redirectUri}`, adalConfig.postLogoutRedirectUri = `${window.location.origin}/${adalConfig.postLogoutRedirectUri}`, this.context = new AuthenticationContext(adalConfig); this.handleCallback(); } // constructor( // @Inject(ADAL_CONFIG) private adalConfig: any, @Inject(AUTHENTICATION_CONTEXT) private context: typeof AuthenticationContext) { // this.handleCallback(); // } /** * @return {?} */ get LoggedInUserEmail() { if (this.isAuthenticated) { return this.context.getCachedUser().userName; } return ''; } /** * @return {?} */ get LoggedInUserName() { if (this.isAuthenticated) { return this.context.getCachedUser().profile.name; } return ''; } /** * @return {?} */ login() { this.context.login(); } /** * @return {?} */ logout() { this.context.logOut(); } /** * @param {?} url * @return {?} */ GetResourceForEndpoint(url) { return this.context.getResourceForEndpoint(url); // let resource = null; // if (url) { // resource = this.context.getResourceForEndpoint(url); // if (!resource) { // resource = this.adalConfig.clientId; // } // } // return resource; } /** * @param {?} url * @return {?} */ RenewToken(url) { /** @type {?} */ const resource = this.GetResourceForEndpoint(url); return this.context.clearCacheForResource(resource); // Trigger the ADAL token renew } /** * @param {?} url * @return {?} */ acquireToken(url) { /** @type {?} */ const _this = this; // save outer this for inner function /** @type {?} */ let errorMessage; return bindCallback(acquireTokenInternal)().pipe(map((/** * @param {?} token * @return {?} */ (token) => { if (!token && errorMessage) { throw errorMessage; } return token; }))); /** * @param {?} cb * @return {?} */ function acquireTokenInternal(cb) { /** @type {?} */ let s = null; /** @type {?} */ let resource; resource = _this.GetResourceForEndpoint(url); _this.context.acquireToken(resource, (/** * @param {?} error * @param {?} tokenOut * @return {?} */ (error, tokenOut) => { if (error) { _this.context.error('Error when acquiring token for resource: ' + resource, error); errorMessage = error; cb((/** @type {?} */ (null))); } else { cb(tokenOut); s = tokenOut; } })); return s; } } /** * @param {?} url * @return {?} */ getToken(url) { /** @type {?} */ const resource = this.context.getResourceForEndpoint(url); /** @type {?} */ const storage = this.adalConfig.cacheLocation; // ? /** @type {?} */ let key; if (resource) { key = 'adal.access.token.key' + resource; } else { key = 'adal.idtoken'; } if (storage === 'localStorage') { return localStorage.getItem(key); } else { return sessionStorage.getItem(key); } } /** * @return {?} */ handleCallback() { this.context.handleWindowCallback(); } /** * @return {?} */ get userInfo() { return this.context.getCachedUser(); } /** * @return {?} */ get accessToken() { return this.context.getCachedToken(this.adalConfig.clientId); } /** * @return {?} */ get isAuthenticated() { return this.userInfo && this.accessToken ? true : false; } } NgxAdalService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxAdalService.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: ['adalConfig',] }] } ]; /** @nocollapse */ NgxAdalService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgxAdalService_Factory() { return new NgxAdalService(i0.ɵɵinject("adalConfig")); }, token: NgxAdalService, providedIn: "root" }); if (false) { /** * @type {?} * @private */ NgxAdalService.prototype.context; /** * @type {?} * @private */ NgxAdalService.prototype.adalConfig; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFkYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hZGFsLTgvIiwic291cmNlcyI6WyJsaWIvbmd4LWFkYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBYSxNQUFNLE1BQU0sQ0FBQzs7QUFFOUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQU9uQyxNQUFNLE9BQU8sY0FBYzs7OztJQUd6QixZQUNnQyxVQUFlO1FBQWYsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUMzQyxVQUFVLENBQUMsV0FBVyxHQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRTtZQUM3RSxVQUFVLENBQUMscUJBQXFCLEdBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMscUJBQXFCLEVBQUU7WUFDbkcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDOzs7Ozs7OztJQU9ELElBQVcsaUJBQWlCO1FBQzFCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzs7O0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ2xEO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFD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QyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7OztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUQsQ0FBQzs7O1lBdkhGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Ozs0Q0FLSSxNQUFNLFNBQUMsWUFBWTs7Ozs7Ozs7SUFIdEIsaUNBQThDOzs7OztJQUc1QyxvQ0FBNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtiaW5kQ2FsbGJhY2ssIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG4vLyBpbXBvcnQge0FEQUxfQ09ORklHLCBBVVRIRU5USUNBVElPTl9DT05URVhUfSBmcm9tICcuL2RpX3Rva2Vucyc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5kZWNsYXJlIHZhciBBdXRoZW50aWNhdGlvbkNvbnRleHQ7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hBZGFsU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjb250ZXh0OiB0eXBlb2YgQXV0aGVudGljYXRpb25Db250ZXh0O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2FkYWxDb25maWcnKSBwcml2YXRlIGFkYWxDb25maWc6IGFueSkge1xyXG4gICAgICBhZGFsQ29uZmlnLnJlZGlyZWN0VXJpID1gJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS8ke2FkYWxDb25maWcucmVkaXJlY3RVcml9YCxcclxuICAgICAgYWRhbENvbmZpZy5wb3N0TG9nb3V0UmVkaXJlY3RVcmkgPWAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59LyR7YWRhbENvbmZpZy5wb3N0TG9nb3V0UmVkaXJlY3RVcml9YCxcclxuICAgIHRoaXMuY29udGV4dCA9IG5ldyBBdXRoZW50aWNhdGlvbkNvbnRleHQoYWRhbENvbmZpZyk7XHJcbiAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjb25zdHJ1Y3RvcihcclxuICAvLyAgIEBJbmplY3QoQURBTF9DT05GSUcpIHByaXZhdGUgYWRhbENvbmZpZzogYW55LCBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0NPTlRFWFQpIHByaXZhdGUgY29udGV4dDogdHlwZW9mIEF1dGhlbnRpY2F0aW9uQ29udGV4dCkge1xyXG4gIC8vICAgdGhpcy5oYW5kbGVDYWxsYmFjaygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGdldCBMb2dnZWRJblVzZXJFbWFpbCgpIHtcclxuICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmdldENhY2hlZFVzZXIoKS51c2VyTmFtZTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgTG9nZ2VkSW5Vc2VyTmFtZSgpIHtcclxuICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmdldENhY2hlZFVzZXIoKS5wcm9maWxlLm5hbWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcbiAgICB0aGlzLmNvbnRleHQubG9naW4oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKSB7XHJcbiAgICB0aGlzLmNvbnRleHQubG9nT3V0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0UmVzb3VyY2VGb3JFbmRwb2ludCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmdldFJlc291cmNlRm9yRW5kcG9pbnQodXJsKVxyXG4gICAgLy8gbGV0IHJlc291cmNlID0gbnVsbDtcclxuICAgIC8vIGlmICh1cmwpIHtcclxuICAgIC8vICAgcmVzb3VyY2UgPSB0aGlzLmNvbnRleHQuZ2V0UmVzb3VyY2VGb3JFbmRwb2ludCh1cmwpO1xyXG4gICAgLy8gICBpZiAoIXJlc291cmNlKSB7XHJcbiAgICAvLyAgICAgcmVzb3VyY2UgPSB0aGlzLmFkYWxDb25maWcuY2xpZW50SWQ7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIHJldHVybiByZXNvdXJjZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZW5ld1Rva2VuKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5HZXRSZXNvdXJjZUZvckVuZHBvaW50KHVybCk7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNsZWFyQ2FjaGVGb3JSZXNvdXJjZShyZXNvdXJjZSk7IC8vIFRyaWdnZXIgdGhlIEFEQUwgdG9rZW4gcmVuZXdcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3F1aXJlVG9rZW4odXJsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpczsgLy8gc2F2ZSBvdXRlciB0aGlzIGZvciBpbm5lciBmdW5jdGlvblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIHJldHVybiBiaW5kQ2FsbGJhY2soYWNxdWlyZVRva2VuSW50ZXJuYWwpKCkucGlwZShtYXAoKHRva2VuOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF0b2tlbiAmJiBlcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICB0aHJvdyBlcnJvck1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRva2VuO1xyXG4gICAgfSkpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFjcXVpcmVUb2tlbkludGVybmFsKGNiOiAodG9rZW46IHN0cmluZykgPT4gc3RyaW5nKSB7XHJcbiAgICAgIGxldCBzOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICBsZXQgcmVzb3VyY2U6IHN0cmluZztcclxuICAgICAgcmVzb3VyY2UgPSBfdGhpcy5HZXRSZXNvdXJjZUZvckVuZHBvaW50KHVybCk7XHJcblxyXG4gICAgICBfdGhpcy5jb250ZXh0LmFjcXVpcmVUb2tlbihyZXNvdXJjZSwgKGVycm9yOiBzdHJpbmcsIHRva2VuT3V0OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgIF90aGlzLmNvbnRleHQuZXJyb3IoJ0Vycm9yIHdoZW4gYWNxdWlyaW5nIHRva2VuIGZvciByZXNvdXJjZTogJyArIHJlc291cmNlLCBlcnJvcik7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcclxuICAgICAgICAgIGNiKG51bGwgYXMgc3RyaW5nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2IodG9rZW5PdXQpO1xyXG4gICAgICAgICAgcyA9IHRva2VuT3V0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUb2tlbih1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuY29udGV4dC5nZXRSZXNvdXJjZUZvckVuZHBvaW50KHVybCk7XHJcbiAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5hZGFsQ29uZmlnLmNhY2hlTG9jYXRpb247IC8vID9cclxuICAgIGxldCBrZXk7XHJcbiAgICBpZiAocmVzb3VyY2UpIHtcclxuICAgICAga2V5ID0gJ2FkYWwuYWNjZXNzLnRva2VuLmtleScgKyByZXNvdXJjZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleSA9ICdhZGFsLmlkdG9rZW4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0b3JhZ2UgPT09ICdsb2NhbFN0b3JhZ2UnKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNhbGxiYWNrKCkge1xyXG4gICAgdGhpcy5jb250ZXh0LmhhbmRsZVdpbmRvd0NhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHVzZXJJbmZvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDYWNoZWRVc2VyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDYWNoZWRUb2tlbih0aGlzLmFkYWxDb25maWcuY2xpZW50SWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VySW5mbyAmJiB0aGlzLmFjY2Vzc1Rva2VuID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=