UNPKG

@cause-911/core

Version:

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

209 lines 17.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'; var HttpTokenWriterInterceptor = /** @class */ (function () { function HttpTokenWriterInterceptor(coreService, handler) { this.http = new HttpClient(handler); this.config = coreService.getConfig(); } /** * @param {?} request * @param {?} next * @return {?} */ HttpTokenWriterInterceptor.prototype.intercept = /** * @param {?} request * @param {?} next * @return {?} */ function (request, next) { var _this = this; this.requestOriginal = request; request = request.clone({ headers: this.addSettings(), }); return next.handle(request).pipe(catchError((/** * @param {?} error * @return {?} */ function (error) { return _this.checkIfWeCanManageError(error).pipe(switchMap((/** * @param {?} handleRequest * @return {?} */ function (handleRequest) { request = handleRequest.clone({ headers: _this.addSettings(), }); return next.handle(request); })), catchError((/** * @param {?} unhandleError * @return {?} */ function (unhandleError) { return throwError(unhandleError); }))); }))); }; /** * @private * @return {?} */ HttpTokenWriterInterceptor.prototype.addSettings = /** * @private * @return {?} */ function () { /** @type {?} */ var headers = this.requestOriginal.headers; /** @type {?} */ var 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 {?} */ HttpTokenWriterInterceptor.prototype.checkIfWeCanManageError = /** * @private * @param {?} error * @return {?} */ function (error) { var _this = this; if (error.status === 401 && this.config.accessToken && this.config.allowRefreshToken) { return this.checkRefreshToken().pipe(map((/** * @param {?} response * @return {?} */ function (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 {?} */ HttpTokenWriterInterceptor.prototype.checkRefreshToken = /** * @private * @return {?} */ function () { var _this = this; return this.postRefreshToken().pipe(map((/** * @param {?} data * @return {?} */ function (data) { _this.config.accessToken = data.accessToken || ''; return data.accessToken ? true : false; })), catchError((/** * @param {?} error * @return {?} */ function (error) { _this.config.accessToken = ''; return of(false); }))); }; /** * @private * @return {?} */ HttpTokenWriterInterceptor.prototype.postRefreshToken = /** * @private * @return {?} */ function () { /** @type {?} */ var host = this.config.refreshLoginURL; /** @type {?} */ var refreshUrl = host; if (!refreshUrl) { refreshUrl = "/api/Authentification/Refresh"; } /** @type {?} */ var token = (/** @type {?} */ ({ accessToken: this.config.accessToken, refreshToken: this.config.refreshToken, })); return this.http.post(refreshUrl, token); }; /** * @private * @return {?} */ HttpTokenWriterInterceptor.prototype.resendAsHTML = /** * @private * @return {?} */ function () { /** @type {?} */ var 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 = function () { return [ { type: CoreService }, { type: HttpBackend } ]; }; return HttpTokenWriterInterceptor; }()); export { HttpTokenWriterInterceptor }; if (false) { /** * @type {?} * @private */ HttpTokenWriterInterceptor.prototype.http; /** * @type {?} * @private */ HttpTokenWriterInterceptor.prototype.config; /** * @type {?} * @private */ HttpTokenWriterInterceptor.prototype.requestOriginal; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC10b2tlbi13cml0ZXItaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2F1c2UtOTExL2NvcmUvIiwic291cmNlcyI6WyJsaWIvc2hhcmVkL2ludGVyY2VwdG9yL2h0dHAtdG9rZW4td3JpdGVyLWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFzQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xHLE9BQU8sRUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUcvQztJQU1JLG9DQUNJLFdBQXdCLEVBQ3hCLE9BQW9CO1FBRXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7Ozs7O0lBRU0sOENBQVM7Ozs7O0lBQWhCLFVBQ0ksT0FBeUIsRUFDekIsSUFBaUI7UUFGckIsaUJBeUJDO1FBckJHLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQzlCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVCLFVBQVU7Ozs7UUFBQyxVQUFBLEtBQUs7WUFDWixPQUFPLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMs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QUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHdCQUFzQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQVMsQ0FBQyxDQUFDO1FBRW5GLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDOUIsWUFBWSxFQUFFLE1BQU07WUFDcEIsT0FBTyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7Z0JBckhKLFVBQVU7Ozs7Z0JBSEgsV0FBVztnQkFKWCxXQUFXOztJQTZIbkIsaUNBQUM7Q0FBQSxBQXRIRCxJQXNIQztTQXJIWSwwQkFBMEI7Ozs7OztJQUNuQywwQ0FBeUI7Ozs7O0lBQ3pCLDRDQUE4Qjs7Ozs7SUFDOUIscURBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cEJhY2tlbmQsIEh0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7Q29yZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUuc2VydmljZSc7XG5pbXBvcnQge1JlZnJlc2hUb2tlbn0gZnJvbSAnLi4vbW9kZWxzL3JlZnJlc2gtdG9rZW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFRva2VuV3JpdGVySW50ZXJjZXB0b3Ige1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlndXJhdGlvbjtcbiAgICBwcml2YXRlIHJlcXVlc3RPcmlnaW5hbDogSHR0cFJlcXVlc3Q8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjb3JlU2VydmljZTogQ29yZVNlcnZpY2UsXG4gICAgICAgIGhhbmRsZXI6IEh0dHBCYWNrZW5kLFxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHAgPSBuZXcgSHR0cENsaWVudChoYW5kbGVyKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb3JlU2VydmljZS5nZXRDb25maWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW50ZXJjZXB0KFxuICAgICAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgICAgICBuZXh0OiBIdHRwSGFuZGxlcixcbiAgICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgICAgIHRoaXMucmVxdWVzdE9yaWdpbmFsID0gcmVxdWVzdDtcbiAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5hZGRTZXR0aW5ncygpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrSWZXZUNhbk1hbmFnZUVycm9yKGVycm9yKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoaGFuZGxlUmVxdWVzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gaGFuZGxlUmVxdWVzdC5jbG9uZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5hZGRTZXR0aW5ncygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IodW5oYW5kbGVFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih1bmhhbmRsZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFNldHRpbmdzKCkge1xuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMucmVxdWVzdE9yaWdpbmFsLmhlYWRlcnM7XG4gICAgICAgIGNvbnN0IGlzRm9ybURhdGEgPSB0aGlzLnJlcXVlc3RPcmlnaW5hbC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGE7XG5cbiAgICAgICAgaWYgKCFoZWFkZXJzLmhhcygnQXV0aG9yaXphdGlvbicpICYmIHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgJHt0aGlzLmNvbmZpZy5hdXRob3JpemF0aW9uVHlwZX0gJHt0aGlzLmNvbmZpZy5hY2Nlc3NUb2tlbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhlYWRlcnMuaGFzKCdYLUNTUkYtVG9rZW4nKSAmJiB0aGlzLmNvbmZpZy5DU1JGVG9rZW4pIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1DU1JGLVRva2VuJywgYCR7dGhpcy5jb25maWcuQ1NSRlRva2VufWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpICYmICFpc0Zvcm1EYXRhKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSR7dGhpcy5jb25maWcuY2hhcnNldH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhlYWRlcnMuaGFzKCdMYW5ndWFnZS1Db2RlJykpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnTGFuZ3VhZ2UtQ29kZScsIHRoaXMuY29uZmlnLmxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lmV2VDYW5NYW5hZ2VFcnJvcihlcnJvcik6IE9ic2VydmFibGU8SHR0cFJlcXVlc3Q8YW55Pj4ge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgJiYgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4gJiYgdGhpcy5jb25maWcuYWxsb3dSZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrUmVmcmVzaFRva2VuKCkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5jb25maWcubG9naW5VUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0T3JpZ2luYWw7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgJiYgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB0aGlzLmNvbmZpZy5sb2dpblVSTDtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmRleE9mKCdIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5yZXNlbmRBc0hUTUwoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1JlZnJlc2hUb2tlbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFJlZnJlc2hUb2tlbigpLnBpcGUoXG4gICAgICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4gPSBkYXRhLmFjY2Vzc1Rva2VuIHx8ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmFjY2Vzc1Rva2VuID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5hY2Nlc3NUb2tlbiA9ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9zdFJlZnJlc2hUb2tlbigpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbj4ge1xuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcucmVmcmVzaExvZ2luVVJMO1xuICAgICAgICBsZXQgcmVmcmVzaFVybCA9IGhvc3Q7XG4gICAgICAgIGlmICghcmVmcmVzaFVybCkge1xuICAgICAgICAgICAgcmVmcmVzaFVybCA9IGAvYXBpL0F1dGhlbnRpZmljYXRpb24vUmVmcmVzaGA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW4gPSB7XG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdGhpcy5jb25maWcuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICByZWZyZXNoVG9rZW46IHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbixcbiAgICAgICAgfSBhcyBSZWZyZXNoVG9rZW47XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFJlZnJlc2hUb2tlbj4ocmVmcmVzaFVybCwgdG9rZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZW5kQXNIVE1MKCkge1xuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMucmVxdWVzdE9yaWdpbmFsLmhlYWRlcnM7XG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgYHRleHQvaHRtbDsgY2hhcnNldD0ke3RoaXMuY29uZmlnLmNoYXJzZXR9YCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdE9yaWdpbmFsLmNsb25lKHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19