keycloak-angular 16.0.1 → 19.0.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/README.md +245 -151
- package/fesm2022/keycloak-angular.mjs +1324 -51
- package/fesm2022/keycloak-angular.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/lib/directives/has-roles.directive.d.ts +95 -0
- package/lib/features/keycloak.feature.d.ts +43 -0
- package/lib/features/with-refresh-token.feature.d.ts +66 -0
- package/lib/guards/auth.guard.d.ts +75 -0
- package/lib/interceptors/custom-bearer-token.interceptor.d.ts +97 -0
- package/lib/interceptors/include-bearer-token.interceptor.d.ts +111 -0
- package/lib/interceptors/keycloak.interceptor.d.ts +71 -0
- package/lib/{core → legacy/core}/core.module.d.ts +5 -0
- package/lib/legacy/core/interceptors/keycloak-bearer.interceptor.d.ts +53 -0
- package/lib/legacy/core/interfaces/keycloak-event.d.ts +74 -0
- package/lib/legacy/core/interfaces/keycloak-options.d.ts +146 -0
- package/lib/legacy/core/services/keycloak-auth-guard.d.ts +50 -0
- package/lib/legacy/core/services/keycloak.service.d.ts +316 -0
- package/lib/{keycloak-angular.module.d.ts → legacy/keycloak-angular.module.d.ts} +5 -0
- package/lib/legacy/public_api.d.ts +14 -0
- package/lib/provide-keycloak.d.ts +74 -0
- package/lib/services/auto-refresh-token.service.d.ts +47 -0
- package/lib/services/user-activity.service.d.ts +66 -0
- package/lib/signals/keycloak-events-signal.d.ts +118 -0
- package/package.json +5 -7
- package/public_api.d.ts +19 -7
- package/esm2022/keycloak-angular.mjs +0 -2
- package/esm2022/lib/core/core.module.mjs +0 -33
- package/esm2022/lib/core/interceptors/keycloak-bearer.interceptor.mjs +0 -51
- package/esm2022/lib/core/interfaces/keycloak-event.mjs +0 -12
- package/esm2022/lib/core/interfaces/keycloak-options.mjs +0 -2
- package/esm2022/lib/core/services/keycloak-auth-guard.mjs +0 -17
- package/esm2022/lib/core/services/keycloak.service.mjs +0 -204
- package/esm2022/lib/keycloak-angular.module.mjs +0 -15
- package/esm2022/public_api.mjs +0 -7
- package/lib/core/interceptors/keycloak-bearer.interceptor.d.ts +0 -14
- package/lib/core/interfaces/keycloak-event.d.ts +0 -14
- package/lib/core/interfaces/keycloak-options.d.ts +0 -22
- package/lib/core/services/keycloak-auth-guard.d.ts +0 -11
- package/lib/core/services/keycloak.service.d.ts +0 -42
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Mauricio Gemelli Vigolo All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by a MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://github.com/mauriciovigolo/keycloak-angular/blob/main/LICENSE.md
|
|
7
|
+
*/
|
|
8
|
+
import Keycloak, { KeycloakError } from 'keycloak-js';
|
|
9
|
+
import { Signal, InjectionToken } from '@angular/core';
|
|
10
|
+
/**
|
|
11
|
+
* Keycloak event types, as described at the keycloak-js documentation:
|
|
12
|
+
* https://www.keycloak.org/docs/latest/securing_apps/index.html#callback-events
|
|
13
|
+
*/
|
|
14
|
+
export declare enum KeycloakEventType {
|
|
15
|
+
/**
|
|
16
|
+
* Keycloak Angular is not initialized yet. This is the initial state applied to the Keycloak Event Signal.
|
|
17
|
+
* Note: This event is only emitted in Keycloak Angular, it is not part of the keycloak-js.
|
|
18
|
+
*/
|
|
19
|
+
KeycloakAngularNotInitialized = "KeycloakAngularNotInitialized",
|
|
20
|
+
/**
|
|
21
|
+
* Keycloak Angular is in the process of initializing the providers and Keycloak Instance.
|
|
22
|
+
* Note: This event is only emitted in Keycloak Angular, it is not part of the keycloak-js.
|
|
23
|
+
*/
|
|
24
|
+
KeycloakAngularInit = "KeycloakAngularInit",
|
|
25
|
+
/**
|
|
26
|
+
* Triggered if there is an error during authentication.
|
|
27
|
+
*/
|
|
28
|
+
AuthError = "AuthError",
|
|
29
|
+
/**
|
|
30
|
+
* Triggered when the user logs out. This event will only be triggered
|
|
31
|
+
* if the session status iframe is enabled or in Cordova mode.
|
|
32
|
+
*/
|
|
33
|
+
AuthLogout = "AuthLogout",
|
|
34
|
+
/**
|
|
35
|
+
* Triggered if an error occurs while attempting to refresh the token.
|
|
36
|
+
*/
|
|
37
|
+
AuthRefreshError = "AuthRefreshError",
|
|
38
|
+
/**
|
|
39
|
+
* Triggered when the token is successfully refreshed.
|
|
40
|
+
*/
|
|
41
|
+
AuthRefreshSuccess = "AuthRefreshSuccess",
|
|
42
|
+
/**
|
|
43
|
+
* Triggered when a user is successfully authenticated.
|
|
44
|
+
*/
|
|
45
|
+
AuthSuccess = "AuthSuccess",
|
|
46
|
+
/**
|
|
47
|
+
* Triggered when the Keycloak adapter has completed initialization.
|
|
48
|
+
*/
|
|
49
|
+
Ready = "Ready",
|
|
50
|
+
/**
|
|
51
|
+
* Triggered when the access token expires. Depending on the flow, you may
|
|
52
|
+
* need to use `updateToken` to refresh the token or redirect the user
|
|
53
|
+
* to the login screen.
|
|
54
|
+
*/
|
|
55
|
+
TokenExpired = "TokenExpired",
|
|
56
|
+
/**
|
|
57
|
+
* Triggered when an authentication action is requested by the application.
|
|
58
|
+
*/
|
|
59
|
+
ActionUpdate = "ActionUpdate"
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Arguments for the `Ready` event, representing the authentication state.
|
|
63
|
+
*/
|
|
64
|
+
export type ReadyArgs = boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Arguments for the `ActionUpdate` event, providing information about the status
|
|
67
|
+
* and optional details about the action.
|
|
68
|
+
*/
|
|
69
|
+
export type ActionUpdateArgs = {
|
|
70
|
+
/**
|
|
71
|
+
* Status of the action, indicating whether it was successful, encountered an error,
|
|
72
|
+
* or was cancelled.
|
|
73
|
+
*/
|
|
74
|
+
status: 'success' | 'error' | 'cancelled';
|
|
75
|
+
/**
|
|
76
|
+
* Optional name or identifier of the action performed.
|
|
77
|
+
*/
|
|
78
|
+
action?: string;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Arguments for the `AuthError` event, providing detailed error information.
|
|
82
|
+
*/
|
|
83
|
+
export type AuthErrorArgs = KeycloakError;
|
|
84
|
+
type EventArgs = ReadyArgs | ActionUpdateArgs | AuthErrorArgs;
|
|
85
|
+
/**
|
|
86
|
+
* Helper function to typecast unknown arguments into a specific Keycloak event type.
|
|
87
|
+
*
|
|
88
|
+
* @template T - The expected argument type.
|
|
89
|
+
* @param args - The arguments to be cast.
|
|
90
|
+
* @returns The arguments typed as `T`.
|
|
91
|
+
*/
|
|
92
|
+
export declare const typeEventArgs: <T extends EventArgs>(args: unknown) => T;
|
|
93
|
+
/**
|
|
94
|
+
* Structure of a Keycloak event, including its type and optional arguments.
|
|
95
|
+
*/
|
|
96
|
+
export interface KeycloakEvent {
|
|
97
|
+
/**
|
|
98
|
+
* Event type as described at {@link KeycloakEventType}.
|
|
99
|
+
*/
|
|
100
|
+
type: KeycloakEventType;
|
|
101
|
+
/**
|
|
102
|
+
* Arguments from the keycloak-js event function.
|
|
103
|
+
*/
|
|
104
|
+
args?: unknown;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Creates a signal to manage Keycloak events, initializing the signal with
|
|
108
|
+
* appropriate default values or values from a given Keycloak instance.
|
|
109
|
+
*
|
|
110
|
+
* @param keycloak - An instance of the Keycloak client.
|
|
111
|
+
* @returns A `Signal` that tracks the current Keycloak event state.
|
|
112
|
+
*/
|
|
113
|
+
export declare const createKeycloakSignal: (keycloak?: Keycloak) => import("@angular/core").WritableSignal<KeycloakEvent>;
|
|
114
|
+
/**
|
|
115
|
+
* Injection token for the Keycloak events signal, used for dependency injection.
|
|
116
|
+
*/
|
|
117
|
+
export declare const KEYCLOAK_EVENT_SIGNAL: InjectionToken<Signal<KeycloakEvent>>;
|
|
118
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "keycloak-angular",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "19.0.0",
|
|
4
4
|
"description": "Easy Keycloak setup for Angular applications",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
"oidc"
|
|
27
27
|
],
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"@angular/common": "^
|
|
30
|
-
"@angular/core": "^
|
|
31
|
-
"@angular/router": "^
|
|
32
|
-
"keycloak-js": "^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24 || ^25"
|
|
29
|
+
"@angular/common": "^19",
|
|
30
|
+
"@angular/core": "^19",
|
|
31
|
+
"@angular/router": "^19",
|
|
32
|
+
"keycloak-js": "^18 || ^19 || ^20 || ^21 || ^22 || ^23 || ^24 || ^25 || ^26"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"tslib": "^2.3.1"
|
|
@@ -42,8 +42,6 @@
|
|
|
42
42
|
},
|
|
43
43
|
".": {
|
|
44
44
|
"types": "./index.d.ts",
|
|
45
|
-
"esm2022": "./esm2022/keycloak-angular.mjs",
|
|
46
|
-
"esm": "./esm2022/keycloak-angular.mjs",
|
|
47
45
|
"default": "./fesm2022/keycloak-angular.mjs"
|
|
48
46
|
}
|
|
49
47
|
},
|
package/public_api.d.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Mauricio Gemelli Vigolo All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by a MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://github.com/mauriciovigolo/keycloak-angular/blob/main/LICENSE.md
|
|
7
|
+
*/
|
|
8
|
+
export * from './lib/legacy/public_api';
|
|
9
|
+
export * from './lib/directives/has-roles.directive';
|
|
10
|
+
export * from './lib/features/keycloak.feature';
|
|
11
|
+
export * from './lib/features/with-refresh-token.feature';
|
|
12
|
+
export * from './lib/guards/auth.guard';
|
|
13
|
+
export * from './lib/interceptors/custom-bearer-token.interceptor';
|
|
14
|
+
export * from './lib/interceptors/include-bearer-token.interceptor';
|
|
15
|
+
export * from './lib/interceptors/keycloak.interceptor';
|
|
16
|
+
export * from './lib/services/user-activity.service';
|
|
17
|
+
export * from './lib/services/auto-refresh-token.service';
|
|
18
|
+
export * from './lib/signals/keycloak-events-signal';
|
|
19
|
+
export * from './lib/provide-keycloak';
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './public_api';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2tleWNsb2FrLWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
4
|
-
import { KeycloakService } from './services/keycloak.service';
|
|
5
|
-
import { KeycloakBearerInterceptor } from './interceptors/keycloak-bearer.interceptor';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class CoreModule {
|
|
8
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: CoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.3", ngImport: i0, type: CoreModule, imports: [CommonModule] }); }
|
|
10
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: CoreModule, providers: [
|
|
11
|
-
KeycloakService,
|
|
12
|
-
{
|
|
13
|
-
provide: HTTP_INTERCEPTORS,
|
|
14
|
-
useClass: KeycloakBearerInterceptor,
|
|
15
|
-
multi: true
|
|
16
|
-
}
|
|
17
|
-
], imports: [CommonModule] }); }
|
|
18
|
-
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: CoreModule, decorators: [{
|
|
20
|
-
type: NgModule,
|
|
21
|
-
args: [{
|
|
22
|
-
imports: [CommonModule],
|
|
23
|
-
providers: [
|
|
24
|
-
KeycloakService,
|
|
25
|
-
{
|
|
26
|
-
provide: HTTP_INTERCEPTORS,
|
|
27
|
-
useClass: KeycloakBearerInterceptor,
|
|
28
|
-
multi: true
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
}]
|
|
32
|
-
}] });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIvY29yZS9jb3JlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBYXZGLE1BQU0sT0FBTyxVQUFVOzhHQUFWLFVBQVU7K0dBQVYsVUFBVSxZQVZYLFlBQVk7K0dBVVgsVUFBVSxhQVRWO1lBQ1QsZUFBZTtZQUNmO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixZQVJTLFlBQVk7OzJGQVVYLFVBQVU7a0JBWHRCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixTQUFTLEVBQUU7d0JBQ1QsZUFBZTt3QkFDZjs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixRQUFRLEVBQUUseUJBQXlCOzRCQUNuQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYWluL0xJQ0VOU0UubWRcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvciB9IGZyb20gJy4vaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICBLZXljbG9ha1NlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICB1c2VDbGFzczogS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvcixcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvcmVNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { combineLatest, from, of } from 'rxjs';
|
|
3
|
-
import { mergeMap } from 'rxjs/operators';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../services/keycloak.service";
|
|
6
|
-
export class KeycloakBearerInterceptor {
|
|
7
|
-
constructor(keycloak) {
|
|
8
|
-
this.keycloak = keycloak;
|
|
9
|
-
}
|
|
10
|
-
async conditionallyUpdateToken(req) {
|
|
11
|
-
if (this.keycloak.shouldUpdateToken(req)) {
|
|
12
|
-
return await this.keycloak.updateToken();
|
|
13
|
-
}
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
isUrlExcluded({ method, url }, { urlPattern, httpMethods }) {
|
|
17
|
-
const httpTest = httpMethods.length === 0 ||
|
|
18
|
-
httpMethods.join().indexOf(method.toUpperCase()) > -1;
|
|
19
|
-
const urlTest = urlPattern.test(url);
|
|
20
|
-
return httpTest && urlTest;
|
|
21
|
-
}
|
|
22
|
-
intercept(req, next) {
|
|
23
|
-
const { enableBearerInterceptor, excludedUrls } = this.keycloak;
|
|
24
|
-
if (!enableBearerInterceptor) {
|
|
25
|
-
return next.handle(req);
|
|
26
|
-
}
|
|
27
|
-
const shallPass = !this.keycloak.shouldAddToken(req) ||
|
|
28
|
-
excludedUrls.findIndex((item) => this.isUrlExcluded(req, item)) > -1;
|
|
29
|
-
if (shallPass) {
|
|
30
|
-
return next.handle(req);
|
|
31
|
-
}
|
|
32
|
-
return combineLatest([
|
|
33
|
-
from(this.conditionallyUpdateToken(req)),
|
|
34
|
-
of(this.keycloak.isLoggedIn())
|
|
35
|
-
]).pipe(mergeMap(([_, isLoggedIn]) => isLoggedIn
|
|
36
|
-
? this.handleRequestWithTokenHeader(req, next)
|
|
37
|
-
: next.handle(req)));
|
|
38
|
-
}
|
|
39
|
-
handleRequestWithTokenHeader(req, next) {
|
|
40
|
-
return this.keycloak.addTokenToHeader(req.headers).pipe(mergeMap((headersWithBearer) => {
|
|
41
|
-
const kcReq = req.clone({ headers: headersWithBearer });
|
|
42
|
-
return next.handle(kcReq);
|
|
43
|
-
}));
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: KeycloakBearerInterceptor, deps: [{ token: i1.KeycloakService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
46
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: KeycloakBearerInterceptor }); }
|
|
47
|
-
}
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: KeycloakBearerInterceptor, decorators: [{
|
|
49
|
-
type: Injectable
|
|
50
|
-
}], ctorParameters: () => [{ type: i1.KeycloakService }] });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYmVhcmVyLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2V5Y2xvYWstYW5ndWxhci9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUTNDLE9BQU8sRUFBYyxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVkxQyxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO0lBQUcsQ0FBQztJQVN6QyxLQUFLLENBQUMsd0JBQXdCLENBQ3BDLEdBQXlCO1FBRXpCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFXTyxhQUFhLENBQ25CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBd0IsRUFDckMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFvQjtRQUU3QyxNQUFNLFFBQVEsR0FDWixXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDeEIsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLE9BQU8sUUFBUSxJQUFJLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBU00sU0FBUyxDQUNkLEdBQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQ2IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7WUFDbEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQy9CLENBQUMsQ0FBQyxJQUFJLENBQ0wsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUMzQixVQUFVO1lBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUNyQixDQUNGLENBQUM7SUFDSixDQUFDO0lBUU8sNEJBQTRCLENBQ2xDLEdBQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNyRCxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0E3RlUseUJBQXlCO2tIQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL2Jsb2IvbWFpbi9MSUNFTlNFLm1kXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSHR0cEludGVyY2VwdG9yLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXIsXG4gIEh0dHBFdmVudFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5pbXBvcnQgeyBFeGNsdWRlZFVybFJlZ2V4IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcblxuLyoqXG4gKiBUaGlzIGludGVyY2VwdG9yIGluY2x1ZGVzIHRoZSBiZWFyZXIgYnkgZGVmYXVsdCBpbiBhbGwgSHR0cENsaWVudCByZXF1ZXN0cy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBleGNsdWRlIHNvbWUgVVJMcyBmcm9tIGFkZGluZyB0aGUgYmVhcmVyLCBwbGVhc2UsIHRha2UgYSBsb29rXG4gKiBhdCB0aGUge0BsaW5rIEtleWNsb2FrT3B0aW9uc30gYmVhcmVyRXhjbHVkZWRVcmxzIHByb3BlcnR5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSkge31cblxuICAvKipcbiAgICogQ2FsbHMgdG8gdXBkYXRlIHRoZSBrZXljbG9hayB0b2tlbiBpZiB0aGUgcmVxdWVzdCBzaG91bGQgdXBkYXRlIHRoZSB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHJlcSBodHRwIHJlcXVlc3QgZnJvbSBAYW5ndWxhciBodHRwIG1vZHVsZS5cbiAgICogQHJldHVybnNcbiAgICogQSBwcm9taXNlIGJvb2xlYW4gZm9yIHRoZSB0b2tlbiB1cGRhdGUgb3Igbm9vcCByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbmRpdGlvbmFsbHlVcGRhdGVUb2tlbihcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmtleWNsb2FrLnNob3VsZFVwZGF0ZVRva2VuKHJlcSkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmtleWNsb2FrLnVwZGF0ZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQ2hlY2tzIGlmIHRoZSB1cmwgaXMgZXhjbHVkZWQgZnJvbSBoYXZpbmcgdGhlIEJlYXJlciBBdXRob3JpemF0aW9uXG4gICAqIGhlYWRlciBhZGRlZC5cbiAgICpcbiAgICogQHBhcmFtIHJlcSBodHRwIHJlcXVlc3QgZnJvbSBAYW5ndWxhciBodHRwIG1vZHVsZS5cbiAgICogQHBhcmFtIGV4Y2x1ZGVkVXJsUmVnZXggY29udGFpbnMgdGhlIHVybCBwYXR0ZXJuIGFuZCB0aGUgaHR0cCBtZXRob2RzLFxuICAgKiBleGNsdWRlZCBmcm9tIGFkZGluZyB0aGUgYmVhcmVyIGF0IHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqL1xuICBwcml2YXRlIGlzVXJsRXhjbHVkZWQoXG4gICAgeyBtZXRob2QsIHVybCB9OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgICB7IHVybFBhdHRlcm4sIGh0dHBNZXRob2RzIH06IEV4Y2x1ZGVkVXJsUmVnZXhcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaHR0cFRlc3QgPVxuICAgICAgaHR0cE1ldGhvZHMubGVuZ3RoID09PSAwIHx8XG4gICAgICBodHRwTWV0aG9kcy5qb2luKCkuaW5kZXhPZihtZXRob2QudG9VcHBlckNhc2UoKSkgPiAtMTtcblxuICAgIGNvbnN0IHVybFRlc3QgPSB1cmxQYXR0ZXJuLnRlc3QodXJsKTtcblxuICAgIHJldHVybiBodHRwVGVzdCAmJiB1cmxUZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVyY2VwdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdCB1cmwgbWF0Y2hlcyB0aGUgZXhjbHVkZWRVcmxzLlxuICAgKiBJZiBub3QsIGFkZHMgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHRvIHRoZSByZXF1ZXN0IGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHBhcmFtIHJlcVxuICAgKiBAcGFyYW0gbmV4dFxuICAgKi9cbiAgcHVibGljIGludGVyY2VwdChcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgY29uc3QgeyBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciwgZXhjbHVkZWRVcmxzIH0gPSB0aGlzLmtleWNsb2FrO1xuICAgIGlmICghZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IpIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYWxsUGFzczogYm9vbGVhbiA9XG4gICAgICAhdGhpcy5rZXljbG9hay5zaG91bGRBZGRUb2tlbihyZXEpIHx8XG4gICAgICBleGNsdWRlZFVybHMuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmlzVXJsRXhjbHVkZWQocmVxLCBpdGVtKSkgPiAtMTtcbiAgICBpZiAoc2hhbGxQYXNzKSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICBmcm9tKHRoaXMuY29uZGl0aW9uYWxseVVwZGF0ZVRva2VuKHJlcSkpLFxuICAgICAgb2YodGhpcy5rZXljbG9hay5pc0xvZ2dlZEluKCkpXG4gICAgXSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChbXywgaXNMb2dnZWRJbl0pID0+XG4gICAgICAgIGlzTG9nZ2VkSW5cbiAgICAgICAgICA/IHRoaXMuaGFuZGxlUmVxdWVzdFdpdGhUb2tlbkhlYWRlcihyZXEsIG5leHQpXG4gICAgICAgICAgOiBuZXh0LmhhbmRsZShyZXEpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSB0b2tlbiBvZiB0aGUgY3VycmVudCB1c2VyIHRvIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0gcmVxXG4gICAqIEBwYXJhbSBuZXh0XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlcXVlc3RXaXRoVG9rZW5IZWFkZXIoXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICAgIHJldHVybiB0aGlzLmtleWNsb2FrLmFkZFRva2VuVG9IZWFkZXIocmVxLmhlYWRlcnMpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaGVhZGVyc1dpdGhCZWFyZXIpID0+IHtcbiAgICAgICAgY29uc3Qga2NSZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiBoZWFkZXJzV2l0aEJlYXJlciB9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGtjUmVxKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export var KeycloakEventType;
|
|
2
|
-
(function (KeycloakEventType) {
|
|
3
|
-
KeycloakEventType[KeycloakEventType["OnAuthError"] = 0] = "OnAuthError";
|
|
4
|
-
KeycloakEventType[KeycloakEventType["OnAuthLogout"] = 1] = "OnAuthLogout";
|
|
5
|
-
KeycloakEventType[KeycloakEventType["OnAuthRefreshError"] = 2] = "OnAuthRefreshError";
|
|
6
|
-
KeycloakEventType[KeycloakEventType["OnAuthRefreshSuccess"] = 3] = "OnAuthRefreshSuccess";
|
|
7
|
-
KeycloakEventType[KeycloakEventType["OnAuthSuccess"] = 4] = "OnAuthSuccess";
|
|
8
|
-
KeycloakEventType[KeycloakEventType["OnReady"] = 5] = "OnReady";
|
|
9
|
-
KeycloakEventType[KeycloakEventType["OnTokenExpired"] = 6] = "OnTokenExpired";
|
|
10
|
-
KeycloakEventType[KeycloakEventType["OnActionUpdate"] = 7] = "OnActionUpdate";
|
|
11
|
-
})(KeycloakEventType || (KeycloakEventType = {}));
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sQ0FBTixJQUFZLGlCQW9DWDtBQXBDRCxXQUFZLGlCQUFpQjtJQUkzQix1RUFBVyxDQUFBO0lBS1gseUVBQVksQ0FBQTtJQUlaLHFGQUFrQixDQUFBO0lBSWxCLHlGQUFvQixDQUFBO0lBSXBCLDJFQUFhLENBQUE7SUFJYiwrREFBTyxDQUFBO0lBTVAsNkVBQWMsQ0FBQTtJQUlkLDZFQUFjLENBQUE7QUFDaEIsQ0FBQyxFQXBDVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBb0M1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYWluL0xJQ0VOU0UubWRcbiAqL1xuXG4vKipcbiAqIEtleWNsb2FrIGV2ZW50IHR5cGVzLCBhcyBkZXNjcmliZWQgYXQgdGhlIGtleWNsb2FrLWpzIGRvY3VtZW50YXRpb246XG4gKiBodHRwczovL3d3dy5rZXljbG9hay5vcmcvZG9jcy9sYXRlc3Qvc2VjdXJpbmdfYXBwcy9pbmRleC5odG1sI2NhbGxiYWNrLWV2ZW50c1xuICovXG5leHBvcnQgZW51bSBLZXljbG9ha0V2ZW50VHlwZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBhdXRoZW50aWNhdGlvbi5cbiAgICovXG4gIE9uQXV0aEVycm9yLFxuICAvKipcbiAgICogQ2FsbGVkIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBvdXRcbiAgICogKHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlIHNlc3Npb24gc3RhdHVzIGlmcmFtZSBpcyBlbmFibGVkLCBvciBpbiBDb3Jkb3ZhIG1vZGUpLlxuICAgKi9cbiAgT25BdXRoTG9nb3V0LFxuICAvKipcbiAgICogQ2FsbGVkIGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gcmVmcmVzaCB0aGUgdG9rZW4uXG4gICAqL1xuICBPbkF1dGhSZWZyZXNoRXJyb3IsXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdG9rZW4gaXMgcmVmcmVzaGVkLlxuICAgKi9cbiAgT25BdXRoUmVmcmVzaFN1Y2Nlc3MsXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIHVzZXIgaXMgc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICBPbkF1dGhTdWNjZXNzLFxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGFkYXB0ZXIgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBPblJlYWR5LFxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGFjY2VzcyB0b2tlbiBpcyBleHBpcmVkLiBJZiBhIHJlZnJlc2ggdG9rZW4gaXMgYXZhaWxhYmxlIHRoZSB0b2tlblxuICAgKiBjYW4gYmUgcmVmcmVzaGVkIHdpdGggdXBkYXRlVG9rZW4sIG9yIGluIGNhc2VzIHdoZXJlIGl0IGlzIG5vdCAodGhhdCBpcywgd2l0aCBpbXBsaWNpdCBmbG93KVxuICAgKiB5b3UgY2FuIHJlZGlyZWN0IHRvIGxvZ2luIHNjcmVlbiB0byBvYnRhaW4gYSBuZXcgYWNjZXNzIHRva2VuLlxuICAgKi9cbiAgT25Ub2tlbkV4cGlyZWQsXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIEFJQSBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgT25BY3Rpb25VcGRhdGVcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmUgb2YgYW4gZXZlbnQgdHJpZ2dlcmVkIGJ5IEtleWNsb2FrLCBjb250YWlucyBpdCdzIHR5cGVcbiAqIGFuZCBhcmd1bWVudHMgKGlmIGFueSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Y2xvYWtFdmVudCB7XG4gIC8qKlxuICAgKiBFdmVudCB0eXBlIGFzIGRlc2NyaWJlZCBhdCB7QGxpbmsgS2V5Y2xvYWtFdmVudFR5cGV9LlxuICAgKi9cbiAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGU7XG4gIC8qKlxuICAgKiBBcmd1bWVudHMgZnJvbSB0aGUga2V5Y2xvYWstanMgZXZlbnQgZnVuY3Rpb24uXG4gICAqL1xuICBhcmdzPzogdW5rbm93bjtcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9ibG9iL21haW4vTElDRU5TRS5tZFxuICovXG5cbmltcG9ydCB7IEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG4vKipcbiAqIEhUVFAgTWV0aG9kc1xuICovXG5leHBvcnQgdHlwZSBIdHRwTWV0aG9kcyA9XG4gIHwgJ0dFVCdcbiAgfCAnUE9TVCdcbiAgfCAnUFVUJ1xuICB8ICdERUxFVEUnXG4gIHwgJ09QVElPTlMnXG4gIHwgJ0hFQUQnXG4gIHwgJ1BBVENIJztcblxuLyoqXG4gKiBFeGNsdWRlZFVybCB0eXBlIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHVybCBhbmQgdGhlIEhUVFAgbWV0aG9kIHRoYXRcbiAqIHNob3VsZCBub3QgYmUgaW50ZXJjZXB0ZWQgYnkgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gKlxuICogRXhhbXBsZTpcbiAqIGNvbnN0IGV4Y2x1ZGVkVXJsOiBFeGNsdWRlZFVybFtdID0gW1xuICogIHtcbiAqICAgIHVybDogJ3JlcG9ydHMvcHVibGljJ1xuICogICAgaHR0cE1ldGhvZHM6IFsnR0VUJ11cbiAqICB9XG4gKiBdXG4gKlxuICogSW4gdGhlIGV4YW1wbGUgYWJvdmUgZm9yIFVSTCByZXBvcnRzL3B1YmxpYyBhbmQgSFRUUCBNZXRob2QgR0VUIHRoZVxuICogYmVhcmVyIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQuXG4gKlxuICogSWYgdGhlIHVybCBpcyBpbmZvcm1lZCBidXQgaHR0cE1ldGhvZCBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIGJlYXJlclxuICogd2lsbCBub3QgYmUgYWRkZWQgZm9yIGFsbCBIVFRQIE1ldGhvZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVkZWRVcmwge1xuICB1cmw6IHN0cmluZztcbiAgaHR0cE1ldGhvZHM/OiBIdHRwTWV0aG9kc1tdO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gRXhjbHVkZWRVcmwsIGNvbnRhaW5zIHRoZSBIVFRQIG1ldGhvZHMgYW5kIGEgcmVnZXggdG9cbiAqIGluY2x1ZGUgdGhlIHVybCBwYXR0ZXJucy5cbiAqIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgS2V5Y2xvYWtTZXJ2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2x1ZGVkVXJsUmVnZXgge1xuICB1cmxQYXR0ZXJuOiBSZWdFeHA7XG4gIGh0dHBNZXRob2RzPzogSHR0cE1ldGhvZHNbXTtcbn1cblxuLyoqXG4gKiBrZXljbG9hay1hbmd1bGFyIGluaXRpYWxpemF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Y2xvYWtPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbmZpZ3MgdG8gaW5pdCB0aGUga2V5Y2xvYWstanMgbGlicmFyeS4gSWYgdW5kZWZpbmVkLCB3aWxsIGxvb2sgZm9yIGEga2V5Y2xvYWsuanNvbiBmaWxlXG4gICAqIGF0IHJvb3Qgb2YgdGhlIHByb2plY3QuXG4gICAqIElmIG5vdCB1bmRlZmluZWQsIGNhbiBiZSBhIHN0cmluZyBtZWFuaW5nIHRoZSB1cmwgdG8gdGhlIGtleWNsb2FrLmpzb24gZmlsZSBvciBhbiBvYmplY3RcbiAgICogb2Yge0BsaW5rIEtleWNsb2FrLktleWNsb2FrQ29uZmlnfS4gVXNlIHRoaXMgY29uZmlndXJhdGlvbiBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5IHRoZSBrZXljbG9hayBzZXJ2ZXIsXG4gICAqIHJlYWxtLCBjbGllbnRJZC4gVGhpcyBpcyB1c2VmdWxsIGlmIHlvdSBoYXZlIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBmb3IgcHJvZHVjdGlvbiwgc3RhZ2VcbiAgICogYW5kIGRldmVsb3BtZW50IGVudmlyb25tZW50cy4gSGludDogTWFrZSB1c2Ugb2YgQW5ndWxhciBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY29uZmlnPzogc3RyaW5nIHwgS2V5Y2xvYWsuS2V5Y2xvYWtDb25maWc7XG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIGluaXRpYWxpemUgdGhlIEtleWNsb2FrIGFkYXB0ZXIsIG1hdGNoZXMgdGhlIG9wdGlvbnMgYXMgcHJvdmlkZWQgYnkgS2V5Y2xvYWsgaXRzZWxmLlxuICAgKi9cbiAgaW5pdE9wdGlvbnM/OiBLZXljbG9hay5LZXljbG9ha0luaXRPcHRpb25zO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCBhbGwgcmVxdWVzdHMgbWFkZSBieSBBbmd1bGFyIEh0dHBDbGllbnQgd2lsbCBiZSBpbnRlcmNlcHRlZCBpbiBvcmRlciB0b1xuICAgKiBhZGQgdGhlIGJlYXJlciBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlci4gSG93ZXZlciwgaWYgdGhpcyBpcyBhIG5vdCBkZXNpcmVkXG4gICAqIGZlYXR1cmUsIHRoZSBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciBtdXN0IGJlIGZhbHNlLlxuICAgKlxuICAgKiBCcmllZmx5LCBpZiBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9PT0gZmFsc2UsIHRoZSBiZWFyZXIgd2lsbCBub3QgYmUgYWRkZWRcbiAgICogdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I/OiBib29sZWFuO1xuICAvKipcbiAgICogRm9yY2VzIHRoZSBleGVjdXRpb24gb2YgbG9hZFVzZXJQcm9maWxlIGFmdGVyIHRoZSBrZXljbG9hayBpbml0aWFsaXphdGlvbiBjb25zaWRlcmluZyB0aGF0IHRoZVxuICAgKiB1c2VyIGxvZ2dlZCBpbi5cbiAgICogVGhpcyBvcHRpb24gaXMgcmVjb21tZW5kZWQgaWYgaXMgZGVzaXJhYmxlIHRvIGhhdmUgdGhlIHVzZXIgZGV0YWlscyBhdCB0aGUgYmVnaW5uaW5nLFxuICAgKiBzbyBhZnRlciB0aGUgbG9naW4sIHRoZSBsb2FkVXNlclByb2ZpbGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYW5kIGl0cyB2YWx1ZSBjYWNoZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA/OiBib29sZWFuO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogU3RyaW5nIEFycmF5IHRvIGV4Y2x1ZGUgdGhlIHVybHMgdGhhdCBzaG91bGQgbm90IGhhdmUgdGhlIEF1dGhvcml6YXRpb24gSGVhZGVyIGF1dG9tYXRpY2FsbHlcbiAgICogYWRkZWQuIFRoaXMgbGlicmFyeSBtYWtlcyB1c2Ugb2YgQW5ndWxhciBIdHRwIEludGVyY2VwdG9yLCB0byBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgQmVhcmVyXG4gICAqIHRva2VuIHRvIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgYmVhcmVyRXhjbHVkZWRVcmxzPzogKHN0cmluZyB8IEV4Y2x1ZGVkVXJsKVtdO1xuICAvKipcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXNcbiAgICogKipBdXRob3JpemF0aW9uKiouIElmIHRoZSBiYWNrZW5kIGV4cGVjdHMgcmVxdWVzdHMgdG8gaGF2ZSBhIHRva2VuIGluIGEgZGlmZmVyZW50IGhlYWRlciwgeW91XG4gICAqIHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSwgaS5lOiAqKkpXVC1BdXRob3JpemF0aW9uKiouIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBIdHRwIEhlYWRlclxuICAgKiBBdXRob3JpemF0aW9uIGFzIFwiSldULUF1dGhvcml6YXRpb246IGJlYXJlciA8dG9rZW4+XCIuXG4gICAqL1xuICBhdXRob3JpemF0aW9uSGVhZGVyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBwYXJhbS4gVGhlIGRlZmF1bHQgdmFsdWUgaXNcbiAgICogKipCZWFyZXIqKiwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBIdHRwIEhlYWRlciBBdXRob3JpemF0aW9uIGFzIFwiQXV0aG9yaXphdGlvbjogQmVhcmVyIDx0b2tlbj5cIi5cbiAgICpcbiAgICogSWYgYW55IG90aGVyIHZhbHVlIGlzIG5lZWRlZCBieSB0aGUgYmFja2VuZCBpbiB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIsIHlvdSBzaG91bGQgY2hhbmdlIHRoaXNcbiAgICogdmFsdWUuXG4gICAqXG4gICAqIFdhcm5pbmc6IHRoaXMgdmFsdWUgbXVzdCBiZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGtleWNsb2FrIHNlcnZlciBpbnN0YW5jZSBhbmQgdGhlIGFkYXB0ZXIuXG4gICAqL1xuICBiZWFyZXJQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHRva2VuIG5lZWRzIHRvIGJlIHVwZGF0ZWQuIElmIHRoZSB0b2tlblxuICAgKiB3aWxsIGV4cGlyZSBpcyBmZXdlciBzZWNvbmRzIHRoYW4gdGhlIHVwZGF0ZU1pblZhbGlkaXR5IHZhbHVlLCB0aGVuIGl0IHdpbGwgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAuXG4gICAqL1xuICB1cGRhdGVNaW5WYWxpZGl0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHRlbGwgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3Igd2hldGhlciB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSByZXF1ZXN0XG4gICAqIG9yIHRvIGxlYXZlIHRoZSByZXF1ZXN0IGFzIGl0IGlzLiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYHRydWVgLCB0aGUgcmVxdWVzdCB3aWxsIGhhdmUgdGhlIHRva2VuXG4gICAqIHByZXNlbnQgb24gaXQuIElmIGl0IGlzIGBmYWxzZWAsIHRoZSB0b2tlbiB3aWxsIGJlIGxlZnQgb2ZmIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYHRydWVgLlxuICAgKi9cbiAgc2hvdWxkQWRkVG9rZW4/OiAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB0ZWxsIHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yIGlmIHRoZSB0b2tlbiBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3JcbiAgICogdXBkYXRpbmcgYXMgYSBwYXJ0IG9mIHRoZSByZXF1ZXN0IGJlaW5nIG1hZGUuIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBgdHJ1ZWAsIHRoZSByZXF1ZXN0IHdpbGxcbiAgICogY2hlY2sgdGhlIHRva2VuJ3MgZXhwaXJ5IHRpbWUgYW5kIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIHNlY29uZHMgY29uZmlndXJlZCBieVxuICAgKiB1cGRhdGVNaW5WYWxpZGl0eSB0aGVuIGl0IHdpbGwgYmUgdXBkYXRlZCBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgbWFkZS4gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzXG4gICAqIGZhbHNlLCB0aGUgdG9rZW4gd2lsbCBub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZVRva2VuPzogKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+KSA9PiBib29sZWFuO1xufVxuIl19
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export class KeycloakAuthGuard {
|
|
2
|
-
constructor(router, keycloakAngular) {
|
|
3
|
-
this.router = router;
|
|
4
|
-
this.keycloakAngular = keycloakAngular;
|
|
5
|
-
}
|
|
6
|
-
async canActivate(route, state) {
|
|
7
|
-
try {
|
|
8
|
-
this.authenticated = await this.keycloakAngular.isLoggedIn();
|
|
9
|
-
this.roles = await this.keycloakAngular.getUserRoles(true);
|
|
10
|
-
return await this.isAccessAllowed(route, state);
|
|
11
|
-
}
|
|
12
|
-
catch (error) {
|
|
13
|
-
throw new Error('An error happened during access validation. Details:' + error);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYXV0aC1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLWF1dGgtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0JBLE1BQU0sT0FBZ0IsaUJBQWlCO0lBVXJDLFlBQ1ksTUFBYyxFQUNkLGVBQWdDO1FBRGhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDekMsQ0FBQztJQVNKLEtBQUssQ0FBQyxXQUFXLENBQ2YsS0FBNkIsRUFDN0IsS0FBMEI7UUFFMUIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNELE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELEdBQUcsS0FBSyxDQUMvRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FlRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYWluL0xJQ0VOU0UubWRcbiAqL1xuXG5pbXBvcnQge1xuICBDYW5BY3RpdmF0ZSxcbiAgUm91dGVyLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxUcmVlXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4va2V5Y2xvYWsuc2VydmljZSc7XG5cbi8qKlxuICogQSBzaW1wbGUgZ3VhcmQgaW1wbGVtZW50YXRpb24gb3V0IG9mIHRoZSBib3guIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluaGVyaXRlZCBhbmRcbiAqIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gVGhlIG9ubHkgbWV0aG9kIHRoYXQgc2hvdWxkIGJlIGltcGxlbWVudGVkIGlzICNpc0FjY2Vzc0FsbG93ZWQuXG4gKiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGF1dGhvcml6YXRpb24gZmxvdyBpcyB1c3VhbGx5IG5vdCB1bmlxdWUsIHNvIGluIHRoaXMgd2F5IHlvdSB3aWxsXG4gKiBoYXZlIG1vcmUgZnJlZWRvbSB0byBjdXN0b21pemUgeW91ciBhdXRob3JpemF0aW9uIGZsb3cuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBLZXljbG9ha0F1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkIG9yIG5vdC5cbiAgICovXG4gIHByb3RlY3RlZCBhdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogUm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBJdCBjb250YWlucyB0aGUgY2xpZW50SWQgYW5kIHJlYWxtIHVzZXIgcm9sZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcm9sZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQga2V5Y2xvYWtBbmd1bGFyOiBLZXljbG9ha1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDYW5BY3RpdmF0ZSBjaGVja3MgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGFuZCBnZXQgdGhlIGZ1bGwgbGlzdCBvZiByb2xlcyAoUkVBTE0gKyBDTElFTlQpXG4gICAqIG9mIHRoZSBsb2dnZWQgdXNlci4gVGhpcyB2YWx1ZXMgYXJlIHNldCB0byBhdXRoZW50aWNhdGVkIGFuZCByb2xlcyBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSByb3V0ZVxuICAgKiBAcGFyYW0gc3RhdGVcbiAgICovXG4gIGFzeW5jIGNhbkFjdGl2YXRlKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gYXdhaXQgdGhpcy5rZXljbG9ha0FuZ3VsYXIuaXNMb2dnZWRJbigpO1xuICAgICAgdGhpcy5yb2xlcyA9IGF3YWl0IHRoaXMua2V5Y2xvYWtBbmd1bGFyLmdldFVzZXJSb2xlcyh0cnVlKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaXNBY2Nlc3NBbGxvd2VkKHJvdXRlLCBzdGF0ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0FuIGVycm9yIGhhcHBlbmVkIGR1cmluZyBhY2Nlc3MgdmFsaWRhdGlvbi4gRGV0YWlsczonICsgZXJyb3JcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB5b3VyIG93biBjdXN0b21pemVkIGF1dGhvcml6YXRpb24gZmxvdyBpbiB0aGlzIG1ldGhvZC4gRnJvbSBoZXJlIHlvdSBhbHJlYWR5IGtub3duXG4gICAqIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgKHRoaXMuYXV0aGVudGljYXRlZCkgYW5kIHRoZSB1c2VyIHJvbGVzICh0aGlzLnJvbGVzKS5cbiAgICpcbiAgICogUmV0dXJuIGEgVXJsVHJlZSBpZiB0aGUgdXNlciBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byBhbm90aGVyIHJvdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gcm91dGVcbiAgICogQHBhcmFtIHN0YXRlXG4gICAqL1xuICBhYnN0cmFjdCBpc0FjY2Vzc0FsbG93ZWQoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgKTogUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT47XG59XG4iXX0=
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { HttpHeaders } from '@angular/common/http';
|
|
3
|
-
import { Subject, from } from 'rxjs';
|
|
4
|
-
import { map } from 'rxjs/operators';
|
|
5
|
-
import Keycloak from 'keycloak-js';
|
|
6
|
-
import { KeycloakEventType } from '../interfaces/keycloak-event';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class KeycloakService {
|
|
9
|
-
constructor() {
|
|
10
|
-
this._keycloakEvents$ = new Subject();
|
|
11
|
-
}
|
|
12
|
-
bindsKeycloakEvents() {
|
|
13
|
-
this._instance.onAuthError = (errorData) => {
|
|
14
|
-
this._keycloakEvents$.next({
|
|
15
|
-
args: errorData,
|
|
16
|
-
type: KeycloakEventType.OnAuthError
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
this._instance.onAuthLogout = () => {
|
|
20
|
-
this._keycloakEvents$.next({ type: KeycloakEventType.OnAuthLogout });
|
|
21
|
-
};
|
|
22
|
-
this._instance.onAuthRefreshSuccess = () => {
|
|
23
|
-
this._keycloakEvents$.next({
|
|
24
|
-
type: KeycloakEventType.OnAuthRefreshSuccess
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
this._instance.onAuthRefreshError = () => {
|
|
28
|
-
this._keycloakEvents$.next({
|
|
29
|
-
type: KeycloakEventType.OnAuthRefreshError
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
this._instance.onAuthSuccess = () => {
|
|
33
|
-
this._keycloakEvents$.next({ type: KeycloakEventType.OnAuthSuccess });
|
|
34
|
-
};
|
|
35
|
-
this._instance.onTokenExpired = () => {
|
|
36
|
-
this._keycloakEvents$.next({
|
|
37
|
-
type: KeycloakEventType.OnTokenExpired
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
this._instance.onActionUpdate = (state) => {
|
|
41
|
-
this._keycloakEvents$.next({
|
|
42
|
-
args: state,
|
|
43
|
-
type: KeycloakEventType.OnActionUpdate
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
this._instance.onReady = (authenticated) => {
|
|
47
|
-
this._keycloakEvents$.next({
|
|
48
|
-
args: authenticated,
|
|
49
|
-
type: KeycloakEventType.OnReady
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
loadExcludedUrls(bearerExcludedUrls) {
|
|
54
|
-
const excludedUrls = [];
|
|
55
|
-
for (const item of bearerExcludedUrls) {
|
|
56
|
-
let excludedUrl;
|
|
57
|
-
if (typeof item === 'string') {
|
|
58
|
-
excludedUrl = { urlPattern: new RegExp(item, 'i'), httpMethods: [] };
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
excludedUrl = {
|
|
62
|
-
urlPattern: new RegExp(item.url, 'i'),
|
|
63
|
-
httpMethods: item.httpMethods
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
excludedUrls.push(excludedUrl);
|
|
67
|
-
}
|
|
68
|
-
return excludedUrls;
|
|
69
|
-
}
|
|
70
|
-
initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions, updateMinValidity = 20, shouldAddToken = () => true, shouldUpdateToken = () => true }) {
|
|
71
|
-
this._enableBearerInterceptor = enableBearerInterceptor;
|
|
72
|
-
this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
|
|
73
|
-
this._authorizationHeaderName = authorizationHeaderName;
|
|
74
|
-
this._bearerPrefix = bearerPrefix.trim().concat(' ');
|
|
75
|
-
this._excludedUrls = this.loadExcludedUrls(bearerExcludedUrls);
|
|
76
|
-
this._silentRefresh = initOptions ? initOptions.flow === 'implicit' : false;
|
|
77
|
-
this._updateMinValidity = updateMinValidity;
|
|
78
|
-
this.shouldAddToken = shouldAddToken;
|
|
79
|
-
this.shouldUpdateToken = shouldUpdateToken;
|
|
80
|
-
}
|
|
81
|
-
async init(options = {}) {
|
|
82
|
-
this.initServiceValues(options);
|
|
83
|
-
const { config, initOptions } = options;
|
|
84
|
-
this._instance = new Keycloak(config);
|
|
85
|
-
this.bindsKeycloakEvents();
|
|
86
|
-
const authenticated = await this._instance.init(initOptions);
|
|
87
|
-
if (authenticated && this._loadUserProfileAtStartUp) {
|
|
88
|
-
await this.loadUserProfile();
|
|
89
|
-
}
|
|
90
|
-
return authenticated;
|
|
91
|
-
}
|
|
92
|
-
async login(options = {}) {
|
|
93
|
-
await this._instance.login(options);
|
|
94
|
-
if (this._loadUserProfileAtStartUp) {
|
|
95
|
-
await this.loadUserProfile();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
async logout(redirectUri) {
|
|
99
|
-
const options = {
|
|
100
|
-
redirectUri
|
|
101
|
-
};
|
|
102
|
-
await this._instance.logout(options);
|
|
103
|
-
this._userProfile = undefined;
|
|
104
|
-
}
|
|
105
|
-
async register(options = { action: 'register' }) {
|
|
106
|
-
await this._instance.register(options);
|
|
107
|
-
}
|
|
108
|
-
isUserInRole(role, resource) {
|
|
109
|
-
let hasRole;
|
|
110
|
-
hasRole = this._instance.hasResourceRole(role, resource);
|
|
111
|
-
if (!hasRole) {
|
|
112
|
-
hasRole = this._instance.hasRealmRole(role);
|
|
113
|
-
}
|
|
114
|
-
return hasRole;
|
|
115
|
-
}
|
|
116
|
-
getUserRoles(realmRoles = true, resource) {
|
|
117
|
-
let roles = [];
|
|
118
|
-
if (this._instance.resourceAccess) {
|
|
119
|
-
Object.keys(this._instance.resourceAccess).forEach((key) => {
|
|
120
|
-
if (resource && resource !== key) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
const resourceAccess = this._instance.resourceAccess[key];
|
|
124
|
-
const clientRoles = resourceAccess['roles'] || [];
|
|
125
|
-
roles = roles.concat(clientRoles);
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
if (realmRoles && this._instance.realmAccess) {
|
|
129
|
-
const realmRoles = this._instance.realmAccess['roles'] || [];
|
|
130
|
-
roles.push(...realmRoles);
|
|
131
|
-
}
|
|
132
|
-
return roles;
|
|
133
|
-
}
|
|
134
|
-
isLoggedIn() {
|
|
135
|
-
if (!this._instance) {
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
return this._instance.authenticated;
|
|
139
|
-
}
|
|
140
|
-
isTokenExpired(minValidity = 0) {
|
|
141
|
-
return this._instance.isTokenExpired(minValidity);
|
|
142
|
-
}
|
|
143
|
-
async updateToken(minValidity = this._updateMinValidity) {
|
|
144
|
-
if (this._silentRefresh) {
|
|
145
|
-
if (this.isTokenExpired()) {
|
|
146
|
-
throw new Error('Failed to refresh the token, or the session is expired');
|
|
147
|
-
}
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
if (!this._instance) {
|
|
151
|
-
throw new Error('Keycloak Angular library is not initialized.');
|
|
152
|
-
}
|
|
153
|
-
try {
|
|
154
|
-
return await this._instance.updateToken(minValidity);
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
async loadUserProfile(forceReload = false) {
|
|
161
|
-
if (this._userProfile && !forceReload) {
|
|
162
|
-
return this._userProfile;
|
|
163
|
-
}
|
|
164
|
-
if (!this._instance.authenticated) {
|
|
165
|
-
throw new Error('The user profile was not loaded as the user is not logged in.');
|
|
166
|
-
}
|
|
167
|
-
return (this._userProfile = await this._instance.loadUserProfile());
|
|
168
|
-
}
|
|
169
|
-
async getToken() {
|
|
170
|
-
return this._instance.token;
|
|
171
|
-
}
|
|
172
|
-
getUsername() {
|
|
173
|
-
if (!this._userProfile) {
|
|
174
|
-
throw new Error('User not logged in or user profile was not loaded.');
|
|
175
|
-
}
|
|
176
|
-
return this._userProfile.username;
|
|
177
|
-
}
|
|
178
|
-
clearToken() {
|
|
179
|
-
this._instance.clearToken();
|
|
180
|
-
}
|
|
181
|
-
addTokenToHeader(headers = new HttpHeaders()) {
|
|
182
|
-
return from(this.getToken()).pipe(map((token) => token
|
|
183
|
-
? headers.set(this._authorizationHeaderName, this._bearerPrefix + token)
|
|
184
|
-
: headers));
|
|
185
|
-
}
|
|
186
|
-
getKeycloakInstance() {
|
|
187
|
-
return this._instance;
|
|
188
|
-
}
|
|
189
|
-
get excludedUrls() {
|
|
190
|
-
return this._excludedUrls;
|
|
191
|
-
}
|
|
192
|
-
get enableBearerInterceptor() {
|
|
193
|
-
return this._enableBearerInterceptor;
|
|
194
|
-
}
|
|
195
|
-
get keycloakEvents$() {
|
|
196
|
-
return this._keycloakEvents$;
|
|
197
|
-
}
|
|
198
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: KeycloakService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
199
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: KeycloakService }); }
|
|
200
|
-
}
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: KeycloakService, decorators: [{
|
|
202
|
-
type: Injectable
|
|
203
|
-
}] });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFFaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQztBQU9uQyxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBVWhGLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBd0NVLHFCQUFnQixHQUN0QixJQUFJLE9BQU8sRUFBaUIsQ0FBQztLQTZlaEM7SUF4ZFMsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFdBQVc7YUFDcEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtZQUN6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RyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDWixLQUFLO1lBQ0gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsSUFBSSxDQUFDLHdCQUF3QixFQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FDM0I7WUFDSCxDQUFDLENBQUMsT0FBTyxDQUNaLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFTRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFVRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQVFELElBQUksdUJBQXVCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7SUFxQkQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7OEdBcGhCVSxlQUFlO2tIQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL2Jsb2IvbWFpbi9MSUNFTlNFLm1kXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgS2V5Y2xvYWsgZnJvbSAna2V5Y2xvYWstanMnO1xuXG5pbXBvcnQge1xuICBFeGNsdWRlZFVybCxcbiAgRXhjbHVkZWRVcmxSZWdleCxcbiAgS2V5Y2xvYWtPcHRpb25zXG59IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucyc7XG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50LCBLZXljbG9ha0V2ZW50VHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIGV4aXN0ZW50IG1ldGhvZHMgZnJvbSB0aGUgS2V5Y2xvYWsgSlMgYWRhcHRlciwgYWRkaW5nIG5ld1xuICogZnVuY3Rpb25hbGl0aWVzIHRvIGltcHJvdmUgdGhlIHVzZSBvZiBrZXljbG9hayBpbiBBbmd1bGFyIHYgPiA0LjMgYXBwbGljYXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluamVjdGVkIGluIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAsIHNvIHRoZSBzYW1lIGluc3RhbmNlIHdpbGwgYmUgdXNlZFxuICogYWxvbmcgdGhlIHdlYiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrU2VydmljZSB7XG4gIC8qKlxuICAgKiBLZXljbG9hay1qcyBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBLZXljbG9haztcbiAgLyoqXG4gICAqIFVzZXIgcHJvZmlsZSBhcyBLZXljbG9ha1Byb2ZpbGUgaW50ZXJmYWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXNlclByb2ZpbGU6IEtleWNsb2FrLktleWNsb2FrUHJvZmlsZTtcbiAgLyoqXG4gICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGJlYXJlciB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqL1xuICBwcml2YXRlIF9lbmFibGVCZWFyZXJJbnRlcmNlcHRvcjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdGhlIGltcGxpY2l0IGZsb3cgaXMgY2hvb3NlbiB0aGVyZSBtdXN0IGV4aXN0IGEgc2lsZW50UmVmcmVzaCwgYXMgdGhlcmUgaXNcbiAgICogbm8gcmVmcmVzaCB0b2tlbi5cbiAgICovXG4gIHByaXZhdGUgX3NpbGVudFJlZnJlc2g6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBwcm9maWxlIHNob3VsZCBiZSBsb2FkZWQgYXQgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uLFxuICAgKiBqdXN0IGFmdGVyIHRoZSBsb2dpbi5cbiAgICovXG4gIHByaXZhdGUgX2xvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBiZWFyZXIgcHJlZml4IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgQXV0aG9yaXphdGlvbiBIZWFkZXIuXG4gICAqL1xuICBwcml2YXRlIF9iZWFyZXJQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGVhZGVyTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVGhlIGV4Y2x1ZGVkIHVybHMgcGF0dGVybnMgdGhhdCBtdXN0IHNraXAgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gICAqL1xuICBwcml2YXRlIF9leGNsdWRlZFVybHM6IEV4Y2x1ZGVkVXJsUmVnZXhbXTtcbiAgLyoqXG4gICAqIE9ic2VydmVyIGZvciB0aGUga2V5Y2xvYWsgZXZlbnRzXG4gICAqL1xuICBwcml2YXRlIF9rZXljbG9ha0V2ZW50cyQ6IFN1YmplY3Q8S2V5Y2xvYWtFdmVudD4gPVxuICAgIG5ldyBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+KCk7XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHJlcXVpcmVkIHRpbWUgcmVtYWluaW5nIGJlZm9yZSBleHBpcnkgb2YgdGhlIHRva2VuIGJlZm9yZSB0aGUgdG9rZW4gd2lsbCBiZSByZWZyZXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVNaW5WYWxpZGl0eTogbnVtYmVyO1xuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IHNob3VsZCBoYXZlIHRoZSB0b2tlbiBhZGRlZCB0byB0aGUgaGVhZGVycyBieSB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAgICovXG4gIHNob3VsZEFkZFRva2VuOiAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3QgYmVpbmcgbWFkZSBzaG91bGQgcG90ZW50aWFsbHkgdXBkYXRlIHRoZSB0b2tlbi5cbiAgICovXG4gIHNob3VsZFVwZGF0ZVRva2VuOiAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoZSBrZXljbG9hay1qcyBldmVudHMgdG8gdGhlIGtleWNsb2FrRXZlbnRzIFN1YmplY3RcbiAgICogd2hpY2ggaXMgYSBnb29kIHdheSB0byBtb25pdG9yIGZvciBjaGFuZ2VzLCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIFRoZSBrZXljbG9ha0V2ZW50cyByZXR1cm5zIHRoZSBrZXljbG9hay1qcyBldmVudCB0eXBlIGFuZCBhbnlcbiAgICogYXJndW1lbnQgaWYgdGhlIHNvdXJjZSBmdW5jdGlvbiBwcm92aWRlcyBhbnkuXG4gICAqL1xuICBwcml2YXRlIGJpbmRzS2V5Y2xvYWtFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoRXJyb3IgPSAoZXJyb3JEYXRhKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIGFyZ3M6IGVycm9yRGF0YSxcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoRXJyb3JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhMb2dvdXQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7IHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aExvZ291dCB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoUmVmcmVzaFN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hTdWNjZXNzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoUmVmcmVzaEVycm9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoRXJyb3JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhTdWNjZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoeyB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhTdWNjZXNzIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vblRva2VuRXhwaXJlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25Ub2tlbkV4cGlyZWRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkFjdGlvblVwZGF0ZSA9IChzdGF0ZSkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBzdGF0ZSxcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BY3Rpb25VcGRhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vblJlYWR5ID0gKGF1dGhlbnRpY2F0ZWQpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgYXJnczogYXV0aGVudGljYXRlZCxcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25SZWFkeVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgYmVhcmVyRXhjbHVkZWRVcmwgY29udGVudCBpbiBhIHVuaWZvcm0gdHlwZTogRXhjbHVkZWRVcmwsXG4gICAqIHNvIGl0IGJlY29tZXMgZWFzaWVyIHRvIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlckV4Y2x1ZGVkVXJscyBhcnJheSBvZiBzdHJpbmdzIG9yIEV4Y2x1ZGVkVXJsIHRoYXQgaW5jbHVkZXNcbiAgICogdGhlIHVybCBhbmQgSHR0cE1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgbG9hZEV4Y2x1ZGVkVXJscyhcbiAgICBiZWFyZXJFeGNsdWRlZFVybHM6IChzdHJpbmcgfCBFeGNsdWRlZFVybClbXVxuICApOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIGNvbnN0IGV4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGJlYXJlckV4Y2x1ZGVkVXJscykge1xuICAgICAgbGV0IGV4Y2x1ZGVkVXJsOiBFeGNsdWRlZFVybFJlZ2V4O1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBleGNsdWRlZFVybCA9IHsgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLCAnaScpLCBodHRwTWV0aG9kczogW10gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0ge1xuICAgICAgICAgIHVybFBhdHRlcm46IG5ldyBSZWdFeHAoaXRlbS51cmwsICdpJyksXG4gICAgICAgICAgaHR0cE1ldGhvZHM6IGl0ZW0uaHR0cE1ldGhvZHNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGV4Y2x1ZGVkVXJscy5wdXNoKGV4Y2x1ZGVkVXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4Y2x1ZGVkVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjbGFzcyB2YWx1ZXMgaW5pdGlhbGl6YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGluaXRTZXJ2aWNlVmFsdWVzKHtcbiAgICBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9IHRydWUsXG4gICAgbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwID0gZmFsc2UsXG4gICAgYmVhcmVyRXhjbHVkZWRVcmxzID0gW10sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSAnQXV0aG9yaXphdGlvbicsXG4gICAgYmVhcmVyUHJlZml4ID0gJ0JlYXJlcicsXG4gICAgaW5pdE9wdGlvbnMsXG4gICAgdXBkYXRlTWluVmFsaWRpdHkgPSAyMCxcbiAgICBzaG91bGRBZGRUb2tlbiA9ICgpID0+IHRydWUsXG4gICAgc2hvdWxkVXBkYXRlVG9rZW4gPSAoKSA9PiB0cnVlXG4gIH06IEtleWNsb2FrT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX2VuYWJsZUJlYXJlckludGVyY2VwdG9yID0gZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I7XG4gICAgdGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwID0gbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwO1xuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lID0gYXV0aG9yaXphdGlvbkhlYWRlck5hbWU7XG4gICAgdGhpcy5fYmVhcmVyUHJlZml4ID0gYmVhcmVyUHJlZml4LnRyaW0oKS5jb25jYXQoJyAnKTtcbiAgICB0aGlzLl9leGNsdWRlZFVybHMgPSB0aGlzLmxvYWRFeGNsdWRlZFVybHMoYmVhcmVyRXhjbHVkZWRVcmxzKTtcbiAgICB0aGlzLl9zaWxlbnRSZWZyZXNoID0gaW5pdE9wdGlvbnMgPyBpbml0T3B0aW9ucy5mbG93ID09PSAnaW1wbGljaXQnIDogZmFsc2U7XG4gICAgdGhpcy5fdXBkYXRlTWluVmFsaWRpdHkgPSB1cGRhdGVNaW5WYWxpZGl0eTtcbiAgICB0aGlzLnNob3VsZEFkZFRva2VuID0gc2hvdWxkQWRkVG9rZW47XG4gICAgdGhpcy5zaG91bGRVcGRhdGVUb2tlbiA9IHNob3VsZFVwZGF0ZVRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIEtleWNsb2FrIGluaXRpYWxpemF0aW9uLiBJdCBzaG91bGQgYmUgY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIuXG4gICAqIE9wdGlvbnMgaXMgYW4gb2JqZWN0IHdpdGggMiBtYWluIHBhcmFtZXRlcnM6IGNvbmZpZyBhbmQgaW5pdE9wdGlvbnMuIFRoZSBmaXJzdCBvbmVcbiAgICogd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgS2V5Y2xvYWsgaW5zdGFuY2UuIFRoZSBzZWNvbmQgb25lIGFyZSBvcHRpb25zIHRvIGluaXRpYWxpemUgdGhlXG4gICAqIGtleWNsb2FrIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBDb25maWc6IG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGtleWNsb2FrIFVSSSBvciBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICogZm9sbG93aW5nIGNvbnRlbnQ6XG4gICAqIC0gdXJsOiBLZXljbG9hayBqc29uIFVSTFxuICAgKiAtIHJlYWxtOiByZWFsbSBuYW1lXG4gICAqIC0gY2xpZW50SWQ6IGNsaWVudCBpZFxuICAgKlxuICAgKiBpbml0T3B0aW9uczpcbiAgICogT3B0aW9ucyB0byBpbml0aWFsaXplIHRoZSBLZXljbG9hayBhZGFwdGVyLCBtYXRjaGVzIHRoZSBvcHRpb25zIGFzIHByb3ZpZGVkIGJ5IEtleWNsb2FrIGl0c2VsZi5cbiAgICpcbiAgICogZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I6XG4gICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGJlYXJlciB3aWxsIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICpcbiAgICogbG9hZFVzZXJQcm9maWxlSW5TdGFydFVwOlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBwcm9maWxlIHNob3VsZCBiZSBsb2FkZWQgYXQgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uLFxuICAgKiBqdXN0IGFmdGVyIHRoZSBsb2dpbi5cbiAgICpcbiAgICogYmVhcmVyRXhjbHVkZWRVcmxzOlxuICAgKiBTdHJpbmcgQXJyYXkgdG8gZXhjbHVkZSB0aGUgdXJscyB0aGF0IHNob3VsZCBub3QgaGF2ZSB0aGUgQXV0aG9yaXphdGlvbiBIZWFkZXIgYXV0b21hdGljYWxseVxuICAgKiBhZGRlZC5cbiAgICpcbiAgICogYXV0aG9yaXphdGlvbkhlYWRlck5hbWU6XG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIG5hbWUuXG4gICAqXG4gICAqIGJlYXJlclByZWZpeDpcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIHBhcmFtLlxuICAgKlxuICAgKiB0b2tlblVwZGF0ZUV4Y2x1ZGVkSGVhZGVyczpcbiAgICogQXJyYXkgb2YgSHR0cCBIZWFkZXIga2V5L3ZhbHVlIG1hcHMgdGhhdCBzaG91bGQgbm90IHRyaWdnZXIgdGhlIHRva2VuIHRvIGJlIHVwZGF0ZWQuXG4gICAqXG4gICAqIHVwZGF0ZU1pblZhbGlkaXR5OlxuICAgKiBUaGlzIHZhbHVlIGRldGVybWluZXMgaWYgdGhlIHRva2VuIHdpbGwgYmUgcmVmcmVzaGVkIGJhc2VkIG9uIGl0cyBleHBpcmF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgUHJvbWlzZSB3aXRoIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBpbml0aWFsaXphdGlvbiB3YXMgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdGlvbnM6IEtleWNsb2FrT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5pbml0U2VydmljZVZhbHVlcyhvcHRpb25zKTtcbiAgICBjb25zdCB7IGNvbmZpZywgaW5pdE9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBLZXljbG9hayhjb25maWcpO1xuICAgIHRoaXMuYmluZHNLZXljbG9ha0V2ZW50cygpO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlZCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLmluaXQoaW5pdE9wdGlvbnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWQgJiYgdGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dpbiBmb3JtIG9uIChvcHRpb25zIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoIHJlZGlyZWN0VXJpIGFuZC9vclxuICAgKiBwcm9tcHQgZmllbGRzKS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogT2JqZWN0LCB3aGVyZTpcbiAgICogIC0gcmVkaXJlY3RVcmk6IFNwZWNpZmllcyB0aGUgdXJpIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ2luLlxuICAgKiAgLSBwcm9tcHQ6QnkgZGVmYXVsdCB0aGUgbG9naW4gc2NyZWVuIGlzIGRpc3BsYXllZCBpZiB0aGUgdXNlciBpcyBub3QgbG9nZ2VkLWluIHRvIEtleWNsb2FrLlxuICAgKiBUbyBvbmx5IGF1dGhlbnRpY2F0ZSB0byB0aGUgYXBwbGljYXRpb24gaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQtaW4gYW5kIG5vdCBkaXNwbGF5IHRoZVxuICAgKiBsb2dpbiBwYWdlIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4sIHNldCB0aGlzIG9wdGlvbiB0byBub25lLiBUbyBhbHdheXMgcmVxdWlyZVxuICAgKiByZS1hdXRoZW50aWNhdGlvbiBhbmQgaWdub3JlIFNTTywgc2V0IHRoaXMgb3B0aW9uIHRvIGxvZ2luIC5cbiAgICogIC0gbWF4QWdlOiBVc2VkIGp1c3QgaWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuIFNwZWNpZmllcyBtYXhpbXVtIHRpbWUgc2luY2UgdGhlXG4gICAqIGF1dGhlbnRpY2F0aW9uIG9mIHVzZXIgaGFwcGVuZWQuIElmIHVzZXIgaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkIGZvciBsb25nZXIgdGltZSB0aGFuXG4gICAqIG1heEFnZSwgdGhlIFNTTyBpcyBpZ25vcmVkIGFuZCBoZSB3aWxsIG5lZWQgdG8gcmUtYXV0aGVudGljYXRlIGFnYWluLlxuICAgKiAgLSBsb2dpbkhpbnQ6IFVzZWQgdG8gcHJlLWZpbGwgdGhlIHVzZXJuYW1lL2VtYWlsIGZpZWxkIG9uIHRoZSBsb2dpbiBmb3JtLlxuICAgKiAgLSBhY3Rpb246IElmIHZhbHVlIGlzICdyZWdpc3RlcicgdGhlbiB1c2VyIGlzIHJlZGlyZWN0ZWQgdG8gcmVnaXN0cmF0aW9uIHBhZ2UsIG90aGVyd2lzZSB0b1xuICAgKiBsb2dpbiBwYWdlLlxuICAgKiAgLSBsb2NhbGU6IFNwZWNpZmllcyB0aGUgZGVzaXJlZCBsb2NhbGUgZm9yIHRoZSBVSS5cbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIGxvZ2luIGlzIHN1Y2Nlc3NmdWwgYW5kIGFmdGVyIHRoZSB1c2VyIHByb2ZpbGUgbG9hZGluZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dpbihvcHRpb25zOiBLZXljbG9hay5LZXljbG9ha0xvZ2luT3B0aW9ucyA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9naW4ob3B0aW9ucyk7XG5cbiAgICBpZiAodGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdHMgdG8gbG9nb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVkaXJlY3RVcmlcbiAgICogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9nb3V0LlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9nb3V0IHdhcyBzdWNjZXNzZnVsLCBjbGVhbmluZyBhbHNvIHRoZSB1c2VyUHJvZmlsZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dvdXQocmVkaXJlY3RVcmk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcmVkaXJlY3RVcmlcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9nb3V0KG9wdGlvbnMpO1xuICAgIHRoaXMuX3VzZXJQcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byByZWdpc3RyYXRpb24gZm9ybS4gU2hvcnRjdXQgZm9yIGxvZ2luIHdpdGggb3B0aW9uXG4gICAqIGFjdGlvbiA9ICdyZWdpc3RlcicuIE9wdGlvbnMgYXJlIHNhbWUgYXMgZm9yIHRoZSBsb2dpbiBtZXRob2QgYnV0ICdhY3Rpb24nIGlzIHNldCB0b1xuICAgKiAncmVnaXN0ZXInLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBsb2dpbiBvcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSByZWdpc3RlciBmbG93IHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKFxuICAgIG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0geyBhY3Rpb246ICdyZWdpc3RlcicgfVxuICApIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgcm9sZS4gSXQgd2lsbCBsb29rIGZvciByb2xlcyBpblxuICAgKiByZWFsbSBhbmQgdGhlIGdpdmVuIHJlc291cmNlLCBidXQgd2lsbCBub3QgY2hlY2sgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlXG4gICAqIHJvbGUgbmFtZVxuICAgKiBAcGFyYW0gcmVzb3VyY2VcbiAgICogcmVzb3VyY2UgbmFtZS4gSWYgbm90IHNwZWNpZmllZCwgYGNsaWVudElkYCBpcyB1c2VkXG4gICAqIEByZXR1cm5zXG4gICAqIEEgYm9vbGVhbiBtZWFuaW5nIGlmIHRoZSB1c2VyIGhhcyB0aGUgc3BlY2lmaWVkIFJvbGUuXG4gICAqL1xuICBpc1VzZXJJblJvbGUocm9sZTogc3RyaW5nLCByZXNvdXJjZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNSb2xlOiBib29sZWFuO1xuICAgIGhhc1JvbGUgPSB0aGlzLl9pbnN0YW5jZS5oYXNSZXNvdXJjZVJvbGUocm9sZSwgcmVzb3VyY2UpO1xuICAgIGlmICghaGFzUm9sZSkge1xuICAgICAgaGFzUm9sZSA9IHRoaXMuX2luc3RhbmNlLmhhc1JlYWxtUm9sZShyb2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc1JvbGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSByb2xlcyBvZiB0aGUgbG9nZ2VkIHVzZXIuIFRoZSByZWFsbVJvbGVzIHBhcmFtZXRlciwgd2l0aCBkZWZhdWx0IHZhbHVlXG4gICAqIHRydWUsIHdpbGwgcmV0dXJuIHRoZSByZXNvdXJjZSByb2xlcyBhbmQgcmVhbG0gcm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci4gSWYgc2V0IHRvIGZhbHNlXG4gICAqIGl0IHdpbGwgb25seSByZXR1cm4gdGhlIHJlc291cmNlIHJvbGVzLiBUaGUgcmVzb3VyY2UgcGFyYW1ldGVyLCBpZiBzcGVjaWZpZWQsIHdpbGwgcmV0dXJuIG9ubHkgcmVzb3VyY2Ugcm9sZXNcbiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiByZXNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIHJlYWxtUm9sZXNcbiAgICogU2V0IHRvIGZhbHNlIHRvIGV4Y2x1ZGUgcmVhbG0gcm9sZXMgKG9ubHkgY2xpZW50IHJvbGVzKVxuICAgKiBAcGFyYW0gcmVzb3VyY2VcbiAgICogcmVzb3VyY2UgbmFtZSBJZiBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIHJvbGVzIGZyb20gYWxsIHJlc291cmNlc1xuICAgKiBAcmV0dXJuc1xuICAgKiBBcnJheSBvZiBSb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvZ2dlZCB1c2VyLlxuICAgKi9cbiAgZ2V0VXNlclJvbGVzKHJlYWxtUm9sZXM6IGJvb2xlYW4gPSB0cnVlLCByZXNvdXJjZT86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcm9sZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHJlc291cmNlICYmIHJlc291cmNlICE9PSBrZXkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvdXJjZUFjY2VzcyA9IHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzW2tleV07XG4gICAgICAgIGNvbnN0IGNsaWVudFJvbGVzID0gcmVzb3VyY2VBY2Nlc3NbJ3JvbGVzJ10gfHwgW107XG4gICAgICAgIHJvbGVzID0gcm9sZXMuY29uY2F0KGNsaWVudFJvbGVzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZWFsbVJvbGVzICYmIHRoaXMuX2luc3RhbmNlLnJlYWxtQWNjZXNzKSB7XG4gICAgICBjb25zdCByZWFsbVJvbGVzID0gdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3NbJ3JvbGVzJ10gfHwgW107XG4gICAgICByb2xlcy5wdXNoKC4uLnJlYWxtUm9sZXMpO1xuICAgIH1cblxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICovXG4gIGlzTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5hdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdG9rZW4gaGFzIGxlc3MgdGhhbiBtaW5WYWxpZGl0eSBzZWNvbmRzIGxlZnQgYmVmb3JlXG4gICAqIGl0IGV4cGlyZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSkgaXMgb3B0aW9uYWwuIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAgICogQHJldHVybnNcbiAgICogQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0b2tlbiBpcyBleHBpcmVkLlxuICAgKi9cbiAgaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHk6IG51bWJlciA9IDApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0b2tlbiBleHBpcmVzIHdpdGhpbiBfdXBkYXRlTWluVmFsaWRpdHkgc2Vjb25kcyB0aGUgdG9rZW4gaXMgcmVmcmVzaGVkLiBJZiB0aGVcbiAgICogc2Vzc2lvbiBzdGF0dXMgaWZyYW1lIGlzIGVuYWJsZWQsIHRoZSBzZXNzaW9uIHN0YXR1cyBpcyBhbHNvIGNoZWNrZWQuXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHRlbGxpbmcgaWYgdGhlIHRva2VuIHdhcyByZWZyZXNoZWQgb3Igbm90LiBJZiB0aGUgc2Vzc2lvbiBpcyBub3QgYWN0aXZlXG4gICAqIGFueW1vcmUsIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmFsaWRpdHlcbiAgICogU2Vjb25kcyBsZWZ0LiAobWluVmFsaWRpdHkgaXMgb3B0aW9uYWwsIGlmIG5vdCBzcGVjaWZpZWQgdXBkYXRlTWluVmFsaWRpdHkgLSBkZWZhdWx0IDIwIGlzIHVzZWQpXG4gICAqIEByZXR1cm5zXG4gICAqIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gd2FzIHN1Y2Nlc2Z1bGx5IHVwZGF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlVG9rZW4obWluVmFsaWRpdHkgPSB0aGlzLl91cGRhdGVNaW5WYWxpZGl0eSkge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSB3b3JrYXJvdW5kIHVudGlsIHRoZSBzaWxlbnQgcmVmcmVzaCAoaXNzdWUgIzQzKVxuICAgIC8vIGlzIG5vdCBpbXBsZW1lbnRlZCwgYXZvaWRpbmcgdGhlIHJlZGlyZWN0IGxvb3AuXG4gICAgaWYgKHRoaXMuX3NpbGVudFJlZnJlc2gpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdGYWlsZWQgdG8gcmVmcmVzaCB0aGUgdG9rZW4sIG9yIHRoZSBzZXNzaW9uIGlzIGV4cGlyZWQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignS2V5Y2xvYWsgQW5ndWxhciBsaWJyYXJ5IGlzIG5vdCBpbml0aWFsaXplZC4nKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2luc3RhbmNlLnVwZGF0ZVRva2VuKG1pblZhbGlkaXR5KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBSZXR1cm5zIHByb21pc2UgdG8gc2V0IGZ1bmN0aW9ucyB0byBiZSBpbnZva2VkIGlmIHRoZSBwcm9maWxlIHdhcyBsb2FkZWRcbiAgICogc3VjY2Vzc2Z1bGx5LCBvciBpZiB0aGUgcHJvZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWxvYWRcbiAgICogSWYgdHJ1ZSB3aWxsIGZvcmNlIHRoZSBsb2FkVXNlclByb2ZpbGUgZXZlbiBpZiBpdHMgYWxyZWFkeSBsb2FkZWQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgcHJvbWlzZSB3aXRoIHRoZSBLZXljbG9ha1Byb2ZpbGUgZGF0YSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFVzZXJQcm9maWxlKGZvcmNlUmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5fdXNlclByb2ZpbGUgJiYgIWZvcmNlUmVsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgdXNlciBwcm9maWxlIHdhcyBub3QgbG9hZGVkIGFzIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuX3VzZXJQcm9maWxlID0gYXdhaXQgdGhpcy5faW5zdGFuY2UubG9hZFVzZXJQcm9maWxlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGF1dGhlbnRpY2F0ZWQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRVc2VybmFtZSgpIHtcbiAgICBpZiAoIXRoaXMuX3VzZXJQcm9maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCBpbiBvciB1c2VyIHByb2ZpbGUgd2FzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlLnVzZXJuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGF1dGhlbnRpY2F0aW9uIHN0YXRlLCBpbmNsdWRpbmcgdG9rZW5zLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgYXBwbGljYXRpb25cbiAgICogaGFzIGRldGVjdGVkIHRoZSBzZXNzaW9uIHdhcyBleHBpcmVkLCBmb3IgZXhhbXBsZSBpZiB1cGRhdGluZyB0b2tlbiBmYWlscy5cbiAgICogSW52b2tpbmcgdGhpcyByZXN1bHRzIGluIG9uQXV0aExvZ291dCBjYWxsYmFjayBsaXN0ZW5lciBiZWluZyBpbnZva2VkLlxuICAgKi9cbiAgY2xlYXJUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5jbGVhclRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHZhbGlkIHRva2VuIGluIGhlYWRlci4gVGhlIGtleSAmIHZhbHVlIGZvcm1hdCBpczpcbiAgICogQXV0aG9yaXphdGlvbiBCZWFyZXIgPHRva2VuPi5cbiAgICogSWYgdGhlIGhlYWRlcnMgcGFyYW0gaXMgdW5kZWZpbmVkIGl0IHdpbGwgY3JlYXRlIHRoZSBBbmd1bGFyIGhlYWRlcnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gaGVhZGVyc1xuICAgKiBVcGRhdGVkIGhlYWRlciB3aXRoIEF1dGhvcml6YXRpb24gYW5kIEtleWNsb2FrIHRva2VuLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBbiBvYnNlcnZhYmxlIHdpdGggd2l0aCB0aGUgSFRUUCBBdXRob3JpemF0aW9uIGhlYWRlciBhbmQgdGhlIGN1cnJlbnQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYWRkVG9rZW5Ub0hlYWRlcihoZWFkZXJzOiBIdHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5nZXRUb2tlbigpKS5waXBlKFxuICAgICAgbWFwKCh0b2tlbikgPT5cbiAgICAgICAgdG9rZW5cbiAgICAgICAgICA/IGhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICB0aGlzLl9hdXRob3JpemF0aW9uSGVhZGVyTmFtZSxcbiAgICAgICAgICAgICAgdGhpcy5fYmVhcmVyUHJlZml4ICsgdG9rZW5cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGhlYWRlcnNcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIEtleWNsb2FrIGluc3RhbmNlLCBpZiB5b3UgbmVlZCBhbnkgY3VzdG9taXphdGlvbiB0aGF0XG4gICAqIHRoaXMgQW5ndWxhciBzZXJ2aWNlIGRvZXMgbm90IHN1cHBvcnQgeWV0LiBVc2Ugd2l0aCBjYXV0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgS2V5Y2xvYWtJbnN0YW5jZSBmcm9tIGtleWNsb2FrLWpzLlxuICAgKi9cbiAgZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogUmV0dXJucyB0aGUgZXhjbHVkZWQgVVJMcyB0aGF0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBieVxuICAgKiB0aGUgaHR0cCBpbnRlcmNlcHRvciB3aGljaCBhdXRvbWF0aWNhbGx5IGFkZHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGluIHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFRoZSBleGNsdWRlZCB1cmxzIHRoYXQgbXVzdCBub3QgYmUgaW50ZXJjZXB0ZWQgYnkgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gICAqL1xuICBnZXQgZXhjbHVkZWRVcmxzKCk6IEV4Y2x1ZGVkVXJsUmVnZXhbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVkVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBiZSBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFJldHVybnMgaWYgdGhlIGJlYXJlciBpbnRlcmNlcHRvciB3YXMgc2V0IHRvIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgZ2V0IGVuYWJsZUJlYXJlckludGVyY2VwdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXljbG9hayBzdWJqZWN0IHRvIG1vbml0b3IgdGhlIGV2ZW50cyB0cmlnZ2VyZWQgYnkga2V5Y2xvYWstanMuXG4gICAqIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFzIGF2YWlsYWJsZSAoYXMgZGVzY3JpYmVkIGF0IGtleWNsb2FrIGRvY3MgLVxuICAgKiBodHRwczovL3d3dy5rZXljbG9hay5vcmcvZG9jcy9sYXRlc3Qvc2VjdXJpbmdfYXBwcy9pbmRleC5odG1sI2NhbGxiYWNrLWV2ZW50cyk6XG4gICAqIC0gT25BdXRoRXJyb3JcbiAgICogLSBPbkF1dGhMb2dvdXRcbiAgICogLSBPbkF1dGhSZWZyZXNoRXJyb3JcbiAgICogLSBPbkF1dGhSZWZyZXNoU3VjY2Vzc1xuICAgKiAtIE9uQXV0aFN1Y2Nlc3NcbiAgICogLSBPblJlYWR5XG4gICAqIC0gT25Ub2tlbkV4cGlyZVxuICAgKiBJbiBlYWNoIG9jY3VycmVuY2Ugb2YgYW55IG9mIHRoZXNlLCB0aGlzIHN1YmplY3Qgd2lsbCByZXR1cm4gdGhlIGV2ZW50IHR5cGUsXG4gICAqIGRlc2NyaWJlZCBhdCB7QGxpbmsgS2V5Y2xvYWtFdmVudFR5cGV9IGVudW0gYW5kIHRoZSBmdW5jdGlvbiBhcmdzIGZyb20gdGhlIGtleWNsb2FrLWpzXG4gICAqIGlmIHByb3ZpZGVkIGFueS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBzdWJqZWN0IHdpdGggdGhlIHtAbGluayBLZXljbG9ha0V2ZW50fSB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IHR5cGUgYW5kIGF0dGFjaGVzIHRoZVxuICAgKiBmdW5jdGlvbiBhcmdzLlxuICAgKi9cbiAgZ2V0IGtleWNsb2FrRXZlbnRzJCgpOiBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fa2V5Y2xvYWtFdmVudHMkO1xuICB9XG59XG4iXX0=
|