ngx-adal-8
Version:
Angular 2+ ADAL Wrapper library
249 lines • 16.9 kB
JavaScript
/**
* @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=