@igo2/auth 16.0.1 → 16.1.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.
- package/esm2022/lib/auth-form/auth-facebook.component.mjs +9 -11
- package/esm2022/lib/auth-form/auth-form.component.mjs +21 -148
- package/esm2022/lib/auth-form/auth-google.component.mjs +9 -11
- package/esm2022/lib/auth-form/auth-intern.component.mjs +11 -75
- package/esm2022/lib/auth-form/auth-microsoft.component.mjs +12 -22
- package/esm2022/lib/auth-form/auth-microsoftb2c.component.mjs +12 -22
- package/esm2022/lib/auth-monitoring/auth-monitoring.provider.mjs +23 -0
- package/esm2022/lib/auth-monitoring/auth-monitoring.service.mjs +53 -0
- package/esm2022/lib/auth-routing.module.mjs +12 -13
- package/esm2022/lib/auth.module.mjs +43 -44
- package/esm2022/lib/shared/admin.guard.mjs +10 -11
- package/esm2022/lib/shared/auth-msalBroadcastServiceb2c.service.mjs +9 -9
- package/esm2022/lib/shared/auth-msalServiceb2c.service..mjs +9 -9
- package/esm2022/lib/shared/auth-storage.interface.mjs +2 -0
- package/esm2022/lib/shared/auth-storage.service.mjs +99 -0
- package/esm2022/lib/shared/auth.guard.mjs +9 -9
- package/esm2022/lib/shared/auth.interceptor.mjs +10 -13
- package/esm2022/lib/shared/auth.interface.mjs +1 -1
- package/esm2022/lib/shared/auth.service.mjs +18 -14
- package/esm2022/lib/shared/index.mjs +4 -3
- package/esm2022/lib/shared/logged.guard.mjs +9 -9
- package/esm2022/lib/shared/profils.guard.mjs +9 -9
- package/esm2022/lib/shared/protected.directive.mjs +9 -9
- package/esm2022/lib/shared/token.interface.mjs +2 -0
- package/esm2022/lib/shared/token.service.mjs +10 -10
- package/esm2022/public_api.mjs +6 -3
- package/fesm2022/igo2-auth.mjs +291 -441
- package/fesm2022/igo2-auth.mjs.map +1 -1
- package/lib/auth-monitoring/auth-monitoring.provider.d.ts +3 -0
- package/lib/auth-monitoring/auth-monitoring.service.d.ts +14 -0
- package/lib/shared/{storage.service.d.ts → auth-storage.service.d.ts} +1 -1
- package/lib/shared/auth.interface.d.ts +3 -5
- package/lib/shared/auth.service.d.ts +3 -1
- package/lib/shared/index.d.ts +3 -2
- package/lib/shared/token.interface.d.ts +5 -0
- package/lib/shared/token.service.d.ts +2 -1
- package/package.json +20 -22
- package/public_api.d.ts +5 -2
- package/esm2022/lib/shared/storage.interface.mjs +0 -2
- package/esm2022/lib/shared/storage.service.mjs +0 -99
- /package/lib/shared/{storage.interface.d.ts → auth-storage.interface.d.ts} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
2
|
import { BaseStorage, ConfigService, StorageScope } from '@igo2/core';
|
|
3
3
|
import { AuthService } from './auth.service';
|
|
4
|
-
import { AuthStorageOptions } from './storage.interface';
|
|
4
|
+
import { AuthStorageOptions } from './auth-storage.interface';
|
|
5
5
|
import { TokenService } from './token.service';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class AuthStorageService extends BaseStorage<AuthStorageOptions> {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BaseUser } from '@igo2/core';
|
|
1
2
|
import { MsalGuardConfiguration } from '@azure/msal-angular';
|
|
2
3
|
import { BrowserAuthOptions } from '@azure/msal-browser';
|
|
3
4
|
export interface AuthInternOptions {
|
|
@@ -80,15 +81,12 @@ export interface MSPMsalGuardConfiguration extends MsalGuardConfiguration {
|
|
|
80
81
|
export interface MSPMsalGuardConfiguration extends MsalGuardConfiguration {
|
|
81
82
|
type: string;
|
|
82
83
|
}
|
|
83
|
-
export interface User {
|
|
84
|
+
export interface User extends BaseUser {
|
|
84
85
|
source?: string;
|
|
85
86
|
sourceId?: string;
|
|
86
|
-
email?: string;
|
|
87
|
-
firstName?: string;
|
|
88
|
-
lastName?: string;
|
|
89
87
|
locale?: string;
|
|
90
88
|
isExpired?: boolean;
|
|
91
|
-
|
|
89
|
+
isAdmin?: boolean;
|
|
92
90
|
defaultContextId?: string;
|
|
93
91
|
}
|
|
94
92
|
export interface IInfosUser {
|
|
@@ -3,6 +3,7 @@ import { Router } from '@angular/router';
|
|
|
3
3
|
import { ConfigService, LanguageService, MessageService } from '@igo2/core';
|
|
4
4
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
5
5
|
import { IInfosUser, User } from './auth.interface';
|
|
6
|
+
import { IgoJwtPayload } from './token.interface';
|
|
6
7
|
import { TokenService } from './token.service';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
export declare class AuthService {
|
|
@@ -19,6 +20,7 @@ export declare class AuthService {
|
|
|
19
20
|
private anonymous;
|
|
20
21
|
private authOptions;
|
|
21
22
|
get hasAuthService(): boolean;
|
|
23
|
+
get user(): User | null;
|
|
22
24
|
constructor(http: HttpClient, tokenService: TokenService, config: ConfigService, languageService: LanguageService, messageService: MessageService, router: Router);
|
|
23
25
|
login(username: string, password: string): Observable<void>;
|
|
24
26
|
loginWithToken(token: string, type: string, infosUser?: IInfosUser): Observable<void>;
|
|
@@ -27,7 +29,7 @@ export declare class AuthService {
|
|
|
27
29
|
logout(): Observable<boolean>;
|
|
28
30
|
isAuthenticated(): boolean;
|
|
29
31
|
getToken(): string;
|
|
30
|
-
decodeToken():
|
|
32
|
+
decodeToken(): IgoJwtPayload | null;
|
|
31
33
|
goToRedirectUrl(): void;
|
|
32
34
|
getUserInfo(): Observable<User>;
|
|
33
35
|
getProfils(): Observable<{
|
package/lib/shared/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './token.service';
|
|
2
|
+
export * from './token.interface';
|
|
2
3
|
export * from './auth.service';
|
|
3
4
|
export * from './auth.interface';
|
|
4
5
|
export * from './auth.interceptor';
|
|
@@ -8,5 +9,5 @@ export * from './auth.guard';
|
|
|
8
9
|
export * from './admin.guard';
|
|
9
10
|
export * from './profils.guard';
|
|
10
11
|
export * from './protected.directive';
|
|
11
|
-
export * from './storage.interface';
|
|
12
|
-
export * from './storage.service';
|
|
12
|
+
export * from './auth-storage.interface';
|
|
13
|
+
export * from './auth-storage.service';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Injector } from '@angular/core';
|
|
2
|
+
import { IgoJwtPayload } from './token.interface';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare class TokenService {
|
|
4
5
|
private injector;
|
|
@@ -8,7 +9,7 @@ export declare class TokenService {
|
|
|
8
9
|
set(token: string): void;
|
|
9
10
|
remove(): void;
|
|
10
11
|
get(): string;
|
|
11
|
-
decode():
|
|
12
|
+
decode(): IgoJwtPayload | null;
|
|
12
13
|
isExpired(): boolean;
|
|
13
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<TokenService, never>;
|
|
14
15
|
static ɵprov: i0.ɵɵInjectableDeclaration<TokenService>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@igo2/auth",
|
|
3
|
-
"version": "16.0
|
|
3
|
+
"version": "16.1.0",
|
|
4
4
|
"description": "IGO Library",
|
|
5
5
|
"author": "IGO Community",
|
|
6
6
|
"keywords": [
|
|
@@ -15,8 +15,19 @@
|
|
|
15
15
|
"bugs": {
|
|
16
16
|
"url": "https://github.com/infra-geo-ouverte/igo2-lib/issues"
|
|
17
17
|
},
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./index.d.ts",
|
|
21
|
+
"esm2022": "./esm2022/igo2-auth.mjs",
|
|
22
|
+
"esm": "./esm2022/igo2-auth.mjs",
|
|
23
|
+
"default": "./fesm2022/igo2-auth.mjs"
|
|
24
|
+
},
|
|
25
|
+
"./package.json": {
|
|
26
|
+
"default": "./package.json"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
18
29
|
"dependencies": {
|
|
19
|
-
"jwt-decode": "^
|
|
30
|
+
"jwt-decode": "^4.0.0",
|
|
20
31
|
"ts-cacheable": "^1.0.6",
|
|
21
32
|
"ts-md5": "^1.3.0",
|
|
22
33
|
"tslib": "^2.6.0"
|
|
@@ -28,29 +39,16 @@
|
|
|
28
39
|
"@angular/forms": "^16.2.5",
|
|
29
40
|
"@angular/material": "^16.2.4",
|
|
30
41
|
"@angular/router": "^16.2.5",
|
|
31
|
-
"@
|
|
32
|
-
"@
|
|
33
|
-
"
|
|
34
|
-
"@
|
|
42
|
+
"@azure/msal-angular": "^3.0.4",
|
|
43
|
+
"@azure/msal-browser": "^3.0.4",
|
|
44
|
+
"@igo2/core": "^16.1.0",
|
|
45
|
+
"@igo2/utils": "^16.1.0",
|
|
46
|
+
"rxjs": "^7.8.0"
|
|
35
47
|
},
|
|
36
48
|
"engines": {
|
|
37
49
|
"node": ">=18.10.0"
|
|
38
50
|
},
|
|
39
51
|
"module": "fesm2022/igo2-auth.mjs",
|
|
40
52
|
"typings": "index.d.ts",
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
"default": "./package.json"
|
|
44
|
-
},
|
|
45
|
-
".": {
|
|
46
|
-
"types": "./index.d.ts",
|
|
47
|
-
"esm2022": "./esm2022/igo2-auth.mjs",
|
|
48
|
-
"esm": "./esm2022/igo2-auth.mjs",
|
|
49
|
-
"default": "./fesm2022/igo2-auth.mjs"
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
"sideEffects": false,
|
|
53
|
-
"scripts": {
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
}
|
|
53
|
+
"sideEffects": false
|
|
54
|
+
}
|
package/public_api.d.ts
CHANGED
|
@@ -9,8 +9,11 @@ export * from './lib/shared/auth.interceptor';
|
|
|
9
9
|
export * from './lib/shared/auth.interface';
|
|
10
10
|
export * from './lib/shared/auth-microsoft.provider';
|
|
11
11
|
export * from './lib/shared/protected.directive';
|
|
12
|
+
export * from './lib/shared/token.interface';
|
|
12
13
|
export * from './lib/shared/token.service';
|
|
13
|
-
export * from './lib/shared/storage.interface';
|
|
14
|
-
export * from './lib/shared/storage.service';
|
|
14
|
+
export * from './lib/shared/auth-storage.interface';
|
|
15
|
+
export * from './lib/shared/auth-storage.service';
|
|
16
|
+
export * from './lib/auth-monitoring/auth-monitoring.provider';
|
|
17
|
+
export * from './lib/auth-monitoring/auth-monitoring.service';
|
|
15
18
|
export * from './lib/auth-routing.module';
|
|
16
19
|
export * from './lib/auth.module';
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9saWIvc2hhcmVkL3N0b3JhZ2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdG9yYWdlT3B0aW9ucyB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdXRoU3RvcmFnZU9wdGlvbnMgZXh0ZW5kcyBTdG9yYWdlT3B0aW9ucyB7XHJcbiAgdXJsOiBzdHJpbmc7XHJcbn1cclxuIl19
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { BaseStorage, ConfigService, StorageScope } from '@igo2/core';
|
|
4
|
-
import { AuthService } from './auth.service';
|
|
5
|
-
import { TokenService } from './token.service';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@igo2/core";
|
|
8
|
-
import * as i2 from "@angular/common/http";
|
|
9
|
-
import * as i3 from "./auth.service";
|
|
10
|
-
import * as i4 from "./token.service";
|
|
11
|
-
export class AuthStorageService extends BaseStorage {
|
|
12
|
-
http;
|
|
13
|
-
authService;
|
|
14
|
-
tokenService;
|
|
15
|
-
constructor(config, http, authService, tokenService) {
|
|
16
|
-
super(config);
|
|
17
|
-
this.http = http;
|
|
18
|
-
this.authService = authService;
|
|
19
|
-
this.tokenService = tokenService;
|
|
20
|
-
this.authService.authenticate$.subscribe((isAuthenticated) => {
|
|
21
|
-
if (isAuthenticated && this.options.url) {
|
|
22
|
-
this.http
|
|
23
|
-
.get(this.options.url)
|
|
24
|
-
.subscribe((userIgo) => {
|
|
25
|
-
if (userIgo && userIgo.preference) {
|
|
26
|
-
for (const key of Object.keys(userIgo.preference)) {
|
|
27
|
-
const value = userIgo.preference[key];
|
|
28
|
-
super.set(key, value);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
set(key, value, scope = StorageScope.LOCAL) {
|
|
36
|
-
if (scope === StorageScope.LOCAL &&
|
|
37
|
-
this.authService.authenticated &&
|
|
38
|
-
this.options.url) {
|
|
39
|
-
const preference = {};
|
|
40
|
-
preference[key] = value;
|
|
41
|
-
this.http.patch(this.options.url, { preference }).subscribe();
|
|
42
|
-
}
|
|
43
|
-
super.set(key, value, scope);
|
|
44
|
-
}
|
|
45
|
-
remove(key, scope = StorageScope.LOCAL) {
|
|
46
|
-
if (scope === StorageScope.LOCAL &&
|
|
47
|
-
this.authService.authenticated &&
|
|
48
|
-
this.options.url) {
|
|
49
|
-
const preference = {};
|
|
50
|
-
preference[key] = undefined;
|
|
51
|
-
this.http.patch(this.options.url, { preference }).subscribe();
|
|
52
|
-
}
|
|
53
|
-
super.remove(key, scope);
|
|
54
|
-
}
|
|
55
|
-
clear(scope = StorageScope.LOCAL) {
|
|
56
|
-
if (scope === StorageScope.LOCAL &&
|
|
57
|
-
this.authService.authenticated &&
|
|
58
|
-
this.options.url) {
|
|
59
|
-
this.http
|
|
60
|
-
.patch(this.options.url, { preference: {} }, {
|
|
61
|
-
params: {
|
|
62
|
-
mergePreference: 'false'
|
|
63
|
-
}
|
|
64
|
-
})
|
|
65
|
-
.subscribe();
|
|
66
|
-
}
|
|
67
|
-
let token;
|
|
68
|
-
if (scope === StorageScope.LOCAL) {
|
|
69
|
-
token = this.tokenService.get();
|
|
70
|
-
}
|
|
71
|
-
super.clear(scope);
|
|
72
|
-
if (token) {
|
|
73
|
-
this.tokenService.set(token);
|
|
74
|
-
}
|
|
75
|
-
if (scope === StorageScope.LOCAL &&
|
|
76
|
-
this.authService.authenticated &&
|
|
77
|
-
this.options.url) {
|
|
78
|
-
this.http
|
|
79
|
-
.get(this.options.url)
|
|
80
|
-
.subscribe((userIgo) => {
|
|
81
|
-
if (userIgo && userIgo.preference) {
|
|
82
|
-
for (const key of Object.keys(userIgo.preference)) {
|
|
83
|
-
const value = userIgo.preference[key];
|
|
84
|
-
super.set(key, value);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
static ɵfac = function AuthStorageService_Factory(t) { return new (t || AuthStorageService)(i0.ɵɵinject(i1.ConfigService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.AuthService), i0.ɵɵinject(i4.TokenService)); };
|
|
91
|
-
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AuthStorageService, factory: AuthStorageService.ɵfac, providedIn: 'root' });
|
|
92
|
-
}
|
|
93
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthStorageService, [{
|
|
94
|
-
type: Injectable,
|
|
95
|
-
args: [{
|
|
96
|
-
providedIn: 'root'
|
|
97
|
-
}]
|
|
98
|
-
}], function () { return [{ type: i1.ConfigService }, { type: i2.HttpClient }, { type: i3.AuthService }, { type: i4.TokenService }]; }, null); })();
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL3NoYXJlZC9zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUsvQyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsV0FBK0I7SUFHM0Q7SUFDQTtJQUNBO0lBSlYsWUFDRSxNQUFxQixFQUNiLElBQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFlBQTBCO1FBRWxDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUpOLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFJbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDM0QsSUFBSSxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxJQUFJO3FCQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztxQkFDckIsU0FBUyxDQUFDLENBQUMsT0FBK0IsRUFBRSxFQUFFO29CQUM3QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO3dCQUNqQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFOzRCQUNqRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN0QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzt5QkFDdkI7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FDRCxHQUFXLEVBQ1gsS0FBeUMsRUFDekMsUUFBc0IsWUFBWSxDQUFDLEtBQUs7UUFFeEMsSUFDRSxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUs7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUNoQjtZQUNBLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUN0QixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUMvRDtRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVcsRUFBRSxRQUFzQixZQUFZLENBQUMsS0FBSztRQUMxRCxJQUNFLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSztZQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ2hCO1lBQ0EsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQy9EO1FBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFzQixZQUFZLENBQUMsS0FBSztRQUM1QyxJQUNFLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSztZQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ2hCO1lBQ0EsSUFBSSxDQUFDLElBQUk7aUJBQ04sS0FBSyxDQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUNoQixFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFDbEI7Z0JBQ0UsTUFBTSxFQUFFO29CQUNOLGVBQWUsRUFBRSxPQUFPO2lCQUN6QjthQUNGLENBQ0Y7aUJBQ0EsU0FBUyxFQUFFLENBQUM7U0FDaEI7UUFFRCxJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLEtBQUssS0FBSyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQ2hDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2pDO1FBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO1FBRUQsSUFDRSxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUs7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUNoQjtZQUNBLElBQUksQ0FBQyxJQUFJO2lCQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztpQkFDckIsU0FBUyxDQUFDLENBQUMsT0FBK0IsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO29CQUNqQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUNqRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDdkI7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQzs0RUFyR1Usa0JBQWtCO2dFQUFsQixrQkFBa0IsV0FBbEIsa0JBQWtCLG1CQUZqQixNQUFNOzt1RkFFUCxrQkFBa0I7Y0FIOUIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmFzZVN0b3JhZ2UsIENvbmZpZ1NlcnZpY2UsIFN0b3JhZ2VTY29wZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTdG9yYWdlT3B0aW9ucyB9IGZyb20gJy4vc3RvcmFnZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tICcuL3Rva2VuLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aFN0b3JhZ2VTZXJ2aWNlIGV4dGVuZHMgQmFzZVN0b3JhZ2U8QXV0aFN0b3JhZ2VPcHRpb25zPiB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb25maWc6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5hdXRoZW50aWNhdGUkLnN1YnNjcmliZSgoaXNBdXRoZW50aWNhdGVkKSA9PiB7XHJcbiAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQgJiYgdGhpcy5vcHRpb25zLnVybCkge1xyXG4gICAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgICAgLmdldCh0aGlzLm9wdGlvbnMudXJsKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodXNlcklnbzogeyBwcmVmZXJlbmNlOiBvYmplY3QgfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcklnbyAmJiB1c2VySWdvLnByZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh1c2VySWdvLnByZWZlcmVuY2UpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHVzZXJJZ28ucHJlZmVyZW5jZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0KFxyXG4gICAga2V5OiBzdHJpbmcsXHJcbiAgICB2YWx1ZTogc3RyaW5nIHwgb2JqZWN0IHwgYm9vbGVhbiB8IG51bWJlcixcclxuICAgIHNjb3BlOiBTdG9yYWdlU2NvcGUgPSBTdG9yYWdlU2NvcGUuTE9DQUxcclxuICApIHtcclxuICAgIGlmIChcclxuICAgICAgc2NvcGUgPT09IFN0b3JhZ2VTY29wZS5MT0NBTCAmJlxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZWQgJiZcclxuICAgICAgdGhpcy5vcHRpb25zLnVybFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHByZWZlcmVuY2UgPSB7fTtcclxuICAgICAgcHJlZmVyZW5jZVtrZXldID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaHR0cC5wYXRjaCh0aGlzLm9wdGlvbnMudXJsLCB7IHByZWZlcmVuY2UgfSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5zZXQoa2V5LCB2YWx1ZSwgc2NvcGUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGtleTogc3RyaW5nLCBzY29wZTogU3RvcmFnZVNjb3BlID0gU3RvcmFnZVNjb3BlLkxPQ0FMKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHNjb3BlID09PSBTdG9yYWdlU2NvcGUuTE9DQUwgJiZcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5hdXRoZW50aWNhdGVkICYmXHJcbiAgICAgIHRoaXMub3B0aW9ucy51cmxcclxuICAgICkge1xyXG4gICAgICBjb25zdCBwcmVmZXJlbmNlID0ge307XHJcbiAgICAgIHByZWZlcmVuY2Vba2V5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5odHRwLnBhdGNoKHRoaXMub3B0aW9ucy51cmwsIHsgcHJlZmVyZW5jZSB9KS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHN1cGVyLnJlbW92ZShrZXksIHNjb3BlKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKHNjb3BlOiBTdG9yYWdlU2NvcGUgPSBTdG9yYWdlU2NvcGUuTE9DQUwpIHtcclxuICAgIGlmIChcclxuICAgICAgc2NvcGUgPT09IFN0b3JhZ2VTY29wZS5MT0NBTCAmJlxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZWQgJiZcclxuICAgICAgdGhpcy5vcHRpb25zLnVybFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5wYXRjaChcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy51cmwsXHJcbiAgICAgICAgICB7IHByZWZlcmVuY2U6IHt9IH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgIG1lcmdlUHJlZmVyZW5jZTogJ2ZhbHNlJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdG9rZW46IHN0cmluZztcclxuICAgIGlmIChzY29wZSA9PT0gU3RvcmFnZVNjb3BlLkxPQ0FMKSB7XHJcbiAgICAgIHRva2VuID0gdGhpcy50b2tlblNlcnZpY2UuZ2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIuY2xlYXIoc2NvcGUpO1xyXG5cclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgc2NvcGUgPT09IFN0b3JhZ2VTY29wZS5MT0NBTCAmJlxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZWQgJiZcclxuICAgICAgdGhpcy5vcHRpb25zLnVybFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgIC5nZXQodGhpcy5vcHRpb25zLnVybClcclxuICAgICAgICAuc3Vic2NyaWJlKCh1c2VySWdvOiB7IHByZWZlcmVuY2U6IG9iamVjdCB9KSA9PiB7XHJcbiAgICAgICAgICBpZiAodXNlcklnbyAmJiB1c2VySWdvLnByZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModXNlcklnby5wcmVmZXJlbmNlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdXNlcklnby5wcmVmZXJlbmNlW2tleV07XHJcbiAgICAgICAgICAgICAgc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
File without changes
|