tango-app-ui-auth 3.5.0-beta.8 → 3.5.0-beta.9
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.
- package/esm2022/lib/components/tango-auth-login/tango-auth-login.component.mjs +17 -5
- package/esm2022/lib/guards/auth.guard.mjs +27 -8
- package/esm2022/lib/services/auth.service.mjs +56 -6
- package/fesm2022/tango-app-ui-auth.mjs +97 -16
- package/fesm2022/tango-app-ui-auth.mjs.map +1 -1
- package/lib/guards/auth.guard.d.ts +2 -2
- package/lib/services/auth.service.d.ts +5 -1
- package/package.json +1 -1
@@ -18,14 +18,33 @@ export class AuthGuard {
|
|
18
18
|
}
|
19
19
|
});
|
20
20
|
}
|
21
|
-
canActivate(route, state) {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
// canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
22
|
+
// // const currentUser = localStorage.getItem('isLoggedIn');
|
23
|
+
// const currentUser = localStorage.getItem(this.authlocalStorageToken);
|
24
|
+
// if (currentUser) {
|
25
|
+
// // this.route.navigate(['/manage']);
|
26
|
+
// return true;
|
27
|
+
// } else {
|
28
|
+
// this.route.navigate(['/auth/login']);
|
29
|
+
// return false;
|
30
|
+
// }
|
31
|
+
// }
|
32
|
+
canActivate() {
|
33
|
+
const tokenStr = this.authService.getCookie(this.authlocalStorageToken);
|
34
|
+
if (!tokenStr) {
|
35
|
+
this.route.navigate(['/auth/login']);
|
36
|
+
return false;
|
37
|
+
}
|
38
|
+
try {
|
39
|
+
const tokenData = JSON.parse(tokenStr);
|
40
|
+
const isValid = !!tokenData?.authenticationToken;
|
41
|
+
if (!isValid) {
|
42
|
+
this.route.navigate(['/auth/login']);
|
43
|
+
}
|
44
|
+
return isValid;
|
27
45
|
}
|
28
|
-
|
46
|
+
catch (e) {
|
47
|
+
console.error('Invalid token in cookie', e);
|
29
48
|
this.route.navigate(['/auth/login']);
|
30
49
|
return false;
|
31
50
|
}
|
@@ -37,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
37
56
|
type: Injectable,
|
38
57
|
args: [{ providedIn: 'root' }]
|
39
58
|
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.GlobalStateService }, { type: i3.Router }] });
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWF1dGgvc3JjL2xpYi9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU8zQyxNQUFNLE9BQU8sU0FBUztJQUVBO0lBQWlDO0lBQzNDO0lBRkYscUJBQXFCLENBQUs7SUFDbEMsWUFBb0IsV0FBd0IsRUFBUyxFQUFxQixFQUNoRSxLQUFhO1FBREgsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNoRSxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ2pFO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsMkVBQTJFO0lBRTNFLCtEQUErRDtJQUMvRCwwRUFBMEU7SUFDMUUsdUJBQXVCO0lBQ3ZCLHFEQUFxRDtJQUNyRCx1QkFBdUI7SUFDdkIsYUFBYTtJQUNiLHNEQUFzRDtJQUV0RCxzQkFBc0I7SUFDdEIsTUFBTTtJQUNOLElBQUk7SUFFSixXQUFXO1FBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQztZQUVqRCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUN0QztZQUVELE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQzt3R0E5Q1UsU0FBUzs0R0FBVCxTQUFTLGNBREksTUFBTTs7NEZBQ25CLFNBQVM7a0JBRHJCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoR3VhcmQgIHtcclxuICBwcml2YXRlIGF1dGhsb2NhbFN0b3JhZ2VUb2tlbjphbnk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UscHJpdmF0ZSBnczpHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBSb3V0ZXIpIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbiA9IGAke2Vudi5hcHBWZXJzaW9ufS0ke2Vudi5VU0VSREFUQV9LRVl9YDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8gY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcblxyXG4gIC8vICAgLy8gY29uc3QgY3VycmVudFVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpO1xyXG4gIC8vICAgY29uc3QgY3VycmVudFVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbik7XHJcbiAgLy8gICBpZiAoY3VycmVudFVzZXIpIHtcclxuICAvLyAgICAgICAgICAgLy8gdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9tYW5hZ2UnXSk7ICAgIFxyXG4gIC8vICAgICAgIHJldHVybiB0cnVlOyAgXHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnL2F1dGgvbG9naW4nXSk7ICAgIFxyXG5cclxuICAvLyAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBjYW5BY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRva2VuU3RyID0gdGhpcy5hdXRoU2VydmljZS5nZXRDb29raWUodGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4pO1xyXG5cclxuICAgIGlmICghdG9rZW5TdHIpIHtcclxuICAgICAgdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9hdXRoL2xvZ2luJ10pO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdG9rZW5EYXRhID0gSlNPTi5wYXJzZSh0b2tlblN0cik7XHJcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSAhIXRva2VuRGF0YT8uYXV0aGVudGljYXRpb25Ub2tlbjtcclxuXHJcbiAgICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgIHRoaXMucm91dGUubmF2aWdhdGUoWycvYXV0aC9sb2dpbiddKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGlzVmFsaWQ7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgdG9rZW4gaW4gY29va2llJywgZSk7XHJcbiAgICAgIHRoaXMucm91dGUubmF2aWdhdGUoWycvYXV0aC9sb2dpbiddKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { HttpHeaders } from "@angular/common/http";
|
1
2
|
import { Injectable } from "@angular/core";
|
2
3
|
import { BehaviorSubject, catchError, map, of, throwError, } from "rxjs";
|
3
4
|
import * as i0 from "@angular/core";
|
@@ -33,12 +34,45 @@ export class AuthService {
|
|
33
34
|
}
|
34
35
|
});
|
35
36
|
}
|
37
|
+
base64Encode(str) {
|
38
|
+
return btoa(encodeURIComponent(str));
|
39
|
+
}
|
40
|
+
base64Decode(str) {
|
41
|
+
return decodeURIComponent(atob(str));
|
42
|
+
}
|
43
|
+
setCookie(name, value, days = 1) {
|
44
|
+
const encodedValue = this.base64Encode(value);
|
45
|
+
const expires = new Date(Date.now() + days * 864e5).toUTCString();
|
46
|
+
document.cookie = `${name}=${encodedValue}; expires=${expires}; path=/; Secure; SameSite=Strict`;
|
47
|
+
}
|
48
|
+
getCookie(name) {
|
49
|
+
const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
|
50
|
+
return match ? this.base64Decode(match[2]) : null;
|
51
|
+
}
|
52
|
+
// getHeaders() {
|
53
|
+
// const user: any = JSON.parse(
|
54
|
+
// localStorage.getItem(this.authlocalStorageToken) || "{}"
|
55
|
+
// );
|
56
|
+
// const headers = {
|
57
|
+
// Authorization: "Bearer " + user.authenticationToken,
|
58
|
+
// };
|
59
|
+
// return headers;
|
60
|
+
// }
|
36
61
|
getHeaders() {
|
37
|
-
const
|
38
|
-
|
39
|
-
|
62
|
+
const userTokenStr = this.getCookie(this.authlocalStorageToken);
|
63
|
+
let token = '';
|
64
|
+
if (userTokenStr) {
|
65
|
+
try {
|
66
|
+
const user = JSON.parse(userTokenStr);
|
67
|
+
token = user?.authenticationToken || '';
|
68
|
+
}
|
69
|
+
catch (e) {
|
70
|
+
console.error('Invalid token JSON in cookie');
|
71
|
+
}
|
72
|
+
}
|
73
|
+
return {
|
74
|
+
Authorization: 'Bearer ' + token
|
40
75
|
};
|
41
|
-
return headers;
|
42
76
|
}
|
43
77
|
logout() {
|
44
78
|
localStorage.removeItem(this.authlocalStorageToken);
|
@@ -71,16 +105,32 @@ export class AuthService {
|
|
71
105
|
return this.http.post(`${this.userApiUrl}/login`, data);
|
72
106
|
}
|
73
107
|
userProfileDet() {
|
108
|
+
// debugger
|
74
109
|
const user = localStorage.getItem("user-info");
|
75
110
|
if (user)
|
76
111
|
return of(JSON.parse(user));
|
112
|
+
// console.log(this.getHeaders())
|
113
|
+
const headers = new HttpHeaders(this.getHeaders());
|
77
114
|
return this.http
|
78
|
-
.get(`${this.userApiUrl}/profileV2`, { headers:
|
115
|
+
.get(`${this.userApiUrl}/profileV2`, { headers: headers })
|
79
116
|
.pipe(map((response) => {
|
80
117
|
localStorage.setItem("user-info", JSON.stringify(response.data));
|
81
118
|
return response;
|
82
119
|
}), catchError(this.handleError));
|
83
120
|
}
|
121
|
+
// userProfileDet(): Observable<any> {
|
122
|
+
// const userStr = this.getCookie("user-info");
|
123
|
+
// if (userStr) return of(JSON.parse(userStr));
|
124
|
+
// return this.http
|
125
|
+
// .get(`${this.userApiUrl}/profileV2`, { headers: this.getHeaders() })
|
126
|
+
// .pipe(
|
127
|
+
// map((response: any) => {
|
128
|
+
// this.setCookie("user-info", JSON.stringify(response.data), 7);
|
129
|
+
// return response;
|
130
|
+
// }),
|
131
|
+
// catchError(this.handleError)
|
132
|
+
// );
|
133
|
+
// }
|
84
134
|
getAllCountries() {
|
85
135
|
return this.http.get(`${this.middlewareApiUrl}/get-countries`);
|
86
136
|
}
|
@@ -114,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
114
164
|
providedIn: "root",
|
115
165
|
}]
|
116
166
|
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.HttpClient }, { type: i3.GlobalStateService }] });
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDTCxlQUFlLEVBRWYsVUFBVSxFQUNWLEdBQUcsRUFDSCxFQUFFLEVBQ0YsVUFBVSxHQUNYLE1BQU0sTUFBTSxDQUFDOzs7OztBQU1kLE1BQU0sT0FBTyxXQUFXO0lBYVo7SUFDQTtJQUNBO0lBZFYsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBQy9DLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUNwRCxVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixHQUFXLEVBQUUsQ0FBQztJQUM5QixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLHFCQUFxQixDQUFTO0lBQzlCLHlCQUF5QixDQUFTO0lBQ2xDLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBQ0QsWUFDVSxNQUFjLEVBQ2QsSUFBZ0IsRUFDaEIsRUFBc0I7UUFGdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFFOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNq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LElBQUksQ0FBRTthQUN4RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDN0IsQ0FBQztJQUNKLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxJQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDZixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSwwQkFBMEIsRUFBRSxJQUFJLENBQUU7YUFDekQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzdCLENBQUM7SUFDSixDQUFDO3dHQW5JVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBjYXRjaEVycm9yLFxyXG4gIG1hcCxcclxuICBvZixcclxuICB0aHJvd0Vycm9yLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgYWJvdXRGb3JtRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBwcmljaW5nRm9ybURhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgY3VycmVudFVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG4gIGxlYWRBcGlVcmw6IHN0cmluZyA9IFwiXCI7XHJcbiAgbWlkZGxld2FyZUFwaVVybDogc3RyaW5nID0gXCJcIjtcclxuICB1c2VyQXBpVXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGF1dGhsb2NhbFN0b3JhZ2VUb2tlbjogc3RyaW5nO1xyXG4gIHBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw6IHN0cmluZztcclxuICBnZXQgY3VycmVudFVzZXJWYWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0LnZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMubGVhZEFwaVVybCA9IGVudi5sZWFkQXBpVXJsO1xyXG4gICAgICAgIHRoaXMubWlkZGxld2FyZUFwaVVybCA9IGVudi5taWRkbGV3YXJlQXBpVXJsO1xyXG4gICAgICAgIHRoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybCA9IGVudi5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsO1xyXG4gICAgICAgICh0aGlzLnVzZXJBcGlVcmwgPSBlbnYudXNlckFwaVVybCksXHJcbiAgICAgICAgICAodGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4gPSBgJHtlbnYuYXBwVmVyc2lvbn0tJHtlbnYuVVNFUkRBVEFfS0VZfWApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEhlYWRlcnMoKSB7XHJcbiAgICBjb25zdCB1c2VyOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbikgfHwgXCJ7fVwiXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB1c2VyLmF1dGhlbnRpY2F0aW9uVG9rZW4sXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgbG9nb3V0KCkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4pO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2F1dGgvbG9naW5cIl0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHt9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZW5kU2lnbnVwT3RwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9zaWdudXAtb3RwYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzaWdudXAoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmxlYWRBcGlVcmx9L3NpZ251cGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdENhbGxiYWNrKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9yZXF1ZXN0LWNhbGxiYWNrYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBpc0NsaWVudG5hbWVUYWtlbihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMubGVhZEFwaVVybH0vaXNDbGllbnRFeGlzdGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNFbWFpbFRha2VuKGRhdGE6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmxlYWRBcGlVcmx9L2lzRXhpc3RzP2NvcnBvcmF0ZUVtYWlsPSR7ZGF0YX1gKTtcclxuICB9XHJcblxyXG4gIGlzTW9iaWxlVGFrZW4oZGF0YTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMubGVhZEFwaVVybH0vaXNFeGlzdHM/bW9iaWxlTnVtYmVyPSR7ZGF0YX1gKTtcclxuICB9XHJcblxyXG4gIGdldENvdW50cnlDb2RlcygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9jb3VudHJ5LWNvZGVgKTtcclxuICB9XHJcblxyXG4gIGxvZ2luKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy51c2VyQXBpVXJsfS9sb2dpbmAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgdXNlclByb2ZpbGVEZXQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHVzZXI6IGFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpO1xyXG4gICAgaWYgKHVzZXIpIHJldHVybiBvZihKU09OLnBhcnNlKHVzZXIpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChgJHt0aGlzLnVzZXJBcGlVcmx9L3Byb2ZpbGVWMmAsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInVzZXItaW5mb1wiLCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ291bnRyaWVzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLm1pZGRsZXdhcmVBcGlVcmx9L2dldC1jb3VudHJpZXNgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKHJlczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcihyZXMuZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJpY2luZyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2Jhc2VQcmljaW5nYCxcclxuICAgICAgZGF0YVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZvcmdvdFBhc3N3b3JkVHJpZ2dlcihwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoYCR7dGhpcy51c2VyQXBpVXJsfS9mb3Jnb3QtcGFzc3dvcmQtZW1haWxgLCB7IHBhcmFtczogcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGZvcmdvdFBhc3N3b3JkKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAucG9zdChgJHt0aGlzLnVzZXJBcGlVcmx9L2ZvcmdvdC1wYXNzd29yZC11cGRhdGVgLCBkYXRhIClcclxuICAgIC5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcbiAgdGVybXNBbmRDb25kaXRpb25VcGRhdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgIC5wb3N0KGAke3RoaXMudXNlckFwaVVybH0vdGVybXNBbmRDb25kaXRpb25VcGRhdGVgLCBkYXRhIClcclxuICAgIC5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbn1cclxuIl19
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLFVBQVUsRUFDVixHQUFHLEVBQ0gsRUFBRSxFQUNGLFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFNZCxNQUFNLE9BQU8sV0FBVztJQWFaO0lBQ0E7SUFDQTtJQWRWLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUMvQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDakQsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDcEQsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsR0FBVyxFQUFFLENBQUM7SUFDOUIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixxQkFBcUIsQ0FBUztJQUM5Qix5QkFBeUIsQ0FBUztJQUNsQyxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUNELFlBQ1UsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLEVBQXNCO1FBRnRCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBRTlCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDL0QsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7b0JBQ2hDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQzthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLFlBQVksQ0FBQyxHQUFRO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFRO1FBQzNCLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLE9BQWUsQ0FBQztRQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxZQUFZLGFBQWEsT0FBTyxtQ0FBbUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDcEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNwRCxDQUFDO0lBQ0MsaUJBQWlCO0lBQ2pCLGtDQUFrQztJQUNsQywrREFBK0Q7SUFDL0QsT0FBTztJQUNQLHNCQUFzQjtJQUN0QiwyREFBMkQ7SUFDM0QsT0FBTztJQUVQLG9CQUFvQjtJQUNwQixJQUFJO0lBQ04sVUFBVTtRQUNSLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWYsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSTtnQkFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0QyxLQUFLLEdBQUcsSUFBSSxFQUFFLG1CQUFtQixJQUFJLEVBQUUsQ0FBQzthQUN6QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQzthQUMvQztTQUNGO1FBRUQsT0FBTztZQUNMLGFBQWEsRUFBRSxTQUFTLEdBQUcsS0FBSztTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUNDLE1BQU07UUFDSixZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDcEMsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFTO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSw0QkFBNEIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLDBCQUEwQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFTO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsY0FBYztRQUNaLFdBQVc7UUFDWCxNQUFNLElBQUksR0FBUSxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0QyxpQ0FBaUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUN6RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDcEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqRSxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0lBQ04sQ0FBQztJQUNILHNDQUFzQztJQUN0QyxpREFBaUQ7SUFDakQsaURBQWlEO0lBRWpELHFCQUFxQjtJQUNyQiwyRUFBMkU7SUFDM0UsYUFBYTtJQUNiLGlDQUFpQztJQUNqQyx5RUFBeUU7SUFDekUsMkJBQTJCO0lBQzNCLFlBQVk7SUFDWixxQ0FBcUM7SUFDckMsU0FBUztJQUNULElBQUk7SUFFRixlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVE7UUFDbEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsY0FBYyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFXO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUNuRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDN0IsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2YsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUseUJBQXlCLEVBQUUsSUFBSSxDQUFFO2FBQ3hELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUNELHVCQUF1QixDQUFDLElBQVM7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNmLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLDBCQUEwQixFQUFFLElBQUksQ0FBRTthQUN6RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDN0IsQ0FBQztJQUNKLENBQUM7d0dBcExVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBjYXRjaEVycm9yLFxyXG4gIG1hcCxcclxuICBvZixcclxuICB0aHJvd0Vycm9yLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgYWJvdXRGb3JtRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBwcmljaW5nRm9ybURhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgY3VycmVudFVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG4gIGxlYWRBcGlVcmw6IHN0cmluZyA9IFwiXCI7XHJcbiAgbWlkZGxld2FyZUFwaVVybDogc3RyaW5nID0gXCJcIjtcclxuICB1c2VyQXBpVXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGF1dGhsb2NhbFN0b3JhZ2VUb2tlbjogc3RyaW5nO1xyXG4gIHBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw6IHN0cmluZztcclxuICBnZXQgY3VycmVudFVzZXJWYWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0LnZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMubGVhZEFwaVVybCA9IGVudi5sZWFkQXBpVXJsO1xyXG4gICAgICAgIHRoaXMubWlkZGxld2FyZUFwaVVybCA9IGVudi5taWRkbGV3YXJlQXBpVXJsO1xyXG4gICAgICAgIHRoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybCA9IGVudi5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsO1xyXG4gICAgICAgICh0aGlzLnVzZXJBcGlVcmwgPSBlbnYudXNlckFwaVVybCksXHJcbiAgICAgICAgICAodGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4gPSBgJHtlbnYuYXBwVmVyc2lvbn0tJHtlbnYuVVNFUkRBVEFfS0VZfWApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBiYXNlNjRFbmNvZGUoc3RyOiBhbnkpIHtcclxuICByZXR1cm4gYnRvYShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XHJcbn1cclxuXHJcbnByaXZhdGUgYmFzZTY0RGVjb2RlKHN0cjogYW55KSB7XHJcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhdG9iKHN0cikpO1xyXG59XHJcbnNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlciA9IDEpOiB2b2lkIHtcclxuICBjb25zdCBlbmNvZGVkVmFsdWUgPSB0aGlzLmJhc2U2NEVuY29kZSh2YWx1ZSk7XHJcbiAgY29uc3QgZXhwaXJlcyA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBkYXlzICogODY0ZTUpLnRvVVRDU3RyaW5nKCk7XHJcbiAgZG9jdW1lbnQuY29va2llID0gYCR7bmFtZX09JHtlbmNvZGVkVmFsdWV9OyBleHBpcmVzPSR7ZXhwaXJlc307IHBhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1TdHJpY3RgO1xyXG59XHJcblxyXG5nZXRDb29raWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cChgKF58ICkke25hbWV9PShbXjtdKylgKSk7XHJcbiAgcmV0dXJuIG1hdGNoID8gdGhpcy5iYXNlNjREZWNvZGUobWF0Y2hbMl0pIDogbnVsbDtcclxufVxyXG4gIC8vIGdldEhlYWRlcnMoKSB7XHJcbiAgLy8gICBjb25zdCB1c2VyOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gIC8vICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbikgfHwgXCJ7fVwiXHJcbiAgLy8gICApO1xyXG4gIC8vICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAvLyAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB1c2VyLmF1dGhlbnRpY2F0aW9uVG9rZW4sXHJcbiAgLy8gICB9O1xyXG5cclxuICAvLyAgIHJldHVybiBoZWFkZXJzO1xyXG4gIC8vIH1cclxuZ2V0SGVhZGVycygpOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICBjb25zdCB1c2VyVG9rZW5TdHIgPSB0aGlzLmdldENvb2tpZSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbik7XHJcbiAgbGV0IHRva2VuID0gJyc7XHJcblxyXG4gIGlmICh1c2VyVG9rZW5TdHIpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKHVzZXJUb2tlblN0cik7XHJcbiAgICAgIHRva2VuID0gdXNlcj8uYXV0aGVudGljYXRpb25Ub2tlbiB8fCAnJztcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCB0b2tlbiBKU09OIGluIGNvb2tpZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRva2VuXHJcbiAgfTtcclxufVxyXG4gIGxvZ291dCgpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuYXV0aGxvY2FsU3RvcmFnZVRva2VuKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9hdXRoL2xvZ2luXCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VuZFNpZ251cE90cChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMubWlkZGxld2FyZUFwaVVybH0vc2lnbnVwLW90cGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2lnbnVwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5sZWFkQXBpVXJsfS9zaWdudXBgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHJlcXVlc3RDYWxsYmFjayhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMubWlkZGxld2FyZUFwaVVybH0vcmVxdWVzdC1jYWxsYmFja2AsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNDbGllbnRuYW1lVGFrZW4oZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmxlYWRBcGlVcmx9L2lzQ2xpZW50RXhpc3RgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGlzRW1haWxUYWtlbihkYXRhOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5sZWFkQXBpVXJsfS9pc0V4aXN0cz9jb3Jwb3JhdGVFbWFpbD0ke2RhdGF9YCk7XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVRha2VuKGRhdGE6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmxlYWRBcGlVcmx9L2lzRXhpc3RzP21vYmlsZU51bWJlcj0ke2RhdGF9YCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb3VudHJ5Q29kZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMubWlkZGxld2FyZUFwaVVybH0vY291bnRyeS1jb2RlYCk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudXNlckFwaVVybH0vbG9naW5gLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHVzZXJQcm9maWxlRGV0KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWJ1Z2dlclxyXG4gICAgY29uc3QgdXNlcjogYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIik7XHJcbiAgICBpZiAodXNlcikgcmV0dXJuIG9mKEpTT04ucGFyc2UodXNlcikpO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5nZXRIZWFkZXJzKCkpXHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHRoaXMuZ2V0SGVhZGVycygpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChgJHt0aGlzLnVzZXJBcGlVcmx9L3Byb2ZpbGVWMmAsIHsgaGVhZGVyczogaGVhZGVycyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidXNlci1pbmZvXCIsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpKTtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG4vLyB1c2VyUHJvZmlsZURldCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4vLyAgIGNvbnN0IHVzZXJTdHIgPSB0aGlzLmdldENvb2tpZShcInVzZXItaW5mb1wiKTtcclxuLy8gICBpZiAodXNlclN0cikgcmV0dXJuIG9mKEpTT04ucGFyc2UodXNlclN0cikpO1xyXG5cclxuLy8gICByZXR1cm4gdGhpcy5odHRwXHJcbi8vICAgICAuZ2V0KGAke3RoaXMudXNlckFwaVVybH0vcHJvZmlsZVYyYCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSB9KVxyXG4vLyAgICAgLnBpcGUoXHJcbi8vICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4vLyAgICAgICAgIHRoaXMuc2V0Q29va2llKFwidXNlci1pbmZvXCIsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpLCA3KTtcclxuLy8gICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbi8vICAgICAgIH0pLFxyXG4vLyAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbi8vICAgICApO1xyXG4vLyB9XHJcblxyXG4gIGdldEFsbENvdW50cmllcygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9nZXQtY291bnRyaWVzYCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRocm93RXJyb3IocmVzLmVycm9yKTtcclxuICB9XHJcblxyXG4gIGdldFByaWNpbmcoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsfS9iYXNlUHJpY2luZ2AsXHJcbiAgICAgIGRhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3Jnb3RQYXNzd29yZFRyaWdnZXIocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KGAke3RoaXMudXNlckFwaVVybH0vZm9yZ290LXBhc3N3b3JkLWVtYWlsYCwgeyBwYXJhbXM6IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3Jnb3RQYXNzd29yZChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgLnBvc3QoYCR7dGhpcy51c2VyQXBpVXJsfS9mb3Jnb3QtcGFzc3dvcmQtdXBkYXRlYCwgZGF0YSApXHJcbiAgICAucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG4gIHRlcm1zQW5kQ29uZGl0aW9uVXBkYXRlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAucG9zdChgJHt0aGlzLnVzZXJBcGlVcmx9L3Rlcm1zQW5kQ29uZGl0aW9uVXBkYXRlYCwgZGF0YSApXHJcbiAgICAucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG4gIFxyXG59XHJcbiJdfQ==
|
@@ -11,6 +11,7 @@ import dayjs from 'dayjs';
|
|
11
11
|
import * as CryptoJS from 'crypto-js';
|
12
12
|
import CryptoJS__default from 'crypto-js';
|
13
13
|
import * as i2 from '@angular/common/http';
|
14
|
+
import { HttpHeaders } from '@angular/common/http';
|
14
15
|
import * as i4 from 'tango-app-ui-global';
|
15
16
|
import * as i1 from '@ng-bootstrap/ng-bootstrap';
|
16
17
|
import * as i5 from 'tango-app-ui-shared';
|
@@ -55,12 +56,45 @@ class AuthService {
|
|
55
56
|
}
|
56
57
|
});
|
57
58
|
}
|
59
|
+
base64Encode(str) {
|
60
|
+
return btoa(encodeURIComponent(str));
|
61
|
+
}
|
62
|
+
base64Decode(str) {
|
63
|
+
return decodeURIComponent(atob(str));
|
64
|
+
}
|
65
|
+
setCookie(name, value, days = 1) {
|
66
|
+
const encodedValue = this.base64Encode(value);
|
67
|
+
const expires = new Date(Date.now() + days * 864e5).toUTCString();
|
68
|
+
document.cookie = `${name}=${encodedValue}; expires=${expires}; path=/; Secure; SameSite=Strict`;
|
69
|
+
}
|
70
|
+
getCookie(name) {
|
71
|
+
const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
|
72
|
+
return match ? this.base64Decode(match[2]) : null;
|
73
|
+
}
|
74
|
+
// getHeaders() {
|
75
|
+
// const user: any = JSON.parse(
|
76
|
+
// localStorage.getItem(this.authlocalStorageToken) || "{}"
|
77
|
+
// );
|
78
|
+
// const headers = {
|
79
|
+
// Authorization: "Bearer " + user.authenticationToken,
|
80
|
+
// };
|
81
|
+
// return headers;
|
82
|
+
// }
|
58
83
|
getHeaders() {
|
59
|
-
const
|
60
|
-
|
61
|
-
|
84
|
+
const userTokenStr = this.getCookie(this.authlocalStorageToken);
|
85
|
+
let token = '';
|
86
|
+
if (userTokenStr) {
|
87
|
+
try {
|
88
|
+
const user = JSON.parse(userTokenStr);
|
89
|
+
token = user?.authenticationToken || '';
|
90
|
+
}
|
91
|
+
catch (e) {
|
92
|
+
console.error('Invalid token JSON in cookie');
|
93
|
+
}
|
94
|
+
}
|
95
|
+
return {
|
96
|
+
Authorization: 'Bearer ' + token
|
62
97
|
};
|
63
|
-
return headers;
|
64
98
|
}
|
65
99
|
logout() {
|
66
100
|
localStorage.removeItem(this.authlocalStorageToken);
|
@@ -93,16 +127,32 @@ class AuthService {
|
|
93
127
|
return this.http.post(`${this.userApiUrl}/login`, data);
|
94
128
|
}
|
95
129
|
userProfileDet() {
|
130
|
+
// debugger
|
96
131
|
const user = localStorage.getItem("user-info");
|
97
132
|
if (user)
|
98
133
|
return of(JSON.parse(user));
|
134
|
+
// console.log(this.getHeaders())
|
135
|
+
const headers = new HttpHeaders(this.getHeaders());
|
99
136
|
return this.http
|
100
|
-
.get(`${this.userApiUrl}/profileV2`, { headers:
|
137
|
+
.get(`${this.userApiUrl}/profileV2`, { headers: headers })
|
101
138
|
.pipe(map((response) => {
|
102
139
|
localStorage.setItem("user-info", JSON.stringify(response.data));
|
103
140
|
return response;
|
104
141
|
}), catchError(this.handleError));
|
105
142
|
}
|
143
|
+
// userProfileDet(): Observable<any> {
|
144
|
+
// const userStr = this.getCookie("user-info");
|
145
|
+
// if (userStr) return of(JSON.parse(userStr));
|
146
|
+
// return this.http
|
147
|
+
// .get(`${this.userApiUrl}/profileV2`, { headers: this.getHeaders() })
|
148
|
+
// .pipe(
|
149
|
+
// map((response: any) => {
|
150
|
+
// this.setCookie("user-info", JSON.stringify(response.data), 7);
|
151
|
+
// return response;
|
152
|
+
// }),
|
153
|
+
// catchError(this.handleError)
|
154
|
+
// );
|
155
|
+
// }
|
106
156
|
getAllCountries() {
|
107
157
|
return this.http.get(`${this.middlewareApiUrl}/get-countries`);
|
108
158
|
}
|
@@ -323,11 +373,21 @@ class TangoAuthLoginComponent {
|
|
323
373
|
// this.router.navigateByUrl('/error/403')
|
324
374
|
return;
|
325
375
|
}
|
326
|
-
let loginToken =
|
376
|
+
// let loginToken: any =
|
377
|
+
// localStorage.getItem(this.authlocalStorageToken);
|
378
|
+
// if (loginToken) {
|
379
|
+
// loginToken = JSON.parse(loginToken);
|
380
|
+
// }
|
381
|
+
// localStorage.setItem(
|
382
|
+
// this.authlocalStorageToken,
|
383
|
+
// JSON.stringify(res?.data?.result)
|
384
|
+
// );
|
385
|
+
let loginToken = this.service.getCookie(this.authlocalStorageToken);
|
327
386
|
if (loginToken) {
|
328
387
|
loginToken = JSON.parse(loginToken);
|
329
388
|
}
|
330
|
-
|
389
|
+
// STEP 2: Store new token in cookie
|
390
|
+
this.service.setCookie(this.authlocalStorageToken, JSON.stringify(res?.data?.result), 7);
|
331
391
|
if (!res?.data.termsAndCondition) {
|
332
392
|
this.showTermsAndConditions();
|
333
393
|
}
|
@@ -340,8 +400,10 @@ class TangoAuthLoginComponent {
|
|
340
400
|
this.toastService.getErrorToast('Enter Valid Credentials');
|
341
401
|
}
|
342
402
|
else {
|
343
|
-
|
344
|
-
|
403
|
+
setTimeout(() => {
|
404
|
+
this.credentials.password = originalPassword;
|
405
|
+
this.toastService.getErrorToast('Enter Valid Credentials');
|
406
|
+
}, 100);
|
345
407
|
}
|
346
408
|
},
|
347
409
|
error: (err) => {
|
@@ -1819,14 +1881,33 @@ class AuthGuard {
|
|
1819
1881
|
}
|
1820
1882
|
});
|
1821
1883
|
}
|
1822
|
-
canActivate(route, state) {
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1884
|
+
// canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
1885
|
+
// // const currentUser = localStorage.getItem('isLoggedIn');
|
1886
|
+
// const currentUser = localStorage.getItem(this.authlocalStorageToken);
|
1887
|
+
// if (currentUser) {
|
1888
|
+
// // this.route.navigate(['/manage']);
|
1889
|
+
// return true;
|
1890
|
+
// } else {
|
1891
|
+
// this.route.navigate(['/auth/login']);
|
1892
|
+
// return false;
|
1893
|
+
// }
|
1894
|
+
// }
|
1895
|
+
canActivate() {
|
1896
|
+
const tokenStr = this.authService.getCookie(this.authlocalStorageToken);
|
1897
|
+
if (!tokenStr) {
|
1898
|
+
this.route.navigate(['/auth/login']);
|
1899
|
+
return false;
|
1828
1900
|
}
|
1829
|
-
|
1901
|
+
try {
|
1902
|
+
const tokenData = JSON.parse(tokenStr);
|
1903
|
+
const isValid = !!tokenData?.authenticationToken;
|
1904
|
+
if (!isValid) {
|
1905
|
+
this.route.navigate(['/auth/login']);
|
1906
|
+
}
|
1907
|
+
return isValid;
|
1908
|
+
}
|
1909
|
+
catch (e) {
|
1910
|
+
console.error('Invalid token in cookie', e);
|
1830
1911
|
this.route.navigate(['/auth/login']);
|
1831
1912
|
return false;
|
1832
1913
|
}
|