keycloak-angular 8.4.0 → 9.2.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 +56 -30
- package/{esm2015/keycloak-angular.js → esm2020/keycloak-angular.mjs} +0 -0
- package/esm2020/lib/core/core.module.mjs +33 -0
- package/esm2020/lib/core/interceptors/keycloak-bearer.interceptor.mjs +51 -0
- package/esm2020/lib/core/interfaces/keycloak-event.mjs +12 -0
- package/esm2020/lib/core/interfaces/keycloak-options.mjs +2 -0
- package/esm2020/lib/core/services/keycloak-auth-guard.mjs +17 -0
- package/esm2020/lib/core/services/keycloak.service.mjs +200 -0
- package/esm2020/lib/keycloak-angular.module.mjs +15 -0
- package/esm2020/public_api.mjs +7 -0
- package/fesm2015/{keycloak-angular.js → keycloak-angular.mjs} +91 -57
- package/fesm2015/keycloak-angular.mjs.map +1 -0
- package/fesm2020/keycloak-angular.mjs +317 -0
- package/fesm2020/keycloak-angular.mjs.map +1 -0
- package/keycloak-angular.d.ts +1 -0
- package/lib/core/core.module.d.ts +5 -0
- package/lib/core/interceptors/keycloak-bearer.interceptor.d.ts +5 -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 +10 -5
- package/lib/keycloak-angular.module.d.ts +5 -0
- package/package.json +24 -12
- package/bundles/keycloak-angular.umd.js +0 -766
- package/bundles/keycloak-angular.umd.js.map +0 -1
- package/esm2015/lib/core/core.module.js +0 -21
- package/esm2015/lib/core/interceptors/keycloak-bearer.interceptor.js +0 -41
- package/esm2015/lib/core/interfaces/keycloak-event.js +0 -11
- package/esm2015/lib/core/interfaces/keycloak-options.js +0 -2
- package/esm2015/lib/core/services/keycloak-auth-guard.js +0 -21
- package/esm2015/lib/core/services/keycloak.service.js +0 -209
- package/esm2015/lib/keycloak-angular.module.js +0 -10
- package/esm2015/public_api.js +0 -7
- package/fesm2015/keycloak-angular.js.map +0 -1
- package/keycloak-angular.metadata.json +0 -1
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]
|
|
@@ -51,13 +51,14 @@ Note that `keycloak-js` is a peer dependency of Keycloak Angular. This change al
|
|
|
51
51
|
|
|
52
52
|
### Versions
|
|
53
53
|
|
|
54
|
-
|
|
|
55
|
-
| :---------: | :--------------: |
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
| 9.x | 7.3.x | 3.4.3 - 10 (excluding v7) | Bugs |
|
|
54
|
+
| Angular | keycloak-angular | keycloak-js | Support |
|
|
55
|
+
| :---------: | :--------------: | :---------: | :-----------------: |
|
|
56
|
+
| 13.x | 9.x.x | 10 - 16 | Bugs / New Features |
|
|
57
|
+
| 11.x - 12.x | 8.4.0 | 10 - 15 | None |
|
|
59
58
|
|
|
60
|
-
|
|
59
|
+
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).
|
|
60
|
+
|
|
61
|
+
_Note_: In keycloak-angular **v.9**, it is needed to add `allowSyntheticDefaultImports: true` in the tsconfig.json file in your project. There is an [issue in the keycloak project](https://github.com/keycloak/keycloak/issues/9045) to update the typescript definitions file and solve the problem.
|
|
61
62
|
|
|
62
63
|
#### Choosing the right keycloak-js version
|
|
63
64
|
|
|
@@ -84,13 +85,13 @@ function initializeKeycloak(keycloak: KeycloakService) {
|
|
|
84
85
|
config: {
|
|
85
86
|
url: 'http://localhost:8080/auth',
|
|
86
87
|
realm: 'your-realm',
|
|
87
|
-
clientId: 'your-client-id'
|
|
88
|
+
clientId: 'your-client-id'
|
|
88
89
|
},
|
|
89
90
|
initOptions: {
|
|
90
91
|
onLoad: 'check-sso',
|
|
91
92
|
silentCheckSsoRedirectUri:
|
|
92
|
-
window.location.origin + '/assets/silent-check-sso.html'
|
|
93
|
-
}
|
|
93
|
+
window.location.origin + '/assets/silent-check-sso.html'
|
|
94
|
+
}
|
|
94
95
|
});
|
|
95
96
|
}
|
|
96
97
|
|
|
@@ -102,10 +103,10 @@ function initializeKeycloak(keycloak: KeycloakService) {
|
|
|
102
103
|
provide: APP_INITIALIZER,
|
|
103
104
|
useFactory: initializeKeycloak,
|
|
104
105
|
multi: true,
|
|
105
|
-
deps: [KeycloakService]
|
|
106
|
-
}
|
|
106
|
+
deps: [KeycloakService]
|
|
107
|
+
}
|
|
107
108
|
],
|
|
108
|
-
bootstrap: [AppComponent]
|
|
109
|
+
bootstrap: [AppComponent]
|
|
109
110
|
})
|
|
110
111
|
export class AppModule {}
|
|
111
112
|
```
|
|
@@ -143,12 +144,12 @@ import { Injectable } from '@angular/core';
|
|
|
143
144
|
import {
|
|
144
145
|
ActivatedRouteSnapshot,
|
|
145
146
|
Router,
|
|
146
|
-
RouterStateSnapshot
|
|
147
|
+
RouterStateSnapshot
|
|
147
148
|
} from '@angular/router';
|
|
148
149
|
import { KeycloakAuthGuard, KeycloakService } from 'keycloak-angular';
|
|
149
150
|
|
|
150
151
|
@Injectable({
|
|
151
|
-
providedIn: 'root'
|
|
152
|
+
providedIn: 'root'
|
|
152
153
|
})
|
|
153
154
|
export class AuthGuard extends KeycloakAuthGuard {
|
|
154
155
|
constructor(
|
|
@@ -165,7 +166,7 @@ export class AuthGuard extends KeycloakAuthGuard {
|
|
|
165
166
|
// Force the user to log in if currently unauthenticated.
|
|
166
167
|
if (!this.authenticated) {
|
|
167
168
|
await this.keycloak.login({
|
|
168
|
-
redirectUri: window.location.origin + state.url
|
|
169
|
+
redirectUri: window.location.origin + state.url
|
|
169
170
|
});
|
|
170
171
|
}
|
|
171
172
|
|
|
@@ -185,18 +186,44 @@ export class AuthGuard extends KeycloakAuthGuard {
|
|
|
185
186
|
|
|
186
187
|
## HttpClient Interceptor
|
|
187
188
|
|
|
188
|
-
By default all HttpClient requests will add the Authorization header in the format of: Authorization: Bearer **_TOKEN_
|
|
189
|
+
By default, all HttpClient requests will add the Authorization header in the format of: `Authorization: Bearer **_TOKEN_**`.
|
|
189
190
|
|
|
190
|
-
There is also the possibility to exclude
|
|
191
|
+
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
192
|
|
|
192
193
|
```ts
|
|
193
194
|
await keycloak.init({
|
|
194
195
|
config: {
|
|
195
196
|
url: 'http://localhost:8080/auth',
|
|
196
197
|
realm: 'your-realm',
|
|
197
|
-
clientId: 'your-client-id'
|
|
198
|
+
clientId: 'your-client-id'
|
|
199
|
+
},
|
|
200
|
+
shouldAddToken: (request) => {
|
|
201
|
+
const { method, url } = request;
|
|
202
|
+
|
|
203
|
+
const isGetRequest = 'GET' === method.toUpperCase();
|
|
204
|
+
const acceptablePaths = ['/assets', '/clients/public'];
|
|
205
|
+
const isAcceptablePathMatch = urls.some((path) => url.includes(path));
|
|
206
|
+
|
|
207
|
+
return !(isGetRequest && isAcceptablePathMatch);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
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.
|
|
213
|
+
|
|
214
|
+
In the example below, any http requests with the header `token-update: false` will not trigger the user's keycloak token to be updated.
|
|
215
|
+
|
|
216
|
+
```ts
|
|
217
|
+
await keycloak.init({
|
|
218
|
+
config: {
|
|
219
|
+
url: 'http://localhost:8080/auth',
|
|
220
|
+
realm: 'your-realm',
|
|
221
|
+
clientId: 'your-client-id'
|
|
198
222
|
},
|
|
199
223
|
bearerExcludedUrls: ['/assets', '/clients/public'],
|
|
224
|
+
shouldUpdateToken: (request) => {
|
|
225
|
+
return !request.headers.get('token-update') === 'false';
|
|
226
|
+
}
|
|
200
227
|
});
|
|
201
228
|
```
|
|
202
229
|
|
|
@@ -208,7 +235,7 @@ For example you make keycloak-angular auto refreshing your access token when exp
|
|
|
208
235
|
|
|
209
236
|
```ts
|
|
210
237
|
keycloakService.keycloakEvents$.subscribe({
|
|
211
|
-
next: e => {
|
|
238
|
+
next: (e) => {
|
|
212
239
|
if (e.type == KeycloakEventType.OnTokenExpired) {
|
|
213
240
|
keycloakService.updateToken(20);
|
|
214
241
|
}
|
|
@@ -234,17 +261,16 @@ document.
|
|
|
234
261
|
**keycloak-angular** is licensed under the **[MIT license](LICENSE)**.
|
|
235
262
|
|
|
236
263
|
<!-- prettier-ignore-start -->
|
|
237
|
-
[license-mit-badge]: https://img.shields.io/badge/License-MIT-yellow
|
|
264
|
+
[license-mit-badge]: https://img.shields.io/badge/License-MIT-yellow
|
|
238
265
|
[license-mit]: https://opensource.org/licenses/MIT
|
|
239
|
-
[build-badge]: https://
|
|
240
|
-
[build]: https://
|
|
241
|
-
[vulnerabilities-badge]: https://
|
|
266
|
+
[build-badge]: https://img.shields.io/github/workflow/status/mauriciovigolo/keycloak-angular/CI?label=CI&logo=github
|
|
267
|
+
[build]: https://github.com/mauriciovigolo/keycloak-angular/actions/workflows/main.yml
|
|
268
|
+
[vulnerabilities-badge]: https://img.shields.io/snyk/vulnerabilities/github/mauriciovigolo/keycloak-angular?logo=snyk
|
|
242
269
|
[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
|
|
270
|
+
[npm-version-badge]: https://img.shields.io/npm/v/keycloak-angular
|
|
271
|
+
[npm-badge]: https://img.shields.io/npm/dm/keycloak-angular
|
|
246
272
|
[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
|
|
273
|
+
[contributors-badge]: https://img.shields.io/badge/all_contributors-5-orange
|
|
274
|
+
[discord-badge]: https://img.shields.io/discord/790617227853692958?color=7389d8&labelColor=6a7ec2&logo=discord&logoColor=fff
|
|
249
275
|
[discord]: https://discord.gg/mmzEhYXXDG
|
|
250
|
-
<!-- prettier-ignore-end -->
|
|
276
|
+
<!-- prettier-ignore-end -->
|
|
File without changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
4
|
+
import { KeycloakService } from './services/keycloak.service';
|
|
5
|
+
import { KeycloakBearerInterceptor } from './interceptors/keycloak-bearer.interceptor';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class CoreModule {
|
|
8
|
+
}
|
|
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
|
+
KeycloakService,
|
|
13
|
+
{
|
|
14
|
+
provide: HTTP_INTERCEPTORS,
|
|
15
|
+
useClass: KeycloakBearerInterceptor,
|
|
16
|
+
multi: true
|
|
17
|
+
}
|
|
18
|
+
], imports: [[CommonModule]] });
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: CoreModule, decorators: [{
|
|
20
|
+
type: NgModule,
|
|
21
|
+
args: [{
|
|
22
|
+
imports: [CommonModule],
|
|
23
|
+
providers: [
|
|
24
|
+
KeycloakService,
|
|
25
|
+
{
|
|
26
|
+
provide: HTTP_INTERCEPTORS,
|
|
27
|
+
useClass: KeycloakBearerInterceptor,
|
|
28
|
+
multi: true
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}]
|
|
32
|
+
}] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIvY29yZS9jb3JlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBYXZGLE1BQU0sT0FBTyxVQUFVOzt1R0FBVixVQUFVO3dHQUFWLFVBQVUsWUFWWCxZQUFZO3dHQVVYLFVBQVUsYUFUVjtRQUNULGVBQWU7UUFDZjtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsUUFBUSxFQUFFLHlCQUF5QjtZQUNuQyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsWUFSUSxDQUFDLFlBQVksQ0FBQzsyRkFVWixVQUFVO2tCQVh0QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsU0FBUyxFQUFFO3dCQUNULGVBQWU7d0JBQ2Y7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsUUFBUSxFQUFFLHlCQUF5Qjs0QkFDbkMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvciB9IGZyb20gJy4vaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvcic7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICBLZXljbG9ha1NlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICB1c2VDbGFzczogS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvcixcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvcmVNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { combineLatest } from 'rxjs';
|
|
3
|
+
import { mergeMap } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../services/keycloak.service";
|
|
6
|
+
export class KeycloakBearerInterceptor {
|
|
7
|
+
constructor(keycloak) {
|
|
8
|
+
this.keycloak = keycloak;
|
|
9
|
+
}
|
|
10
|
+
async conditionallyUpdateToken(req) {
|
|
11
|
+
if (this.keycloak.shouldUpdateToken(req)) {
|
|
12
|
+
return await this.keycloak.updateToken();
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
isUrlExcluded({ method, url }, { urlPattern, httpMethods }) {
|
|
17
|
+
const httpTest = httpMethods.length === 0 ||
|
|
18
|
+
httpMethods.join().indexOf(method.toUpperCase()) > -1;
|
|
19
|
+
const urlTest = urlPattern.test(url);
|
|
20
|
+
return httpTest && urlTest;
|
|
21
|
+
}
|
|
22
|
+
intercept(req, next) {
|
|
23
|
+
const { enableBearerInterceptor, excludedUrls } = this.keycloak;
|
|
24
|
+
if (!enableBearerInterceptor) {
|
|
25
|
+
return next.handle(req);
|
|
26
|
+
}
|
|
27
|
+
const shallPass = !this.keycloak.shouldAddToken(req) ||
|
|
28
|
+
excludedUrls.findIndex((item) => this.isUrlExcluded(req, item)) > -1;
|
|
29
|
+
if (shallPass) {
|
|
30
|
+
return next.handle(req);
|
|
31
|
+
}
|
|
32
|
+
return combineLatest([
|
|
33
|
+
this.conditionallyUpdateToken(req),
|
|
34
|
+
this.keycloak.isLoggedIn()
|
|
35
|
+
]).pipe(mergeMap(([_, loggedIn]) => loggedIn
|
|
36
|
+
? this.handleRequestWithTokenHeader(req, next)
|
|
37
|
+
: next.handle(req)));
|
|
38
|
+
}
|
|
39
|
+
handleRequestWithTokenHeader(req, next) {
|
|
40
|
+
return this.keycloak.addTokenToHeader(req.headers).pipe(mergeMap((headersWithBearer) => {
|
|
41
|
+
const kcReq = req.clone({ headers: headersWithBearer });
|
|
42
|
+
return next.handle(kcReq);
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
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: [{
|
|
49
|
+
type: Injectable
|
|
50
|
+
}], ctorParameters: function () { return [{ type: i1.KeycloakService }]; } });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYmVhcmVyLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2V5Y2xvYWstYW5ndWxhci9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2tleWNsb2FrLWJlYXJlci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUTNDLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFZMUMsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUFvQixRQUF5QjtRQUF6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUFHLENBQUM7SUFTekMsS0FBSyxDQUFDLHdCQUF3QixDQUNwQyxHQUF5QjtRQUV6QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFXTyxhQUFhLENBQ25CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBd0IsRUFDckMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFvQjtRQUU3QyxNQUFNLFFBQVEsR0FDWixXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDeEIsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV4RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLE9BQU8sUUFBUSxJQUFJLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBU00sU0FBUyxDQUNkLEdBQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hFLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7UUFFRCxNQUFNLFNBQVMsR0FDYixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztZQUNsQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksU0FBUyxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtTQUMzQixDQUFDLENBQUMsSUFBSSxDQUNMLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBcUIsRUFBRSxFQUFFLENBQzdDLFFBQVE7WUFDTixDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7WUFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQ3JCLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFRTyw0QkFBNEIsQ0FDbEMsR0FBeUIsRUFDekIsSUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3JELFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOztzSEE3RlUseUJBQXlCOzBIQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZFxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBJbnRlcmNlcHRvcixcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwRXZlbnRcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMva2V5Y2xvYWsuc2VydmljZSc7XG5pbXBvcnQgeyBFeGNsdWRlZFVybFJlZ2V4IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9rZXljbG9hay1vcHRpb25zJztcblxuLyoqXG4gKiBUaGlzIGludGVyY2VwdG9yIGluY2x1ZGVzIHRoZSBiZWFyZXIgYnkgZGVmYXVsdCBpbiBhbGwgSHR0cENsaWVudCByZXF1ZXN0cy5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBleGNsdWRlIHNvbWUgVVJMcyBmcm9tIGFkZGluZyB0aGUgYmVhcmVyLCBwbGVhc2UsIHRha2UgYSBsb29rXG4gKiBhdCB0aGUge0BsaW5rIEtleWNsb2FrT3B0aW9uc30gYmVhcmVyRXhjbHVkZWRVcmxzIHByb3BlcnR5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSkge31cblxuICAvKipcbiAgICogQ2FsbHMgdG8gdXBkYXRlIHRoZSBrZXljbG9hayB0b2tlbiBpZiB0aGUgcmVxdWVzdCBzaG91bGQgdXBkYXRlIHRoZSB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHJlcSBodHRwIHJlcXVlc3QgZnJvbSBAYW5ndWxhciBodHRwIG1vZHVsZS5cbiAgICogQHJldHVybnNcbiAgICogQSBwcm9taXNlIGJvb2xlYW4gZm9yIHRoZSB0b2tlbiB1cGRhdGUgb3Igbm9vcCByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbmRpdGlvbmFsbHlVcGRhdGVUb2tlbihcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmtleWNsb2FrLnNob3VsZFVwZGF0ZVRva2VuKHJlcSkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmtleWNsb2FrLnVwZGF0ZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQ2hlY2tzIGlmIHRoZSB1cmwgaXMgZXhjbHVkZWQgZnJvbSBoYXZpbmcgdGhlIEJlYXJlciBBdXRob3JpemF0aW9uXG4gICAqIGhlYWRlciBhZGRlZC5cbiAgICpcbiAgICogQHBhcmFtIHJlcSBodHRwIHJlcXVlc3QgZnJvbSBAYW5ndWxhciBodHRwIG1vZHVsZS5cbiAgICogQHBhcmFtIGV4Y2x1ZGVkVXJsUmVnZXggY29udGFpbnMgdGhlIHVybCBwYXR0ZXJuIGFuZCB0aGUgaHR0cCBtZXRob2RzLFxuICAgKiBleGNsdWRlZCBmcm9tIGFkZGluZyB0aGUgYmVhcmVyIGF0IHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqL1xuICBwcml2YXRlIGlzVXJsRXhjbHVkZWQoXG4gICAgeyBtZXRob2QsIHVybCB9OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgICB7IHVybFBhdHRlcm4sIGh0dHBNZXRob2RzIH06IEV4Y2x1ZGVkVXJsUmVnZXhcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaHR0cFRlc3QgPVxuICAgICAgaHR0cE1ldGhvZHMubGVuZ3RoID09PSAwIHx8XG4gICAgICBodHRwTWV0aG9kcy5qb2luKCkuaW5kZXhPZihtZXRob2QudG9VcHBlckNhc2UoKSkgPiAtMTtcblxuICAgIGNvbnN0IHVybFRlc3QgPSB1cmxQYXR0ZXJuLnRlc3QodXJsKTtcblxuICAgIHJldHVybiBodHRwVGVzdCAmJiB1cmxUZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVyY2VwdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdCB1cmwgbWF0Y2hlcyB0aGUgZXhjbHVkZWRVcmxzLlxuICAgKiBJZiBub3QsIGFkZHMgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHRvIHRoZSByZXF1ZXN0IGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi5cbiAgICpcbiAgICogQHBhcmFtIHJlcVxuICAgKiBAcGFyYW0gbmV4dFxuICAgKi9cbiAgcHVibGljIGludGVyY2VwdChcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgY29uc3QgeyBlbmFibGVCZWFyZXJJbnRlcmNlcHRvciwgZXhjbHVkZWRVcmxzIH0gPSB0aGlzLmtleWNsb2FrO1xuICAgIGlmICghZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IpIHtcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYWxsUGFzczogYm9vbGVhbiA9XG4gICAgICAhdGhpcy5rZXljbG9hay5zaG91bGRBZGRUb2tlbihyZXEpIHx8XG4gICAgICBleGNsdWRlZFVybHMuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmlzVXJsRXhjbHVkZWQocmVxLCBpdGVtKSkgPiAtMTtcbiAgICBpZiAoc2hhbGxQYXNzKSB7XG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNvbmRpdGlvbmFsbHlVcGRhdGVUb2tlbihyZXEpLFxuICAgICAgdGhpcy5rZXljbG9hay5pc0xvZ2dlZEluKClcbiAgICBdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFtfLCBsb2dnZWRJbl06IFtib29sZWFuLCBib29sZWFuXSkgPT5cbiAgICAgICAgbG9nZ2VkSW5cbiAgICAgICAgICA/IHRoaXMuaGFuZGxlUmVxdWVzdFdpdGhUb2tlbkhlYWRlcihyZXEsIG5leHQpXG4gICAgICAgICAgOiBuZXh0LmhhbmRsZShyZXEpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSB0b2tlbiBvZiB0aGUgY3VycmVudCB1c2VyIHRvIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgKlxuICAgKiBAcGFyYW0gcmVxXG4gICAqIEBwYXJhbSBuZXh0XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlcXVlc3RXaXRoVG9rZW5IZWFkZXIoXG4gICAgcmVxOiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4ge1xuICAgIHJldHVybiB0aGlzLmtleWNsb2FrLmFkZFRva2VuVG9IZWFkZXIocmVxLmhlYWRlcnMpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaGVhZGVyc1dpdGhCZWFyZXIpID0+IHtcbiAgICAgICAgY29uc3Qga2NSZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiBoZWFkZXJzV2l0aEJlYXJlciB9KTtcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGtjUmVxKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export var KeycloakEventType;
|
|
2
|
+
(function (KeycloakEventType) {
|
|
3
|
+
KeycloakEventType[KeycloakEventType["OnAuthError"] = 0] = "OnAuthError";
|
|
4
|
+
KeycloakEventType[KeycloakEventType["OnAuthLogout"] = 1] = "OnAuthLogout";
|
|
5
|
+
KeycloakEventType[KeycloakEventType["OnAuthRefreshError"] = 2] = "OnAuthRefreshError";
|
|
6
|
+
KeycloakEventType[KeycloakEventType["OnAuthRefreshSuccess"] = 3] = "OnAuthRefreshSuccess";
|
|
7
|
+
KeycloakEventType[KeycloakEventType["OnAuthSuccess"] = 4] = "OnAuthSuccess";
|
|
8
|
+
KeycloakEventType[KeycloakEventType["OnReady"] = 5] = "OnReady";
|
|
9
|
+
KeycloakEventType[KeycloakEventType["OnTokenExpired"] = 6] = "OnTokenExpired";
|
|
10
|
+
KeycloakEventType[KeycloakEventType["OnActionUpdate"] = 7] = "OnActionUpdate";
|
|
11
|
+
})(KeycloakEventType || (KeycloakEventType = {}));
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL2tleWNsb2FrLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sQ0FBTixJQUFZLGlCQW9DWDtBQXBDRCxXQUFZLGlCQUFpQjtJQUkzQix1RUFBVyxDQUFBO0lBS1gseUVBQVksQ0FBQTtJQUlaLHFGQUFrQixDQUFBO0lBSWxCLHlGQUFvQixDQUFBO0lBSXBCLDJFQUFhLENBQUE7SUFJYiwrREFBTyxDQUFBO0lBTVAsNkVBQWMsQ0FBQTtJQUlkLDZFQUFjLENBQUE7QUFDaEIsQ0FBQyxFQXBDVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBb0M1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZFxuICovXG5cbi8qKlxuICogS2V5Y2xvYWsgZXZlbnQgdHlwZXMsIGFzIGRlc2NyaWJlZCBhdCB0aGUga2V5Y2xvYWstanMgZG9jdW1lbnRhdGlvbjpcbiAqIGh0dHBzOi8vd3d3LmtleWNsb2FrLm9yZy9kb2NzL2xhdGVzdC9zZWN1cmluZ19hcHBzL2luZGV4Lmh0bWwjY2FsbGJhY2stZXZlbnRzXG4gKi9cbmV4cG9ydCBlbnVtIEtleWNsb2FrRXZlbnRUeXBlIHtcbiAgLyoqXG4gICAqIENhbGxlZCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIGF1dGhlbnRpY2F0aW9uLlxuICAgKi9cbiAgT25BdXRoRXJyb3IsXG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIG91dFxuICAgKiAod2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgc2Vzc2lvbiBzdGF0dXMgaWZyYW1lIGlzIGVuYWJsZWQsIG9yIGluIENvcmRvdmEgbW9kZSkuXG4gICAqL1xuICBPbkF1dGhMb2dvdXQsXG4gIC8qKlxuICAgKiBDYWxsZWQgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHRyeWluZyB0byByZWZyZXNoIHRoZSB0b2tlbi5cbiAgICovXG4gIE9uQXV0aFJlZnJlc2hFcnJvcixcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB0b2tlbiBpcyByZWZyZXNoZWQuXG4gICAqL1xuICBPbkF1dGhSZWZyZXNoU3VjY2VzcyxcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgdXNlciBpcyBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZC5cbiAgICovXG4gIE9uQXV0aFN1Y2Nlc3MsXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgYWRhcHRlciBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIE9uUmVhZHksXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgYWNjZXNzIHRva2VuIGlzIGV4cGlyZWQuIElmIGEgcmVmcmVzaCB0b2tlbiBpcyBhdmFpbGFibGUgdGhlIHRva2VuXG4gICAqIGNhbiBiZSByZWZyZXNoZWQgd2l0aCB1cGRhdGVUb2tlbiwgb3IgaW4gY2FzZXMgd2hlcmUgaXQgaXMgbm90ICh0aGF0IGlzLCB3aXRoIGltcGxpY2l0IGZsb3cpXG4gICAqIHlvdSBjYW4gcmVkaXJlY3QgdG8gbG9naW4gc2NyZWVuIHRvIG9idGFpbiBhIG5ldyBhY2Nlc3MgdG9rZW4uXG4gICAqL1xuICBPblRva2VuRXhwaXJlZCxcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgQUlBIGhhcyBiZWVuIHJlcXVlc3RlZCBieSB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBPbkFjdGlvblVwZGF0ZVxufVxuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiBhbiBldmVudCB0cmlnZ2VyZWQgYnkgS2V5Y2xvYWssIGNvbnRhaW5zIGl0J3MgdHlwZVxuICogYW5kIGFyZ3VtZW50cyAoaWYgYW55KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXljbG9ha0V2ZW50IHtcbiAgLyoqXG4gICAqIEV2ZW50IHR5cGUgYXMgZGVzY3JpYmVkIGF0IHtAbGluayBLZXljbG9ha0V2ZW50VHlwZX0uXG4gICAqL1xuICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZTtcbiAgLyoqXG4gICAqIEFyZ3VtZW50cyBmcm9tIHRoZSBrZXljbG9hay1qcyBldmVudCBmdW5jdGlvbi5cbiAgICovXG4gIGFyZ3M/OiB1bmtub3duO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuaW1wb3J0IHsgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbi8qKlxuICogSFRUUCBNZXRob2RzXG4gKi9cbmV4cG9ydCB0eXBlIEh0dHBNZXRob2RzID1cbiAgfCAnR0VUJ1xuICB8ICdQT1NUJ1xuICB8ICdQVVQnXG4gIHwgJ0RFTEVURSdcbiAgfCAnT1BUSU9OUydcbiAgfCAnSEVBRCdcbiAgfCAnUEFUQ0gnO1xuXG4vKipcbiAqIEV4Y2x1ZGVkVXJsIHR5cGUgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgdXJsIGFuZCB0aGUgSFRUUCBtZXRob2QgdGhhdFxuICogc2hvdWxkIG5vdCBiZSBpbnRlcmNlcHRlZCBieSB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAqXG4gKiBFeGFtcGxlOlxuICogY29uc3QgZXhjbHVkZWRVcmw6IEV4Y2x1ZGVkVXJsW10gPSBbXG4gKiAge1xuICogICAgdXJsOiAncmVwb3J0cy9wdWJsaWMnXG4gKiAgICBodHRwTWV0aG9kczogWydHRVQnXVxuICogIH1cbiAqIF1cbiAqXG4gKiBJbiB0aGUgZXhhbXBsZSBhYm92ZSBmb3IgVVJMIHJlcG9ydHMvcHVibGljIGFuZCBIVFRQIE1ldGhvZCBHRVQgdGhlXG4gKiBiZWFyZXIgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBhZGRlZC5cbiAqXG4gKiBJZiB0aGUgdXJsIGlzIGluZm9ybWVkIGJ1dCBodHRwTWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgYmVhcmVyXG4gKiB3aWxsIG5vdCBiZSBhZGRlZCBmb3IgYWxsIEhUVFAgTWV0aG9kcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGNsdWRlZFVybCB7XG4gIHVybDogc3RyaW5nO1xuICBodHRwTWV0aG9kcz86IEh0dHBNZXRob2RzW107XG59XG5cbi8qKlxuICogU2ltaWxhciB0byBFeGNsdWRlZFVybCwgY29udGFpbnMgdGhlIEhUVFAgbWV0aG9kcyBhbmQgYSByZWdleCB0b1xuICogaW5jbHVkZSB0aGUgdXJsIHBhdHRlcm5zLlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBLZXljbG9ha1NlcnZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhjbHVkZWRVcmxSZWdleCB7XG4gIHVybFBhdHRlcm46IFJlZ0V4cDtcbiAgaHR0cE1ldGhvZHM/OiBIdHRwTWV0aG9kc1tdO1xufVxuXG4vKipcbiAqIGtleWNsb2FrLWFuZ3VsYXIgaW5pdGlhbGl6YXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXljbG9ha09wdGlvbnMge1xuICAvKipcbiAgICogQ29uZmlncyB0byBpbml0IHRoZSBrZXljbG9hay1qcyBsaWJyYXJ5LiBJZiB1bmRlZmluZWQsIHdpbGwgbG9vayBmb3IgYSBrZXljbG9hay5qc29uIGZpbGVcbiAgICogYXQgcm9vdCBvZiB0aGUgcHJvamVjdC5cbiAgICogSWYgbm90IHVuZGVmaW5lZCwgY2FuIGJlIGEgc3RyaW5nIG1lYW5pbmcgdGhlIHVybCB0byB0aGUga2V5Y2xvYWsuanNvbiBmaWxlIG9yIGFuIG9iamVjdFxuICAgKiBvZiB7QGxpbmsgS2V5Y2xvYWsuS2V5Y2xvYWtDb25maWd9LiBVc2UgdGhpcyBjb25maWd1cmF0aW9uIGlmIHlvdSB3YW50IHRvIHNwZWNpZnkgdGhlIGtleWNsb2FrIHNlcnZlcixcbiAgICogcmVhbG0sIGNsaWVudElkLiBUaGlzIGlzIHVzZWZ1bGwgaWYgeW91IGhhdmUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGZvciBwcm9kdWN0aW9uLCBzdGFnZVxuICAgKiBhbmQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLiBIaW50OiBNYWtlIHVzZSBvZiBBbmd1bGFyIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25maWc/OiBzdHJpbmcgfCBLZXljbG9hay5LZXljbG9ha0NvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgS2V5Y2xvYWsgYWRhcHRlciwgbWF0Y2hlcyB0aGUgb3B0aW9ucyBhcyBwcm92aWRlZCBieSBLZXljbG9hayBpdHNlbGYuXG4gICAqL1xuICBpbml0T3B0aW9ucz86IEtleWNsb2FrLktleWNsb2FrSW5pdE9wdGlvbnM7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByZXF1ZXN0cyBtYWRlIGJ5IEFuZ3VsYXIgSHR0cENsaWVudCB3aWxsIGJlIGludGVyY2VwdGVkIGluIG9yZGVyIHRvXG4gICAqIGFkZCB0aGUgYmVhcmVyIGluIHRoZSBBdXRob3JpemF0aW9uIEh0dHAgSGVhZGVyLiBIb3dldmVyLCBpZiB0aGlzIGlzIGEgbm90IGRlc2lyZWRcbiAgICogZmVhdHVyZSwgdGhlIGVuYWJsZUJlYXJlckludGVyY2VwdG9yIG11c3QgYmUgZmFsc2UuXG4gICAqXG4gICAqIEJyaWVmbHksIGlmIGVuYWJsZUJlYXJlckludGVyY2VwdG9yID09PSBmYWxzZSwgdGhlIGJlYXJlciB3aWxsIG5vdCBiZSBhZGRlZFxuICAgKiB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBGb3JjZXMgdGhlIGV4ZWN1dGlvbiBvZiBsb2FkVXNlclByb2ZpbGUgYWZ0ZXIgdGhlIGtleWNsb2FrIGluaXRpYWxpemF0aW9uIGNvbnNpZGVyaW5nIHRoYXQgdGhlXG4gICAqIHVzZXIgbG9nZ2VkIGluLlxuICAgKiBUaGlzIG9wdGlvbiBpcyByZWNvbW1lbmRlZCBpZiBpcyBkZXNpcmFibGUgdG8gaGF2ZSB0aGUgdXNlciBkZXRhaWxzIGF0IHRoZSBiZWdpbm5pbmcsXG4gICAqIHNvIGFmdGVyIHRoZSBsb2dpbiwgdGhlIGxvYWRVc2VyUHJvZmlsZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhbmQgaXQncyB2YWx1ZSBjYWNoZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAqL1xuICBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA/OiBib29sZWFuO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogU3RyaW5nIEFycmF5IHRvIGV4Y2x1ZGUgdGhlIHVybHMgdGhhdCBzaG91bGQgbm90IGhhdmUgdGhlIEF1dGhvcml6YXRpb24gSGVhZGVyIGF1dG9tYXRpY2FsbHlcbiAgICogYWRkZWQuIFRoaXMgbGlicmFyeSBtYWtlcyB1c2Ugb2YgQW5ndWxhciBIdHRwIEludGVyY2VwdG9yLCB0byBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgQmVhcmVyXG4gICAqIHRva2VuIHRvIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgYmVhcmVyRXhjbHVkZWRVcmxzPzogKHN0cmluZyB8IEV4Y2x1ZGVkVXJsKVtdO1xuICAvKipcbiAgICogVGhpcyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXNcbiAgICogKipBdXRob3JpemF0aW9uKiouIElmIHRoZSBiYWNrZW5kIGV4cGVjdHMgcmVxdWVzdHMgdG8gaGF2ZSBhIHRva2VuIGluIGEgZGlmZmVyZW50IGhlYWRlciwgeW91XG4gICAqIHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSwgaS5lOiAqKkpXVC1BdXRob3JpemF0aW9uKiouIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBIdHRwIEhlYWRlclxuICAgKiBBdXRob3JpemF0aW9uIGFzIFwiSldULUF1dGhvcml6YXRpb246IGJlYXJlciA8dG9rZW4+XCIuXG4gICAqL1xuICBhdXRob3JpemF0aW9uSGVhZGVyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBwYXJhbS4gVGhlIGRlZmF1bHQgdmFsdWUgaXNcbiAgICogKipCZWFyZXIqKiwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBIdHRwIEhlYWRlciBBdXRob3JpemF0aW9uIGFzIFwiQXV0aG9yaXphdGlvbjogQmVhcmVyIDx0b2tlbj5cIi5cbiAgICpcbiAgICogSWYgYW55IG90aGVyIHZhbHVlIGlzIG5lZWRlZCBieSB0aGUgYmFja2VuZCBpbiB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIsIHlvdSBzaG91bGQgY2hhbmdlIHRoaXNcbiAgICogdmFsdWUuXG4gICAqXG4gICAqIFdhcm5pbmc6IHRoaXMgdmFsdWUgbXVzdCBiZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGtleWNsb2FrIHNlcnZlciBpbnN0YW5jZSBhbmQgdGhlIGFkYXB0ZXIuXG4gICAqL1xuICBiZWFyZXJQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIHRva2VuIG5lZWRzIHRvIGJlIHVwZGF0ZWQuIElmIHRoZSB0b2tlblxuICAgKiB3aWxsIGV4cGlyZSBpcyBmZXdlciBzZWNvbmRzIHRoYW4gdGhlIHVwZGF0ZU1pblZhbGlkaXR5IHZhbHVlLCB0aGVuIGl0IHdpbGwgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAuXG4gICAqL1xuICB1cGRhdGVNaW5WYWxpZGl0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHRlbGwgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3Igd2hldGhlciB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSByZXF1ZXN0XG4gICAqIG9yIHRvIGxlYXZlIHRoZSByZXF1ZXN0IGFzIGl0IGlzLiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYHRydWVgLCB0aGUgcmVxdWVzdCB3aWxsIGhhdmUgdGhlIHRva2VuXG4gICAqIHByZXNlbnQgb24gaXQuIElmIGl0IGlzIGBmYWxzZWAsIHRoZSB0b2tlbiB3aWxsIGJlIGxlZnQgb2ZmIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYHRydWVgLlxuICAgKi9cbiAgc2hvdWxkQWRkVG9rZW4/OiAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB0ZWxsIHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yIGlmIHRoZSB0b2tlbiBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3JcbiAgICogdXBkYXRpbmcgYXMgYSBwYXJ0IG9mIHRoZSByZXF1ZXN0IGJlaW5nIG1hZGUuIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBgdHJ1ZWAsIHRoZSByZXF1ZXN0IHdpbGxcbiAgICogY2hlY2sgdGhlIHRva2VuJ3MgZXhwaXJ5IHRpbWUgYW5kIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIHNlY29uZHMgY29uZmlndXJlZCBieVxuICAgKiB1cGRhdGVNaW5WYWxpZGl0eSB0aGVuIGl0IHdpbGwgYmUgdXBkYXRlZCBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgbWFkZS4gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzXG4gICAqIGZhbHNlLCB0aGUgdG9rZW4gd2lsbCBub3QgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIGB0cnVlYC5cbiAgICovXG4gIHNob3VsZFVwZGF0ZVRva2VuPzogKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+KSA9PiBib29sZWFuO1xufVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class KeycloakAuthGuard {
|
|
2
|
+
constructor(router, keycloakAngular) {
|
|
3
|
+
this.router = router;
|
|
4
|
+
this.keycloakAngular = keycloakAngular;
|
|
5
|
+
}
|
|
6
|
+
async canActivate(route, state) {
|
|
7
|
+
try {
|
|
8
|
+
this.authenticated = await this.keycloakAngular.isLoggedIn();
|
|
9
|
+
this.roles = await this.keycloakAngular.getUserRoles(true);
|
|
10
|
+
return await this.isAccessAllowed(route, state);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
throw new Error('An error happened during access validation. Details:' + error);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYXV0aC1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLWF1dGgtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0JBLE1BQU0sT0FBZ0IsaUJBQWlCO0lBVXJDLFlBQ1ksTUFBYyxFQUNkLGVBQWdDO1FBRGhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDekMsQ0FBQztJQVNKLEtBQUssQ0FBQyxXQUFXLENBQ2YsS0FBNkIsRUFDN0IsS0FBMEI7UUFFMUIsSUFBSTtZQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUzRCxPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDakQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELEdBQUcsS0FBSyxDQUMvRCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBZUYiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgTWF1cmljaW8gR2VtZWxsaSBWaWdvbG8gYW5kIGNvbnRyaWJ1dG9ycy5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyaWNpb3ZpZ29sby9rZXljbG9hay1hbmd1bGFyL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWRcbiAqL1xuXG5pbXBvcnQge1xuICBDYW5BY3RpdmF0ZSxcbiAgUm91dGVyLFxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxUcmVlXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJy4va2V5Y2xvYWsuc2VydmljZSc7XG5cbi8qKlxuICogQSBzaW1wbGUgZ3VhcmQgaW1wbGVtZW50YXRpb24gb3V0IG9mIHRoZSBib3guIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluaGVyaXRlZCBhbmRcbiAqIGltcGxlbWVudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gVGhlIG9ubHkgbWV0aG9kIHRoYXQgc2hvdWxkIGJlIGltcGxlbWVudGVkIGlzICNpc0FjY2Vzc0FsbG93ZWQuXG4gKiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIGF1dGhvcml6YXRpb24gZmxvdyBpcyB1c3VhbGx5IG5vdCB1bmlxdWUsIHNvIGluIHRoaXMgd2F5IHlvdSB3aWxsXG4gKiBoYXZlIG1vcmUgZnJlZWRvbSB0byBjdXN0b21pemUgeW91ciBhdXRob3JpemF0aW9uIGZsb3cuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBLZXljbG9ha0F1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkIG9yIG5vdC5cbiAgICovXG4gIHByb3RlY3RlZCBhdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogUm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBJdCBjb250YWlucyB0aGUgY2xpZW50SWQgYW5kIHJlYWxtIHVzZXIgcm9sZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcm9sZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQga2V5Y2xvYWtBbmd1bGFyOiBLZXljbG9ha1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDYW5BY3RpdmF0ZSBjaGVja3MgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGFuZCBnZXQgdGhlIGZ1bGwgbGlzdCBvZiByb2xlcyAoUkVBTE0gKyBDTElFTlQpXG4gICAqIG9mIHRoZSBsb2dnZWQgdXNlci4gVGhpcyB2YWx1ZXMgYXJlIHNldCB0byBhdXRoZW50aWNhdGVkIGFuZCByb2xlcyBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSByb3V0ZVxuICAgKiBAcGFyYW0gc3RhdGVcbiAgICovXG4gIGFzeW5jIGNhbkFjdGl2YXRlKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gYXdhaXQgdGhpcy5rZXljbG9ha0FuZ3VsYXIuaXNMb2dnZWRJbigpO1xuICAgICAgdGhpcy5yb2xlcyA9IGF3YWl0IHRoaXMua2V5Y2xvYWtBbmd1bGFyLmdldFVzZXJSb2xlcyh0cnVlKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaXNBY2Nlc3NBbGxvd2VkKHJvdXRlLCBzdGF0ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0FuIGVycm9yIGhhcHBlbmVkIGR1cmluZyBhY2Nlc3MgdmFsaWRhdGlvbi4gRGV0YWlsczonICsgZXJyb3JcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB5b3VyIG93biBjdXN0b21pemVkIGF1dGhvcml6YXRpb24gZmxvdyBpbiB0aGlzIG1ldGhvZC4gRnJvbSBoZXJlIHlvdSBhbHJlYWR5IGtub3duXG4gICAqIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgKHRoaXMuYXV0aGVudGljYXRlZCkgYW5kIHRoZSB1c2VyIHJvbGVzICh0aGlzLnJvbGVzKS5cbiAgICpcbiAgICogUmV0dXJuIGEgVXJsVHJlZSBpZiB0aGUgdXNlciBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byBhbm90aGVyIHJvdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gcm91dGVcbiAgICogQHBhcmFtIHN0YXRlXG4gICAqL1xuICBhYnN0cmFjdCBpc0FjY2Vzc0FsbG93ZWQoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgKTogUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT47XG59XG4iXX0=
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
3
|
+
import { Subject, from } from 'rxjs';
|
|
4
|
+
import { map } from 'rxjs/operators';
|
|
5
|
+
import Keycloak from 'keycloak-js';
|
|
6
|
+
import { KeycloakEventType } from '../interfaces/keycloak-event';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class KeycloakService {
|
|
9
|
+
constructor() {
|
|
10
|
+
this._keycloakEvents$ = new Subject();
|
|
11
|
+
}
|
|
12
|
+
bindsKeycloakEvents() {
|
|
13
|
+
this._instance.onAuthError = (errorData) => {
|
|
14
|
+
this._keycloakEvents$.next({
|
|
15
|
+
args: errorData,
|
|
16
|
+
type: KeycloakEventType.OnAuthError
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
this._instance.onAuthLogout = () => {
|
|
20
|
+
this._keycloakEvents$.next({ type: KeycloakEventType.OnAuthLogout });
|
|
21
|
+
};
|
|
22
|
+
this._instance.onAuthRefreshSuccess = () => {
|
|
23
|
+
this._keycloakEvents$.next({
|
|
24
|
+
type: KeycloakEventType.OnAuthRefreshSuccess
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
this._instance.onAuthRefreshError = () => {
|
|
28
|
+
this._keycloakEvents$.next({
|
|
29
|
+
type: KeycloakEventType.OnAuthRefreshError
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
this._instance.onAuthSuccess = () => {
|
|
33
|
+
this._keycloakEvents$.next({ type: KeycloakEventType.OnAuthSuccess });
|
|
34
|
+
};
|
|
35
|
+
this._instance.onTokenExpired = () => {
|
|
36
|
+
this._keycloakEvents$.next({
|
|
37
|
+
type: KeycloakEventType.OnTokenExpired
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
this._instance.onActionUpdate = (state) => {
|
|
41
|
+
this._keycloakEvents$.next({
|
|
42
|
+
args: state,
|
|
43
|
+
type: KeycloakEventType.OnActionUpdate
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
this._instance.onReady = (authenticated) => {
|
|
47
|
+
this._keycloakEvents$.next({
|
|
48
|
+
args: authenticated,
|
|
49
|
+
type: KeycloakEventType.OnReady
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
loadExcludedUrls(bearerExcludedUrls) {
|
|
54
|
+
const excludedUrls = [];
|
|
55
|
+
for (const item of bearerExcludedUrls) {
|
|
56
|
+
let excludedUrl;
|
|
57
|
+
if (typeof item === 'string') {
|
|
58
|
+
excludedUrl = { urlPattern: new RegExp(item, 'i'), httpMethods: [] };
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
excludedUrl = {
|
|
62
|
+
urlPattern: new RegExp(item.url, 'i'),
|
|
63
|
+
httpMethods: item.httpMethods
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
excludedUrls.push(excludedUrl);
|
|
67
|
+
}
|
|
68
|
+
return excludedUrls;
|
|
69
|
+
}
|
|
70
|
+
initServiceValues({ enableBearerInterceptor = true, loadUserProfileAtStartUp = false, bearerExcludedUrls = [], authorizationHeaderName = 'Authorization', bearerPrefix = 'Bearer', initOptions, updateMinValidity = 20, shouldAddToken = () => true, shouldUpdateToken = () => true }) {
|
|
71
|
+
this._enableBearerInterceptor = enableBearerInterceptor;
|
|
72
|
+
this._loadUserProfileAtStartUp = loadUserProfileAtStartUp;
|
|
73
|
+
this._authorizationHeaderName = authorizationHeaderName;
|
|
74
|
+
this._bearerPrefix = bearerPrefix.trim().concat(' ');
|
|
75
|
+
this._excludedUrls = this.loadExcludedUrls(bearerExcludedUrls);
|
|
76
|
+
this._silentRefresh = initOptions ? initOptions.flow === 'implicit' : false;
|
|
77
|
+
this._updateMinValidity = updateMinValidity;
|
|
78
|
+
this.shouldAddToken = shouldAddToken;
|
|
79
|
+
this.shouldUpdateToken = shouldUpdateToken;
|
|
80
|
+
}
|
|
81
|
+
async init(options = {}) {
|
|
82
|
+
this.initServiceValues(options);
|
|
83
|
+
const { config, initOptions } = options;
|
|
84
|
+
this._instance = Keycloak(config);
|
|
85
|
+
this.bindsKeycloakEvents();
|
|
86
|
+
const authenticated = await this._instance.init(initOptions);
|
|
87
|
+
if (authenticated && this._loadUserProfileAtStartUp) {
|
|
88
|
+
await this.loadUserProfile();
|
|
89
|
+
}
|
|
90
|
+
return authenticated;
|
|
91
|
+
}
|
|
92
|
+
async login(options = {}) {
|
|
93
|
+
await this._instance.login(options);
|
|
94
|
+
if (this._loadUserProfileAtStartUp) {
|
|
95
|
+
await this.loadUserProfile();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async logout(redirectUri) {
|
|
99
|
+
const options = {
|
|
100
|
+
redirectUri
|
|
101
|
+
};
|
|
102
|
+
await this._instance.logout(options);
|
|
103
|
+
this._userProfile = undefined;
|
|
104
|
+
}
|
|
105
|
+
async register(options = { action: 'register' }) {
|
|
106
|
+
await this._instance.register(options);
|
|
107
|
+
}
|
|
108
|
+
isUserInRole(role, resource) {
|
|
109
|
+
let hasRole;
|
|
110
|
+
hasRole = this._instance.hasResourceRole(role, resource);
|
|
111
|
+
if (!hasRole) {
|
|
112
|
+
hasRole = this._instance.hasRealmRole(role);
|
|
113
|
+
}
|
|
114
|
+
return hasRole;
|
|
115
|
+
}
|
|
116
|
+
getUserRoles(allRoles = true) {
|
|
117
|
+
let roles = [];
|
|
118
|
+
if (this._instance.resourceAccess) {
|
|
119
|
+
for (const key in this._instance.resourceAccess) {
|
|
120
|
+
if (this._instance.resourceAccess.hasOwnProperty(key)) {
|
|
121
|
+
const resourceAccess = this._instance.resourceAccess[key];
|
|
122
|
+
const clientRoles = resourceAccess['roles'] || [];
|
|
123
|
+
roles = roles.concat(clientRoles);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (allRoles && this._instance.realmAccess) {
|
|
128
|
+
const realmRoles = this._instance.realmAccess['roles'] || [];
|
|
129
|
+
roles.push(...realmRoles);
|
|
130
|
+
}
|
|
131
|
+
return roles;
|
|
132
|
+
}
|
|
133
|
+
async isLoggedIn() {
|
|
134
|
+
try {
|
|
135
|
+
return this._instance.authenticated;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
isTokenExpired(minValidity = 0) {
|
|
142
|
+
return this._instance.isTokenExpired(minValidity);
|
|
143
|
+
}
|
|
144
|
+
async updateToken() {
|
|
145
|
+
if (this._silentRefresh) {
|
|
146
|
+
if (this.isTokenExpired()) {
|
|
147
|
+
throw new Error('Failed to refresh the token, or the session is expired');
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
if (!this._instance) {
|
|
152
|
+
throw new Error('Keycloak Angular library is not initialized.');
|
|
153
|
+
}
|
|
154
|
+
return this._instance.updateToken(this._updateMinValidity);
|
|
155
|
+
}
|
|
156
|
+
async loadUserProfile(forceReload = false) {
|
|
157
|
+
if (this._userProfile && !forceReload) {
|
|
158
|
+
return this._userProfile;
|
|
159
|
+
}
|
|
160
|
+
if (!this._instance.authenticated) {
|
|
161
|
+
throw new Error('The user profile was not loaded as the user is not logged in.');
|
|
162
|
+
}
|
|
163
|
+
return (this._userProfile = await this._instance.loadUserProfile());
|
|
164
|
+
}
|
|
165
|
+
async getToken() {
|
|
166
|
+
return this._instance.token;
|
|
167
|
+
}
|
|
168
|
+
getUsername() {
|
|
169
|
+
if (!this._userProfile) {
|
|
170
|
+
throw new Error('User not logged in or user profile was not loaded.');
|
|
171
|
+
}
|
|
172
|
+
return this._userProfile.username;
|
|
173
|
+
}
|
|
174
|
+
clearToken() {
|
|
175
|
+
this._instance.clearToken();
|
|
176
|
+
}
|
|
177
|
+
addTokenToHeader(headers = new HttpHeaders()) {
|
|
178
|
+
return from(this.getToken()).pipe(map((token) => token
|
|
179
|
+
? headers.set(this._authorizationHeaderName, this._bearerPrefix + token)
|
|
180
|
+
: headers));
|
|
181
|
+
}
|
|
182
|
+
getKeycloakInstance() {
|
|
183
|
+
return this._instance;
|
|
184
|
+
}
|
|
185
|
+
get excludedUrls() {
|
|
186
|
+
return this._excludedUrls;
|
|
187
|
+
}
|
|
188
|
+
get enableBearerInterceptor() {
|
|
189
|
+
return this._enableBearerInterceptor;
|
|
190
|
+
}
|
|
191
|
+
get keycloakEvents$() {
|
|
192
|
+
return this._keycloakEvents$;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
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: [{
|
|
198
|
+
type: Injectable
|
|
199
|
+
}] });
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWsuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FrLWFuZ3VsYXIvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2tleWNsb2FrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sc0JBQXNCLENBQUM7QUFFaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQztBQU9uQyxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBVWhGLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBd0NVLHFCQUFnQixHQUN0QixJQUFJLE9BQU8sRUFBaUIsQ0FBQztLQStkaEM7SUExY1MsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFdBQVc7YUFDcEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixHQUFHLEdBQUcsRUFBRTtZQUN6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LElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN2QyxDQUFDO0lBcUJELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDOzs0R0F0Z0JVLGVBQWU7Z0hBQWYsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE1hdXJpY2lvIEdlbWVsbGkgVmlnb2xvIGFuZCBjb250cmlidXRvcnMuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbWF1cmljaW92aWdvbG8va2V5Y2xvYWstYW5ndWxhci9ibG9iL21hc3Rlci9MSUNFTlNFLm1kXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgS2V5Y2xvYWsgZnJvbSAna2V5Y2xvYWstanMnO1xuXG5pbXBvcnQge1xuICBFeGNsdWRlZFVybCxcbiAgRXhjbHVkZWRVcmxSZWdleCxcbiAgS2V5Y2xvYWtPcHRpb25zXG59IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstb3B0aW9ucyc7XG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50LCBLZXljbG9ha0V2ZW50VHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMva2V5Y2xvYWstZXZlbnQnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIGV4aXN0ZW50IG1ldGhvZHMgZnJvbSB0aGUgS2V5Y2xvYWsgSlMgYWRhcHRlciwgYWRkaW5nIG5ld1xuICogZnVuY3Rpb25hbGl0aWVzIHRvIGltcHJvdmUgdGhlIHVzZSBvZiBrZXljbG9hayBpbiBBbmd1bGFyIHYgPiA0LjMgYXBwbGljYXRpb25zLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGluamVjdGVkIGluIHRoZSBhcHBsaWNhdGlvbiBib290c3RyYXAsIHNvIHRoZSBzYW1lIGluc3RhbmNlIHdpbGwgYmUgdXNlZFxuICogYWxvbmcgdGhlIHdlYiBhcHBsaWNhdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEtleWNsb2FrU2VydmljZSB7XG4gIC8qKlxuICAgKiBLZXljbG9hay1qcyBpbnN0YW5jZS5cbiAgICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlO1xuICAvKipcbiAgICogVXNlciBwcm9maWxlIGFzIEtleWNsb2FrUHJvZmlsZSBpbnRlcmZhY2UuXG4gICAqL1xuICBwcml2YXRlIF91c2VyUHJvZmlsZTogS2V5Y2xvYWsuS2V5Y2xvYWtQcm9maWxlO1xuICAvKipcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgYmVhcmVyIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2VuYWJsZUJlYXJlckludGVyY2VwdG9yOiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0aGUgaW1wbGljaXQgZmxvdyBpcyBjaG9vc2VuIHRoZXJlIG11c3QgZXhpc3QgYSBzaWxlbnRSZWZyZXNoLCBhcyB0aGVyZSBpc1xuICAgKiBubyByZWZyZXNoIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2lsZW50UmVmcmVzaDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHByb2ZpbGUgc2hvdWxkIGJlIGxvYWRlZCBhdCB0aGUga2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24sXG4gICAqIGp1c3QgYWZ0ZXIgdGhlIGxvZ2luLlxuICAgKi9cbiAgcHJpdmF0ZSBfbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGJlYXJlciBwcmVmaXggdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBBdXRob3JpemF0aW9uIEhlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX2JlYXJlclByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogVmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIEF1dGhvcml6YXRpb24gSHR0cCBIZWFkZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25IZWFkZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBUaGUgZXhjbHVkZWQgdXJscyBwYXR0ZXJucyB0aGF0IG11c3Qgc2tpcCB0aGUgS2V5Y2xvYWtCZWFyZXJJbnRlcmNlcHRvci5cbiAgICovXG4gIHByaXZhdGUgX2V4Y2x1ZGVkVXJsczogRXhjbHVkZWRVcmxSZWdleFtdO1xuICAvKipcbiAgICogT2JzZXJ2ZXIgZm9yIHRoZSBrZXljbG9hayBldmVudHNcbiAgICovXG4gIHByaXZhdGUgX2tleWNsb2FrRXZlbnRzJDogU3ViamVjdDxLZXljbG9ha0V2ZW50PiA9XG4gICAgbmV3IFN1YmplY3Q8S2V5Y2xvYWtFdmVudD4oKTtcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgcmVxdWlyZWQgdGltZSByZW1haW5pbmcgYmVmb3JlIGV4cGlyeSBvZiB0aGUgdG9rZW4gYmVmb3JlIHRoZSB0b2tlbiB3aWxsIGJlIHJlZnJlc2hlZC5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZU1pblZhbGlkaXR5OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3Qgc2hvdWxkIGhhdmUgdGhlIHRva2VuIGFkZGVkIHRvIHRoZSBoZWFkZXJzIGJ5IHRoZSBLZXljbG9ha0JlYXJlckludGVyY2VwdG9yLlxuICAgKi9cbiAgc2hvdWxkQWRkVG9rZW46IChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPikgPT4gYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdCBiZWluZyBtYWRlIHNob3VsZCBwb3RlbnRpYWxseSB1cGRhdGUgdGhlIHRva2VuLlxuICAgKi9cbiAgc2hvdWxkVXBkYXRlVG9rZW46IChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogQmluZHMgdGhlIGtleWNsb2FrLWpzIGV2ZW50cyB0byB0aGUga2V5Y2xvYWtFdmVudHMgU3ViamVjdFxuICAgKiB3aGljaCBpcyBhIGdvb2Qgd2F5IHRvIG1vbml0b3IgZm9yIGNoYW5nZXMsIGlmIG5lZWRlZC5cbiAgICpcbiAgICogVGhlIGtleWNsb2FrRXZlbnRzIHJldHVybnMgdGhlIGtleWNsb2FrLWpzIGV2ZW50IHR5cGUgYW5kIGFueVxuICAgKiBhcmd1bWVudCBpZiB0aGUgc291cmNlIGZ1bmN0aW9uIHByb3ZpZGVzIGFueS5cbiAgICovXG4gIHByaXZhdGUgYmluZHNLZXljbG9ha0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhFcnJvciA9IChlcnJvckRhdGEpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgYXJnczogZXJyb3JEYXRhLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkF1dGhFcnJvclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aExvZ291dCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHsgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoTG9nb3V0IH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoU3VjY2VzcyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2tleWNsb2FrRXZlbnRzJC5uZXh0KHtcbiAgICAgICAgdHlwZTogS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaFN1Y2Nlc3NcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5vbkF1dGhSZWZyZXNoRXJyb3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFJlZnJlc2hFcnJvclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQXV0aFN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7IHR5cGU6IEtleWNsb2FrRXZlbnRUeXBlLk9uQXV0aFN1Y2Nlc3MgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uVG9rZW5FeHBpcmVkID0gKCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblRva2VuRXhwaXJlZFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uQWN0aW9uVXBkYXRlID0gKHN0YXRlKSA9PiB7XG4gICAgICB0aGlzLl9rZXljbG9ha0V2ZW50cyQubmV4dCh7XG4gICAgICAgIGFyZ3M6IHN0YXRlLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PbkFjdGlvblVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uUmVhZHkgPSAoYXV0aGVudGljYXRlZCkgPT4ge1xuICAgICAgdGhpcy5fa2V5Y2xvYWtFdmVudHMkLm5leHQoe1xuICAgICAgICBhcmdzOiBhdXRoZW50aWNhdGVkLFxuICAgICAgICB0eXBlOiBLZXljbG9ha0V2ZW50VHlwZS5PblJlYWR5XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCBiZWFyZXJFeGNsdWRlZFVybCBjb250ZW50IGluIGEgdW5pZm9ybSB0eXBlOiBFeGNsdWRlZFVybCxcbiAgICogc28gaXQgYmVjb21lcyBlYXNpZXIgdG8gaGFuZGxlLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyRXhjbHVkZWRVcmxzIGFycmF5IG9mIHN0cmluZ3Mgb3IgRXhjbHVkZWRVcmwgdGhhdCBpbmNsdWRlc1xuICAgKiB0aGUgdXJsIGFuZCBIdHRwTWV0aG9kLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkRXhjbHVkZWRVcmxzKFxuICAgIGJlYXJlckV4Y2x1ZGVkVXJsczogKHN0cmluZyB8IEV4Y2x1ZGVkVXJsKVtdXG4gICk6IEV4Y2x1ZGVkVXJsUmVnZXhbXSB7XG4gICAgY29uc3QgZXhjbHVkZWRVcmxzOiBFeGNsdWRlZFVybFJlZ2V4W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYmVhcmVyRXhjbHVkZWRVcmxzKSB7XG4gICAgICBsZXQgZXhjbHVkZWRVcmw6IEV4Y2x1ZGVkVXJsUmVnZXg7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGV4Y2x1ZGVkVXJsID0geyB1cmxQYXR0ZXJuOiBuZXcgUmVnRXhwKGl0ZW0sICdpJyksIGh0dHBNZXRob2RzOiBbXSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhjbHVkZWRVcmwgPSB7XG4gICAgICAgICAgdXJsUGF0dGVybjogbmV3IFJlZ0V4cChpdGVtLnVybCwgJ2knKSxcbiAgICAgICAgICBodHRwTWV0aG9kczogaXRlbS5odHRwTWV0aG9kc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZXhjbHVkZWRVcmxzLnB1c2goZXhjbHVkZWRVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gZXhjbHVkZWRVcmxzO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNsYXNzIHZhbHVlcyBpbml0aWFsaXphdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgaW5pdFNlcnZpY2VWYWx1ZXMoe1xuICAgIGVuYWJsZUJlYXJlckludGVyY2VwdG9yID0gdHJ1ZSxcbiAgICBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXAgPSBmYWxzZSxcbiAgICBiZWFyZXJFeGNsdWRlZFVybHMgPSBbXSxcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyTmFtZSA9ICdBdXRob3JpemF0aW9uJyxcbiAgICBiZWFyZXJQcmVmaXggPSAnQmVhcmVyJyxcbiAgICBpbml0T3B0aW9ucyxcbiAgICB1cGRhdGVNaW5WYWxpZGl0eSA9IDIwLFxuICAgIHNob3VsZEFkZFRva2VuID0gKCkgPT4gdHJ1ZSxcbiAgICBzaG91bGRVcGRhdGVUb2tlbiA9ICgpID0+IHRydWVcbiAgfTogS2V5Y2xvYWtPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fZW5hYmxlQmVhcmVySW50ZXJjZXB0b3IgPSBlbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgICB0aGlzLl9sb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXAgPSBsb2FkVXNlclByb2ZpbGVBdFN0YXJ0VXA7XG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhlYWRlck5hbWUgPSBhdXRob3JpemF0aW9uSGVhZGVyTmFtZTtcbiAgICB0aGlzLl9iZWFyZXJQcmVmaXggPSBiZWFyZXJQcmVmaXgudHJpbSgpLmNvbmNhdCgnICcpO1xuICAgIHRoaXMuX2V4Y2x1ZGVkVXJscyA9IHRoaXMubG9hZEV4Y2x1ZGVkVXJscyhiZWFyZXJFeGNsdWRlZFVybHMpO1xuICAgIHRoaXMuX3NpbGVudFJlZnJlc2ggPSBpbml0T3B0aW9ucyA/IGluaXRPcHRpb25zLmZsb3cgPT09ICdpbXBsaWNpdCcgOiBmYWxzZTtcbiAgICB0aGlzLl91cGRhdGVNaW5WYWxpZGl0eSA9IHVwZGF0ZU1pblZhbGlkaXR5O1xuICAgIHRoaXMuc2hvdWxkQWRkVG9rZW4gPSBzaG91bGRBZGRUb2tlbjtcbiAgICB0aGlzLnNob3VsZFVwZGF0ZVRva2VuID0gc2hvdWxkVXBkYXRlVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogS2V5Y2xvYWsgaW5pdGlhbGl6YXRpb24uIEl0IHNob3VsZCBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYWRhcHRlci5cbiAgICogT3B0aW9ucyBpcyBhIG9iamVjdCB3aXRoIDIgbWFpbiBwYXJhbWV0ZXJzOiBjb25maWcgYW5kIGluaXRPcHRpb25zLiBUaGUgZmlyc3Qgb25lXG4gICAqIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIEtleWNsb2FrIGluc3RhbmNlLiBUaGUgc2Vjb25kIG9uZSBhcmUgb3B0aW9ucyB0byBpbml0aWFsaXplIHRoZVxuICAgKiBrZXljbG9hayBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQ29uZmlnOiBtYXkgYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBrZXljbG9hayBVUkkgb3IgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAqIGZvbGxvd2luZyBjb250ZW50OlxuICAgKiAtIHVybDogS2V5Y2xvYWsganNvbiBVUkxcbiAgICogLSByZWFsbTogcmVhbG0gbmFtZVxuICAgKiAtIGNsaWVudElkOiBjbGllbnQgaWRcbiAgICpcbiAgICogaW5pdE9wdGlvbnM6XG4gICAqIE9wdGlvbnMgdG8gaW5pdGlhbGl6ZSB0aGUgS2V5Y2xvYWsgYWRhcHRlciwgbWF0Y2hlcyB0aGUgb3B0aW9ucyBhcyBwcm92aWRlZCBieSBLZXljbG9hayBpdHNlbGYuXG4gICAqXG4gICAqIGVuYWJsZUJlYXJlckludGVyY2VwdG9yOlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIGxvYWRVc2VyUHJvZmlsZUluU3RhcnRVcDpcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgcHJvZmlsZSBzaG91bGQgYmUgbG9hZGVkIGF0IHRoZSBrZXljbG9hayBpbml0aWFsaXphdGlvbixcbiAgICoganVzdCBhZnRlciB0aGUgbG9naW4uXG4gICAqXG4gICAqIGJlYXJlckV4Y2x1ZGVkVXJsczpcbiAgICogU3RyaW5nIEFycmF5IHRvIGV4Y2x1ZGUgdGhlIHVybHMgdGhhdCBzaG91bGQgbm90IGhhdmUgdGhlIEF1dGhvcml6YXRpb24gSGVhZGVyIGF1dG9tYXRpY2FsbHlcbiAgICogYWRkZWQuXG4gICAqXG4gICAqIGF1dGhvcml6YXRpb25IZWFkZXJOYW1lOlxuICAgKiBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBuYW1lLlxuICAgKlxuICAgKiBiZWFyZXJQcmVmaXg6XG4gICAqIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQXV0aG9yaXphdGlvbiBIdHRwIEhlYWRlciBwYXJhbS5cbiAgICpcbiAgICogdG9rZW5VcGRhdGVFeGNsdWRlZEhlYWRlcnM6XG4gICAqIEFycmF5IG9mIEh0dHAgSGVhZGVyIGtleS92YWx1ZSBtYXBzIHRoYXQgc2hvdWxkIG5vdCB0cmlnZ2VyIHRoZSB0b2tlbiB0byBiZSB1cGRhdGVkLlxuICAgKlxuICAgKiB1cGRhdGVNaW5WYWxpZGl0eTpcbiAgICogVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIGlmIHRoZSB0b2tlbiB3aWxsIGJlIHJlZnJlc2hlZCBiYXNlZCBvbiBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIFByb21pc2Ugd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgaW5pdGlhbGl6YXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5pdChvcHRpb25zOiBLZXljbG9ha09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaW5pdFNlcnZpY2VWYWx1ZXMob3B0aW9ucyk7XG4gICAgY29uc3QgeyBjb25maWcsIGluaXRPcHRpb25zIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBLZXljbG9hayhjb25maWcpO1xuICAgIHRoaXMuYmluZHNLZXljbG9ha0V2ZW50cygpO1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRlZCA9IGF3YWl0IHRoaXMuX2luc3RhbmNlLmluaXQoaW5pdE9wdGlvbnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWQgJiYgdGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byBsb2dpbiBmb3JtIG9uIChvcHRpb25zIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoIHJlZGlyZWN0VXJpIGFuZC9vclxuICAgKiBwcm9tcHQgZmllbGRzKS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogT2JqZWN0LCB3aGVyZTpcbiAgICogIC0gcmVkaXJlY3RVcmk6IFNwZWNpZmllcyB0aGUgdXJpIHRvIHJlZGlyZWN0IHRvIGFmdGVyIGxvZ2luLlxuICAgKiAgLSBwcm9tcHQ6QnkgZGVmYXVsdCB0aGUgbG9naW4gc2NyZWVuIGlzIGRpc3BsYXllZCBpZiB0aGUgdXNlciBpcyBub3QgbG9nZ2VkLWluIHRvIEtleWNsb2FrLlxuICAgKiBUbyBvbmx5IGF1dGhlbnRpY2F0ZSB0byB0aGUgYXBwbGljYXRpb24gaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQtaW4gYW5kIG5vdCBkaXNwbGF5IHRoZVxuICAgKiBsb2dpbiBwYWdlIGlmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQtaW4sIHNldCB0aGlzIG9wdGlvbiB0byBub25lLiBUbyBhbHdheXMgcmVxdWlyZVxuICAgKiByZS1hdXRoZW50aWNhdGlvbiBhbmQgaWdub3JlIFNTTywgc2V0IHRoaXMgb3B0aW9uIHRvIGxvZ2luIC5cbiAgICogIC0gbWF4QWdlOiBVc2VkIGp1c3QgaWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuIFNwZWNpZmllcyBtYXhpbXVtIHRpbWUgc2luY2UgdGhlXG4gICAqIGF1dGhlbnRpY2F0aW9uIG9mIHVzZXIgaGFwcGVuZWQuIElmIHVzZXIgaXMgYWxyZWFkeSBhdXRoZW50aWNhdGVkIGZvciBsb25nZXIgdGltZSB0aGFuXG4gICAqIG1heEFnZSwgdGhlIFNTTyBpcyBpZ25vcmVkIGFuZCBoZSB3aWxsIG5lZWQgdG8gcmUtYXV0aGVudGljYXRlIGFnYWluLlxuICAgKiAgLSBsb2dpbkhpbnQ6IFVzZWQgdG8gcHJlLWZpbGwgdGhlIHVzZXJuYW1lL2VtYWlsIGZpZWxkIG9uIHRoZSBsb2dpbiBmb3JtLlxuICAgKiAgLSBhY3Rpb246IElmIHZhbHVlIGlzICdyZWdpc3RlcicgdGhlbiB1c2VyIGlzIHJlZGlyZWN0ZWQgdG8gcmVnaXN0cmF0aW9uIHBhZ2UsIG90aGVyd2lzZSB0b1xuICAgKiBsb2dpbiBwYWdlLlxuICAgKiAgLSBsb2NhbGU6IFNwZWNpZmllcyB0aGUgZGVzaXJlZCBsb2NhbGUgZm9yIHRoZSBVSS5cbiAgICogQHJldHVybnNcbiAgICogQSB2b2lkIFByb21pc2UgaWYgdGhlIGxvZ2luIGlzIHN1Y2Nlc3NmdWwgYW5kIGFmdGVyIHRoZSB1c2VyIHByb2ZpbGUgbG9hZGluZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dpbihvcHRpb25zOiBLZXljbG9hay5LZXljbG9ha0xvZ2luT3B0aW9ucyA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9naW4ob3B0aW9ucyk7XG5cbiAgICBpZiAodGhpcy5fbG9hZFVzZXJQcm9maWxlQXRTdGFydFVwKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRVc2VyUHJvZmlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRpcmVjdHMgdG8gbG9nb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVkaXJlY3RVcmlcbiAgICogU3BlY2lmaWVzIHRoZSB1cmkgdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9nb3V0LlxuICAgKiBAcmV0dXJuc1xuICAgKiBBIHZvaWQgUHJvbWlzZSBpZiB0aGUgbG9nb3V0IHdhcyBzdWNjZXNzZnVsLCBjbGVhbmluZyBhbHNvIHRoZSB1c2VyUHJvZmlsZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2dvdXQocmVkaXJlY3RVcmk/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcmVkaXJlY3RVcmlcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5faW5zdGFuY2UubG9nb3V0KG9wdGlvbnMpO1xuICAgIHRoaXMuX3VzZXJQcm9maWxlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZGlyZWN0cyB0byByZWdpc3RyYXRpb24gZm9ybS4gU2hvcnRjdXQgZm9yIGxvZ2luIHdpdGggb3B0aW9uXG4gICAqIGFjdGlvbiA9ICdyZWdpc3RlcicuIE9wdGlvbnMgYXJlIHNhbWUgYXMgZm9yIHRoZSBsb2dpbiBtZXRob2QgYnV0ICdhY3Rpb24nIGlzIHNldCB0b1xuICAgKiAncmVnaXN0ZXInLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBsb2dpbiBvcHRpb25zXG4gICAqIEByZXR1cm5zXG4gICAqIEEgdm9pZCBQcm9taXNlIGlmIHRoZSByZWdpc3RlciBmbG93IHdhcyBzdWNjZXNzZnVsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyKFxuICAgIG9wdGlvbnM6IEtleWNsb2FrLktleWNsb2FrTG9naW5PcHRpb25zID0geyBhY3Rpb246ICdyZWdpc3RlcicgfVxuICApIHtcbiAgICBhd2FpdCB0aGlzLl9pbnN0YW5jZS5yZWdpc3RlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgcm9sZS4gSXQgd2lsbCBsb29rIGZvciByb2xlcyBpblxuICAgKiByZWFsbSBhbmQgY2xpZW50SWQsIGJ1dCB3aWxsIG5vdCBjaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHJvbGVcbiAgICogcm9sZSBuYW1lXG4gICAqIEBwYXJhbSByZXNvdXJjZVxuICAgKiByZXNvdXJjZSBuYW1lIElmIG5vdCBzcGVjaWZpZWQsIGBjbGllbnRJZGAgaXMgdXNlZFxuICAgKiBAcmV0dXJuc1xuICAgKiBBIGJvb2xlYW4gbWVhbmluZyBpZiB0aGUgdXNlciBoYXMgdGhlIHNwZWNpZmllZCBSb2xlLlxuICAgKi9cbiAgaXNVc2VySW5Sb2xlKHJvbGU6IHN0cmluZywgcmVzb3VyY2U/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaGFzUm9sZTogYm9vbGVhbjtcbiAgICBoYXNSb2xlID0gdGhpcy5faW5zdGFuY2UuaGFzUmVzb3VyY2VSb2xlKHJvbGUsIHJlc291cmNlKTtcbiAgICBpZiAoIWhhc1JvbGUpIHtcbiAgICAgIGhhc1JvbGUgPSB0aGlzLl9pbnN0YW5jZS5oYXNSZWFsbVJvbGUocm9sZSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcm9sZXMgb2YgdGhlIGxvZ2dlZCB1c2VyLiBUaGUgYWxsUm9sZXMgcGFyYW1ldGVyLCB3aXRoIGRlZmF1bHQgdmFsdWVcbiAgICogdHJ1ZSwgd2lsbCByZXR1cm4gdGhlIGNsaWVudElkIGFuZCByZWFsbSByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGxvZ2dlZCB1c2VyLiBJZiBzZXQgdG8gZmFsc2VcbiAgICogaXQgd2lsbCBvbmx5IHJldHVybiB0aGUgdXNlciByb2xlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsaWVudElkLlxuICAgKlxuICAgKiBAcGFyYW0gYWxsUm9sZXNcbiAgICogRmxhZyB0byBzZXQgaWYgYWxsIHJvbGVzIHNob3VsZCBiZSByZXR1cm5lZC4oT3B0aW9uYWw6IGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZSlcbiAgICogQHJldHVybnNcbiAgICogQXJyYXkgb2YgUm9sZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2dnZWQgdXNlci5cbiAgICovXG4gIGdldFVzZXJSb2xlcyhhbGxSb2xlczogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZS5yZXNvdXJjZUFjY2Vzcykge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5faW5zdGFuY2UucmVzb3VyY2VBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZUFjY2VzcyA9IHRoaXMuX2luc3RhbmNlLnJlc291cmNlQWNjZXNzW2tleV07XG4gICAgICAgICAgY29uc3QgY2xpZW50Um9sZXMgPSByZXNvdXJjZUFjY2Vzc1sncm9sZXMnXSB8fCBbXTtcbiAgICAgICAgICByb2xlcyA9IHJvbGVzLmNvbmNhdChjbGllbnRSb2xlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFsbFJvbGVzICYmIHRoaXMuX2luc3RhbmNlLnJlYWxtQWNjZXNzKSB7XG4gICAgICBjb25zdCByZWFsbVJvbGVzID0gdGhpcy5faW5zdGFuY2UucmVhbG1BY2Nlc3NbJ3JvbGVzJ10gfHwgW107XG4gICAgICByb2xlcy5wdXNoKC4uLnJlYWxtUm9sZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4uXG4gICAqL1xuICBhc3luYyBpc0xvZ2dlZEluKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuYXV0aGVudGljYXRlZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRva2VuIGhhcyBsZXNzIHRoYW4gbWluVmFsaWRpdHkgc2Vjb25kcyBsZWZ0IGJlZm9yZVxuICAgKiBpdCBleHBpcmVzLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmFsaWRpdHlcbiAgICogU2Vjb25kcyBsZWZ0LiAobWluVmFsaWRpdHkpIGlzIG9wdGlvbmFsLiBEZWZhdWx0IHZhbHVlIGlzIDAuXG4gICAqIEByZXR1cm5zXG4gICAqIEJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdG9rZW4gaXMgZXhwaXJlZC5cbiAgICovXG4gIGlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5OiBudW1iZXIgPSAwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmlzVG9rZW5FeHBpcmVkKG1pblZhbGlkaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdG9rZW4gZXhwaXJlcyB3aXRoaW4gX3VwZGF0ZU1pblZhbGlkaXR5IHNlY29uZHMgdGhlIHRva2VuIGlzIHJlZnJlc2hlZC4gSWYgdGhlXG4gICAqIHNlc3Npb24gc3RhdHVzIGlmcmFtZSBpcyBlbmFibGVkLCB0aGUgc2Vzc2lvbiBzdGF0dXMgaXMgYWxzbyBjaGVja2VkLlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0ZWxsaW5nIGlmIHRoZSB0b2tlbiB3YXMgcmVmcmVzaGVkIG9yIG5vdC4gSWYgdGhlIHNlc3Npb24gaXMgbm90IGFjdGl2ZVxuICAgKiBhbnltb3JlLCB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogUHJvbWlzZSB3aXRoIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSB0b2tlbiB3YXMgc3VjY2VzZnVsbHkgdXBkYXRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVUb2tlbigpIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgd29ya2Fyb3VuZCB1bnRpbCB0aGUgc2lsZW50IHJlZnJlc2ggKGlzc3VlICM0MylcbiAgICAvLyBpcyBub3QgaW1wbGVtZW50ZWQsIGF2b2lkaW5nIHRoZSByZWRpcmVjdCBsb29wLlxuICAgIGlmICh0aGlzLl9zaWxlbnRSZWZyZXNoKSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRmFpbGVkIHRvIHJlZnJlc2ggdGhlIHRva2VuLCBvciB0aGUgc2Vzc2lvbiBpcyBleHBpcmVkJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleWNsb2FrIEFuZ3VsYXIgbGlicmFyeSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnVwZGF0ZVRva2VuKHRoaXMuX3VwZGF0ZU1pblZhbGlkaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBSZXR1cm5zIHByb21pc2UgdG8gc2V0IGZ1bmN0aW9ucyB0byBiZSBpbnZva2VkIGlmIHRoZSBwcm9maWxlIHdhcyBsb2FkZWRcbiAgICogc3VjY2Vzc2Z1bGx5LCBvciBpZiB0aGUgcHJvZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZm9yY2VSZWxvYWRcbiAgICogSWYgdHJ1ZSB3aWxsIGZvcmNlIHRoZSBsb2FkVXNlclByb2ZpbGUgZXZlbiBpZiBpdHMgYWxyZWFkeSBsb2FkZWQuXG4gICAqIEByZXR1cm5zXG4gICAqIEEgcHJvbWlzZSB3aXRoIHRoZSBLZXljbG9ha1Byb2ZpbGUgZGF0YSBsb2FkZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFVzZXJQcm9maWxlKGZvcmNlUmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5fdXNlclByb2ZpbGUgJiYgIWZvcmNlUmVsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbnN0YW5jZS5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgdXNlciBwcm9maWxlIHdhcyBub3QgbG9hZGVkIGFzIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuX3VzZXJQcm9maWxlID0gYXdhaXQgdGhpcy5faW5zdGFuY2UubG9hZFVzZXJQcm9maWxlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGF1dGhlbnRpY2F0ZWQgdG9rZW4sIGNhbGxpbmcgdXBkYXRlVG9rZW4gdG8gZ2V0IGEgcmVmcmVzaGVkIG9uZSBpZiBuZWNlc3NhcnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogVGhlIGxvZ2dlZCB1c2VybmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRVc2VybmFtZSgpIHtcbiAgICBpZiAoIXRoaXMuX3VzZXJQcm9maWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGxvZ2dlZCBpbiBvciB1c2VyIHByb2ZpbGUgd2FzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJQcm9maWxlLnVzZXJuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGF1dGhlbnRpY2F0aW9uIHN0YXRlLCBpbmNsdWRpbmcgdG9rZW5zLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgYXBwbGljYXRpb25cbiAgICogaGFzIGRldGVjdGVkIHRoZSBzZXNzaW9uIHdhcyBleHBpcmVkLCBmb3IgZXhhbXBsZSBpZiB1cGRhdGluZyB0b2tlbiBmYWlscy5cbiAgICogSW52b2tpbmcgdGhpcyByZXN1bHRzIGluIG9uQXV0aExvZ291dCBjYWxsYmFjayBsaXN0ZW5lciBiZWluZyBpbnZva2VkLlxuICAgKi9cbiAgY2xlYXJUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5jbGVhclRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHZhbGlkIHRva2VuIGluIGhlYWRlci4gVGhlIGtleSAmIHZhbHVlIGZvcm1hdCBpczpcbiAgICogQXV0aG9yaXphdGlvbiBCZWFyZXIgPHRva2VuPi5cbiAgICogSWYgdGhlIGhlYWRlcnMgcGFyYW0gaXMgdW5kZWZpbmVkIGl0IHdpbGwgY3JlYXRlIHRoZSBBbmd1bGFyIGhlYWRlcnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gaGVhZGVyc1xuICAgKiBVcGRhdGVkIGhlYWRlciB3aXRoIEF1dGhvcml6YXRpb24gYW5kIEtleWNsb2FrIHRva2VuLlxuICAgKiBAcmV0dXJuc1xuICAgKiBBbiBvYnNlcnZhYmxlIHdpdGggd2l0aCB0aGUgSFRUUCBBdXRob3JpemF0aW9uIGhlYWRlciBhbmQgdGhlIGN1cnJlbnQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYWRkVG9rZW5Ub0hlYWRlcihoZWFkZXJzOiBIdHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5nZXRUb2tlbigpKS5waXBlKFxuICAgICAgbWFwKCh0b2tlbikgPT5cbiAgICAgICAgdG9rZW5cbiAgICAgICAgICA/IGhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICB0aGlzLl9hdXRob3JpemF0aW9uSGVhZGVyTmFtZSxcbiAgICAgICAgICAgICAgdGhpcy5fYmVhcmVyUHJlZml4ICsgdG9rZW5cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGhlYWRlcnNcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIEtleWNsb2FrIGluc3RhbmNlLCBpZiB5b3UgbmVlZCBhbnkgY3VzdG9taXphdGlvbiB0aGF0XG4gICAqIHRoaXMgQW5ndWxhciBzZXJ2aWNlIGRvZXMgbm90IHN1cHBvcnQgeWV0LiBVc2Ugd2l0aCBjYXV0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKiBUaGUgS2V5Y2xvYWtJbnN0YW5jZSBmcm9tIGtleWNsb2FrLWpzLlxuICAgKi9cbiAgZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpOiBLZXljbG9hay5LZXljbG9ha0luc3RhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogUmV0dXJucyB0aGUgZXhjbHVkZWQgVVJMcyB0aGF0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBieVxuICAgKiB0aGUgaHR0cCBpbnRlcmNlcHRvciB3aGljaCBhdXRvbWF0aWNhbGx5IGFkZHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGluIHRoZSBIdHRwIFJlcXVlc3QuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFRoZSBleGNsdWRlZCB1cmxzIHRoYXQgbXVzdCBub3QgYmUgaW50ZXJjZXB0ZWQgYnkgdGhlIEtleWNsb2FrQmVhcmVySW50ZXJjZXB0b3IuXG4gICAqL1xuICBnZXQgZXhjbHVkZWRVcmxzKCk6IEV4Y2x1ZGVkVXJsUmVnZXhbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVkVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiZWFyZXIgd2lsbCBiZSBhZGRlZCB0byB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIFJldHVybnMgaWYgdGhlIGJlYXJlciBpbnRlcmNlcHRvciB3YXMgc2V0IHRvIGJlIGRpc2FibGVkLlxuICAgKi9cbiAgZ2V0IGVuYWJsZUJlYXJlckludGVyY2VwdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVCZWFyZXJJbnRlcmNlcHRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXljbG9hayBzdWJqZWN0IHRvIG1vbml0b3IgdGhlIGV2ZW50cyB0cmlnZ2VyZWQgYnkga2V5Y2xvYWstanMuXG4gICAqIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFzIGF2YWlsYWJsZSAoYXMgZGVzY3JpYmVkIGF0IGtleWNsb2FrIGRvY3MgLVxuICAgKiBodHRwczovL3d3dy5rZXljbG9hay5vcmcvZG9jcy9sYXRlc3Qvc2VjdXJpbmdfYXBwcy9pbmRleC5odG1sI2NhbGxiYWNrLWV2ZW50cyk6XG4gICAqIC0gT25BdXRoRXJyb3JcbiAgICogLSBPbkF1dGhMb2dvdXRcbiAgICogLSBPbkF1dGhSZWZyZXNoRXJyb3JcbiAgICogLSBPbkF1dGhSZWZyZXNoU3VjY2Vzc1xuICAgKiAtIE9uQXV0aFN1Y2Nlc3NcbiAgICogLSBPblJlYWR5XG4gICAqIC0gT25Ub2tlbkV4cGlyZVxuICAgKiBJbiBlYWNoIG9jY3VycmVuY2Ugb2YgYW55IG9mIHRoZXNlLCB0aGlzIHN1YmplY3Qgd2lsbCByZXR1cm4gdGhlIGV2ZW50IHR5cGUsXG4gICAqIGRlc2NyaWJlZCBhdCB7QGxpbmsgS2V5Y2xvYWtFdmVudFR5cGV9IGVudW0gYW5kIHRoZSBmdW5jdGlvbiBhcmdzIGZyb20gdGhlIGtleWNsb2FrLWpzXG4gICAqIGlmIHByb3ZpZGVkIGFueS5cbiAgICpcbiAgICogQHJldHVybnNcbiAgICogQSBzdWJqZWN0IHdpdGggdGhlIHtAbGluayBLZXljbG9ha0V2ZW50fSB3aGljaCBkZXNjcmliZXMgdGhlIGV2ZW50IHR5cGUgYW5kIGF0dGFjaGVzIHRoZVxuICAgKiBmdW5jdGlvbiBhcmdzLlxuICAgKi9cbiAgZ2V0IGtleWNsb2FrRXZlbnRzJCgpOiBTdWJqZWN0PEtleWNsb2FrRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fa2V5Y2xvYWtFdmVudHMkO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CoreModule } from './core/core.module';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class KeycloakAngularModule {
|
|
5
|
+
}
|
|
6
|
+
KeycloakAngularModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakAngularModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
+
KeycloakAngularModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakAngularModule, imports: [CoreModule] });
|
|
8
|
+
KeycloakAngularModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakAngularModule, imports: [[CoreModule]] });
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: KeycloakAngularModule, decorators: [{
|
|
10
|
+
type: NgModule,
|
|
11
|
+
args: [{
|
|
12
|
+
imports: [CoreModule]
|
|
13
|
+
}]
|
|
14
|
+
}] });
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2xvYWstYW5ndWxhci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9hay1hbmd1bGFyL3NyYy9saWIva2V5Y2xvYWstYW5ndWxhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBS2hELE1BQU0sT0FBTyxxQkFBcUI7O2tIQUFyQixxQkFBcUI7bUhBQXJCLHFCQUFxQixZQUZ0QixVQUFVO21IQUVULHFCQUFxQixZQUZ2QixDQUFDLFVBQVUsQ0FBQzsyRkFFVixxQkFBcUI7a0JBSGpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO2lCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBNYXVyaWNpbyBHZW1lbGxpIFZpZ29sbyBhbmQgY29udHJpYnV0b3JzLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21hdXJpY2lvdmlnb2xvL2tleWNsb2FrLWFuZ3VsYXIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZFxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICcuL2NvcmUvY29yZS5tb2R1bGUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29yZU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgS2V5Y2xvYWtBbmd1bGFyTW9kdWxlIHt9XG4iXX0=
|