UNPKG

ngx-adal-8

Version:
249 lines 16.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"; var NgxAdalService = /** @class */ (function () { function NgxAdalService(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(); } Object.defineProperty(NgxAdalService.prototype, "LoggedInUserEmail", { // constructor( // @Inject(ADAL_CONFIG) private adalConfig: any, @Inject(AUTHENTICATION_CONTEXT) private context: typeof AuthenticationContext) { // this.handleCallback(); // } get: // constructor( // @Inject(ADAL_CONFIG) private adalConfig: any, @Inject(AUTHENTICATION_CONTEXT) private context: typeof AuthenticationContext) { // this.handleCallback(); // } /** * @return {?} */ function () { if (this.isAuthenticated) { return this.context.getCachedUser().userName; } return ''; }, enumerable: true, configurable: true }); Object.defineProperty(NgxAdalService.prototype, "LoggedInUserName", { get: /** * @return {?} */ function () { if (this.isAuthenticated) { return this.context.getCachedUser().profile.name; } return ''; }, enumerable: true, configurable: true }); /** * @return {?} */ NgxAdalService.prototype.login = /** * @return {?} */ function () { this.context.login(); }; /** * @return {?} */ NgxAdalService.prototype.logout = /** * @return {?} */ function () { this.context.logOut(); }; /** * @param {?} url * @return {?} */ NgxAdalService.prototype.GetResourceForEndpoint = /** * @param {?} url * @return {?} */ function (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 {?} */ NgxAdalService.prototype.RenewToken = /** * @param {?} url * @return {?} */ function (url) { /** @type {?} */ var resource = this.GetResourceForEndpoint(url); return this.context.clearCacheForResource(resource); // Trigger the ADAL token renew }; /** * @param {?} url * @return {?} */ NgxAdalService.prototype.acquireToken = /** * @param {?} url * @return {?} */ function (url) { /** @type {?} */ var _this = this; // save outer this for inner function /** @type {?} */ var errorMessage; return bindCallback(acquireTokenInternal)().pipe(map((/** * @param {?} token * @return {?} */ function (token) { if (!token && errorMessage) { throw errorMessage; } return token; }))); /** * @param {?} cb * @return {?} */ function acquireTokenInternal(cb) { /** @type {?} */ var s = null; /** @type {?} */ var resource; resource = _this.GetResourceForEndpoint(url); _this.context.acquireToken(resource, (/** * @param {?} error * @param {?} tokenOut * @return {?} */ function (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 {?} */ NgxAdalService.prototype.getToken = /** * @param {?} url * @return {?} */ function (url) { /** @type {?} */ var resource = this.context.getResourceForEndpoint(url); /** @type {?} */ var storage = this.adalConfig.cacheLocation; // ? /** @type {?} */ var 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 {?} */ NgxAdalService.prototype.handleCallback = /** * @return {?} */ function () { this.context.handleWindowCallback(); }; Object.defineProperty(NgxAdalService.prototype, "userInfo", { get: /** * @return {?} */ function () { return this.context.getCachedUser(); }, enumerable: true, configurable: true }); Object.defineProperty(NgxAdalService.prototype, "accessToken", { get: /** * @return {?} */ function () { return this.context.getCachedToken(this.adalConfig.clientId); }, enumerable: true, configurable: true }); Object.defineProperty(NgxAdalService.prototype, "isAuthenticated", { get: /** * @return {?} */ function () { return this.userInfo && this.accessToken ? true : false; }, enumerable: true, configurable: true }); NgxAdalService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxAdalService.ctorParameters = function () { return [ { 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" }); return NgxAdalService; }()); export { NgxAdalService }; if (false) { /** * @type {?} * @private */ NgxAdalService.prototype.context; /** * @type {?} * @private */ NgxAdalService.prototype.adalConfig; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFkYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hZGFsLTgvIiwic291cmNlcyI6WyJsaWIvbmd4LWFkYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBYSxNQUFNLE1BQU0sQ0FBQzs7QUFFOUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUluQztJQU1FLHdCQUNnQyxVQUFlO1FBQWYsZUFBVSxHQUFWLFVBQVUsQ0FBSztRQUMzQyxVQUFVLENBQUMsV0FBVyxHQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxTQUFJLFVBQVUsQ0FBQyxXQUFhO1lBQzdFLFVBQVUsQ0FBQyxxQkFBcUIsR0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sU0FBSSxVQUFVLENBQUMscUJBQXVCO1lBQ25HLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQU9ELHNCQUFXLDZDQUFpQjtRQUw1QixlQUFlO1FBQ2YsbUlBQW1JO1FBQ25JLDJCQUEyQjtRQUMzQixJQUFJOzs7Ozs7Ozs7UUFFSjtZQUNFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUM5QztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQzs7O09BQUE7SUFFRCxzQkFBVyw0Q0FBZ0I7Ozs7UUFBM0I7WUFDRSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFD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RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBVyx1Q0FBVzs7OztRQUF0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRCxDQUFDOzs7T0FBQTtJQUVELHNCQUFXLDJDQUFlOzs7O1FBQTFCO1lBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzFELENBQUM7OztPQUFBOztnQkF2SEYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnREFLSSxNQUFNLFNBQUMsWUFBWTs7O3lCQWR4QjtDQStIQyxBQXhIRCxJQXdIQztTQXJIWSxjQUFjOzs7Ozs7SUFDekIsaUNBQThDOzs7OztJQUc1QyxvQ0FBNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtiaW5kQ2FsbGJhY2ssIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG4vLyBpbXBvcnQge0FEQUxfQ09ORklHLCBBVVRIRU5USUNBVElPTl9DT05URVhUfSBmcm9tICcuL2RpX3Rva2Vucyc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5kZWNsYXJlIHZhciBBdXRoZW50aWNhdGlvbkNvbnRleHQ7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hBZGFsU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjb250ZXh0OiB0eXBlb2YgQXV0aGVudGljYXRpb25Db250ZXh0O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2FkYWxDb25maWcnKSBwcml2YXRlIGFkYWxDb25maWc6IGFueSkge1xyXG4gICAgICBhZGFsQ29uZmlnLnJlZGlyZWN0VXJpID1gJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS8ke2FkYWxDb25maWcucmVkaXJlY3RVcml9YCxcclxuICAgICAgYWRhbENvbmZpZy5wb3N0TG9nb3V0UmVkaXJlY3RVcmkgPWAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59LyR7YWRhbENvbmZpZy5wb3N0TG9nb3V0UmVkaXJlY3RVcml9YCxcclxuICAgIHRoaXMuY29udGV4dCA9IG5ldyBBdXRoZW50aWNhdGlvbkNvbnRleHQoYWRhbENvbmZpZyk7XHJcbiAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICAvLyBjb25zdHJ1Y3RvcihcclxuICAvLyAgIEBJbmplY3QoQURBTF9DT05GSUcpIHByaXZhdGUgYWRhbENvbmZpZzogYW55LCBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0NPTlRFWFQpIHByaXZhdGUgY29udGV4dDogdHlwZW9mIEF1dGhlbnRpY2F0aW9uQ29udGV4dCkge1xyXG4gIC8vICAgdGhpcy5oYW5kbGVDYWxsYmFjaygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGdldCBMb2dnZWRJblVzZXJFbWFpbCgpIHtcclxuICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmdldENhY2hlZFVzZXIoKS51c2VyTmFtZTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgTG9nZ2VkSW5Vc2VyTmFtZSgpIHtcclxuICAgIGlmICh0aGlzLmlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmdldENhY2hlZFVzZXIoKS5wcm9maWxlLm5hbWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcbiAgICB0aGlzLmNvbnRleHQubG9naW4oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKSB7XHJcbiAgICB0aGlzLmNvbnRleHQubG9nT3V0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0UmVzb3VyY2VGb3JFbmRwb2ludCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmdldFJlc291cmNlRm9yRW5kcG9pbnQodXJsKVxyXG4gICAgLy8gbGV0IHJlc291cmNlID0gbnVsbDtcclxuICAgIC8vIGlmICh1cmwpIHtcclxuICAgIC8vICAgcmVzb3VyY2UgPSB0aGlzLmNvbnRleHQuZ2V0UmVzb3VyY2VGb3JFbmRwb2ludCh1cmwpO1xyXG4gICAgLy8gICBpZiAoIXJlc291cmNlKSB7XHJcbiAgICAvLyAgICAgcmVzb3VyY2UgPSB0aGlzLmFkYWxDb25maWcuY2xpZW50SWQ7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIHJldHVybiByZXNvdXJjZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZW5ld1Rva2VuKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5HZXRSZXNvdXJjZUZvckVuZHBvaW50KHVybCk7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNsZWFyQ2FjaGVGb3JSZXNvdXJjZShyZXNvdXJjZSk7IC8vIFRyaWdnZXIgdGhlIEFEQUwgdG9rZW4gcmVuZXdcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3F1aXJlVG9rZW4odXJsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpczsgLy8gc2F2ZSBvdXRlciB0aGlzIGZvciBpbm5lciBmdW5jdGlvblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIHJldHVybiBiaW5kQ2FsbGJhY2soYWNxdWlyZVRva2VuSW50ZXJuYWwpKCkucGlwZShtYXAoKHRva2VuOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF0b2tlbiAmJiBlcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICB0aHJvdyBlcnJvck1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRva2VuO1xyXG4gICAgfSkpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFjcXVpcmVUb2tlbkludGVybmFsKGNiOiAodG9rZW46IHN0cmluZykgPT4gc3RyaW5nKSB7XHJcbiAgICAgIGxldCBzOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgICBsZXQgcmVzb3VyY2U6IHN0cmluZztcclxuICAgICAgcmVzb3VyY2UgPSBfdGhpcy5HZXRSZXNvdXJjZUZvckVuZHBvaW50KHVybCk7XHJcblxyXG4gICAgICBfdGhpcy5jb250ZXh0LmFjcXVpcmVUb2tlbihyZXNvdXJjZSwgKGVycm9yOiBzdHJpbmcsIHRva2VuT3V0OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgIF90aGlzLmNvbnRleHQuZXJyb3IoJ0Vycm9yIHdoZW4gYWNxdWlyaW5nIHRva2VuIGZvciByZXNvdXJjZTogJyArIHJlc291cmNlLCBlcnJvcik7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcclxuICAgICAgICAgIGNiKG51bGwgYXMgc3RyaW5nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2IodG9rZW5PdXQpO1xyXG4gICAgICAgICAgcyA9IHRva2VuT3V0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUb2tlbih1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuY29udGV4dC5nZXRSZXNvdXJjZUZvckVuZHBvaW50KHVybCk7XHJcbiAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5hZGFsQ29uZmlnLmNhY2hlTG9jYXRpb247IC8vID9cclxuICAgIGxldCBrZXk7XHJcbiAgICBpZiAocmVzb3VyY2UpIHtcclxuICAgICAga2V5ID0gJ2FkYWwuYWNjZXNzLnRva2VuLmtleScgKyByZXNvdXJjZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleSA9ICdhZGFsLmlkdG9rZW4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0b3JhZ2UgPT09ICdsb2NhbFN0b3JhZ2UnKSB7XHJcbiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNhbGxiYWNrKCkge1xyXG4gICAgdGhpcy5jb250ZXh0LmhhbmRsZVdpbmRvd0NhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHVzZXJJbmZvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDYWNoZWRVc2VyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRDYWNoZWRUb2tlbih0aGlzLmFkYWxDb25maWcuY2xpZW50SWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VySW5mbyAmJiB0aGlzLmFjY2Vzc1Rva2VuID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=