UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

114 lines (113 loc) 10.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { throwError, Subject } from 'rxjs'; import { tap, catchError, switchMap, first } from 'rxjs/operators'; /** * @abstract */ export class AsiRefreshTokenInceptor { constructor() { this.refreshingToken = false; this.refreshTokenSubject = new Subject(); this.refreshTokenUrl = this.getRefreshTokenUrl(); this.loginUrl = this.getLoginUrl(); } /** * @param {?} req * @param {?} next * @return {?} */ intercept(req, next) { req = this.addAuthenticationToken(req, false); return next.handle(req).pipe(tap(evt => { this.onRequestSuccess(evt); }), catchError((err) => { // Not a 401 or fail on login page // tslint:disable-next-line:triple-equals if ((err.status != AsiRefreshTokenInceptor.UNAUTHORIZED && !req.url.includes(this.refreshTokenUrl)) || req.url.includes(this.loginUrl)) { return throwError(err); } // Fail to refresh the token, go to login page if (req.url.includes(this.refreshTokenUrl)) { this.refreshingToken = false; this.goToLoginPage(req, err); return throwError(err); } if (this.refreshingToken) { // refresh token is in progress, we subscribe to the unlocking event return this.refreshTokenSubject.pipe(first(), switchMap(() => { return next.handle(this.addAuthenticationToken(req, true)); })); } else { this.refreshingToken = true; // get and save the refresh token and unlock requests return this.callAndSaveRefreshToken().pipe(first(), switchMap((token) => { this.refreshingToken = false; this.refreshTokenSubject.next(token); return next.handle(this.addAuthenticationToken(req, true)); }), catchError((error) => { this.refreshingToken = false; this.goToLoginPage(req, error); return throwError(error); })); } })); } /** * @param {?} _event * @return {?} */ onRequestSuccess(_event) { } } AsiRefreshTokenInceptor.UNAUTHORIZED = 401; if (false) { /** @type {?} */ AsiRefreshTokenInceptor.UNAUTHORIZED; /** @type {?} */ AsiRefreshTokenInceptor.prototype.refreshingToken; /** @type {?} */ AsiRefreshTokenInceptor.prototype.loginUrl; /** @type {?} */ AsiRefreshTokenInceptor.prototype.refreshTokenUrl; /** @type {?} */ AsiRefreshTokenInceptor.prototype.refreshTokenSubject; /** * Add auth token to the request header * @abstract * @param {?} req the request * @param {?} replay is the token replayed * @return {?} */ AsiRefreshTokenInceptor.prototype.addAuthenticationToken = function (req, replay) { }; /** * Get the refresh token endpoint url * @abstract * @return {?} */ AsiRefreshTokenInceptor.prototype.getRefreshTokenUrl = function () { }; /** * Call the refresh token endpoint and save the new token * @abstract * @return {?} */ AsiRefreshTokenInceptor.prototype.callAndSaveRefreshToken = function () { }; /** * Get the login endpoint url * @abstract * @return {?} */ AsiRefreshTokenInceptor.prototype.getLoginUrl = function () { }; /** * Change the current page to the login page * @abstract * @param {?} req the request * @param {?} err the err * @return {?} */ AsiRefreshTokenInceptor.prototype.goToLoginPage = function (req, err) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXJlZnJlc2h0b2tlbi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhc2ktbmd0b29scy9saWIvIiwic291cmNlcyI6WyJsaWIvaW50ZXJjZXB0b3JzL2FzaS1yZWZyZXNodG9rZW4uaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFBYyxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUVuRSxNQUFNO0lBVUo7K0JBUDBCLEtBQUs7bUNBS0QsSUFBSSxPQUFPLEVBQU87UUFHOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUNwQzs7Ozs7O0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFOzs7WUFJckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLHVCQUF1QixDQUFDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzttQkFDOUYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4Qjs7WUFHRCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEI7WUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzs7Z0JBRXpCLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDNUQsQ0FBQyxDQUFDLENBQUM7YUFDTDtZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOztnQkFFNUIsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7b0JBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDNUQsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7b0JBQzlCLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzFCLENBQUMsQ0FBQyxDQUFDO2FBQ0w7U0FDRixDQUFDLENBQUMsQ0FBQztLQUNMOzs7OztJQUVELGdCQUFnQixDQUFDLE1BQXNCLEtBQVc7O3VDQXZEWCxHQUFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFzaVJlZnJlc2hUb2tlbkluY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVTkFVVEhPUklaRUQgPSA0MDE7XG4gIHByaXZhdGUgcmVmcmVzaGluZ1Rva2VuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBsb2dpblVybDtcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5Vcmw7XG5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVmcmVzaFRva2VuVXJsID0gdGhpcy5nZXRSZWZyZXNoVG9rZW5VcmwoKTtcbiAgICB0aGlzLmxvZ2luVXJsID0gdGhpcy5nZXRMb2dpblVybCgpO1xuICB9XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJlcSA9IHRoaXMuYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXEsIGZhbHNlKTtcblxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpLnBpcGUodGFwKGV2dCA9PiB7XG4gICAgICB0aGlzLm9uUmVxdWVzdFN1Y2Nlc3MoZXZ0KTtcbiAgICB9KSwgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG5cbiAgICAgIC8vIE5vdCBhIDQwMSBvciBmYWlsIG9uIGxvZ2luIHBhZ2VcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICBpZiAoKGVyci5zdGF0dXMgIT0gQXNpUmVmcmVzaFRva2VuSW5jZXB0b3IuVU5BVVRIT1JJWkVEICYmICFyZXEudXJsLmluY2x1ZGVzKHRoaXMucmVmcmVzaFRva2VuVXJsKSlcbiAgICAgICAgfHwgcmVxLnVybC5pbmNsdWRlcyh0aGlzLmxvZ2luVXJsKSkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgfVxuXG4gICAgICAvLyBGYWlsIHRvIHJlZnJlc2ggdGhlIHRva2VuLCBnbyB0byBsb2dpbiBwYWdlXG4gICAgICBpZiAocmVxLnVybC5pbmNsdWRlcyh0aGlzLnJlZnJlc2hUb2tlblVybCkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoaW5nVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5nb1RvTG9naW5QYWdlKHJlcSwgZXJyKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucmVmcmVzaGluZ1Rva2VuKSB7XG4gICAgICAgIC8vIHJlZnJlc2ggdG9rZW4gaXMgaW4gcHJvZ3Jlc3MsIHdlIHN1YnNjcmliZSB0byB0aGUgdW5sb2NraW5nIGV2ZW50XG4gICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QucGlwZShmaXJzdCgpLCBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLmFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxLCB0cnVlKSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVmcmVzaGluZ1Rva2VuID0gdHJ1ZTtcbiAgICAgICAgLy8gZ2V0IGFuZCBzYXZlIHRoZSByZWZyZXNoIHRva2VuIGFuZCB1bmxvY2sgcmVxdWVzdHNcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFuZFNhdmVSZWZyZXNoVG9rZW4oKS5waXBlKGZpcnN0KCksIHN3aXRjaE1hcCgodG9rZW46IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVmcmVzaGluZ1Rva2VuID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQodG9rZW4pO1xuICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLmFkZEF1dGhlbnRpY2F0aW9uVG9rZW4ocmVxLCB0cnVlKSk7XG4gICAgICAgIH0pLCBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMucmVmcmVzaGluZ1Rva2VuID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5nb1RvTG9naW5QYWdlKHJlcSwgZXJyb3IpXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgb25SZXF1ZXN0U3VjY2VzcyhfZXZlbnQ6IEh0dHBFdmVudDxhbnk+KTogdm9pZCB7IH1cblxuICAvKipcbiAgICogIEFkZCBhdXRoIHRva2VuIHRvIHRoZSByZXF1ZXN0IGhlYWRlclxuICAgKiBAcGFyYW0gcmVxICB0aGUgcmVxdWVzdFxuICAgKiBAcGFyYW0gcmVwbGF5IGlzIHRoZSB0b2tlbiByZXBsYXllZFxuICAgKi9cbiAgYWJzdHJhY3QgYWRkQXV0aGVudGljYXRpb25Ub2tlbihyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIHJlcGxheTogYm9vbGVhbik6IEh0dHBSZXF1ZXN0PGFueT47XG5cbiAgLyoqXG4gICAqICBHZXQgdGhlIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgdXJsXG4gICAqL1xuICBhYnN0cmFjdCBnZXRSZWZyZXNoVG9rZW5VcmwoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgQ2FsbCB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBhbmQgc2F2ZSB0aGUgbmV3IHRva2VuXG4gICAqL1xuICBhYnN0cmFjdCBjYWxsQW5kU2F2ZVJlZnJlc2hUb2tlbigpOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9naW4gZW5kcG9pbnQgdXJsXG4gICAqL1xuICBhYnN0cmFjdCBnZXRMb2dpblVybCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgY3VycmVudCBwYWdlIHRvIHRoZSBsb2dpbiBwYWdlXG4gICAqIEBwYXJhbSByZXEgdGhlIHJlcXVlc3RcbiAgICogQHBhcmFtIGVyciAgdGhlIGVyclxuICAgKi9cbiAgYWJzdHJhY3QgZ29Ub0xvZ2luUGFnZShyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIGVycjogYW55KTogdm9pZDtcbn1cbiJdfQ==