UNPKG

@cause-911/core

Version:

Run `npm install @cause-911/core --save` to add this library to your project

182 lines 16.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { HttpBackend, HttpClient } from '@angular/common/http'; import { of, throwError } from 'rxjs'; import { catchError, map, switchMap } from 'rxjs/operators'; import { CoreService } from '../../core.service'; export class HttpTokenWriterInterceptor { /** * @param {?} coreService * @param {?} handler */ constructor(coreService, handler) { this.http = new HttpClient(handler); this.config = coreService.getConfig(); } /** * @param {?} request * @param {?} next * @return {?} */ intercept(request, next) { this.requestOriginal = request; request = request.clone({ headers: this.addSettings(), }); return next.handle(request).pipe(catchError((/** * @param {?} error * @return {?} */ error => { return this.checkIfWeCanManageError(error).pipe(switchMap((/** * @param {?} handleRequest * @return {?} */ handleRequest => { request = handleRequest.clone({ headers: this.addSettings(), }); return next.handle(request); })), catchError((/** * @param {?} unhandleError * @return {?} */ unhandleError => { return throwError(unhandleError); }))); }))); } /** * @private * @return {?} */ addSettings() { /** @type {?} */ let headers = this.requestOriginal.headers; /** @type {?} */ const isFormData = this.requestOriginal.body instanceof FormData; if (!headers.has('Authorization') && this.config.accessToken) { headers = headers.set('Authorization', `${this.config.authorizationType} ${this.config.accessToken}`); } if (!headers.has('X-CSRF-Token') && this.config.CSRFToken) { headers = headers.set('X-CSRF-Token', `${this.config.CSRFToken}`); } if (!headers.has('Content-Type') && !isFormData) { headers = headers.set('Content-Type', `application/json; charset=${this.config.charset}`); } if (!headers.has('Language-Code')) { headers = headers.set('Language-Code', this.config.locale); } return headers; } /** * @private * @param {?} error * @return {?} */ checkIfWeCanManageError(error) { if (error.status === 401 && this.config.accessToken && this.config.allowRefreshToken) { return this.checkRefreshToken().pipe(map((/** * @param {?} response * @return {?} */ response => { if (!response) { location.href = this.config.loginURL; } return this.requestOriginal; }))); } else if (error.status === 401 && this.config.accessToken) { location.href = this.config.loginURL; } else if (error.status === 200) { if (error.message && error.message.indexOf('Http failure during parsing for') === 0) { return of(this.resendAsHTML()); } } return throwError(error); } /** * @private * @return {?} */ checkRefreshToken() { return this.postRefreshToken().pipe(map((/** * @param {?} data * @return {?} */ data => { this.config.accessToken = data.accessToken || ''; return data.accessToken ? true : false; })), catchError((/** * @param {?} error * @return {?} */ error => { this.config.accessToken = ''; return of(false); }))); } /** * @private * @return {?} */ postRefreshToken() { /** @type {?} */ const host = this.config.refreshLoginURL; /** @type {?} */ let refreshUrl = host; if (!refreshUrl) { refreshUrl = `/api/Authentification/Refresh`; } /** @type {?} */ const token = (/** @type {?} */ ({ accessToken: this.config.accessToken, refreshToken: this.config.refreshToken, })); return this.http.post(refreshUrl, token); } /** * @private * @return {?} */ resendAsHTML() { /** @type {?} */ let headers = this.requestOriginal.headers; headers = headers.set('Content-Type', `text/html; charset=${this.config.charset}`); return this.requestOriginal.clone({ responseType: 'text', headers: headers, }); } } HttpTokenWriterInterceptor.decorators = [ { type: Injectable } ]; /** @nocollapse */ HttpTokenWriterInterceptor.ctorParameters = () => [ { type: CoreService }, { type: HttpBackend } ]; if (false) { /** * @type {?} * @private */ HttpTokenWriterInterceptor.prototype.http; /** * @type {?} * @private */ HttpTokenWriterInterceptor.prototype.config; /** * @type {?} * @private */ HttpTokenWriterInterceptor.prototype.requestOriginal; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC10b2tlbi13cml0ZXItaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2F1c2UtOTExL2NvcmUvIiwic291cmNlcyI6WyJsaWIvc2hhcmVkL2ludGVyY2VwdG9yL2h0dHAtdG9rZW4td3JpdGVyLWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFzQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xHLE9BQU8sRUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUkvQyxNQUFNLE9BQU8sMEJBQTBCOzs7OztJQUtuQyxZQUNJLFdBQXdCLEVBQ3hCLE9BQW9CO1FBRXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7Ozs7O0lBRU0sU0FBUyxDQUNaLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQzlCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVCLFVBQVU7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FB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QUFjLEVBQUUsc0JBQXNCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVuRixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQzlCLFlBQVksRUFBRSxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztJQUNQLENBQUM7OztZQXJISixVQUFVOzs7O1lBSEgsV0FBVztZQUpYLFdBQVc7Ozs7Ozs7SUFTZiwwQ0FBeUI7Ozs7O0lBQ3pCLDRDQUE4Qjs7Ozs7SUFDOUIscURBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cEJhY2tlbmQsIEh0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7Q29yZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUuc2VydmljZSc7XG5pbXBvcnQge1JlZnJlc2hUb2tlbn0gZnJvbSAnLi4vbW9kZWxzL3JlZnJlc2gtdG9rZW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFRva2VuV3JpdGVySW50ZXJjZXB0b3Ige1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlndXJhdGlvbjtcbiAgICBwcml2YXRlIHJlcXVlc3RPcmlnaW5hbDogSHR0cFJlcXVlc3Q8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjb3JlU2VydmljZTogQ29yZVNlcnZpY2UsXG4gICAgICAgIGhhbmRsZXI6IEh0dHBCYWNrZW5kLFxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHAgPSBuZXcgSHR0cENsaWVudChoYW5kbGVyKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb3JlU2VydmljZS5nZXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW50ZXJjZXB0KFxuICAgICAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgICAgICBuZXh0OiBIdHRwSGFuZGxlcixcbiAgICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgICAgIHRoaXMucmVxdWVzdE9yaWdpbmFsID0gcmVxdWVzdDtcbiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5hZGRTZXR0aW5ncygpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrSWZXZUNhbk1hbmFnZUVycm9yKGVycm9yKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoaGFuZGxlUmVxdWVzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gaGFuZGxlUmVxdWVzdC5jbG9uZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5hZGRTZXR0aW5ncygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IodW5oYW5kbGVFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih1bmhhbmRsZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFNldHRpbmdzKCkge1xuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMucmVxdWVzdE9yaWdpbmFsLmhlYWRlcnM7XG4gICAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSB0aGlzLnJlcXVlc3RPcmlnaW5hbC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGE7XG5cbiAgICAgICAgaWYgKCFoZWFkZXJzLmhhcygnQXV0aG9yaXphdGlvbicpICYmIHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgJHt0aGlzLmNvbmZpZy5hdXRob3JpemF0aW9uVHlwZX0gJHt0aGlzLmNvbmZpZy5hY2Nlc3NUb2tlbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhlYWRlcnMuaGFzKCdYLUNTUkYtVG9rZW4nKSAmJiB0aGlzLmNvbmZpZy5DU1JGVG9rZW4pIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1DU1JGLVRva2VuJywgYCR7dGhpcy5jb25maWcuQ1NSRlRva2VufWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpICYmICFpc0Zvcm1EYXRhKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSR7dGhpcy5jb25maWcuY2hhcnNldH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhlYWRlcnMuaGFzKCdMYW5ndWFnZS1Db2RlJykpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnTGFuZ3VhZ2UtQ29kZScsIHRoaXMuY29uZmlnLmxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lmV2VDYW5NYW5hZ2VFcnJvcihlcnJvcik6IE9ic2VydmFibGU8SHR0cFJlcXVlc3Q8YW55Pj4ge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgJiYgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4gJiYgdGhpcy5jb25maWcuYWxsb3dSZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrUmVmcmVzaFRva2VuKCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5jb25maWcubG9naW5VUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0T3JpZ2luYWw7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgJiYgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB0aGlzLmNvbmZpZy5sb2dpblVSTDtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmRleE9mKCdIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5yZXNlbmRBc0hUTUwoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1JlZnJlc2hUb2tlbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFJlZnJlc2hUb2tlbigpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4gPSBkYXRhLmFjY2Vzc1Rva2VuIHx8ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmFjY2Vzc1Rva2VuID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5hY2Nlc3NUb2tlbiA9ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9zdFJlZnJlc2hUb2tlbigpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbj4ge1xuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcucmVmcmVzaExvZ2luVVJMO1xuICAgICAgICBsZXQgcmVmcmVzaFVybCA9IGhvc3Q7XG4gICAgICAgIGlmICghcmVmcmVzaFVybCkge1xuICAgICAgICAgICAgcmVmcmVzaFVybCA9IGAvYXBpL0F1dGhlbnRpZmljYXRpb24vUmVmcmVzaGA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW4gPSB7XG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdGhpcy5jb25maWcuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICByZWZyZXNoVG9rZW46IHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbixcbiAgICAgICAgfSBhcyBSZWZyZXNoVG9rZW47XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFJlZnJlc2hUb2tlbj4ocmVmcmVzaFVybCwgdG9rZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZW5kQXNIVE1MKCkge1xuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMucmVxdWVzdE9yaWdpbmFsLmhlYWRlcnM7XG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgYHRleHQvaHRtbDsgY2hhcnNldD0ke3RoaXMuY29uZmlnLmNoYXJzZXR9YCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdE9yaWdpbmFsLmNsb25lKHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19