ssi-security-commons 0.16.24 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,165 +0,0 @@
1
- /* eslint-disable */
2
- import { Inject, Injectable } from '@angular/core';
3
- import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
4
- import { BehaviorSubject, throwError } from 'rxjs';
5
- import { catchError, filter, map, switchMap, take } from 'rxjs/operators';
6
- import { MessagesService } from './messages.service';
7
- import { LANG, TOKEN } from '../shared/constants';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "./crypto.service";
10
- import * as i2 from "@angular/router";
11
- import * as i3 from "./jwt.service";
12
- import * as i4 from "./session.service";
13
- export class AuthInterceptor {
14
- constructor(cryptoService, environment) {
15
- this.cryptoService = cryptoService;
16
- console.log('AuthInterceptor constructor');
17
- this.environment = environment;
18
- }
19
- intercept(request, next) {
20
- let token;
21
- if (this.environment.production) {
22
- const t = this.cryptoService.encrypt(TOKEN);
23
- const to = window.localStorage.getItem(t);
24
- if (to) {
25
- token = this.cryptoService.decrypt(to);
26
- }
27
- }
28
- else {
29
- token = window.localStorage.getItem(TOKEN);
30
- }
31
- let encrypt = request.headers.get('encrypted');
32
- if (encrypt && encrypt === 'true') {
33
- let body = request.body;
34
- let bodyStr = JSON.stringify(body);
35
- var newBody = {
36
- encrypted: this.cryptoService.encrypt(bodyStr)
37
- };
38
- request = request.clone({
39
- body: newBody
40
- });
41
- }
42
- if (token) {
43
- request = request.clone({
44
- setHeaders: {
45
- Authorization: 'Bearer ' + token,
46
- }
47
- });
48
- }
49
- const l = window.localStorage.getItem(LANG);
50
- if (l && request.url.indexOf(this.environment.authEndPoint) < 0) {
51
- request = request.clone({
52
- headers: request.headers.append('Language', l)
53
- });
54
- }
55
- return next.handle(request);
56
- }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: AuthInterceptor, deps: [{ token: i1.CryptoService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
58
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: AuthInterceptor }); }
59
- }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: AuthInterceptor, decorators: [{
61
- type: Injectable
62
- }], ctorParameters: function () { return [{ type: i1.CryptoService }, { type: undefined, decorators: [{
63
- type: Inject,
64
- args: ['environment']
65
- }] }]; } });
66
- export class ResponseInterceptor {
67
- constructor(injector, router, cryptoService, jwtService, sessionService) {
68
- this.injector = injector;
69
- this.router = router;
70
- this.cryptoService = cryptoService;
71
- this.jwtService = jwtService;
72
- this.sessionService = sessionService;
73
- this.isRefreshing = false;
74
- this.refreshTokenSubject = new BehaviorSubject(null);
75
- setTimeout(() => {
76
- this.messages = this.injector.get(MessagesService);
77
- });
78
- }
79
- intercept(request, next) {
80
- return next.handle(request).pipe(map((event) => {
81
- if (event instanceof HttpResponse) {
82
- let encrypt = request.headers.get('encrypted');
83
- if (encrypt && encrypt === 'true' && event.body.encrypted) {
84
- event = event.clone({ body: this.decryptBody(event.body) });
85
- }
86
- }
87
- return event;
88
- }), catchError(error => {
89
- if (error instanceof HttpErrorResponse) {
90
- console.error(error);
91
- let nerror = error;
92
- if (this.router.url != '/login' && this.router.url.indexOf('/login') < 0) {
93
- if (nerror.status === 401) {
94
- return this.handle401Error(request, next);
95
- }
96
- else {
97
- let skipError = request.headers.get('skipError');
98
- if (skipError && skipError === 'true') {
99
- return throwError(nerror);
100
- }
101
- else {
102
- this.messages?.showErrorMessage(nerror, request);
103
- }
104
- }
105
- }
106
- else {
107
- return throwError(nerror);
108
- }
109
- }
110
- }));
111
- }
112
- decryptBody(body) {
113
- let encrypted = body.encrypted;
114
- let strJson = this.cryptoService.decrypt(encrypted);
115
- return JSON.parse(strJson);
116
- }
117
- handle401Error(request, next) {
118
- if (!this.isRefreshing) {
119
- this.isRefreshing = true;
120
- this.refreshTokenSubject.next(null);
121
- const refreshToken = this.sessionService.getRefreshToken();
122
- if (refreshToken) {
123
- const decoded = this.jwtService.decodeToken(refreshToken);
124
- return this.sessionService.getNewTokenClient(refreshToken, decoded.azp).pipe(switchMap((res) => {
125
- console.log('refresh token response');
126
- console.log(res);
127
- this.isRefreshing = false;
128
- this.sessionService.setToken(res.access_token);
129
- this.sessionService.setRefreshToken(res.refresh_token);
130
- this.refreshTokenSubject.next(res.access_token);
131
- return next.handle(this.addTokenHeader(request, res.access_token));
132
- }), catchError((err) => {
133
- this.isRefreshing = false;
134
- this.sessionService.logout();
135
- this.goToLogin();
136
- return throwError(err);
137
- }));
138
- }
139
- }
140
- else {
141
- return this.refreshTokenSubject.pipe(filter(token => token !== null), take(1), switchMap((token) => next.handle(this.addTokenHeader(request, token))));
142
- }
143
- }
144
- addTokenHeader(request, token) {
145
- return request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });
146
- }
147
- goToLogin() {
148
- this.sessionService.getLoginUrl().subscribe(res => {
149
- console.log(res);
150
- const loginUrl = res.data;
151
- const url = window.location.href;
152
- if (url.indexOf(loginUrl) < 0) {
153
- window.location.href = loginUrl + '?continue=' + encodeURIComponent(url);
154
- }
155
- }, (err) => {
156
- console.error(err);
157
- });
158
- }
159
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ResponseInterceptor, deps: [{ token: i0.Injector }, { token: i2.Router }, { token: i1.CryptoService }, { token: i3.JwtService }, { token: i4.SessionService }], target: i0.ɵɵFactoryTarget.Injectable }); }
160
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ResponseInterceptor }); }
161
- }
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ResponseInterceptor, decorators: [{
163
- type: Injectable
164
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i2.Router }, { type: i1.CryptoService }, { type: i3.JwtService }, { type: i4.SessionService }]; } });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pbnRlcmNlcHRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3NpLXNlY3VyaXR5LWNvbW1vbnMvc3JjL2xpYi9zZXJ2aWNlcy9hdXRoLWludGVyY2VwdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFLTCxpQkFBaUIsRUFDakIsWUFBWSxFQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJckQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBS2xELE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQW9CLGFBQTRCLEVBQXlCLFdBQWdCO1FBQXJFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQXlCLEVBQUUsSUFBaUI7UUFFcEQsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sRUFBRSxHQUFHLE1BQU0s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LENBQUMsSUFBSSxDQUFDO1lBQzFCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBQyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsR0FBRyxZQUFZLEdBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEU7UUFDSCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTFHVSxtQkFBbUI7a0hBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFdmVudCxcbiAgSHR0cEludGVyY2VwdG9yLFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cFJlc3BvbnNlXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi9tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IENyeXB0b1NlcnZpY2UgfSBmcm9tICcuL2NyeXB0by5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4vc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExBTkcsIFRPS0VOIH0gZnJvbSAnLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBKd3RTZXJ2aWNlIH0gZnJvbSAnLi9qd3Quc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgcHJpdmF0ZSBlbnZpcm9ubWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdBdXRoSW50ZXJjZXB0b3IgY29uc3RydWN0b3InKTtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG5cbiAgICBsZXQgdG9rZW47XG4gICAgaWYodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICBjb25zdCB0ID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmVuY3J5cHQoVE9LRU4pO1xuICAgICAgY29uc3QgdG8gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odCk7XG4gICAgICBpZiAodG8pIHtcbiAgICAgICAgdG9rZW4gPSB0aGlzLmNyeXB0b1NlcnZpY2UuZGVjcnlwdCh0byk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFRPS0VOKTtcbiAgICB9XG5cbiAgICBsZXQgZW5jcnlwdCA9IHJlcXVlc3QuaGVhZGVycy5nZXQoJ2VuY3J5cHRlZCcpO1xuICAgIGlmKGVuY3J5cHQgJiYgZW5jcnlwdCA9PT0gJ3RydWUnKXtcbiAgICAgIGxldCBib2R5ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgbGV0IGJvZHlTdHIgPSBKU09OLnN0cmluZ2lmeShib2R5KTtcbiAgICAgIHZhciBuZXdCb2R5ID0ge1xuICAgICAgICBlbmNyeXB0ZWQ6IHRoaXMuY3J5cHRvU2VydmljZS5lbmNyeXB0KGJvZHlTdHIpXG4gICAgICB9XG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICAgIGJvZHk6IG5ld0JvZHlcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgc2V0SGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRva2VuLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBsID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKExBTkcpO1xuICAgIGlmIChsICYmIHJlcXVlc3QudXJsLmluZGV4T2YodGhpcy5lbnZpcm9ubWVudC5hdXRoRW5kUG9pbnQpPDApIHtcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLmFwcGVuZCgnTGFuZ3VhZ2UnLCBsKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgfVxufVxuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXNwb25zZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICBwcml2YXRlIG1lc3NhZ2VzOiBNZXNzYWdlc1NlcnZpY2UgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcmVmcmVzaFRva2VuU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGNyeXB0b1NlcnZpY2U6IENyeXB0b1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBqd3RTZXJ2aWNlOiBKd3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFNlc3Npb25TZXJ2aWNlKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5pbmplY3Rvci5nZXQoTWVzc2FnZXNTZXJ2aWNlKTtcbiAgICB9KVxuICB9XG5cbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgICAgICAgbGV0IGVuY3J5cHQgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdlbmNyeXB0ZWQnKTtcbiAgICAgICAgICAgIGlmKGVuY3J5cHQgJiYgZW5jcnlwdCA9PT0gJ3RydWUnICYmIGV2ZW50LmJvZHkuZW5jcnlwdGVkKXtcbiAgICAgICAgICAgICAgZXZlbnQgPSBldmVudC5jbG9uZSh7Ym9keTogdGhpcy5kZWNyeXB0Qm9keShldmVudC5ib2R5KX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBsZXQgbmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9ICcvbG9naW4nICYmIHRoaXMucm91dGVyLnVybC5pbmRleE9mKCcvbG9naW4nKTwwKSB7XG4gICAgICAgICAgICAgIGlmIChuZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGU0MDFFcnJvcihyZXF1ZXN0LCBuZXh0KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgc2tpcEVycm9yID0gcmVxdWVzdC5oZWFkZXJzLmdldCgnc2tpcEVycm9yJyk7XG4gICAgICAgICAgICAgICAgaWYoc2tpcEVycm9yICYmIHNraXBFcnJvcj09PSd0cnVlJyl7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VzPy5zaG93RXJyb3JNZXNzYWdlKG5lcnJvciwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSkgYXMgT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj47XG4gIH1cblxuICBkZWNyeXB0Qm9keShib2R5OiBhbnkpOiBhbnkge1xuICAgIGxldCBlbmNyeXB0ZWQgPSBib2R5LmVuY3J5cHRlZDtcbiAgICBsZXQgc3RySnNvbiA9IHRoaXMuY3J5cHRvU2VydmljZS5kZWNyeXB0KGVuY3J5cHRlZCk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RySnNvbik7XG4gIH1cblxuXG4gIHByaXZhdGUgaGFuZGxlNDAxRXJyb3IocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCk7XG4gICAgICAgIGlmIChyZWZyZXNoVG9rZW4pe1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuand0U2VydmljZS5kZWNvZGVUb2tlbihyZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0TmV3VG9rZW5DbGllbnQocmVmcmVzaFRva2VuLCBkZWNvZGVkLmF6cCkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZWZyZXNoIHRva2VuIHJlc3BvbnNlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0VG9rZW4ocmVzLmFjY2Vzc190b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0UmVmcmVzaFRva2VuKHJlcy5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQocmVzLmFjY2Vzc190b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLmFkZFRva2VuSGVhZGVyKHJlcXVlc3QsIHJlcy5hY2Nlc3NfdG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nb1RvTG9naW4oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QucGlwZShcbiAgICAgICAgICAgIGZpbHRlcih0b2tlbiA9PiB0b2tlbiAhPT0gbnVsbCksXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh0b2tlbikgPT4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlbkhlYWRlcihyZXF1ZXN0LCB0b2tlbikpKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9rZW5IZWFkZXIocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHsgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIHRva2VuKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ29Ub0xvZ2luKCk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0TG9naW5VcmwoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICBjb25zdCBsb2dpblVybCA9IHJlcy5kYXRhO1xuICAgICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBpZiAodXJsLmluZGV4T2YobG9naW5VcmwpPDApIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsb2dpblVybCArICc/Y29udGludWU9JytlbmNvZGVVUklDb21wb25lbnQodXJsKTtcbiAgICAgIH1cbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSk7XG4gIH1cblxufVxuXG5cblxuXG4iXX0=
@@ -1,41 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as CryptoJS from 'crypto-js';
3
- import * as i0 from "@angular/core";
4
- export class CryptoService {
5
- constructor() {
6
- this.secret = '&E)H@McQfThWmZq4';
7
- this.configuration = {
8
- mode: CryptoJS.mode.ECB
9
- };
10
- const hash = CryptoJS.SHA1(this.secret);
11
- this.key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));
12
- }
13
- encrypt(text) {
14
- if (!text) {
15
- return '';
16
- }
17
- return CryptoJS.AES.encrypt(text, this.key, this.configuration).toString();
18
- }
19
- decrypt(text) {
20
- if (!text) {
21
- return '';
22
- }
23
- return CryptoJS.AES.decrypt(text, this.key, this.configuration).toString(CryptoJS.enc.Utf8);
24
- }
25
- encryptWithSecret(text, secret) {
26
- const hash = CryptoJS.SHA1(secret);
27
- const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));
28
- return CryptoJS.AES.encrypt(text, key, this.configuration).toString();
29
- }
30
- decryptWithSecret(text, secret) {
31
- const hash = CryptoJS.SHA1(secret);
32
- const key = CryptoJS.lib.WordArray.create(hash.words.slice(0, 16 / 4));
33
- return CryptoJS.AES.decrypt(text, key, this.configuration).toString(CryptoJS.enc.Utf8);
34
- }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: CryptoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: CryptoService }); }
37
- }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: CryptoService, decorators: [{
39
- type: Injectable
40
- }], ctorParameters: function () { return []; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zc2ktc2VjdXJpdHktY29tbW9ucy9zcmMvbGliL3NlcnZpY2VzL2NyeXB0by5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7O0FBR3RDLE1BQU0sT0FBTyxhQUFhO0lBTXhCO1FBRlEsV0FBTSxHQUFHLGtCQUFrQixDQUFDO1FBR2xDLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRztTQUN4QixDQUFDO1FBQ0YsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUMsT0FBTyxFQUFFLENBQUM7U0FBQztRQUN2QixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUFDLE9BQU8sRUFBRSxDQUFDO1NBQUM7UUFDdkIsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVksRUFBRSxNQUFjO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsTUFBYztRQUM1QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RixDQUFDOzhHQWxDVSxhQUFhO2tIQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ3J5cHRvU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBhbnk7XG4gIHByaXZhdGUga2V5OiBhbnk7XG4gIHByaXZhdGUgc2VjcmV0ID0gJyZFKUhATWNRZlRoV21acTQnO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuRUNCXG4gICAgfTtcbiAgICBjb25zdCBoYXNoID0gQ3J5cHRvSlMuU0hBMSh0aGlzLnNlY3JldCk7XG4gICAgdGhpcy5rZXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShoYXNoLndvcmRzLnNsaWNlKDAsIDE2IC8gNCkpO1xuICB9XG5cbiAgZW5jcnlwdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCkge3JldHVybiAnJzt9XG4gICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIHRoaXMua2V5LCB0aGlzLmNvbmZpZ3VyYXRpb24pLnRvU3RyaW5nKCk7XG4gIH1cblxuICBkZWNyeXB0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0ZXh0KSB7cmV0dXJuICcnO31cbiAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmRlY3J5cHQodGV4dCwgdGhpcy5rZXksIHRoaXMuY29uZmlndXJhdGlvbikudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuICB9XG5cbiAgZW5jcnlwdFdpdGhTZWNyZXQodGV4dDogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzaCA9IENyeXB0b0pTLlNIQTEoc2VjcmV0KTtcbiAgICBjb25zdCBrZXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShoYXNoLndvcmRzLnNsaWNlKDAsIDE2IC8gNCkpO1xuICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdCh0ZXh0LCBrZXksIHRoaXMuY29uZmlndXJhdGlvbikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGRlY3J5cHRXaXRoU2VjcmV0KHRleHQ6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc2ggPSBDcnlwdG9KUy5TSEExKHNlY3JldCk7XG4gICAgY29uc3Qga2V5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoaGFzaC53b3Jkcy5zbGljZSgwLCAxNiAvIDQpKTtcbiAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmRlY3J5cHQodGV4dCwga2V5LCB0aGlzLmNvbmZpZ3VyYXRpb24pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcbiAgfVxuXG59XG4iXX0=
@@ -1,29 +0,0 @@
1
- /* eslint-disable */
2
- import { Injectable } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class JwtService {
5
- decodeToken(token) {
6
- const _decodeToken = (token) => {
7
- try {
8
- return JSON.parse(atob(token));
9
- }
10
- catch {
11
- return;
12
- }
13
- };
14
- return token
15
- .split('.')
16
- .map(token => _decodeToken(token))
17
- .reduce((acc, curr) => {
18
- if (!!curr)
19
- acc = { ...acc, ...curr };
20
- return acc;
21
- }, Object.create(null));
22
- }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: JwtService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
24
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: JwtService }); }
25
- }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: JwtService, decorators: [{
27
- type: Injectable
28
- }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zc2ktc2VjdXJpdHktY29tbW9ucy9zcmMvbGliL3NlcnZpY2VzL2p3dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sVUFBVTtJQUVkLFdBQVcsQ0FBQyxLQUFhO1FBQzlCLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDckMsSUFBSTtnQkFDRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDaEM7WUFBQyxNQUFNO2dCQUNOLE9BQU87YUFDUjtRQUNILENBQUMsQ0FBQztRQUNGLE9BQU8sS0FBSzthQUNULEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUk7Z0JBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs4R0FqQlUsVUFBVTtrSEFBVixVQUFVOzsyRkFBVixVQUFVO2tCQUR0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEp3dFNlcnZpY2Uge1xuXG4gIHB1YmxpYyBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgY29uc3QgX2RlY29kZVRva2VuID0gKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGF0b2IodG9rZW4pKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdG9rZW5cbiAgICAgIC5zcGxpdCgnLicpXG4gICAgICAubWFwKHRva2VuID0+IF9kZWNvZGVUb2tlbih0b2tlbikpXG4gICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKCEhY3VycikgYWNjID0geyAuLi5hY2MsIC4uLmN1cnIgfTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,248 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- // import { Router } from '@angular/router';
3
- import { AlertComponent } from '../alert/alert.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./session.service";
6
- import * as i2 from "@angular/material/snack-bar";
7
- import * as i3 from "@angular/material/dialog";
8
- export class MessagesService {
9
- constructor(auth,
10
- // private router: Router,
11
- snackBar, dialog, environment) {
12
- this.auth = auth;
13
- this.snackBar = snackBar;
14
- this.dialog = dialog;
15
- this.applicationId = environment.applicationId;
16
- }
17
- // eslint-disable-next-line max-lines-per-function, complexity
18
- showErrorMessage(error, request) {
19
- console.log('error: ', error);
20
- this.registerLog(error, request);
21
- const msgs = this.getInterceptorMessages();
22
- switch (error.status) {
23
- case 302: {
24
- this.messageSnackError(error);
25
- break;
26
- }
27
- case 400: {
28
- if (error.error.error === 'invalid_grant') {
29
- this.goNavigateLogin(msgs);
30
- }
31
- else {
32
- this.showSnackError(error.message, ['snack-error']);
33
- }
34
- break;
35
- }
36
- case 403: {
37
- this.goNavigateLogin(msgs);
38
- break;
39
- }
40
- case 404: {
41
- this.showSnackError(msgs.auth_interceptor.not_found, ['snack-error']);
42
- break;
43
- }
44
- case 409: {
45
- this.messageDialog(error, msgs);
46
- break;
47
- }
48
- case 412: {
49
- this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);
50
- break;
51
- }
52
- case 422: {
53
- this.messageDialog(error, msgs);
54
- break;
55
- }
56
- case 428: {
57
- this.showSnackError(error.error.responseMessage ?? error.error.message, ['snack-error']);
58
- break;
59
- }
60
- case 500: {
61
- this.messageAlertDialog(error, msgs);
62
- break;
63
- }
64
- case 503: {
65
- this.showSnackError(msgs.auth_interceptor.unavailable, ['snack-error']);
66
- break;
67
- }
68
- case -1: {
69
- this.showSnackError(msgs.auth_interceptor.connection_error);
70
- break;
71
- }
72
- case 0: {
73
- this.showSnackError(msgs.auth_interceptor.connection_error);
74
- break;
75
- }
76
- }
77
- }
78
- messageSnackError(error) {
79
- const errorMessage = error.error && error.error.responseMessage ? error.error.responseMessage :
80
- error.error.message ? error.error.message : error.message;
81
- this.showSnackError(errorMessage, ['snack-error']);
82
- }
83
- goNavigateLogin(msgs) {
84
- // if (this.router.url !== '/login') {
85
- this.showSnackError(msgs.auth_interceptor.session_lost, ['snack-error']);
86
- // this.router.navigate(['/login']);
87
- this.auth.destroyCredentials();
88
- this.auth.getLoginUrl().subscribe(res => {
89
- console.log(res);
90
- const loginUrl = res.data;
91
- const url = window.location.href;
92
- if (url.indexOf(loginUrl) < 0) {
93
- window.location.href = loginUrl + '?continue=' + encodeURIComponent(url);
94
- }
95
- }, (err) => {
96
- console.error(err);
97
- });
98
- // }
99
- }
100
- messageAlertDialog(error, msgs) {
101
- console.log(error);
102
- let message = '';
103
- if (error.error.description) {
104
- message = error.error.description;
105
- if (error.error.exception) {
106
- message = message + '\n\n' + msgs.auth_interceptor.code + ': ' + error.error.exception;
107
- }
108
- }
109
- else if (error.error.responseMessage) {
110
- message = error.error.responseMessage;
111
- if (error.error.exceptionId) {
112
- message = message + '\n\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId;
113
- }
114
- }
115
- else if (error.error.message) {
116
- message = error.error.message;
117
- if (error.error.exceptionId) {
118
- message = message + '\n\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId;
119
- }
120
- if (error.error.referenceError) {
121
- message = message + '\n\n' + msgs.auth_interceptor.code + ': ' + error.error.referenceError;
122
- }
123
- }
124
- else if (error.message) {
125
- message = error.message;
126
- if (error.error.exceptionId) {
127
- message = message + '\n\n' + msgs.auth_interceptor.code + ': ' + error.error.exceptionId;
128
- }
129
- }
130
- else {
131
- message = msgs.auth_interceptor.message;
132
- }
133
- this.dialog.open(AlertComponent, {
134
- disableClose: true,
135
- data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }
136
- });
137
- }
138
- messageDialog(error, msgs) {
139
- console.log(error);
140
- let message = '';
141
- if (error.error.description) {
142
- message = error.error.description;
143
- }
144
- else if (error.error.responseMessage) {
145
- message = error.error.responseMessage;
146
- }
147
- else if (error.error.message) {
148
- message = error.error.message;
149
- }
150
- else if (error.message) {
151
- message = error.message;
152
- }
153
- else {
154
- message = msgs.auth_interceptor.message;
155
- }
156
- this.dialog.open(AlertComponent, {
157
- disableClose: true,
158
- data: { title: msgs.auth_interceptor.title, message, icon: 'warn', okText: msgs.auth_interceptor.accept_text }
159
- });
160
- }
161
- showSnackError(message, panelClass = []) {
162
- console.log(message);
163
- setTimeout(() => {
164
- this.snackBar.open(message, undefined, {
165
- duration: 5000,
166
- panelClass,
167
- verticalPosition: 'top'
168
- });
169
- });
170
- }
171
- setInterceptorMessages(message) {
172
- this.interceptorMessages = message;
173
- }
174
- // eslint-disable-next-line max-lines-per-function
175
- getInterceptorMessages() {
176
- if (!this.interceptorMessages) {
177
- let lang = window.localStorage.getItem('LANG');
178
- if (!lang) {
179
- const userLang = navigator.language;
180
- lang = userLang.split('-')[0];
181
- }
182
- const messagesEn = {
183
- auth_interceptor: {
184
- session_lost: 'Session lost, you have to login again.',
185
- not_found: 'Resource not found',
186
- title: 'We are sorry',
187
- message: 'We had a problem trying to process your request.',
188
- code: 'Code',
189
- unavailable: 'Service unavailable, please try again in a few minutes.',
190
- connection_error: 'Could not connect to server, please check your network connection.',
191
- accept_text: 'OK',
192
- cancel_text: 'Cancel'
193
- }
194
- };
195
- const messagesEs = {
196
- auth_interceptor: {
197
- session_lost: 'Su sesión expiró, debe iniciar sesión nuevamente.',
198
- not_found: 'Recurso no encontrado',
199
- title: 'Lo sentimos',
200
- message: 'Tuvimos un problema al tratar de procesar su solicitud.',
201
- code: 'Código',
202
- unavailable: 'Servicio no disponible, inténtelo de nuevo en unos minutos.',
203
- connection_error: 'No se pudo conectar al servidor, verifique su conexión de red.',
204
- accept_text: 'Aceptar',
205
- cancel_text: 'Cancelar'
206
- }
207
- };
208
- if (lang && lang === 'es') {
209
- this.interceptorMessages = messagesEs;
210
- }
211
- else {
212
- this.interceptorMessages = messagesEn;
213
- }
214
- }
215
- return this.interceptorMessages;
216
- }
217
- registerLog(error, request) {
218
- const u = this.auth.getUserdata();
219
- const param = {
220
- httpStatus: error.status,
221
- httpStatusText: error.statusText,
222
- errorMessage: error.message,
223
- currentUrl: window.location.href,
224
- requestUrl: request.urlWithParams ? request.urlWithParams : undefined,
225
- requestBody: request.body ? JSON.stringify(request.body) : undefined,
226
- userId: u ? u.userId : undefined,
227
- applicationId: this.applicationId,
228
- requestDate: new Date()
229
- };
230
- this.auth.registerException(param).subscribe({
231
- next: (response) => {
232
- console.log('registerException', response);
233
- },
234
- error: (err) => {
235
- console.error('registerException', err);
236
- }
237
- });
238
- }
239
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: MessagesService, deps: [{ token: i1.SessionService }, { token: i2.MatSnackBar }, { token: i3.MatDialog }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable }); }
240
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: MessagesService }); }
241
- }
242
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: MessagesService, decorators: [{
243
- type: Injectable
244
- }], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.MatSnackBar }, { type: i3.MatDialog }, { type: undefined, decorators: [{
245
- type: Inject,
246
- args: ['environment']
247
- }] }]; } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NzaS1zZWN1cml0eS1jb21tb25zL3NyYy9saWIvc2VydmljZXMvbWVzc2FnZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCw0Q0FBNEM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7OztBQU0xRCxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUNTLElBQW9CO0lBQzNCLDBCQUEwQjtJQUNsQixRQUFxQixFQUN0QixNQUFpQixFQUNELFdBQWdCO1FBSmhDLFNBQUksR0FBSixJQUFJLENBQWdCO1FBRW5CLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUd4QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDakQsQ0FBQztJQUdELDhEQUE4RDtJQUM5RCxnQkFBZ0IsQ0FBQyxLQUF3QixFQUFFLE9BQXlCO1FBQ2xFLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hELFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQixLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTTthQUNQO1lBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDUixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLGVBQWUsRUFBRTtv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Q0FBQyxDQUFDLFNBQVM7WUFDN0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRTtTQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0MsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXZPVSxlQUFlLG9HQVVoQixhQUFhO2tIQVZaLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQVdOLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzLXBlci1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcXVvdGUtcHJvcHMgKi9cbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbi8vIGltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbXBvbmVudCB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGcm9udEVuZEV4Y2VwdGlvbiB9IGZyb20gJy4uL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VzU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBpbnRlcmNlcHRvck1lc3NhZ2VzOiBhbnk7XG4gIGFwcGxpY2F0aW9uSWQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXV0aDogU2Vzc2lvblNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55XG4gICkge1xuICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IGVudmlyb25tZW50LmFwcGxpY2F0aW9uSWQ7XG4gIH1cblxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uLCBjb21wbGV4aXR5XG4gIHNob3dFcnJvck1lc3NhZ2UoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2Vycm9yOiAnLCBlcnJvcik7XG4gICAgdGhpcy5yZWdpc3RlckxvZyhlcnJvciwgcmVxdWVzdCk7XG4gICAgY29uc3QgbXNnczogYW55ID0gdGhpcy5nZXRJbnRlcmNlcHRvck1lc3NhZ2VzKCk7XG4gICAgc3dpdGNoIChlcnJvci5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMzAyOiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNuYWNrRXJyb3IoZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDAwOiB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvci5lcnJvciA9PT0gJ2ludmFsaWRfZ3JhbnQnKSB7XG4gICAgICAgICAgdGhpcy5nb05hdmlnYXRlTG9naW4obXNncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihlcnJvci5tZXNzYWdlLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MDM6IHtcbiAgICAgICAgdGhpcy5nb05hdmlnYXRlTG9naW4obXNncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MDQ6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3Iubm90X2ZvdW5kLCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgNDA5OiB7XG4gICAgICAgIHRoaXMubWVzc2FnZURpYWxvZyhlcnJvciwgbXNncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MTI6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2U/P2Vycm9yLmVycm9yLm1lc3NhZ2UsIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA0MjI6IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlRGlhbG9nKGVycm9yLCBtc2dzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDQyODoge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Vycm9yKGVycm9yLmVycm9yLnJlc3BvbnNlTWVzc2FnZT8/ZXJyb3IuZXJyb3IubWVzc2FnZSwgWydzbmFjay1lcnJvciddKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDUwMDoge1xuICAgICAgICB0aGlzLm1lc3NhZ2VBbGVydERpYWxvZyhlcnJvciwgbXNncyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSA1MDM6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3IudW5hdmFpbGFibGUsIFsnc25hY2stZXJyb3InXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAtMToge1xuICAgICAgICB0aGlzLnNob3dTbmFja0Vycm9yKG1zZ3MuYXV0aF9pbnRlcmNlcHRvci5jb25uZWN0aW9uX2Vycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDA6IHtcbiAgICAgICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29ubmVjdGlvbl9lcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1lc3NhZ2VTbmFja0Vycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2UgPyBlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2UgOlxuICAgICAgZXJyb3IuZXJyb3IubWVzc2FnZSA/IGVycm9yLmVycm9yLm1lc3NhZ2UgOiBlcnJvci5tZXNzYWdlO1xuICAgIHRoaXMuc2hvd1NuYWNrRXJyb3IoZXJyb3JNZXNzYWdlLCBbJ3NuYWNrLWVycm9yJ10pO1xuICB9XG5cbiAgZ29OYXZpZ2F0ZUxvZ2luKG1zZ3M6IGFueSk6IHZvaWQge1xuICAgIC8vIGlmICh0aGlzLnJvdXRlci51cmwgIT09ICcvbG9naW4nKSB7XG4gICAgdGhpcy5zaG93U25hY2tFcnJvcihtc2dzLmF1dGhfaW50ZXJjZXB0b3Iuc2Vzc2lvbl9sb3N0LCBbJ3NuYWNrLWVycm9yJ10pO1xuICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIHRoaXMuYXV0aC5kZXN0cm95Q3JlZGVudGlhbHMoKTtcbiAgICB0aGlzLmF1dGguZ2V0TG9naW5VcmwoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICBjb25zdCBsb2dpblVybCA9IHJlcy5kYXRhO1xuICAgICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBpZiAodXJsLmluZGV4T2YobG9naW5VcmwpPDApIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsb2dpblVybCArICc/Y29udGludWU9JytlbmNvZGVVUklDb21wb25lbnQodXJsKTtcbiAgICAgIH1cbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgbWVzc2FnZUFsZXJ0RGlhbG9nKGVycm9yOiBhbnksIG1zZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgIGlmIChlcnJvci5lcnJvci5kZXNjcmlwdGlvbikge1xuICAgICAgbWVzc2FnZSA9IGVycm9yLmVycm9yLmRlc2NyaXB0aW9uO1xuICAgICAgaWYgKGVycm9yLmVycm9yLmV4Y2VwdGlvbilcbiAgICAgIHttZXNzYWdlID0gbWVzc2FnZSArICdcXG5cXG4nK21zZ3MuYXV0aF9pbnRlcmNlcHRvci5jb2RlKyc6ICcgKyBlcnJvci5lcnJvci5leGNlcHRpb247fVxuICAgIH0gZWxzZSBpZiAoZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IucmVzcG9uc2VNZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLmVycm9yLmV4Y2VwdGlvbklkKVxuICAgICAge21lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicrbXNncy5hdXRoX2ludGVyY2VwdG9yLmNvZGUrJzogJyArIGVycm9yLmVycm9yLmV4Y2VwdGlvbklkO31cbiAgICB9IGVsc2UgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5lcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLmVycm9yLmV4Y2VwdGlvbklkKVxuICAgICAge21lc3NhZ2UgPSBtZXNzYWdlICsgJ1xcblxcbicrbXNncy5hdXRoX2ludGVyY2VwdG9yLmNvZGUrJzogJyArIGVycm9yLmVycm9yLmV4Y2VwdGlvbklkO31cbiAgICAgIGlmIChlcnJvci5lcnJvci5yZWZlcmVuY2VFcnJvcilcbiAgICAgIHttZXNzYWdlID0gbWVzc2FnZSArICdcXG5cXG4nK21zZ3MuYXV0aF9pbnRlcmNlcHRvci5jb2RlKyc6ICcgKyBlcnJvci5lcnJvci5yZWZlcmVuY2VFcnJvcjt9XG4gICAgfSAgZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IuZXJyb3IuZXhjZXB0aW9uSWQpXG4gICAgICB7bWVzc2FnZSA9IG1lc3NhZ2UgKyAnXFxuXFxuJyttc2dzLmF1dGhfaW50ZXJjZXB0b3IuY29kZSsnOiAnICsgZXJyb3IuZXJyb3IuZXhjZXB0aW9uSWQ7fVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gbXNncy5hdXRoX2ludGVyY2VwdG9yLm1lc3NhZ2U7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nLm9wZW4oQWxlcnRDb21wb25lbnQsIHtcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHt0aXRsZTogbXNncy5hdXRoX2ludGVyY2VwdG9yLnRpdGxlLCBtZXNzYWdlLCBpY29uOid3YXJuJywgb2tUZXh0Om1zZ3MuYXV0aF9pbnRlcmNlcHRvci5hY2NlcHRfdGV4dH1cbiAgICB9KTtcbiAgfVxuXG4gIG1lc3NhZ2VEaWFsb2coZXJyb3I6IGFueSwgbXNnczogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKGVycm9yLmVycm9yLmRlc2NyaXB0aW9uKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IuZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIGlmIChlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5lcnJvci5yZXNwb25zZU1lc3NhZ2U7XG4gICAgfSBlbHNlIGlmIChlcnJvci5lcnJvci5tZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICB9ICBlbHNlIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IG1zZ3MuYXV0aF9pbnRlcmNlcHRvci5tZXNzYWdlO1xuICAgIH1cbiAgICB0aGlzLmRpYWxvZy5vcGVuKEFsZXJ0Q29tcG9uZW50LCB7XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBkYXRhOiB7dGl0bGU6IG1zZ3MuYXV0aF9pbnRlcmNlcHRvci50aXRsZSwgbWVzc2FnZSwgaWNvbjond2FybicsIG9rVGV4dDptc2dzLmF1dGhfaW50ZXJjZXB0b3IuYWNjZXB0X3RleHR9XG4gICAgfSk7XG4gIH1cblxuICBzaG93U25hY2tFcnJvcihtZXNzYWdlOiBhbnksIHBhbmVsQ2xhc3M6IGFueVtdID0gW10pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3MsXG4gICAgICAgIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEludGVyY2VwdG9yTWVzc2FnZXMobWVzc2FnZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcmNlcHRvck1lc3NhZ2VzID0gbWVzc2FnZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uXG4gIGdldEludGVyY2VwdG9yTWVzc2FnZXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJjZXB0b3JNZXNzYWdlcykge1xuICAgICAgbGV0IGxhbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0xBTkcnKTtcbiAgICAgIGlmICghbGFuZykge1xuICAgICAgICBjb25zdCB1c2VyTGFuZyA9IG5hdmlnYXRvci5sYW5ndWFnZTtcbiAgICAgICAgbGFuZyA9IHVzZXJMYW5nLnNwbGl0KCctJylbMF07XG4gICAgICB9XG4gICAgICBjb25zdCBtZXNzYWdlc0VuID0ge1xuICAgICAgICBhdXRoX2ludGVyY2VwdG9yIDoge1xuICAgICAgICAgIHNlc3Npb25fbG9zdCA6J1Nlc3Npb24gbG9zdCwgeW91IGhhdmUgdG8gbG9naW4gYWdhaW4uJyxcbiAgICAgICAgICBub3RfZm91bmQ6ICdSZXNvdXJjZSBub3QgZm91bmQnLFxuICAgICAgICAgIHRpdGxlOiAnV2UgYXJlIHNvcnJ5JyxcbiAgICAgICAgICBtZXNzYWdlOiAnV2UgaGFkIGEgcHJvYmxlbSB0cnlpbmcgdG8gcHJvY2VzcyB5b3VyIHJlcXVlc3QuJyxcbiAgICAgICAgICBjb2RlOidDb2RlJyxcbiAgICAgICAgICB1bmF2YWlsYWJsZTonU2VydmljZSB1bmF2YWlsYWJsZSwgcGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBtaW51dGVzLicsXG4gICAgICAgICAgY29ubmVjdGlvbl9lcnJvcjonQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyLCBwbGVhc2UgY2hlY2sgeW91ciBuZXR3b3JrIGNvbm5lY3Rpb24uJyxcbiAgICAgICAgICBhY2NlcHRfdGV4dDogJ09LJyxcbiAgICAgICAgICBjYW5jZWxfdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzRXMgPSB7XG4gICAgICAgIGF1dGhfaW50ZXJjZXB0b3I6IHtcbiAgICAgICAgICBzZXNzaW9uX2xvc3Q6ICdTdSBzZXNpw7NuIGV4cGlyw7MsIGRlYmUgaW5pY2lhciBzZXNpw7NuIG51ZXZhbWVudGUuJyxcbiAgICAgICAgICBub3RfZm91bmQ6ICdSZWN1cnNvIG5vIGVuY29udHJhZG8nLFxuICAgICAgICAgIHRpdGxlOiAnTG8gc2VudGltb3MnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdUdXZpbW9zIHVuIHByb2JsZW1hIGFsIHRyYXRhciBkZSBwcm9jZXNhciBzdSBzb2xpY2l0dWQuJyxcbiAgICAgICAgICBjb2RlOiAnQ8OzZGlnbycsXG4gICAgICAgICAgdW5hdmFpbGFibGU6ICdTZXJ2aWNpbyBubyBkaXNwb25pYmxlLCBpbnTDqW50ZWxvIGRlIG51ZXZvIGVuIHVub3MgbWludXRvcy4nLFxuICAgICAgICAgIGNvbm5lY3Rpb25fZXJyb3I6ICdObyBzZSBwdWRvIGNvbmVjdGFyIGFsIHNlcnZpZG9yLCB2ZXJpZmlxdWUgc3UgY29uZXhpw7NuIGRlIHJlZC4nLFxuICAgICAgICAgIGFjY2VwdF90ZXh0OiAnQWNlcHRhcicsXG4gICAgICAgICAgY2FuY2VsX3RleHQ6ICdDYW5jZWxhcidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChsYW5nICYmIGxhbmc9PT0nZXMnKSB7XG4gICAgICAgIHRoaXMuaW50ZXJjZXB0b3JNZXNzYWdlcyA9IG1lc3NhZ2VzRXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmludGVyY2VwdG9yTWVzc2FnZXMgPSBtZXNzYWdlc0VuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnRlcmNlcHRvck1lc3NhZ2VzO1xuICB9XG5cblxuICByZWdpc3RlckxvZyhlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pOiB2b2lkIHtcbiAgICBjb25zdCB1ID0gdGhpcy5hdXRoLmdldFVzZXJkYXRhKCk7XG4gICAgY29uc3QgcGFyYW06IEZyb250RW5kRXhjZXB0aW9uID0ge1xuICAgICAgaHR0cFN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgaHR0cFN0YXR1c1RleHQ6IGVycm9yLnN0YXR1c1RleHQsXG4gICAgICBlcnJvck1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICBjdXJyZW50VXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIHJlcXVlc3RVcmw6IHJlcXVlc3QudXJsV2l0aFBhcmFtcz9yZXF1ZXN0LnVybFdpdGhQYXJhbXM6IHVuZGVmaW5lZCxcbiAgICAgIHJlcXVlc3RCb2R5OiByZXF1ZXN0LmJvZHk/SlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KTp1bmRlZmluZWQsXG4gICAgICB1c2VySWQ6IHU/dS51c2VySWQ6IHVuZGVmaW5lZCxcbiAgICAgIGFwcGxpY2F0aW9uSWQ6IHRoaXMuYXBwbGljYXRpb25JZCxcbiAgICAgIHJlcXVlc3REYXRlOiBuZXcgRGF0ZSgpXG4gICAgfTtcbiAgICB0aGlzLmF1dGgucmVnaXN0ZXJFeGNlcHRpb24ocGFyYW0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3JlZ2lzdGVyRXhjZXB0aW9uJywgcmVzcG9uc2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcigncmVnaXN0ZXJFeGNlcHRpb24nLCBlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==