keycloak-angular 9.1.0 → 10.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 +57 -20
- package/esm2020/lib/core/core.module.mjs +5 -5
- package/esm2020/lib/core/interceptors/keycloak-bearer.interceptor.mjs +17 -7
- package/esm2020/lib/core/interfaces/keycloak-event.mjs +2 -1
- package/esm2020/lib/core/interfaces/keycloak-options.mjs +1 -1
- package/esm2020/lib/core/services/keycloak-auth-guard.mjs +10 -13
- package/esm2020/lib/core/services/keycloak.service.mjs +17 -13
- package/esm2020/lib/keycloak-angular.module.mjs +5 -5
- package/esm2020/public_api.mjs +1 -1
- package/fesm2015/keycloak-angular.mjs +47 -31
- package/fesm2015/keycloak-angular.mjs.map +1 -1
- package/fesm2020/keycloak-angular.mjs +50 -38
- package/fesm2020/keycloak-angular.mjs.map +1 -1
- package/lib/core/interceptors/keycloak-bearer.interceptor.d.ts +2 -1
- package/lib/core/interfaces/keycloak-event.d.ts +3 -2
- package/lib/core/interfaces/keycloak-options.d.ts +4 -0
- package/lib/core/services/keycloak.service.d.ts +6 -4
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[![License: MIT][license-mit-badge]][license-mit]
|
|
5
5
|
[![Build Status][build-badge]][build]
|
|
6
6
|
[![Known Vulnerabilities][vulnerabilities-badge]][vulnerabilities]
|
|
7
|
-
[![npm version][npm-version-badge]][npm
|
|
7
|
+
[![npm version][npm-version-badge]][npm]
|
|
8
8
|
[![npm][npm-badge]][npm]
|
|
9
9
|
[![All Contributors][contributors-badge]](#contributors)
|
|
10
10
|
[![Discord][discord-badge]][discord]
|
|
@@ -53,11 +53,13 @@ Note that `keycloak-js` is a peer dependency of Keycloak Angular. This change al
|
|
|
53
53
|
|
|
54
54
|
| Angular | keycloak-angular | keycloak-js | Support |
|
|
55
55
|
| :---------: | :--------------: | :---------: | :-----------------: |
|
|
56
|
-
|
|
|
56
|
+
| 13.x | 10.x.x | 18 | Bugs / New Features |
|
|
57
|
+
| 13.x | 9.x.x | 10 - 17 | Bugs |
|
|
58
|
+
| 11.x - 12.x | 8.4.0 | 10 - 15 | None |
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
Only the latest version of Angular in the table above is actively supported. This is due to the fact that compilation of Angular libraries is [incompatible between major versions](https://angular.io/guide/creating-libraries#ensuring-library-version-compatibility).
|
|
59
61
|
|
|
60
|
-
_Note_:
|
|
62
|
+
_Note_: Only for keycloak-angular **v.9**, there is the need to add `allowSyntheticDefaultImports: true` in the tsconfig.json file in your project. This is related to this [issue in the keycloak project](https://github.com/keycloak/keycloak/issues/9045). From keycloak-angular v.10 on, there is no need to set this configuration.
|
|
61
63
|
|
|
62
64
|
#### Choosing the right keycloak-js version
|
|
63
65
|
|
|
@@ -82,7 +84,7 @@ function initializeKeycloak(keycloak: KeycloakService) {
|
|
|
82
84
|
return () =>
|
|
83
85
|
keycloak.init({
|
|
84
86
|
config: {
|
|
85
|
-
url: 'http://localhost:8080
|
|
87
|
+
url: 'http://localhost:8080',
|
|
86
88
|
realm: 'your-realm',
|
|
87
89
|
clientId: 'your-client-id'
|
|
88
90
|
},
|
|
@@ -185,18 +187,54 @@ export class AuthGuard extends KeycloakAuthGuard {
|
|
|
185
187
|
|
|
186
188
|
## HttpClient Interceptor
|
|
187
189
|
|
|
188
|
-
By default all HttpClient requests will add the Authorization header in the format of: Authorization: Bearer **_TOKEN_
|
|
190
|
+
By default, all HttpClient requests will add the Authorization header in the format of: `Authorization: Bearer **_TOKEN_**`.
|
|
189
191
|
|
|
190
|
-
There is also the possibility to exclude
|
|
192
|
+
There is also the possibility to exclude requests that should not have the authorization header. This is accomplished by implementing the `shouldAddToken` method in the keycloak initialization. For example, the configuration below will not add the token to `GET` requests that match the paths `/assets` or `/clients/public`:
|
|
191
193
|
|
|
192
194
|
```ts
|
|
193
195
|
await keycloak.init({
|
|
194
196
|
config: {
|
|
195
|
-
url: 'http://localhost:8080
|
|
197
|
+
url: 'http://localhost:8080',
|
|
196
198
|
realm: 'your-realm',
|
|
197
199
|
clientId: 'your-client-id'
|
|
198
200
|
},
|
|
199
|
-
|
|
201
|
+
initOptions: {
|
|
202
|
+
onLoad: 'check-sso',
|
|
203
|
+
silentCheckSsoRedirectUri:
|
|
204
|
+
window.location.origin + '/assets/silent-check-sso.html'
|
|
205
|
+
},
|
|
206
|
+
shouldAddToken: (request) => {
|
|
207
|
+
const { method, url } = request;
|
|
208
|
+
|
|
209
|
+
const isGetRequest = 'GET' === method.toUpperCase();
|
|
210
|
+
const acceptablePaths = ['/assets', '/clients/public'];
|
|
211
|
+
const isAcceptablePathMatch = urls.some((path) => url.includes(path));
|
|
212
|
+
|
|
213
|
+
return !(isGetRequest && isAcceptablePathMatch);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
In the case where your application frequently polls an authenticated endpoint, you will find that users will not be logged out automatically over time. If that functionality is not desirable, you can add an http header to the polling requests then configure the `shouldUpdateToken` option in the keycloak initialization.
|
|
219
|
+
|
|
220
|
+
In the example below, any http requests with the header `token-update: false` will not trigger the user's keycloak token to be updated.
|
|
221
|
+
|
|
222
|
+
```ts
|
|
223
|
+
await keycloak.init({
|
|
224
|
+
config: {
|
|
225
|
+
url: 'http://localhost:8080',
|
|
226
|
+
realm: 'your-realm',
|
|
227
|
+
clientId: 'your-client-id'
|
|
228
|
+
},
|
|
229
|
+
initOptions: {
|
|
230
|
+
onLoad: 'check-sso',
|
|
231
|
+
silentCheckSsoRedirectUri:
|
|
232
|
+
window.location.origin + '/assets/silent-check-sso.html'
|
|
233
|
+
},
|
|
234
|
+
bearerExcludedUrls: ['/assets', '/clients/public'],
|
|
235
|
+
shouldUpdateToken: (request) => {
|
|
236
|
+
return !request.headers.get('token-update') === 'false';
|
|
237
|
+
}
|
|
200
238
|
});
|
|
201
239
|
```
|
|
202
240
|
|
|
@@ -221,8 +259,8 @@ keycloakService.keycloakEvents$.subscribe({
|
|
|
221
259
|
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
222
260
|
|
|
223
261
|
<!-- prettier-ignore -->
|
|
224
|
-
|[<img src="https://avatars3.githubusercontent.com/u/676270?v=4" width="89px;"/><br /><sub><b>Mauricio
|
|
225
|
-
| :---: | :---: |
|
|
262
|
+
|[<img src="https://avatars3.githubusercontent.com/u/676270?v=4" width="89px;"/><br /><sub><b>Mauricio Vigolo</b></sub>](https://github.com/mauriciovigolo)<br />|[<img src="https://avatars1.githubusercontent.com/u/695720?s=400&v=4" width="89px;"/><br /><sub><b>Jon Koops</b></sub>](https://github.com/https://github.com/jonkoops)<br />|
|
|
263
|
+
| :---: | :---: |
|
|
226
264
|
|
|
227
265
|
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
228
266
|
|
|
@@ -234,17 +272,16 @@ document.
|
|
|
234
272
|
**keycloak-angular** is licensed under the **[MIT license](LICENSE)**.
|
|
235
273
|
|
|
236
274
|
<!-- prettier-ignore-start -->
|
|
237
|
-
[license-mit-badge]: https://img.shields.io/badge/License-MIT-yellow
|
|
275
|
+
[license-mit-badge]: https://img.shields.io/badge/License-MIT-yellow
|
|
238
276
|
[license-mit]: https://opensource.org/licenses/MIT
|
|
239
|
-
[build-badge]: https://
|
|
240
|
-
[build]: https://
|
|
241
|
-
[vulnerabilities-badge]: https://
|
|
277
|
+
[build-badge]: https://img.shields.io/github/workflow/status/mauriciovigolo/keycloak-angular/CI?label=CI&logo=github
|
|
278
|
+
[build]: https://github.com/mauriciovigolo/keycloak-angular/actions/workflows/main.yml
|
|
279
|
+
[vulnerabilities-badge]: https://img.shields.io/snyk/vulnerabilities/github/mauriciovigolo/keycloak-angular?logo=snyk
|
|
242
280
|
[vulnerabilities]: https://snyk.io/test/github/mauriciovigolo/keycloak-angular
|
|
243
|
-
[npm-version-badge]: https://
|
|
244
|
-
[npm-
|
|
245
|
-
[npm-badge]: https://img.shields.io/npm/dm/keycloak-angular.svg
|
|
281
|
+
[npm-version-badge]: https://img.shields.io/npm/v/keycloak-angular
|
|
282
|
+
[npm-badge]: https://img.shields.io/npm/dm/keycloak-angular
|
|
246
283
|
[npm]: https://www.npmjs.com/package/keycloak-angular
|
|
247
|
-
[contributors-badge]: https://img.shields.io/badge/all_contributors-5-orange
|
|
248
|
-
[discord-badge]: https://img.shields.io/discord/790617227853692958
|
|
284
|
+
[contributors-badge]: https://img.shields.io/badge/all_contributors-5-orange
|
|
285
|
+
[discord-badge]: https://img.shields.io/discord/790617227853692958?color=7389d8&labelColor=6a7ec2&logo=discord&logoColor=fff
|
|
249
286
|
[discord]: https://discord.gg/mmzEhYXXDG
|
|
250
287
|
<!-- prettier-ignore-end -->
|
|
@@ -6,9 +6,9 @@ import { KeycloakBearerInterceptor } from './interceptors/keycloak-bearer.interc
|
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export class CoreModule {
|
|
8
8
|
}
|
|
9
|
-
CoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1
|
|
10
|
-
CoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1
|
|
11
|
-
CoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1
|
|
9
|
+
CoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
+
CoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CoreModule, imports: [CommonModule] });
|
|
11
|
+
CoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CoreModule, providers: [
|
|
12
12
|
KeycloakService,
|
|
13
13
|
{
|
|
14
14
|
provide: HTTP_INTERCEPTORS,
|
|
@@ -16,7 +16,7 @@ CoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13
|
|
|
16
16
|
multi: true
|
|
17
17
|
}
|
|
18
18
|
], imports: [[CommonModule]] });
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CoreModule, decorators: [{
|
|
20
20
|
type: NgModule,
|
|
21
21
|
args: [{
|
|
22
22
|
imports: [CommonModule],
|
|
@@ -30,4 +30,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImpor
|
|
|
30
30
|
]
|
|
31
31
|
}]
|
|
32
32
|
}] });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIvY29yZS9jb3JlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBYXZGLE1BQU0sT0FBTyxVQUFVOzt1R0FBVixVQUFVO3dHQUFWLFVBQVUsWUFWWCxZQUFZO3dHQVVYLFVBQVUsYUFUVjtRQUNULGVBQWU7UUFDZjtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsUUFBUSxFQUFFLHlCQUF5QjtZQUNuQyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsWUFSUSxDQUFDLFlBQVksQ0FBQzsyRkFVWixVQUFVO2tCQVh0QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsU0FBUyxFQUFFO3dCQUNULGVBQWU7d0JBQ2Y7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsUUFBUSxFQUFFLHlCQUF5Qjs0QkFDbkMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvciB9IGZyb20gJy4vaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICBLZXljbG9ha1NlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICB1c2VDbGFzczogS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvcixcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvcmVNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { combineLatest } from 'rxjs';
|
|
3
3
|
import { mergeMap } from 'rxjs/operators';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../services/keycloak.service";
|
|
@@ -7,6 +7,12 @@ export class KeycloakBearerInterceptor {
|
|
|
7
7
|
constructor(keycloak) {
|
|
8
8
|
this.keycloak = keycloak;
|
|
9
9
|
}
|
|
10
|
+
async conditionallyUpdateToken(req) {
|
|
11
|
+
if (this.keycloak.shouldUpdateToken(req)) {
|
|
12
|
+
return await this.keycloak.updateToken();
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
10
16
|
isUrlExcluded({ method, url }, { urlPattern, httpMethods }) {
|
|
11
17
|
const httpTest = httpMethods.length === 0 ||
|
|
12
18
|
httpMethods.join().indexOf(method.toUpperCase()) > -1;
|
|
@@ -18,11 +24,15 @@ export class KeycloakBearerInterceptor {
|
|
|
18
24
|
if (!enableBearerInterceptor) {
|
|
19
25
|
return next.handle(req);
|
|
20
26
|
}
|
|
21
|
-
const shallPass =
|
|
27
|
+
const shallPass = !this.keycloak.shouldAddToken(req) ||
|
|
28
|
+
excludedUrls.findIndex((item) => this.isUrlExcluded(req, item)) > -1;
|
|
22
29
|
if (shallPass) {
|
|
23
30
|
return next.handle(req);
|
|
24
31
|
}
|
|
25
|
-
return
|
|
32
|
+
return combineLatest([
|
|
33
|
+
this.conditionallyUpdateToken(req),
|
|
34
|
+
this.keycloak.isLoggedIn()
|
|
35
|
+
]).pipe(mergeMap(([_, loggedIn]) => loggedIn
|
|
26
36
|
? this.handleRequestWithTokenHeader(req, next)
|
|
27
37
|
: next.handle(req)));
|
|
28
38
|
}
|
|
@@ -33,9 +43,9 @@ export class KeycloakBearerInterceptor {
|
|
|
33
43
|
}));
|
|
34
44
|
}
|
|
35
45
|
}
|
|
36
|
-
KeycloakBearerInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1
|
|
37
|
-
KeycloakBearerInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1
|
|
46
|
+
KeycloakBearerInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakBearerInterceptor, deps: [{ token: i1.KeycloakService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
47
|
+
KeycloakBearerInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakBearerInterceptor });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakBearerInterceptor, decorators: [{
|
|
39
49
|
type: Injectable
|
|
40
50
|
}], ctorParameters: function () { return [{ type: i1.KeycloakService }]; } });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYmVhcmVyLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2V5Y2xvYWstYW5ndWxhci9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUTNDLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFZMUMsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUFvQixRQUF5QjtRQUF6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUFHLENBQUM7SUFTekMsS0FBSyxDQUFDLHdCQUF3QixDQUNwQyxHQUF5QjtRQUV6QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFXTyxhQUFhLENBQ25CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBd0IsRUFDckMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFvQjtRQUU3QyxNQUFNLFFBQVEsR0FDWixXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDeEIsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLE9BQU8sUUFBUSxJQUFJLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBU00sU0FBUyxDQUNkLEdBQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hFLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7UUFFRCxNQUFNLFNBQVMsR0FDYixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUNsQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksU0FBUyxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtTQUMzQixDQUFDLENBQUMsSUFBSSxDQUNMLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBcUIsRUFBRSxFQUFFLENBQzdDLFFBQVE7WUFDTixDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQ3JCLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFRTyw0QkFBNEIsQ0FDbEMsR0FBeUIsRUFDekIsSUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3JELFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOztzSEE3RlUseUJBQXlCOzBIQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZFxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwRXZlbnRcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5pbXBvcnQgeyBFeGNsdWRlZFVybFJlZ2V4IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcblxuLyoqXG4gKiBUaGlzIGludGVyY2VwdG9yIGluY2x1ZGVzIHRoZSBiZWFyZXIgYnkgZGVmYXVsdCBpbiBhbGwgSHR0cENsaWVudCByZXF1ZXN0cy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBleGNsdWRlIHNvbWUgVVJMcyBmcm9tIGFkZGluZyB0aGUgYmVhcmVyLCBwbGVhc2UsIHRha2UgYSBsb29rXG4gKiBhdCB0aGUge0BsaW5rIEtleWNsb2FrT3B0aW9uc30gYmVhcmVyRXhjbHVkZWRVcmxzIHByb3BlcnR5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSkge31cblxuICAvKipcbiAgICogQ2FsbHMgdG8gdXBkYXRlIHRoZSBrZXljbG9hayB0b2tlbiBpZiB0aGUgcmVxdWVzdCBzaG91bGQgdXBkYXRlIHRoZSB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHJlcSBodHRwIHJlcXVlc3QgZnJvbSBAYW5ndWxhciBodHRwIG1vZHVsZS5cbiAgICogQHJldHVybnNcbiAgICogQSBwcm9taXNlIGJvb2xlYW4gZm9yIHRoZSB0b2tlbiB1cGRhdGUgb3Igbm9vcCByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbmRpdGlvbmFsbHlVcGRhdGVUb2tlbihcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmtleWNsb2FrLnNob3VsZFVwZGF0ZVRva2VuKHJlcSkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmtleWNsb2FrLnVwZGF0ZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQ2hlY2tzIGlmIHRoZSB1cmwgaXMgZXhjbHVkZWQgZnJvbSBoYXZpbmcgdGhlIEJlYXJlciBBdXRob3JpemF0aW9uXG4gICAqIGhlYWRlciBhZGRlZC5cbiAgICpcbiAgICogQHBhcmFtIHJlcSBodHRwIHJlcXVlc3QgZnJvbSBAYW5ndWxhciBodHRwIG1vZHVsZS5cbiAgICogQHBhcmFtIGV4Y2x1ZGVkVXJsUmVnZXggY29udGFpbnMgdGhlIHVybCBwYXR0ZXJuIGFuZCB0aGUgaHR0cCBtZXRob2RzLFxuICAgKiBleGNsdWRlZCBmcm9tIGFkZGluZyB0aGUgYmVhcmVyIGF0IHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqL1xuICBwcml2YXRlIGlzVXJsRXhjbHVkZWQoXG4gICAgeyBtZXRob2QsIHVybCB9OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgICB7IHVybFBhdHRlcm4sIGh0dHBNZXRob2RzIH06IEV4Y2x1ZGVkVXJsUmVnZXhcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaHR0cFRlc3QgPVxuICAgICAgaHR0cE1ldGhvZHMubGVuZ3RoID09PSAwIHx8XG4gICAgICBodHRwTWV0aG9kcy5qb2luKCkuaW5kZXhPZihtZXRob2QudG9VcHBlckNhc2UoKSkgPiAtMTtcblxuICAgIGNvbnN0IHVybFRlc3QgPSB1cmxQYXR0ZXJuLnRlc3QodXJsKTtcblxuICAgIHJldHVybiBodHRwVGVzdCAmJiB1cmxUZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVyY2VwdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdCB1cmwgbWF0Y2hlcyB0aGUgZXhjbHVkZWRVcmxzLlxuICAgKiBJZiBub3QsIGFkZHMgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHRvIHRoZSByZXF1ZXN0IGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHBhcmFtIHJlcVxuICAgKiBAcGFyYW0gbmV4dFxuICAgKi9cbiAgcHVibGljIGludGVyY2VwdChcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgY29uc3QgeyBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciwgZXhjbHVkZWRVcmxzIH0gPSB0aGlzLmtleWNsb2FrO1xuICAgIGlmICghZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IpIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYWxsUGFzczogYm9vbGVhbiA9XG4gICAgICAhdGhpcy5rZXljbG9hay5zaG91bGRBZGRUb2tlbihyZXEpIHx8XG4gICAgICBleGNsdWRlZFVybHMuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmlzVXJsRXhjbHVkZWQocmVxLCBpdGVtKSkgPiAtMTtcbiAgICBpZiAoc2hhbGxQYXNzKSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNvbmRpdGlvbmFsbHlVcGRhdGVUb2tlbihyZXEpLFxuICAgICAgdGhpcy5rZXljbG9hay5pc0xvZ2dlZEluKClcbiAgICBdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFtfLCBsb2dnZWRJbl06IFtib29sZWFuLCBib29sZWFuXSkgPT5cbiAgICAgICAgbG9nZ2VkSW5cbiAgICAgICAgICA/IHRoaXMuaGFuZGxlUmVxdWVzdFdpdGhUb2tlbkhlYWRlcihyZXEsIG5leHQpXG4gICAgICAgICAgOiBuZXh0LmhhbmRsZShyZXEpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSB0b2tlbiBvZiB0aGUgY3VycmVudCB1c2VyIHRvIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0gcmVxXG4gICAqIEBwYXJhbSBuZXh0XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlcXVlc3RXaXRoVG9rZW5IZWFkZXIoXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICAgIHJldHVybiB0aGlzLmtleWNsb2FrLmFkZFRva2VuVG9IZWFkZXIocmVxLmhlYWRlcnMpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaGVhZGVyc1dpdGhCZWFyZXIpID0+IHtcbiAgICAgICAgY29uc3Qga2NSZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiBoZWFkZXJzV2l0aEJlYXJlciB9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGtjUmVxKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -7,5 +7,6 @@ export var KeycloakEventType;
|
|
|
7
7
|
KeycloakEventType[KeycloakEventType["OnAuthSuccess"] = 4] = "OnAuthSuccess";
|
|
8
8
|
KeycloakEventType[KeycloakEventType["OnReady"] = 5] = "OnReady";
|
|
9
9
|
KeycloakEventType[KeycloakEventType["OnTokenExpired"] = 6] = "OnTokenExpired";
|
|
10
|
+
KeycloakEventType[KeycloakEventType["OnActionUpdate"] = 7] = "OnActionUpdate";
|
|
10
11
|
})(KeycloakEventType || (KeycloakEventType = {}));
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sQ0FBTixJQUFZLGlCQW9DWDtBQXBDRCxXQUFZLGlCQUFpQjtJQUkzQix1RUFBVyxDQUFBO0lBS1gseUVBQVksQ0FBQTtJQUlaLHFGQUFrQixDQUFBO0lBSWxCLHlGQUFvQixDQUFBO0lBSXBCLDJFQUFhLENBQUE7SUFJYiwrREFBTyxDQUFBO0lBTVAsNkVBQWMsQ0FBQTtJQUlkLDZFQUFjLENBQUE7QUFDaEIsQ0FBQyxFQXBDVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBb0M1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZFxuICovXG5cbi8qKlxuICogS2V5Y2xvYWsgZXZlbnQgdHlwZXMsIGFzIGRlc2NyaWJlZCBhdCB0aGUga2V5Y2xvYWstanMgZG9jdW1lbnRhdGlvbjpcbiAqIGh0dHBzOi8vd3d3LmtleWNsb2FrLm9yZy9kb2NzL2xhdGVzdC9zZWN1cmluZ19hcHBzL2luZGV4Lmh0bWwjY2FsbGJhY2stZXZlbnRzXG4gKi9cbmV4cG9ydCBlbnVtIEtleWNsb2FrRXZlbnRUeXBlIHtcbiAgLyoqXG4gICAqIENhbGxlZCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIGF1dGhlbnRpY2F0aW9uLlxuICAgKi9cbiAgT25BdXRoRXJyb3IsXG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIG91dFxuICAgKiAod2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgc2Vzc2lvbiBzdGF0dXMgaWZyYW1lIGlzIGVuYWJsZWQsIG9yIGluIENvcmRvdmEgbW9kZSkuXG4gICAqL1xuICBPbkF1dGhMb2dvdXQsXG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSB0b2tlbi5cbiAgICovXG4gIE9uQXV0aFJlZnJlc2hFcnJvcixcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB0b2tlbiBpcyByZWZyZXNoZWQuXG4gICAqL1xuICBPbkF1dGhSZWZyZXNoU3VjY2VzcyxcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgdXNlciBpcyBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZC5cbiAgICovXG4gIE9uQXV0aFN1Y2Nlc3MsXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgYWRhcHRlciBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIE9uUmVhZHksXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgYWNjZXNzIHRva2VuIGlzIGV4cGlyZWQuIElmIGEgcmVmcmVzaCB0b2tlbiBpcyBhdmFpbGFibGUgdGhlIHRva2VuXG4gICAqIGNhbiBiZSByZWZyZXNoZWQgd2l0aCB1cGRhdGVUb2tlbiwgb3IgaW4gY2FzZXMgd2hlcmUgaXQgaXMgbm90ICh0aGF0IGlzLCB3aXRoIGltcGxpY2l0IGZsb3cpXG4gICAqIHlvdSBjYW4gcmVkaXJlY3QgdG8gbG9naW4gc2NyZWVuIHRvIG9idGFpbiBhIG5ldyBhY2Nlc3MgdG9rZW4uXG4gICAqL1xuICBPblRva2VuRXhwaXJlZCxcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgQUlBIGhhcyBiZWVuIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBPbkFjdGlvblVwZGF0ZVxufVxuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiBhbiBldmVudCB0cmlnZ2VyZWQgYnkgS2V5Y2xvYWssIGNvbnRhaW5zIGl0J3MgdHlwZVxuICogYW5kIGFyZ3VtZW50cyAoaWYgYW55KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXljbG9ha0V2ZW50IHtcbiAgLyoqXG4gICAqIEV2ZW50IHR5cGUgYXMgZGVzY3JpYmVkIGF0IHtAbGluayBLZXljbG9ha0V2ZW50VHlwZX0uXG4gICAqL1xuICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZTtcbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBmcm9tIHRoZSBrZXljbG9hay1qcyBldmVudCBmdW5jdGlvbi5cbiAgICovXG4gIGFyZ3M/OiB1bmtub3duO1xufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbi8qKlxuICogSFRUUCBNZXRob2RzXG4gKi9cbmV4cG9ydCB0eXBlIEh0dHBNZXRob2RzID1cbiAgfCAnR0VUJ1xuICB8ICdQT1NUJ1xuICB8ICdQVVQnXG4gIHwgJ0RFTEVURSdcbiAgfCAnT1BUSU9OUydcbiAgfCAnSEVBRCdcbiAgfCAnUEFUQ0gnO1xuXG4vKipcbiAqIEV4Y2x1ZGVkVXJsIHR5cGUgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgdXJsIGFuZCB0aGUgSFRUUCBtZXRob2QgdGhhdFxuICogc2hvdWxkIG5vdCBiZSBpbnRlcmNlcHRlZCBieSB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAqXG4gKiBFeGFtcGxlOlxuICogY29uc3QgZXhjbHVkZWRVcmw6IEV4Y2x1ZGVkVXJsW10gPSBbXG4gKiAge1xuICogICAgdXJsOiAncmVwb3J0cy9wdWJsaWMnXG4gKiAgICBodHRwTWV0aG9kczogWydHRVQnXVxuICogIH1cbiAqIF1cbiAqXG4gKiBJbiB0aGUgZXhhbXBsZSBhYm92ZSBmb3IgVVJMIHJlcG9ydHMvcHVibGljIGFuZCBIVFRQIE1ldGhvZCBHRVQgdGhlXG4gKiBiZWFyZXIgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBhZGRlZC5cbiAqXG4gKiBJZiB0aGUgdXJsIGlzIGluZm9ybWVkIGJ1dCBodHRwTWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgYmVhcmVyXG4gKiB3aWxsIG5vdCBiZSBhZGRlZCBmb3IgYWxsIEhUVFAgTWV0aG9kcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGNsdWRlZFVybCB7XG4gIHVybDogc3RyaW5nO1xuICBodHRwTWV0aG9kcz86IEh0dHBNZXRob2RzW107XG59XG5cbi8qKlxuICogU2ltaWxhciB0byBFeGNsdWRlZFVybCwgY29udGFpbnMgdGhlIEhUVFAgbWV0aG9kcyBhbmQgYSByZWdleCB0b1xuICogaW5jbHVkZSB0aGUgdXJsIHBhdHRlcm5zLlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBLZXljbG9ha1NlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVkZWRVcmxSZWdleCB7XG4gIHVybFBhdHRlcm46IFJlZ0V4cDtcbiAgaHR0cE1ldGhvZHM/OiBIdHRwTWV0aG9kc1tdO1xufVxuXG4vKipcbiAqIGtleWNsb2FrLWFuZ3VsYXIgaW5pdGlhbGl6YXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXljbG9ha09wdGlvbnMge1xuICAvKipcbiAgICogQ29uZmlncyB0byBpbml0IHRoZSBrZXljbG9hay1qcyBsaWJyYXJ5LiBJZiB1bmRlZmluZWQsIHdpbGwgbG9vayBmb3IgYSBrZXljbG9hay5qc29uIGZpbGVcbiAgICogYXQgcm9vdCBvZiB0aGUgcHJvamVjdC5cbiAgICogSWYgbm90IHVuZGVmaW5lZCwgY2FuIGJlIGEgc3RyaW5nIG1lYW5pbmcgdGhlIHVybCB0byB0aGUga2V5Y2xvYWsuanNvbiBmaWxlIG9yIGFuIG9iamVjdFxuICAgKiBvZiB7QGxpbmsgS2V5Y2xvYWsuS2V5Y2xvYWtDb25maWd9LiBVc2UgdGhpcyBjb25maWd1cmF0aW9uIGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGtleWNsb2FrIHNlcnZlcixcbiAgICogcmVhbG0sIGNsaWVudElkLiBUaGlzIGlzIHVzZWZ1bGwgaWYgeW91IGhhdmUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGZvciBwcm9kdWN0aW9uLCBzdGFnZVxuICAgKiBhbmQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLiBIaW50OiBNYWtlIHVzZSBvZiBBbmd1bGFyIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25maWc/OiBzdHJpbmcgfCBLZXljbG9hay5LZXljbG9ha0NvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgS2V5Y2xvYWsgYWRhcHRlciwgbWF0Y2hlcyB0aGUgb3B0aW9ucyBhcyBwcm92aWRlZCBieSBLZXljbG9hayBpdHNlbGYuXG4gICAqL1xuICBpbml0T3B0aW9ucz86IEtleWNsb2FrLktleWNsb2FrSW5pdE9wdGlvbnM7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByZXF1ZXN0cyBtYWRlIGJ5IEFuZ3VsYXIgSHR0cENsaWVudCB3aWxsIGJlIGludGVyY2VwdGVkIGluIG9yZGVyIHRvXG4gICAqIGFkZCB0aGUgYmVhcmVyIGluIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyLiBIb3dldmVyLCBpZiB0aGlzIGlzIGEgbm90IGRlc2lyZWRcbiAgICogZmVhdHVyZSwgdGhlIGVuYWJsZUJlYXJlckludGVyY2VwdG9yIG11c3QgYmUgZmFsc2UuXG4gICAqXG4gICAqIEJyaWVmbHksIGlmIGVuYWJsZUJlYXJlckludGVyY2VwdG9yID09PSBmYWxzZSwgdGhlIGJlYXJlciB3aWxsIG5vdCBiZSBhZGRlZFxuICAgKiB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIGV4ZWN1dGlvbiBvZiBsb2FkVXNlclByb2ZpbGUgYWZ0ZXIgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uIGNvbnNpZGVyaW5nIHRoYXQgdGhlXG4gICAqIHVzZXIgbG9nZ2VkIGluLlxuICAgKiBUaGlzIG9wdGlvbiBpcyByZWNvbW1lbmRlZCBpZiBpcyBkZXNpcmFibGUgdG8gaGF2ZSB0aGUgdXNlciBkZXRhaWxzIGF0IHRoZSBiZWdpbm5pbmcsXG4gICAqIHNvIGFmdGVyIHRoZSBsb2dpbiwgdGhlIGxvYWRVc2VyUHJvZmlsZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhbmQgaXQncyB2YWx1ZSBjYWNoZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA/OiBib29sZWFuO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogU3RyaW5nIEFycmF5IHRvIGV4Y2x1ZGUgdGhlIHVybHMgdGhhdCBzaG91bGQgbm90IGhhdmUgdGhlIEF1dGhvcml6YXRpb24gSGVhZGVyIGF1dG9tYXRpY2FsbHlcbiAgICogYWRkZWQuIFRoaXMgbGlicmFyeSBtYWtlcyB1c2Ugb2YgQW5ndWxhciBIdHRwIEludGVyY2VwdG9yLCB0byBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgQmVhcmVyXG4gICAqIHRva2VuIHRvIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgYmVhcmVyRXhjbHVkZWRVcmxzPzogKHN0cmluZyB8IEV4Y2x1ZGVkVXJsKVtdO1xuICAvKipcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXNcbiAgICogKipBdXRob3JpemF0aW9uKiouIElmIHRoZSBiYWNrZW5kIGV4cGVjdHMgcmVxdWVzdHMgdG8gaGF2ZSBhIHRva2VuIGluIGEgZGlmZmVyZW50IGhlYWRlciwgeW91XG4gICAqIHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSwgaS5lOiAqKkpXVC1BdXRob3JpemF0aW9uKiouIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBIdHRwIEhlYWRlclxuICAgKiBBdXRob3JpemF0aW9uIGFzIFwiSldULUF1dGhvcml6YXRpb246IGJlYXJlciA8dG9rZW4+XCIuXG4gICAqL1xuICBhdXRob3JpemF0aW9uSGVhZGVyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBwYXJhbS4gVGhlIGRlZmF1bHQgdmFsdWUgaXNcbiAgICogKipCZWFyZXIqKiwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBIdHRwIEhlYWRlciBBdXRob3JpemF0aW9uIGFzIFwiQXV0aG9yaXphdGlvbjogQmVhcmVyIDx0b2tlbj5cIi5cbiAgICpcbiAgICogSWYgYW55IG90aGVyIHZhbHVlIGlzIG5lZWRlZCBieSB0aGUgYmFja2VuZCBpbiB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIsIHlvdSBzaG91bGQgY2hhbmdlIHRoaXNcbiAgICogdmFsdWUuXG4gICAqXG4gICAqIFdhcm5pbmc6IHRoaXMgdmFsdWUgbXVzdCBiZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGtleWNsb2FrIHNlcnZlciBpbnN0YW5jZSBhbmQgdGhlIGFkYXB0ZXIuXG4gICAqL1xuICBiZWFyZXJQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHRva2VuIG5lZWRzIHRvIGJlIHVwZGF0ZWQuIElmIHRoZSB0b2tlblxuICAgKiB3aWxsIGV4cGlyZSBpcyBmZXdlciBzZWNvbmRzIHRoYW4gdGhlIHVwZGF0ZU1pblZhbGlkaXR5IHZhbHVlLCB0aGVuIGl0IHdpbGwgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAuXG4gICAqL1xuICB1cGRhdGVNaW5WYWxpZGl0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHRlbGwgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3Igd2hldGhlciB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSByZXF1ZXN0XG4gICAqIG9yIHRvIGxlYXZlIHRoZSByZXF1ZXN0IGFzIGl0IGlzLiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYHRydWVgLCB0aGUgcmVxdWVzdCB3aWxsIGhhdmUgdGhlIHRva2VuXG4gICAqIHByZXNlbnQgb24gaXQuIElmIGl0IGlzIGBmYWxzZWAsIHRoZSB0b2tlbiB3aWxsIGJlIGxlZnQgb2ZmIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYHRydWVgLlxuICAgKi9cbiAgc2hvdWxkQWRkVG9rZW4/OiAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB0ZWxsIHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yIGlmIHRoZSB0b2tlbiBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3JcbiAgICogdXBkYXRpbmcgYXMgYSBwYXJ0IG9mIHRoZSByZXF1ZXN0IGJlaW5nIG1hZGUuIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBgdHJ1ZWAsIHRoZSByZXF1ZXN0IHdpbGxcbiAgICogY2hlY2sgdGhlIHRva2VuJ3MgZXhwaXJ5IHRpbWUgYW5kIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIHNlY29uZHMgY29uZmlndXJlZCBieVxuICAgKiB1cGRhdGVNaW5WYWxpZGl0eSB0aGVuIGl0IHdpbGwgYmUgdXBkYXRlZCBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgbWFkZS4gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzXG4gICAqIGZhbHNlLCB0aGUgdG9rZW4gd2lsbCBub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZVRva2VuPzogKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+KSA9PiBib29sZWFuO1xufVxuIl19
|
|
@@ -3,18 +3,15 @@ export class KeycloakAuthGuard {
|
|
|
3
3
|
this.router = router;
|
|
4
4
|
this.keycloakAngular = keycloakAngular;
|
|
5
5
|
}
|
|
6
|
-
canActivate(route, state) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
reject('An error happened during access validation. Details:' + error);
|
|
16
|
-
}
|
|
17
|
-
});
|
|
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
|
+
}
|
|
18
15
|
}
|
|
19
16
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYXV0aC1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLWF1dGgtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0JBLE1BQU0sT0FBZ0IsaUJBQWlCO0lBVXJDLFlBQ1ksTUFBYyxFQUNkLGVBQWdDO1FBRGhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDekMsQ0FBQztJQVNKLEtBQUssQ0FBQyxXQUFXLENBQ2YsS0FBNkIsRUFDN0IsS0FBMEI7UUFFMUIsSUFBSTtZQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUzRCxPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELEdBQUcsS0FBSyxDQUMvRCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBZUYiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiAqL1xuXG5pbXBvcnQge1xuICBDYW5BY3RpdmF0ZSxcbiAgUm91dGVyLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxUcmVlXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4va2V5Y2xvYWsuc2VydmljZSc7XG5cbi8qKlxuICogQSBzaW1wbGUgZ3VhcmQgaW1wbGVtZW50YXRpb24gb3V0IG9mIHRoZSBib3guIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluaGVyaXRlZCBhbmRcbiAqIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gVGhlIG9ubHkgbWV0aG9kIHRoYXQgc2hvdWxkIGJlIGltcGxlbWVudGVkIGlzICNpc0FjY2Vzc0FsbG93ZWQuXG4gKiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGF1dGhvcml6YXRpb24gZmxvdyBpcyB1c3VhbGx5IG5vdCB1bmlxdWUsIHNvIGluIHRoaXMgd2F5IHlvdSB3aWxsXG4gKiBoYXZlIG1vcmUgZnJlZWRvbSB0byBjdXN0b21pemUgeW91ciBhdXRob3JpemF0aW9uIGZsb3cuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBLZXljbG9ha0F1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkIG9yIG5vdC5cbiAgICovXG4gIHByb3RlY3RlZCBhdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogUm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBJdCBjb250YWlucyB0aGUgY2xpZW50SWQgYW5kIHJlYWxtIHVzZXIgcm9sZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcm9sZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQga2V5Y2xvYWtBbmd1bGFyOiBLZXljbG9ha1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDYW5BY3RpdmF0ZSBjaGVja3MgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGFuZCBnZXQgdGhlIGZ1bGwgbGlzdCBvZiByb2xlcyAoUkVBTE0gKyBDTElFTlQpXG4gICAqIG9mIHRoZSBsb2dnZWQgdXNlci4gVGhpcyB2YWx1ZXMgYXJlIHNldCB0byBhdXRoZW50aWNhdGVkIGFuZCByb2xlcyBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSByb3V0ZVxuICAgKiBAcGFyYW0gc3RhdGVcbiAgICovXG4gIGFzeW5jIGNhbkFjdGl2YXRlKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gYXdhaXQgdGhpcy5rZXljbG9ha0FuZ3VsYXIuaXNMb2dnZWRJbigpO1xuICAgICAgdGhpcy5yb2xlcyA9IGF3YWl0IHRoaXMua2V5Y2xvYWtBbmd1bGFyLmdldFVzZXJSb2xlcyh0cnVlKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaXNBY2Nlc3NBbGxvd2VkKHJvdXRlLCBzdGF0ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0FuIGVycm9yIGhhcHBlbmVkIGR1cmluZyBhY2Nlc3MgdmFsaWRhdGlvbi4gRGV0YWlsczonICsgZXJyb3JcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB5b3VyIG93biBjdXN0b21pemVkIGF1dGhvcml6YXRpb24gZmxvdyBpbiB0aGlzIG1ldGhvZC4gRnJvbSBoZXJlIHlvdSBhbHJlYWR5IGtub3duXG4gICAqIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgKHRoaXMuYXV0aGVudGljYXRlZCkgYW5kIHRoZSB1c2VyIHJvbGVzICh0aGlzLnJvbGVzKS5cbiAgICpcbiAgICogUmV0dXJuIGEgVXJsVHJlZSBpZiB0aGUgdXNlciBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byBhbm90aGVyIHJvdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gcm91dGVcbiAgICogQHBhcmFtIHN0YXRlXG4gICAqL1xuICBhYnN0cmFjdCBpc0FjY2Vzc0FsbG93ZWQoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgKTogUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT47XG59XG4iXX0=
|
|
@@ -37,6 +37,12 @@ export class KeycloakService {
|
|
|
37
37
|
type: KeycloakEventType.OnTokenExpired
|
|
38
38
|
});
|
|
39
39
|
};
|
|
40
|
+
this._instance.onActionUpdate = (state) => {
|
|
41
|
+
this._keycloakEvents$.next({
|
|
42
|
+
args: state,
|
|
43
|
+
type: KeycloakEventType.OnActionUpdate
|
|
44
|
+
});
|
|
45
|
+
};
|
|
40
46
|
this._instance.onReady = (authenticated) => {
|
|
41
47
|
this._keycloakEvents$.next({
|
|
42
48
|
args: authenticated,
|
|
@@ -61,13 +67,16 @@ export class KeycloakService {
|
|
|
61
67
|
}
|
|
62
68
|
return excludedUrls;
|
|
63
69
|
}
|
|
64
|
-
initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions }) {
|
|
70
|
+
initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions, updateMinValidity = 20, shouldAddToken = () => true, shouldUpdateToken = () => true }) {
|
|
65
71
|
this._enableBearerInterceptor = enableBearerInterceptor;
|
|
66
72
|
this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
|
|
67
73
|
this._authorizationHeaderName = authorizationHeaderName;
|
|
68
74
|
this._bearerPrefix = bearerPrefix.trim().concat(' ');
|
|
69
75
|
this._excludedUrls = this.loadExcludedUrls(bearerExcludedUrls);
|
|
70
76
|
this._silentRefresh = initOptions ? initOptions.flow === 'implicit' : false;
|
|
77
|
+
this._updateMinValidity = updateMinValidity;
|
|
78
|
+
this.shouldAddToken = shouldAddToken;
|
|
79
|
+
this.shouldUpdateToken = shouldUpdateToken;
|
|
71
80
|
}
|
|
72
81
|
async init(options = {}) {
|
|
73
82
|
this.initServiceValues(options);
|
|
@@ -123,11 +132,7 @@ export class KeycloakService {
|
|
|
123
132
|
}
|
|
124
133
|
async isLoggedIn() {
|
|
125
134
|
try {
|
|
126
|
-
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
await this.updateToken(20);
|
|
130
|
-
return true;
|
|
135
|
+
return this._instance.authenticated;
|
|
131
136
|
}
|
|
132
137
|
catch (error) {
|
|
133
138
|
return false;
|
|
@@ -136,7 +141,7 @@ export class KeycloakService {
|
|
|
136
141
|
isTokenExpired(minValidity = 0) {
|
|
137
142
|
return this._instance.isTokenExpired(minValidity);
|
|
138
143
|
}
|
|
139
|
-
async updateToken(
|
|
144
|
+
async updateToken() {
|
|
140
145
|
if (this._silentRefresh) {
|
|
141
146
|
if (this.isTokenExpired()) {
|
|
142
147
|
throw new Error('Failed to refresh the token, or the session is expired');
|
|
@@ -146,7 +151,7 @@ export class KeycloakService {
|
|
|
146
151
|
if (!this._instance) {
|
|
147
152
|
throw new Error('Keycloak Angular library is not initialized.');
|
|
148
153
|
}
|
|
149
|
-
return this._instance.updateToken(
|
|
154
|
+
return this._instance.updateToken(this._updateMinValidity);
|
|
150
155
|
}
|
|
151
156
|
async loadUserProfile(forceReload = false) {
|
|
152
157
|
if (this._userProfile && !forceReload) {
|
|
@@ -158,7 +163,6 @@ export class KeycloakService {
|
|
|
158
163
|
return (this._userProfile = await this._instance.loadUserProfile());
|
|
159
164
|
}
|
|
160
165
|
async getToken() {
|
|
161
|
-
await this.updateToken(10);
|
|
162
166
|
return this._instance.token;
|
|
163
167
|
}
|
|
164
168
|
getUsername() {
|
|
@@ -188,9 +192,9 @@ export class KeycloakService {
|
|
|
188
192
|
return this._keycloakEvents$;
|
|
189
193
|
}
|
|
190
194
|
}
|
|
191
|
-
KeycloakService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1
|
|
192
|
-
KeycloakService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1
|
|
193
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1
|
|
195
|
+
KeycloakService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
196
|
+
KeycloakService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakService });
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakService, decorators: [{
|
|
194
198
|
type: Injectable
|
|
195
199
|
}] });
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQztBQU9uQyxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBVWhGLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBdUNVLHFCQUFnQixHQUN0QixJQUFJLE9BQU8sRUFBaUIsQ0FBQztLQXNjaEM7SUE3YlMsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFdBQVc7YUFDcEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtZQUN6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LElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFRTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQU9ELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFZTSxnQkFBZ0IsQ0FBQyxVQUF1QixJQUFJLFdBQVcsRUFBRTtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQy9CLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1osS0FBSztZQUNILENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNULElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQzNCO1lBQ0gsQ0FBQyxDQUFDLE9BQU8sQ0FDWixDQUNGLENBQUM7SUFDSixDQUFDO0lBU0QsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBU0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFRRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBcUJELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOzs0R0E1ZVUsZUFBZTtnSEFBZixlQUFlOzJGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgU3ViamVjdCwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IEtleWNsb2FrIGZyb20gJ2tleWNsb2FrLWpzJztcblxuaW1wb3J0IHtcbiAgRXhjbHVkZWRVcmwsXG4gIEV4Y2x1ZGVkVXJsUmVnZXgsXG4gIEtleWNsb2FrT3B0aW9uc1xufSBmcm9tICcuLi9pbnRlcmZhY2VzL2tleWNsb2FrLW9wdGlvbnMnO1xuaW1wb3J0IHsgS2V5Y2xvYWtFdmVudCwgS2V5Y2xvYWtFdmVudFR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50JztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIGV4cG9zZSBleGlzdGVudCBtZXRob2RzIGZyb20gdGhlIEtleWNsb2FrIEpTIGFkYXB0ZXIsIGFkZGluZyBuZXdcbiAqIGZ1bmN0aW9uYWxpdGllcyB0byBpbXByb3ZlIHRoZSB1c2Ugb2Yga2V5Y2xvYWsgaW4gQW5ndWxhciB2ID4gNC4zIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBUaGlzIGNsYXNzIHNob3VsZCBiZSBpbmplY3RlZCBpbiB0aGUgYXBwbGljYXRpb24gYm9vdHN0cmFwLCBzbyB0aGUgc2FtZSBpbnN0YW5jZSB3aWxsIGJlIHVzZWRcbiAqIGFsb25nIHRoZSB3ZWIgYXBwbGljYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBLZXljbG9ha1NlcnZpY2Uge1xuICAvKipcbiAgICogS2V5Y2xvYWstanMgaW5zdGFuY2UuXG4gICAqL1xuICBwcml2YXRlIF9pbnN0YW5jZTogS2V5Y2xvYWsuS2V5Y2xvYWtJbnN0YW5jZTtcbiAgLyoqXG4gICAqIFVzZXIgcHJvZmlsZSBhcyBLZXljbG9ha1Byb2ZpbGUgaW50ZXJmYWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXNlclByb2ZpbGU6IEtleWNsb2FrLktleWNsb2FrUHJvZmlsZTtcbiAgLyoqXG4gICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGJlYXJlciB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqL1xuICBwcml2YXRlIF9lbmFibGVCZWFyZXJJbnRlcmNlcHRvcjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdGhlIGltcGxpY2l0IGZsb3cgaXMgY2hvb3NlbiB0aGVyZSBtdXN0IGV4aXN0IGEgc2lsZW50UmVmcmVzaCwgYXMgdGhlcmUgaXNcbiAgICogbm8gcmVmcmVzaCB0b2tlbi5cbiAgICovXG4gIHByaXZhdGUgX3NpbGVudFJlZnJlc2g6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBwcm9maWxlIHNob3VsZCBiZSBsb2FkZWQgYXQgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uLFxuICAgKiBqdXN0IGFmdGVyIHRoZSBsb2dpbi5cbiAgICovXG4gIHByaXZhdGUgX2xvYWRVc2VyUHJvZmlsZUF0U3RhcnRVcDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBiZWFyZXIgcHJlZml4IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgQXV0aG9yaXphdGlvbiBIZWFkZXIuXG4gICAqL1xuICBwcml2YXRlIF9iZWFyZXJQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGVhZGVyTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGV4Y2x1ZGVkIHVybHMgcGF0dGVybnMgdGhhdCBtdXN0IHNraXAgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gICAqL1xuICBwcml2YXRlIF9leGNsdWRlZFVybHM6IEV4Y2x1ZGVkVXJsUmVnZXhbXTtcbiAgLyoqXG4gICAqIE9ic2VydmVyIGZvciB0aGUga2V5Y2xvYWsgZXZlbnRzXG4gICAqL1xuICBwcml2YXRlIF9rZXljbG9ha0V2ZW50cyQ6IFN1YmplY3Q8S2V5Y2xvYWtFdmVudD4gPVxuICAgIG5ldyBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoZSBrZXljbG9hay1qcyBldmVudHMgdG8gdGhlIGtleWNsb2FrRXZlbnRzIFN1YmplY3RcbiAgICogd2hpY2ggaXMgYSBnb29kIHdheSB0byBtb25pdG9yIGZvciBjaGFuZ2VzLCBpZiBuZWVkZWQuXG4gICAqXG4gICAqIFRoZSBrZXljbG9ha0V2ZW50cyByZXR1cm5zIHRoZSBrZXljbG9hay1qcyBldmVudCB0eXBlIGFuZCBhbnlcbiAgICogYXJndW1lbnQgaWYgdGhlIHNvdXJjZSBmdW5jdGlvbiBwcm92aWRlcyBhbnkuXG4gICAqL1xuICBwcml2YXRlIGJpbmRzS2V5Y2xvYWtFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoRXJyb3IgPSAoZXJyb3JEYXRhKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIGFyZ3M6IGVycm9yRGF0YSxcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoRXJyb3JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhMb2dvdXQgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7IHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aExvZ291dCB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoUmVmcmVzaFN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hTdWNjZXNzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub25BdXRoUmVmcmVzaEVycm9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhSZWZyZXNoRXJyb3JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhTdWNjZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoeyB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhTdWNjZXNzIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vblRva2VuRXhwaXJlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25Ub2tlbkV4cGlyZWRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vblJlYWR5ID0gKGF1dGhlbnRpY2F0ZWQpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgYXJnczogYXV0aGVudGljYXRlZCxcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25SZWFkeVxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgYmVhcmVyRXhjbHVkZWRVcmwgY29udGVudCBpbiBhIHVuaWZvcm0gdHlwZTogRXhjbHVkZWRVcmwsXG4gICAqIHNvIGl0IGJlY29tZXMgZWFzaWVyIHRvIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlckV4Y2x1ZGVkVXJscyBhcnJheSBvZiBzdHJpbmdzIG9yIEV4Y2x1ZGVkVXJsIHRoYXQgaW5jbHVkZXNcbiAgICogdGhlIHVybCBhbmQgSHR0cE1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgbG9hZEV4Y2x1ZGVkVXJscyhcbiAgICBiZWFyZXJFeGNsdWRlZFVybHM6IChzdHJpbmcgfCBFeGNsdWRlZFVybClbXVxuICApOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIGNvbnN0IGV4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGJlYXJlckV4Y2x1ZGVkVXJscykge1xuICAgICAgbGV0IGV4Y2x1ZGVkVXJsOiBFeGNsdWRlZFVybFJlZ2V4O1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBleGNsdWRlZFVybCA9IHsgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLCAnaScpLCBodHRwTWV0aG9kczogW10gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0ge1xuICAgICAgICAgIHVybFBhdHRlcm46IG5ldyBSZWdFeHAoaXRlbS51cmwsICdpJyksXG4gICAgICAgICAgaHR0cE1ldGhvZHM6IGl0ZW0uaHR0cE1ldGhvZHNcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGV4Y2x1ZGVkVXJscy5wdXNoKGV4Y2x1ZGVkVXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4Y2x1ZGVkVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjbGFzcyB2YWx1ZXMgaW5pdGlhbGl6YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGluaXRTZXJ2aWNlVmFsdWVzKHtcbiAgICBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciA9IHRydWUsXG4gICAgbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwID0gZmFsc2UsXG4gICAgYmVhcmVyRXhjbHVkZWRVcmxzID0gW10sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSAnQXV0aG9yaXphdGlvbicsXG4gICAgYmVhcmVyUHJlZml4ID0gJ0JlYXJlcicsXG4gICAgaW5pdE9wdGlvbnNcbiAgfTogS2V5Y2xvYWtPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgICB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXAgPSBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA7XG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSBhdXRob3JpemF0aW9uSGVhZGVyTmFtZTtcbiAgICB0aGlzLl9iZWFyZXJQcmVmaXggPSBiZWFyZXJQcmVmaXgudHJpbSgpLmNvbmNhdCgnICcpO1xuICAgIHRoaXMuX2V4Y2x1ZGVkVXJscyA9IHRoaXMubG9hZEV4Y2x1ZGVkVXJscyhiZWFyZXJFeGNsdWRlZFVybHMpO1xuICAgIHRoaXMuX3NpbGVudFJlZnJlc2ggPSBpbml0T3B0aW9ucyA/IGluaXRPcHRpb25zLmZsb3cgPT09ICdpbXBsaWNpdCcgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXljbG9hayBpbml0aWFsaXphdGlvbi4gSXQgc2hvdWxkIGJlIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBhZGFwdGVyLlxuICAgKiBPcHRpb25zIGlzIGEgb2JqZWN0IHdpdGggMiBtYWluIHBhcmFtZXRlcnM6IGNvbmZpZyBhbmQgaW5pdE9wdGlvbnMuIFRoZSBmaXJzdCBvbmVcbiAgICogd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgS2V5Y2xvYWsgaW5zdGFuY2UuIFRoZSBzZWNvbmQgb25lIGFyZSBvcHRpb25zIHRvIGluaXRpYWxpemUgdGhlXG4gICAqIGtleWNsb2FrIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBDb25maWc6IG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGtleWNsb2FrIFVSSSBvciBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICogZm9sbG93aW5nIGNvbnRlbnQ6XG4gICAqIC0gdXJsOiBLZXljbG9hayBqc29uIFVSTFxuICAgKiAtIHJlYWxtOiByZWFsbSBuYW1lXG4gICAqIC0gY2xpZW50SWQ6IGNsaWVudCBpZFxuICAgKlxuICAgKiBpbml0T3B0aW9uczpcbiAgICogT3B0aW9ucyB0byBpbml0aWFsaXplIHRoZSBLZXljbG9hayBhZGFwdGVyLCBtYXRjaGVzIHRoZSBvcHRpb25zIGFzIHByb3ZpZGVkIGJ5IEtleWNsb2FrIGl0c2VsZi5cbiAgICpcbiAgICogZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I6XG4gICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGJlYXJlciB3aWxsIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICpcbiAgICogbG9hZFVzZXJQcm9maWxlSW5TdGFydFVwOlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBwcm9maWxlIHNob3VsZCBiZSBsb2FkZWQgYXQgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uLFxuICAgKiBqdXN0IGFmdGVyIHRoZSBsb2dpbi5cbiAgICpcbiAgICogYmVhcmVyRXhjbHVkZWRVcmxzOlxuICAgKiBTdHJpbmcgQXJyYXkgdG8gZXhjbHVkZSB0aGUgdXJscyB0aGF0IHNob3VsZCBub3QgaGF2ZSB0aGUgQXV0aG9yaXphdGlvbiBIZWFkZXIgYXV0b21hdGljYWxseVxuICAgKiBhZGRlZC5cbiAgICpcbiAgICogYXV0aG9yaXphdGlvbkhlYWRlck5hbWU6XG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIG5hbWUuXG4gICAqXG4gICAqIGJlYXJlclByZWZpeDpcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyIHBhcmFtLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zOiBLZXljbG9ha09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaW5pdFNlcnZpY2VWYWx1ZXMob3B0aW9ucyk7XG4gICAgY29uc3QgeyBjb25maWcsIGluaXRPcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBLZXljbG9hayhjb25maWcpO1xuICAgIHRoaXMuYmluZHNLZXljbG9ha0V2ZW50cygpO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlZCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLmluaXQoaW5pdE9wdGlvbnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWQgJiYgdGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dpbiBmb3JtIG9uIChvcHRpb25zIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoIHJlZGlyZWN0VXJpIGFuZC9vclxuICAgKiBwcm9tcHQgZmllbGRzKS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogT2JqZWN0LCB3aGVyZTpcbiAgICogIC0gcmVkaXJlY3RVcmk6IFNwZWNpZmllcyB0aGUgdXJpIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ2luLlxuICAgKiAgLSBwcm9tcHQ6QnkgZGVmYXVsdCB0aGUgbG9naW4gc2NyZWVuIGlzIGRpc3BsYXllZCBpZiB0aGUgdXNlciBpcyBub3QgbG9nZ2VkLWluIHRvIEtleWNsb2FrLlxuICAgKiBUbyBvbmx5IGF1dGhlbnRpY2F0ZSB0byB0aGUgYXBwbGljYXRpb24gaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQtaW4gYW5kIG5vdCBkaXNwbGF5IHRoZVxuICAgKiBsb2dpbiBwYWdlIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4sIHNldCB0aGlzIG9wdGlvbiB0byBub25lLiBUbyBhbHdheXMgcmVxdWlyZVxuICAgKiByZS1hdXRoZW50aWNhdGlvbiBhbmQgaWdub3JlIFNTTywgc2V0IHRoaXMgb3B0aW9uIHRvIGxvZ2luIC5cbiAgICogIC0gbWF4QWdlOiBVc2VkIGp1c3QgaWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuIFNwZWNpZmllcyBtYXhpbXVtIHRpbWUgc2luY2UgdGhlXG4gICAqIGF1dGhlbnRpY2F0aW9uIG9mIHVzZXIgaGFwcGVuZWQuIElmIHVzZXIgaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkIGZvciBsb25nZXIgdGltZSB0aGFuXG4gICAqIG1heEFnZSwgdGhlIFNTTyBpcyBpZ25vcmVkIGFuZCBoZSB3aWxsIG5lZWQgdG8gcmUtYXV0aGVudGljYXRlIGFnYWluLlxuICAgKiAgLSBsb2dpbkhpbnQ6IFVzZWQgdG8gcHJlLWZpbGwgdGhlIHVzZXJuYW1lL2VtYWlsIGZpZWxkIG9uIHRoZSBsb2dpbiBmb3JtLlxuICAgKiAgLSBhY3Rpb246IElmIHZhbHVlIGlzICdyZWdpc3RlcicgdGhlbiB1c2VyIGlzIHJlZGlyZWN0ZWQgdG8gcmVnaXN0cmF0aW9uIHBhZ2UsIG90aGVyd2lzZSB0b1xuICAgKiBsb2dpbiBwYWdlLlxuICAgKiAgLSBsb2NhbGU6IFNwZWNpZmllcyB0aGUgZGVzaXJlZCBsb2NhbGUgZm9yIHRoZSBVSS5cbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIGxvZ2luIGlzIHN1Y2Nlc3NmdWwgYW5kIGFmdGVyIHRoZSB1c2VyIHByb2ZpbGUgbG9hZGluZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dpbihvcHRpb25zOiBLZXljbG9hay5LZXljbG9ha0xvZ2luT3B0aW9ucyA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9naW4ob3B0aW9ucyk7XG5cbiAgICBpZiAodGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdHMgdG8gbG9nb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVkaXJlY3RVcmlcbiAgICogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9nb3V0LlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9nb3V0IHdhcyBzdWNjZXNzZnVsLCBjbGVhbmluZyBhbHNvIHRoZSB1c2VyUHJvZmlsZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dvdXQocmVkaXJlY3RVcmk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcmVkaXJlY3RVcmlcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9nb3V0KG9wdGlvbnMpO1xuICAgIHRoaXMuX3VzZXJQcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byByZWdpc3RyYXRpb24gZm9ybS4gU2hvcnRjdXQgZm9yIGxvZ2luIHdpdGggb3B0aW9uXG4gICAqIGFjdGlvbiA9ICdyZWdpc3RlcicuIE9wdGlvbnMgYXJlIHNhbWUgYXMgZm9yIHRoZSBsb2dpbiBtZXRob2QgYnV0ICdhY3Rpb24nIGlzIHNldCB0b1xuICAgKiAncmVnaXN0ZXInLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBsb2dpbiBvcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSByZWdpc3RlciBmbG93IHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKFxuICAgIG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0geyBhY3Rpb246ICdyZWdpc3RlcicgfVxuICApIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgcm9sZS4gSXQgd2lsbCBsb29rIGZvciByb2xlcyBpblxuICAgKiByZWFsbSBhbmQgY2xpZW50SWQsIGJ1dCB3aWxsIG5vdCBjaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHJvbGVcbiAgICogcm9sZSBuYW1lXG4gICAqIEBwYXJhbSByZXNvdXJjZVxuICAgKiByZXNvdXJjZSBuYW1lIElmIG5vdCBzcGVjaWZpZWQsIGBjbGllbnRJZGAgaXMgdXNlZFxuICAgKiBAcmV0dXJuc1xuICAgKiBBIGJvb2xlYW4gbWVhbmluZyBpZiB0aGUgdXNlciBoYXMgdGhlIHNwZWNpZmllZCBSb2xlLlxuICAgKi9cbiAgaXNVc2VySW5Sb2xlKHJvbGU6IHN0cmluZywgcmVzb3VyY2U/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaGFzUm9sZTogYm9vbGVhbjtcbiAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVzb3VyY2VSb2xlKHJvbGUsIHJlc291cmNlKTtcbiAgICBpZiAoIWhhc1JvbGUpIHtcbiAgICAgIGhhc1JvbGUgPSB0aGlzLl9pbnN0YW5jZS5oYXNSZWFsbVJvbGUocm9sZSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBUaGUgYWxsUm9sZXMgcGFyYW1ldGVyLCB3aXRoIGRlZmF1bHQgdmFsdWVcbiAgICogdHJ1ZSwgd2lsbCByZXR1cm4gdGhlIGNsaWVudElkIGFuZCByZWFsbSByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvZ2dlZCB1c2VyLiBJZiBzZXQgdG8gZmFsc2VcbiAgICogaXQgd2lsbCBvbmx5IHJldHVybiB0aGUgdXNlciByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsaWVudElkLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsUm9sZXNcbiAgICogRmxhZyB0byBzZXQgaWYgYWxsIHJvbGVzIHNob3VsZCBiZSByZXR1cm5lZC4oT3B0aW9uYWw6IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSlcbiAgICogQHJldHVybnNcbiAgICogQXJyYXkgb2YgUm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci5cbiAgICovXG4gIGdldFVzZXJSb2xlcyhhbGxSb2xlczogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZUFjY2VzczogYW55ID0gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3Nba2V5XTtcbiAgICAgICAgICBjb25zdCBjbGllbnRSb2xlcyA9IHJlc291cmNlQWNjZXNzWydyb2xlcyddIHx8IFtdO1xuICAgICAgICAgIHJvbGVzID0gcm9sZXMuY29uY2F0KGNsaWVudFJvbGVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsUm9sZXMgJiYgdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3MpIHtcbiAgICAgIGNvbnN0IHJlYWxtUm9sZXMgPSB0aGlzLl9pbnN0YW5jZS5yZWFsbUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgIHJvbGVzLnB1c2goLi4ucmVhbG1Sb2xlcyk7XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICovXG4gIGFzeW5jIGlzTG9nZ2VkSW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRva2VuKDIwKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdG9rZW4gaGFzIGxlc3MgdGhhbiBtaW5WYWxpZGl0eSBzZWNvbmRzIGxlZnQgYmVmb3JlXG4gICAqIGl0IGV4cGlyZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSkgaXMgb3B0aW9uYWwuIERlZmF1bHQgdmFsdWUgaXMgMC5cbiAgICogQHJldHVybnNcbiAgICogQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0b2tlbiBpcyBleHBpcmVkLlxuICAgKi9cbiAgaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHk6IG51bWJlciA9IDApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuaXNUb2tlbkV4cGlyZWQobWluVmFsaWRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB0b2tlbiBleHBpcmVzIHdpdGhpbiBtaW5WYWxpZGl0eSBzZWNvbmRzIHRoZSB0b2tlbiBpcyByZWZyZXNoZWQuIElmIHRoZVxuICAgKiBzZXNzaW9uIHN0YXR1cyBpZnJhbWUgaXMgZW5hYmxlZCwgdGhlIHNlc3Npb24gc3RhdHVzIGlzIGFsc28gY2hlY2tlZC5cbiAgICogUmV0dXJucyBhIHByb21pc2UgdGVsbGluZyBpZiB0aGUgdG9rZW4gd2FzIHJlZnJlc2hlZCBvciBub3QuIElmIHRoZSBzZXNzaW9uIGlzIG5vdCBhY3RpdmVcbiAgICogYW55bW9yZSwgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WYWxpZGl0eVxuICAgKiBTZWNvbmRzIGxlZnQuIChtaW5WYWxpZGl0eSBpcyBvcHRpb25hbCwgaWYgbm90IHNwZWNpZmllZCA1IGlzIHVzZWQpXG4gICAqIEByZXR1cm5zXG4gICAqIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gd2FzIHN1Y2Nlc2Z1bGx5IHVwZGF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlVG9rZW4obWluVmFsaWRpdHkgPSA1KSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIHdvcmthcm91bmQgdW50aWwgdGhlIHNpbGVudCByZWZyZXNoIChpc3N1ZSAjNDMpXG4gICAgLy8gaXMgbm90IGltcGxlbWVudGVkLCBhdm9pZGluZyB0aGUgcmVkaXJlY3QgbG9vcC5cbiAgICBpZiAodGhpcy5fc2lsZW50UmVmcmVzaCkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWQoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ZhaWxlZCB0byByZWZyZXNoIHRoZSB0b2tlbiwgb3IgdGhlIHNlc3Npb24gaXMgZXhwaXJlZCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXljbG9hayBBbmd1bGFyIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS51cGRhdGVUb2tlbihtaW5WYWxpZGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogUmV0dXJucyBwcm9taXNlIHRvIHNldCBmdW5jdGlvbnMgdG8gYmUgaW52b2tlZCBpZiB0aGUgcHJvZmlsZSB3YXMgbG9hZGVkXG4gICAqIHN1Y2Nlc3NmdWxseSwgb3IgaWYgdGhlIHByb2ZpbGUgY291bGQgbm90IGJlIGxvYWRlZC5cbiAgICpcbiAgICogQHBhcmFtIGZvcmNlUmVsb2FkXG4gICAqIElmIHRydWUgd2lsbCBmb3JjZSB0aGUgbG9hZFVzZXJQcm9maWxlIGV2ZW4gaWYgaXRzIGFscmVhZHkgbG9hZGVkLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHByb21pc2Ugd2l0aCB0aGUgS2V5Y2xvYWtQcm9maWxlIGRhdGEgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWRVc2VyUHJvZmlsZShmb3JjZVJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3VzZXJQcm9maWxlICYmICFmb3JjZVJlbG9hZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHVzZXIgcHJvZmlsZSB3YXMgbm90IGxvYWRlZCBhcyB0aGUgdXNlciBpcyBub3QgbG9nZ2VkIGluLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLl91c2VyUHJvZmlsZSA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLmxvYWRVc2VyUHJvZmlsZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhdXRoZW50aWNhdGVkIHRva2VuLCBjYWxsaW5nIHVwZGF0ZVRva2VuIHRvIGdldCBhIHJlZnJlc2hlZCBvbmUgaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFRva2VuKCkge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlVG9rZW4oMTApO1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS50b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2dnZWQgdXNlcm5hbWUuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFRoZSBsb2dnZWQgdXNlcm5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0VXNlcm5hbWUoKSB7XG4gICAgaWYgKCF0aGlzLl91c2VyUHJvZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBsb2dnZWQgaW4gb3IgdXNlciBwcm9maWxlIHdhcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl91c2VyUHJvZmlsZS51c2VybmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhdXRoZW50aWNhdGlvbiBzdGF0ZSwgaW5jbHVkaW5nIHRva2Vucy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIGFwcGxpY2F0aW9uXG4gICAqIGhhcyBkZXRlY3RlZCB0aGUgc2Vzc2lvbiB3YXMgZXhwaXJlZCwgZm9yIGV4YW1wbGUgaWYgdXBkYXRpbmcgdG9rZW4gZmFpbHMuXG4gICAqIEludm9raW5nIHRoaXMgcmVzdWx0cyBpbiBvbkF1dGhMb2dvdXQgY2FsbGJhY2sgbGlzdGVuZXIgYmVpbmcgaW52b2tlZC5cbiAgICovXG4gIGNsZWFyVG9rZW4oKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2UuY2xlYXJUb2tlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB2YWxpZCB0b2tlbiBpbiBoZWFkZXIuIFRoZSBrZXkgJiB2YWx1ZSBmb3JtYXQgaXM6XG4gICAqIEF1dGhvcml6YXRpb24gQmVhcmVyIDx0b2tlbj4uXG4gICAqIElmIHRoZSBoZWFkZXJzIHBhcmFtIGlzIHVuZGVmaW5lZCBpdCB3aWxsIGNyZWF0ZSB0aGUgQW5ndWxhciBoZWFkZXJzIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIGhlYWRlcnNcbiAgICogVXBkYXRlZCBoZWFkZXIgd2l0aCBBdXRob3JpemF0aW9uIGFuZCBLZXljbG9hayB0b2tlbi5cbiAgICogQHJldHVybnNcbiAgICogQW4gb2JzZXJ2YWJsZSB3aXRoIHdpdGggdGhlIEhUVFAgQXV0aG9yaXphdGlvbiBoZWFkZXIgYW5kIHRoZSBjdXJyZW50IHRva2VuLlxuICAgKi9cbiAgcHVibGljIGFkZFRva2VuVG9IZWFkZXIoaGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKSkge1xuICAgIHJldHVybiBmcm9tKHRoaXMuZ2V0VG9rZW4oKSkucGlwZShcbiAgICAgIG1hcCgodG9rZW4pID0+XG4gICAgICAgIHRva2VuXG4gICAgICAgICAgPyBoZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgdGhpcy5fYXV0aG9yaXphdGlvbkhlYWRlck5hbWUsXG4gICAgICAgICAgICAgIHRoaXMuX2JlYXJlclByZWZpeCArIHRva2VuXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBoZWFkZXJzXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBLZXljbG9hayBpbnN0YW5jZSwgaWYgeW91IG5lZWQgYW55IGN1c3RvbWl6YXRpb24gdGhhdFxuICAgKiB0aGlzIEFuZ3VsYXIgc2VydmljZSBkb2VzIG5vdCBzdXBwb3J0IHlldC4gVXNlIHdpdGggY2F1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIEtleWNsb2FrSW5zdGFuY2UgZnJvbSBrZXljbG9hay1qcy5cbiAgICovXG4gIGdldEtleWNsb2FrSW5zdGFuY2UoKTogS2V5Y2xvYWsuS2V5Y2xvYWtJbnN0YW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4Y2x1ZGVkIFVSTHMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYnlcbiAgICogdGhlIGh0dHAgaW50ZXJjZXB0b3Igd2hpY2ggYXV0b21hdGljYWxseSBhZGRzIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlciBpbiB0aGUgSHR0cCBSZXF1ZXN0LlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgZXhjbHVkZWQgdXJscyB0aGF0IG11c3Qgbm90IGJlIGludGVyY2VwdGVkIGJ5IHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgZ2V0IGV4Y2x1ZGVkVXJscygpOiBFeGNsdWRlZFVybFJlZ2V4W10ge1xuICAgIHJldHVybiB0aGlzLl9leGNsdWRlZFVybHM7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBSZXR1cm5zIGlmIHRoZSBiZWFyZXIgaW50ZXJjZXB0b3Igd2FzIHNldCB0byBiZSBkaXNhYmxlZC5cbiAgICovXG4gIGdldCBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3I7XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgc3ViamVjdCB0byBtb25pdG9yIHRoZSBldmVudHMgdHJpZ2dlcmVkIGJ5IGtleWNsb2FrLWpzLlxuICAgKiBUaGUgZm9sbG93aW5nIGV2ZW50cyBhcyBhdmFpbGFibGUgKGFzIGRlc2NyaWJlZCBhdCBrZXljbG9hayBkb2NzIC1cbiAgICogaHR0cHM6Ly93d3cua2V5Y2xvYWsub3JnL2RvY3MvbGF0ZXN0L3NlY3VyaW5nX2FwcHMvaW5kZXguaHRtbCNjYWxsYmFjay1ldmVudHMpOlxuICAgKiAtIE9uQXV0aEVycm9yXG4gICAqIC0gT25BdXRoTG9nb3V0XG4gICAqIC0gT25BdXRoUmVmcmVzaEVycm9yXG4gICAqIC0gT25BdXRoUmVmcmVzaFN1Y2Nlc3NcbiAgICogLSBPbkF1dGhTdWNjZXNzXG4gICAqIC0gT25SZWFkeVxuICAgKiAtIE9uVG9rZW5FeHBpcmVcbiAgICogSW4gZWFjaCBvY2N1cnJlbmNlIG9mIGFueSBvZiB0aGVzZSwgdGhpcyBzdWJqZWN0IHdpbGwgcmV0dXJuIHRoZSBldmVudCB0eXBlLFxuICAgKiBkZXNjcmliZWQgYXQge0BsaW5rIEtleWNsb2FrRXZlbnRUeXBlfSBlbnVtIGFuZCB0aGUgZnVuY3Rpb24gYXJncyBmcm9tIHRoZSBrZXljbG9hay1qc1xuICAgKiBpZiBwcm92aWRlZCBhbnkuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgc3ViamVjdCB3aXRoIHRoZSB7QGxpbmsgS2V5Y2xvYWtFdmVudH0gd2hpY2ggZGVzY3JpYmVzIHRoZSBldmVudCB0eXBlIGFuZCBhdHRhY2hlcyB0aGVcbiAgICogZnVuY3Rpb24gYXJncy5cbiAgICovXG4gIGdldCBrZXljbG9ha0V2ZW50cyQoKTogU3ViamVjdDxLZXljbG9ha0V2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX2tleWNsb2FrRXZlbnRzJDtcbiAgfVxufVxuIl19
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFFaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQztBQU9uQyxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBVWhGLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBd0NVLHFCQUFnQixHQUN0QixJQUFJLE9BQU8sRUFBaUIsQ0FBQztLQStkaEM7SUExY1MsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFdBQVc7YUFDcEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtZQUN6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LElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBcUJELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOzs0R0F0Z0JVLGVBQWU7Z0hBQWYsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgS2V5Y2xvYWsgZnJvbSAna2V5Y2xvYWstanMnO1xuXG5pbXBvcnQge1xuICBFeGNsdWRlZFVybCxcbiAgRXhjbHVkZWRVcmxSZWdleCxcbiAgS2V5Y2xvYWtPcHRpb25zXG59IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucyc7XG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50LCBLZXljbG9ha0V2ZW50VHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIGV4aXN0ZW50IG1ldGhvZHMgZnJvbSB0aGUgS2V5Y2xvYWsgSlMgYWRhcHRlciwgYWRkaW5nIG5ld1xuICogZnVuY3Rpb25hbGl0aWVzIHRvIGltcHJvdmUgdGhlIHVzZSBvZiBrZXljbG9hayBpbiBBbmd1bGFyIHYgPiA0LjMgYXBwbGljYXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluamVjdGVkIGluIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAsIHNvIHRoZSBzYW1lIGluc3RhbmNlIHdpbGwgYmUgdXNlZFxuICogYWxvbmcgdGhlIHdlYiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrU2VydmljZSB7XG4gIC8qKlxuICAgKiBLZXljbG9hay1qcyBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlO1xuICAvKipcbiAgICogVXNlciBwcm9maWxlIGFzIEtleWNsb2FrUHJvZmlsZSBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIF91c2VyUHJvZmlsZTogS2V5Y2xvYWsuS2V5Y2xvYWtQcm9maWxlO1xuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2VuYWJsZUJlYXJlckludGVyY2VwdG9yOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0aGUgaW1wbGljaXQgZmxvdyBpcyBjaG9vc2VuIHRoZXJlIG11c3QgZXhpc3QgYSBzaWxlbnRSZWZyZXNoLCBhcyB0aGVyZSBpc1xuICAgKiBubyByZWZyZXNoIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2lsZW50UmVmcmVzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKi9cbiAgcHJpdmF0ZSBfbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGJlYXJlciBwcmVmaXggdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2JlYXJlclByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogVmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBUaGUgZXhjbHVkZWQgdXJscyBwYXR0ZXJucyB0aGF0IG11c3Qgc2tpcCB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAgICovXG4gIHByaXZhdGUgX2V4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdO1xuICAvKipcbiAgICogT2JzZXJ2ZXIgZm9yIHRoZSBrZXljbG9hayBldmVudHNcbiAgICovXG4gIHByaXZhdGUgX2tleWNsb2FrRXZlbnRzJDogU3ViamVjdDxLZXljbG9ha0V2ZW50PiA9XG4gICAgbmV3IFN1YmplY3Q8S2V5Y2xvYWtFdmVudD4oKTtcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgcmVxdWlyZWQgdGltZSByZW1haW5pbmcgYmVmb3JlIGV4cGlyeSBvZiB0aGUgdG9rZW4gYmVmb3JlIHRoZSB0b2tlbiB3aWxsIGJlIHJlZnJlc2hlZC5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZU1pblZhbGlkaXR5OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3Qgc2hvdWxkIGhhdmUgdGhlIHRva2VuIGFkZGVkIHRvIHRoZSBoZWFkZXJzIGJ5IHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgc2hvdWxkQWRkVG9rZW46IChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPikgPT4gYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdCBiZWluZyBtYWRlIHNob3VsZCBwb3RlbnRpYWxseSB1cGRhdGUgdGhlIHRva2VuLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlVG9rZW46IChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogQmluZHMgdGhlIGtleWNsb2FrLWpzIGV2ZW50cyB0byB0aGUga2V5Y2xvYWtFdmVudHMgU3ViamVjdFxuICAgKiB3aGljaCBpcyBhIGdvb2Qgd2F5IHRvIG1vbml0b3IgZm9yIGNoYW5nZXMsIGlmIG5lZWRlZC5cbiAgICpcbiAgICogVGhlIGtleWNsb2FrRXZlbnRzIHJldHVybnMgdGhlIGtleWNsb2FrLWpzIGV2ZW50IHR5cGUgYW5kIGFueVxuICAgKiBhcmd1bWVudCBpZiB0aGUgc291cmNlIGZ1bmN0aW9uIHByb3ZpZGVzIGFueS5cbiAgICovXG4gIHByaXZhdGUgYmluZHNLZXljbG9ha0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhFcnJvciA9IChlcnJvckRhdGEpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgYXJnczogZXJyb3JEYXRhLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhFcnJvclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aExvZ291dCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoTG9nb3V0IH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaFN1Y2Nlc3NcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoRXJyb3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hFcnJvclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aFN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7IHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFN1Y2Nlc3MgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uVG9rZW5FeHBpcmVkID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblRva2VuRXhwaXJlZFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQWN0aW9uVXBkYXRlID0gKHN0YXRlKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIGFyZ3M6IHN0YXRlLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkFjdGlvblVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uUmVhZHkgPSAoYXV0aGVudGljYXRlZCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBhdXRoZW50aWNhdGVkLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblJlYWR5XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCBiZWFyZXJFeGNsdWRlZFVybCBjb250ZW50IGluIGEgdW5pZm9ybSB0eXBlOiBFeGNsdWRlZFVybCxcbiAgICogc28gaXQgYmVjb21lcyBlYXNpZXIgdG8gaGFuZGxlLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyRXhjbHVkZWRVcmxzIGFycmF5IG9mIHN0cmluZ3Mgb3IgRXhjbHVkZWRVcmwgdGhhdCBpbmNsdWRlc1xuICAgKiB0aGUgdXJsIGFuZCBIdHRwTWV0aG9kLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkRXhjbHVkZWRVcmxzKFxuICAgIGJlYXJlckV4Y2x1ZGVkVXJsczogKHN0cmluZyB8IEV4Y2x1ZGVkVXJsKVtdXG4gICk6IEV4Y2x1ZGVkVXJsUmVnZXhbXSB7XG4gICAgY29uc3QgZXhjbHVkZWRVcmxzOiBFeGNsdWRlZFVybFJlZ2V4W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYmVhcmVyRXhjbHVkZWRVcmxzKSB7XG4gICAgICBsZXQgZXhjbHVkZWRVcmw6IEV4Y2x1ZGVkVXJsUmVnZXg7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0geyB1cmxQYXR0ZXJuOiBuZXcgUmVnRXhwKGl0ZW0sICdpJyksIGh0dHBNZXRob2RzOiBbXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhjbHVkZWRVcmwgPSB7XG4gICAgICAgICAgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLnVybCwgJ2knKSxcbiAgICAgICAgICBodHRwTWV0aG9kczogaXRlbS5odHRwTWV0aG9kc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZXhjbHVkZWRVcmxzLnB1c2goZXhjbHVkZWRVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gZXhjbHVkZWRVcmxzO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNsYXNzIHZhbHVlcyBpbml0aWFsaXphdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgaW5pdFNlcnZpY2VWYWx1ZXMoe1xuICAgIGVuYWJsZUJlYXJlckludGVyY2VwdG9yID0gdHJ1ZSxcbiAgICBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXAgPSBmYWxzZSxcbiAgICBiZWFyZXJFeGNsdWRlZFVybHMgPSBbXSxcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyTmFtZSA9ICdBdXRob3JpemF0aW9uJyxcbiAgICBiZWFyZXJQcmVmaXggPSAnQmVhcmVyJyxcbiAgICBpbml0T3B0aW9ucyxcbiAgICB1cGRhdGVNaW5WYWxpZGl0eSA9IDIwLFxuICAgIHNob3VsZEFkZFRva2VuID0gKCkgPT4gdHJ1ZSxcbiAgICBzaG91bGRVcGRhdGVUb2tlbiA9ICgpID0+IHRydWVcbiAgfTogS2V5Y2xvYWtPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgICB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXAgPSBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA7XG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSBhdXRob3JpemF0aW9uSGVhZGVyTmFtZTtcbiAgICB0aGlzLl9iZWFyZXJQcmVmaXggPSBiZWFyZXJQcmVmaXgudHJpbSgpLmNvbmNhdCgnICcpO1xuICAgIHRoaXMuX2V4Y2x1ZGVkVXJscyA9IHRoaXMubG9hZEV4Y2x1ZGVkVXJscyhiZWFyZXJFeGNsdWRlZFVybHMpO1xuICAgIHRoaXMuX3NpbGVudFJlZnJlc2ggPSBpbml0T3B0aW9ucyA/IGluaXRPcHRpb25zLmZsb3cgPT09ICdpbXBsaWNpdCcgOiBmYWxzZTtcbiAgICB0aGlzLl91cGRhdGVNaW5WYWxpZGl0eSA9IHVwZGF0ZU1pblZhbGlkaXR5O1xuICAgIHRoaXMuc2hvdWxkQWRkVG9rZW4gPSBzaG91bGRBZGRUb2tlbjtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVRva2VuID0gc2hvdWxkVXBkYXRlVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24uIEl0IHNob3VsZCBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYWRhcHRlci5cbiAgICogT3B0aW9ucyBpcyBhIG9iamVjdCB3aXRoIDIgbWFpbiBwYXJhbWV0ZXJzOiBjb25maWcgYW5kIGluaXRPcHRpb25zLiBUaGUgZmlyc3Qgb25lXG4gICAqIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIEtleWNsb2FrIGluc3RhbmNlLiBUaGUgc2Vjb25kIG9uZSBhcmUgb3B0aW9ucyB0byBpbml0aWFsaXplIHRoZVxuICAgKiBrZXljbG9hayBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQ29uZmlnOiBtYXkgYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBrZXljbG9hayBVUkkgb3IgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAqIGZvbGxvd2luZyBjb250ZW50OlxuICAgKiAtIHVybDogS2V5Y2xvYWsganNvbiBVUkxcbiAgICogLSByZWFsbTogcmVhbG0gbmFtZVxuICAgKiAtIGNsaWVudElkOiBjbGllbnQgaWRcbiAgICpcbiAgICogaW5pdE9wdGlvbnM6XG4gICAqIE9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgS2V5Y2xvYWsgYWRhcHRlciwgbWF0Y2hlcyB0aGUgb3B0aW9ucyBhcyBwcm92aWRlZCBieSBLZXljbG9hayBpdHNlbGYuXG4gICAqXG4gICAqIGVuYWJsZUJlYXJlckludGVyY2VwdG9yOlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIGxvYWRVc2VyUHJvZmlsZUluU3RhcnRVcDpcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgcHJvZmlsZSBzaG91bGQgYmUgbG9hZGVkIGF0IHRoZSBrZXljbG9hayBpbml0aWFsaXphdGlvbixcbiAgICoganVzdCBhZnRlciB0aGUgbG9naW4uXG4gICAqXG4gICAqIGJlYXJlckV4Y2x1ZGVkVXJsczpcbiAgICogU3RyaW5nIEFycmF5IHRvIGV4Y2x1ZGUgdGhlIHVybHMgdGhhdCBzaG91bGQgbm90IGhhdmUgdGhlIEF1dGhvcml6YXRpb24gSGVhZGVyIGF1dG9tYXRpY2FsbHlcbiAgICogYWRkZWQuXG4gICAqXG4gICAqIGF1dGhvcml6YXRpb25IZWFkZXJOYW1lOlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBuYW1lLlxuICAgKlxuICAgKiBiZWFyZXJQcmVmaXg6XG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBwYXJhbS5cbiAgICpcbiAgICogdG9rZW5VcGRhdGVFeGNsdWRlZEhlYWRlcnM6XG4gICAqIEFycmF5IG9mIEh0dHAgSGVhZGVyIGtleS92YWx1ZSBtYXBzIHRoYXQgc2hvdWxkIG5vdCB0cmlnZ2VyIHRoZSB0b2tlbiB0byBiZSB1cGRhdGVkLlxuICAgKlxuICAgKiB1cGRhdGVNaW5WYWxpZGl0eTpcbiAgICogVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIGlmIHRoZSB0b2tlbiB3aWxsIGJlIHJlZnJlc2hlZCBiYXNlZCBvbiBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zOiBLZXljbG9ha09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaW5pdFNlcnZpY2VWYWx1ZXMob3B0aW9ucyk7XG4gICAgY29uc3QgeyBjb25maWcsIGluaXRPcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBLZXljbG9hayhjb25maWcpO1xuICAgIHRoaXMuYmluZHNLZXljbG9ha0V2ZW50cygpO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlZCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLmluaXQoaW5pdE9wdGlvbnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWQgJiYgdGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dpbiBmb3JtIG9uIChvcHRpb25zIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoIHJlZGlyZWN0VXJpIGFuZC9vclxuICAgKiBwcm9tcHQgZmllbGRzKS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogT2JqZWN0LCB3aGVyZTpcbiAgICogIC0gcmVkaXJlY3RVcmk6IFNwZWNpZmllcyB0aGUgdXJpIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ2luLlxuICAgKiAgLSBwcm9tcHQ6QnkgZGVmYXVsdCB0aGUgbG9naW4gc2NyZWVuIGlzIGRpc3BsYXllZCBpZiB0aGUgdXNlciBpcyBub3QgbG9nZ2VkLWluIHRvIEtleWNsb2FrLlxuICAgKiBUbyBvbmx5IGF1dGhlbnRpY2F0ZSB0byB0aGUgYXBwbGljYXRpb24gaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQtaW4gYW5kIG5vdCBkaXNwbGF5IHRoZVxuICAgKiBsb2dpbiBwYWdlIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4sIHNldCB0aGlzIG9wdGlvbiB0byBub25lLiBUbyBhbHdheXMgcmVxdWlyZVxuICAgKiByZS1hdXRoZW50aWNhdGlvbiBhbmQgaWdub3JlIFNTTywgc2V0IHRoaXMgb3B0aW9uIHRvIGxvZ2luIC5cbiAgICogIC0gbWF4QWdlOiBVc2VkIGp1c3QgaWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuIFNwZWNpZmllcyBtYXhpbXVtIHRpbWUgc2luY2UgdGhlXG4gICAqIGF1dGhlbnRpY2F0aW9uIG9mIHVzZXIgaGFwcGVuZWQuIElmIHVzZXIgaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkIGZvciBsb25nZXIgdGltZSB0aGFuXG4gICAqIG1heEFnZSwgdGhlIFNTTyBpcyBpZ25vcmVkIGFuZCBoZSB3aWxsIG5lZWQgdG8gcmUtYXV0aGVudGljYXRlIGFnYWluLlxuICAgKiAgLSBsb2dpbkhpbnQ6IFVzZWQgdG8gcHJlLWZpbGwgdGhlIHVzZXJuYW1lL2VtYWlsIGZpZWxkIG9uIHRoZSBsb2dpbiBmb3JtLlxuICAgKiAgLSBhY3Rpb246IElmIHZhbHVlIGlzICdyZWdpc3RlcicgdGhlbiB1c2VyIGlzIHJlZGlyZWN0ZWQgdG8gcmVnaXN0cmF0aW9uIHBhZ2UsIG90aGVyd2lzZSB0b1xuICAgKiBsb2dpbiBwYWdlLlxuICAgKiAgLSBsb2NhbGU6IFNwZWNpZmllcyB0aGUgZGVzaXJlZCBsb2NhbGUgZm9yIHRoZSBVSS5cbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIGxvZ2luIGlzIHN1Y2Nlc3NmdWwgYW5kIGFmdGVyIHRoZSB1c2VyIHByb2ZpbGUgbG9hZGluZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dpbihvcHRpb25zOiBLZXljbG9hay5LZXljbG9ha0xvZ2luT3B0aW9ucyA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9naW4ob3B0aW9ucyk7XG5cbiAgICBpZiAodGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdHMgdG8gbG9nb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVkaXJlY3RVcmlcbiAgICogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9nb3V0LlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9nb3V0IHdhcyBzdWNjZXNzZnVsLCBjbGVhbmluZyBhbHNvIHRoZSB1c2VyUHJvZmlsZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dvdXQocmVkaXJlY3RVcmk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcmVkaXJlY3RVcmlcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9nb3V0KG9wdGlvbnMpO1xuICAgIHRoaXMuX3VzZXJQcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byByZWdpc3RyYXRpb24gZm9ybS4gU2hvcnRjdXQgZm9yIGxvZ2luIHdpdGggb3B0aW9uXG4gICAqIGFjdGlvbiA9ICdyZWdpc3RlcicuIE9wdGlvbnMgYXJlIHNhbWUgYXMgZm9yIHRoZSBsb2dpbiBtZXRob2QgYnV0ICdhY3Rpb24nIGlzIHNldCB0b1xuICAgKiAncmVnaXN0ZXInLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBsb2dpbiBvcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSByZWdpc3RlciBmbG93IHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKFxuICAgIG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0geyBhY3Rpb246ICdyZWdpc3RlcicgfVxuICApIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgcm9sZS4gSXQgd2lsbCBsb29rIGZvciByb2xlcyBpblxuICAgKiByZWFsbSBhbmQgY2xpZW50SWQsIGJ1dCB3aWxsIG5vdCBjaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHJvbGVcbiAgICogcm9sZSBuYW1lXG4gICAqIEBwYXJhbSByZXNvdXJjZVxuICAgKiByZXNvdXJjZSBuYW1lIElmIG5vdCBzcGVjaWZpZWQsIGBjbGllbnRJZGAgaXMgdXNlZFxuICAgKiBAcmV0dXJuc1xuICAgKiBBIGJvb2xlYW4gbWVhbmluZyBpZiB0aGUgdXNlciBoYXMgdGhlIHNwZWNpZmllZCBSb2xlLlxuICAgKi9cbiAgaXNVc2VySW5Sb2xlKHJvbGU6IHN0cmluZywgcmVzb3VyY2U/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaGFzUm9sZTogYm9vbGVhbjtcbiAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVzb3VyY2VSb2xlKHJvbGUsIHJlc291cmNlKTtcbiAgICBpZiAoIWhhc1JvbGUpIHtcbiAgICAgIGhhc1JvbGUgPSB0aGlzLl9pbnN0YW5jZS5oYXNSZWFsbVJvbGUocm9sZSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBUaGUgYWxsUm9sZXMgcGFyYW1ldGVyLCB3aXRoIGRlZmF1bHQgdmFsdWVcbiAgICogdHJ1ZSwgd2lsbCByZXR1cm4gdGhlIGNsaWVudElkIGFuZCByZWFsbSByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvZ2dlZCB1c2VyLiBJZiBzZXQgdG8gZmFsc2VcbiAgICogaXQgd2lsbCBvbmx5IHJldHVybiB0aGUgdXNlciByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsaWVudElkLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsUm9sZXNcbiAgICogRmxhZyB0byBzZXQgaWYgYWxsIHJvbGVzIHNob3VsZCBiZSByZXR1cm5lZC4oT3B0aW9uYWw6IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSlcbiAgICogQHJldHVybnNcbiAgICogQXJyYXkgb2YgUm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci5cbiAgICovXG4gIGdldFVzZXJSb2xlcyhhbGxSb2xlczogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZUFjY2VzcyA9IHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzW2tleV07XG4gICAgICAgICAgY29uc3QgY2xpZW50Um9sZXMgPSByZXNvdXJjZUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgICAgICByb2xlcyA9IHJvbGVzLmNvbmNhdChjbGllbnRSb2xlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFsbFJvbGVzICYmIHRoaXMuX2luc3RhbmNlLnJlYWxtQWNjZXNzKSB7XG4gICAgICBjb25zdCByZWFsbVJvbGVzID0gdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3NbJ3JvbGVzJ10gfHwgW107XG4gICAgICByb2xlcy5wdXNoKC4uLnJlYWxtUm9sZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqL1xuICBhc3luYyBpc0xvZ2dlZEluKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIGhhcyBsZXNzIHRoYW4gbWluVmFsaWRpdHkgc2Vjb25kcyBsZWZ0IGJlZm9yZVxuICAgKiBpdCBleHBpcmVzLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmFsaWRpdHlcbiAgICogU2Vjb25kcyBsZWZ0LiAobWluVmFsaWRpdHkpIGlzIG9wdGlvbmFsLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gICAqIEByZXR1cm5zXG4gICAqIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gaXMgZXhwaXJlZC5cbiAgICovXG4gIGlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5OiBudW1iZXIgPSAwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdG9rZW4gZXhwaXJlcyB3aXRoaW4gX3VwZGF0ZU1pblZhbGlkaXR5IHNlY29uZHMgdGhlIHRva2VuIGlzIHJlZnJlc2hlZC4gSWYgdGhlXG4gICAqIHNlc3Npb24gc3RhdHVzIGlmcmFtZSBpcyBlbmFibGVkLCB0aGUgc2Vzc2lvbiBzdGF0dXMgaXMgYWxzbyBjaGVja2VkLlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0ZWxsaW5nIGlmIHRoZSB0b2tlbiB3YXMgcmVmcmVzaGVkIG9yIG5vdC4gSWYgdGhlIHNlc3Npb24gaXMgbm90IGFjdGl2ZVxuICAgKiBhbnltb3JlLCB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogUHJvbWlzZSB3aXRoIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0b2tlbiB3YXMgc3VjY2VzZnVsbHkgdXBkYXRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVUb2tlbigpIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCB0aGUgc2lsZW50IHJlZnJlc2ggKGlzc3VlICM0MylcbiAgICAvLyBpcyBub3QgaW1wbGVtZW50ZWQsIGF2b2lkaW5nIHRoZSByZWRpcmVjdCBsb29wLlxuICAgIGlmICh0aGlzLl9zaWxlbnRSZWZyZXNoKSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRmFpbGVkIHRvIHJlZnJlc2ggdGhlIHRva2VuLCBvciB0aGUgc2Vzc2lvbiBpcyBleHBpcmVkJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleWNsb2FrIEFuZ3VsYXIgbGlicmFyeSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnVwZGF0ZVRva2VuKHRoaXMuX3VwZGF0ZU1pblZhbGlkaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBSZXR1cm5zIHByb21pc2UgdG8gc2V0IGZ1bmN0aW9ucyB0byBiZSBpbnZva2VkIGlmIHRoZSBwcm9maWxlIHdhcyBsb2FkZWRcbiAgICogc3VjY2Vzc2Z1bGx5LCBvciBpZiB0aGUgcHJvZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWxvYWRcbiAgICogSWYgdHJ1ZSB3aWxsIGZvcmNlIHRoZSBsb2FkVXNlclByb2ZpbGUgZXZlbiBpZiBpdHMgYWxyZWFkeSBsb2FkZWQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgcHJvbWlzZSB3aXRoIHRoZSBLZXljbG9ha1Byb2ZpbGUgZGF0YSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFVzZXJQcm9maWxlKGZvcmNlUmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5fdXNlclByb2ZpbGUgJiYgIWZvcmNlUmVsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgdXNlciBwcm9maWxlIHdhcyBub3QgbG9hZGVkIGFzIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuX3VzZXJQcm9maWxlID0gYXdhaXQgdGhpcy5faW5zdGFuY2UubG9hZFVzZXJQcm9maWxlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGF1dGhlbnRpY2F0ZWQgdG9rZW4sIGNhbGxpbmcgdXBkYXRlVG9rZW4gdG8gZ2V0IGEgcmVmcmVzaGVkIG9uZSBpZiBuZWNlc3NhcnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRVc2VybmFtZSgpIHtcbiAgICBpZiAoIXRoaXMuX3VzZXJQcm9maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCBpbiBvciB1c2VyIHByb2ZpbGUgd2FzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlLnVzZXJuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGF1dGhlbnRpY2F0aW9uIHN0YXRlLCBpbmNsdWRpbmcgdG9rZW5zLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgYXBwbGljYXRpb25cbiAgICogaGFzIGRldGVjdGVkIHRoZSBzZXNzaW9uIHdhcyBleHBpcmVkLCBmb3IgZXhhbXBsZSBpZiB1cGRhdGluZyB0b2tlbiBmYWlscy5cbiAgICogSW52b2tpbmcgdGhpcyByZXN1bHRzIGluIG9uQXV0aExvZ291dCBjYWxsYmFjayBsaXN0ZW5lciBiZWluZyBpbnZva2VkLlxuICAgKi9cbiAgY2xlYXJUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5jbGVhclRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHZhbGlkIHRva2VuIGluIGhlYWRlci4gVGhlIGtleSAmIHZhbHVlIGZvcm1hdCBpczpcbiAgICogQXV0aG9yaXphdGlvbiBCZWFyZXIgPHRva2VuPi5cbiAgICogSWYgdGhlIGhlYWRlcnMgcGFyYW0gaXMgdW5kZWZpbmVkIGl0IHdpbGwgY3JlYXRlIHRoZSBBbmd1bGFyIGhlYWRlcnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gaGVhZGVyc1xuICAgKiBVcGRhdGVkIGhlYWRlciB3aXRoIEF1dGhvcml6YXRpb24gYW5kIEtleWNsb2FrIHRva2VuLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBbiBvYnNlcnZhYmxlIHdpdGggd2l0aCB0aGUgSFRUUCBBdXRob3JpemF0aW9uIGhlYWRlciBhbmQgdGhlIGN1cnJlbnQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYWRkVG9rZW5Ub0hlYWRlcihoZWFkZXJzOiBIdHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5nZXRUb2tlbigpKS5waXBlKFxuICAgICAgbWFwKCh0b2tlbikgPT5cbiAgICAgICAgdG9rZW5cbiAgICAgICAgICA/IGhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICB0aGlzLl9hdXRob3JpemF0aW9uSGVhZGVyTmFtZSxcbiAgICAgICAgICAgICAgdGhpcy5fYmVhcmVyUHJlZml4ICsgdG9rZW5cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGhlYWRlcnNcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIEtleWNsb2FrIGluc3RhbmNlLCBpZiB5b3UgbmVlZCBhbnkgY3VzdG9taXphdGlvbiB0aGF0XG4gICAqIHRoaXMgQW5ndWxhciBzZXJ2aWNlIGRvZXMgbm90IHN1cHBvcnQgeWV0LiBVc2Ugd2l0aCBjYXV0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgS2V5Y2xvYWtJbnN0YW5jZSBmcm9tIGtleWNsb2FrLWpzLlxuICAgKi9cbiAgZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogUmV0dXJucyB0aGUgZXhjbHVkZWQgVVJMcyB0aGF0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBieVxuICAgKiB0aGUgaHR0cCBpbnRlcmNlcHRvciB3aGljaCBhdXRvbWF0aWNhbGx5IGFkZHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGluIHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFRoZSBleGNsdWRlZCB1cmxzIHRoYXQgbXVzdCBub3QgYmUgaW50ZXJjZXB0ZWQgYnkgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gICAqL1xuICBnZXQgZXhjbHVkZWRVcmxzKCk6IEV4Y2x1ZGVkVXJsUmVnZXhbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVkVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBiZSBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFJldHVybnMgaWYgdGhlIGJlYXJlciBpbnRlcmNlcHRvciB3YXMgc2V0IHRvIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgZ2V0IGVuYWJsZUJlYXJlckludGVyY2VwdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXljbG9hayBzdWJqZWN0IHRvIG1vbml0b3IgdGhlIGV2ZW50cyB0cmlnZ2VyZWQgYnkga2V5Y2xvYWstanMuXG4gICAqIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFzIGF2YWlsYWJsZSAoYXMgZGVzY3JpYmVkIGF0IGtleWNsb2FrIGRvY3MgLVxuICAgKiBodHRwczovL3d3dy5rZXljbG9hay5vcmcvZG9jcy9sYXRlc3Qvc2VjdXJpbmdfYXBwcy9pbmRleC5odG1sI2NhbGxiYWNrLWV2ZW50cyk6XG4gICAqIC0gT25BdXRoRXJyb3JcbiAgICogLSBPbkF1dGhMb2dvdXRcbiAgICogLSBPbkF1dGhSZWZyZXNoRXJyb3JcbiAgICogLSBPbkF1dGhSZWZyZXNoU3VjY2Vzc1xuICAgKiAtIE9uQXV0aFN1Y2Nlc3NcbiAgICogLSBPblJlYWR5XG4gICAqIC0gT25Ub2tlbkV4cGlyZVxuICAgKiBJbiBlYWNoIG9jY3VycmVuY2Ugb2YgYW55IG9mIHRoZXNlLCB0aGlzIHN1YmplY3Qgd2lsbCByZXR1cm4gdGhlIGV2ZW50IHR5cGUsXG4gICAqIGRlc2NyaWJlZCBhdCB7QGxpbmsgS2V5Y2xvYWtFdmVudFR5cGV9IGVudW0gYW5kIHRoZSBmdW5jdGlvbiBhcmdzIGZyb20gdGhlIGtleWNsb2FrLWpzXG4gICAqIGlmIHByb3ZpZGVkIGFueS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBzdWJqZWN0IHdpdGggdGhlIHtAbGluayBLZXljbG9ha0V2ZW50fSB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IHR5cGUgYW5kIGF0dGFjaGVzIHRoZVxuICAgKiBmdW5jdGlvbiBhcmdzLlxuICAgKi9cbiAgZ2V0IGtleWNsb2FrRXZlbnRzJCgpOiBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fa2V5Y2xvYWtFdmVudHMkO1xuICB9XG59XG4iXX0=
|