@softheon/armature 15.20.0 → 15.21.1
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 +23 -0
- package/esm2020/lib/core/functions/route-to-pre-login-route.mjs +13 -0
- package/esm2020/lib/core/initializer/initializer.service.mjs +86 -21
- package/esm2020/lib/core/models/base-config.mjs +1 -1
- package/esm2020/lib/core/models/subdomain-config.mjs +2 -0
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/softheon-armature.mjs +98 -21
- package/fesm2015/softheon-armature.mjs.map +1 -1
- package/fesm2020/softheon-armature.mjs +96 -19
- package/fesm2020/softheon-armature.mjs.map +1 -1
- package/lib/core/functions/route-to-pre-login-route.d.ts +6 -0
- package/lib/core/initializer/initializer.service.d.ts +17 -3
- package/lib/core/models/base-config.d.ts +3 -0
- package/lib/core/models/subdomain-config.d.ts +7 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
package/README.md
CHANGED
|
@@ -1847,3 +1847,26 @@ The `savePrintComponent` function takes the type of component that will be saved
|
|
|
1847
1847
|
### Limitations
|
|
1848
1848
|
|
|
1849
1849
|
There is currently no way to pass in custom inputs to the component being save/printed. This can be prevented by having a component host the component in question with the correct default inputs and providing the host component to the function rather the desired component.
|
|
1850
|
+
|
|
1851
|
+
## Subdomain Routing
|
|
1852
|
+
|
|
1853
|
+
Armature support subdomain routing including loading configurations specific to the subdomain, with some additional logic to help with ensuring users can't use the site when they shouldn't be able to.
|
|
1854
|
+
|
|
1855
|
+
In order to use subdomain routing in your appsettings.json at the root level add a `subdomain` section. This section has two properties, `subdomains` and `requireConfiguredSubdomain`. The `subdomains` section is a white list of subdomains, this should be configured to only include the subdomain, for example if the url is `https://subdomain.domain.host.com/route`, there would be an entry for `subdomain` in the `subdomains` array.
|
|
1856
|
+
|
|
1857
|
+
The `requireConfiguredSubdomain` ,when true, means when the application start ups with a detected subdomain, it must also find configurations in its `assets/configurations` directory for that subdomain in the format of `subdomain.appsettings.json`. If no configurations are found, the application will not start up. When this is set to false, the application can load with out subdomain specific configurations but still requires an entry in the `subdomains` sections.
|
|
1858
|
+
|
|
1859
|
+
Leave the entire subdomain configuration section blank to ignore this feature.
|
|
1860
|
+
|
|
1861
|
+
There is a case that can happen with the following example `https://subdomain.domain.host.com/route`. For this case there must be entry in the `subdomains` sections for the url to load, but also and entry for `domain` in the subdomains section for `https://domain.host.com/route` to be an available url.
|
|
1862
|
+
|
|
1863
|
+
Below is a sample subdomain configuration partial
|
|
1864
|
+
|
|
1865
|
+
```json
|
|
1866
|
+
{
|
|
1867
|
+
"subdomain": {
|
|
1868
|
+
"subdomains": ["subdomain", "domain"],
|
|
1869
|
+
"requireConfiguredSubdomain": true
|
|
1870
|
+
}
|
|
1871
|
+
}
|
|
1872
|
+
```
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { preSignInRouteStorageKey } from '../models/constants';
|
|
2
|
+
/**
|
|
3
|
+
* Routes to the pre login in route
|
|
4
|
+
* @param router The router
|
|
5
|
+
*/
|
|
6
|
+
export const routeToPreLoginRoute = (router) => {
|
|
7
|
+
const preservedRoute = window.sessionStorage.getItem(preSignInRouteStorageKey);
|
|
8
|
+
if (preservedRoute) {
|
|
9
|
+
router.navigateByUrl(preservedRoute);
|
|
10
|
+
window.sessionStorage.removeItem(preSignInRouteStorageKey);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdG8tcHJlLWxvZ2luLXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJtYXR1cmUvc3JjL2xpYi9jb3JlL2Z1bmN0aW9ucy9yb3V0ZS10by1wcmUtbG9naW4tcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFL0Q7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUNuRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQy9FLElBQUksY0FBYyxFQUFFO1FBQ2hCLE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUM5RDtBQUNMLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHByZVNpZ25JblJvdXRlU3RvcmFnZUtleSB9IGZyb20gJy4uL21vZGVscy9jb25zdGFudHMnO1xyXG5cclxuLyoqXHJcbiAqIFJvdXRlcyB0byB0aGUgcHJlIGxvZ2luIGluIHJvdXRlXHJcbiAqIEBwYXJhbSByb3V0ZXIgVGhlIHJvdXRlclxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJvdXRlVG9QcmVMb2dpblJvdXRlID0gKHJvdXRlcjogUm91dGVyKSA9PiB7XHJcbiAgICBjb25zdCBwcmVzZXJ2ZWRSb3V0ZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHByZVNpZ25JblJvdXRlU3RvcmFnZUtleSk7XHJcbiAgICBpZiAocHJlc2VydmVkUm91dGUpIHtcclxuICAgICAgICByb3V0ZXIubmF2aWdhdGVCeVVybChwcmVzZXJ2ZWRSb3V0ZSk7XHJcbiAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0ocHJlU2lnbkluUm91dGVTdG9yYWdlS2V5KTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
1
|
+
import { Injectable, Optional, Inject } from '@angular/core';
|
|
2
2
|
import { AuthConfig } from 'angular-oauth2-oidc';
|
|
3
3
|
import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';
|
|
4
4
|
import * as _ from 'lodash';
|
|
5
|
-
import { BehaviorSubject, throwError } from 'rxjs';
|
|
6
|
-
import { languageStorageKey } from '../models/constants';
|
|
5
|
+
import { BehaviorSubject, lastValueFrom, throwError } from 'rxjs';
|
|
6
|
+
import { languageStorageKey, preSignInRouteStorageKey, WINDOW } from '../models/constants';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@angular/common/http";
|
|
9
9
|
import * as i2 from "@ngx-translate/core";
|
|
@@ -32,7 +32,7 @@ export class Initializer {
|
|
|
32
32
|
* @param location The location
|
|
33
33
|
* @param customAuthConfigService The service that will configure the auth config
|
|
34
34
|
*/
|
|
35
|
-
constructor(http, translateService, themeService, configService, oAuthService, router, location, customAuthConfigService) {
|
|
35
|
+
constructor(http, translateService, themeService, configService, oAuthService, router, location, customAuthConfigService, _window) {
|
|
36
36
|
this.http = http;
|
|
37
37
|
this.translateService = translateService;
|
|
38
38
|
this.themeService = themeService;
|
|
@@ -41,9 +41,17 @@ export class Initializer {
|
|
|
41
41
|
this.router = router;
|
|
42
42
|
this.location = location;
|
|
43
43
|
this.customAuthConfigService = customAuthConfigService;
|
|
44
|
+
this._window = _window;
|
|
44
45
|
/** The configuration behavior subject */
|
|
45
46
|
this.isInitializedBs = new BehaviorSubject(false);
|
|
47
|
+
/** The example the subdomain substring */
|
|
48
|
+
this.exampleSubdomain = 'example';
|
|
49
|
+
/** The www substring for subdomain route finding */
|
|
50
|
+
this.wwwSubstring = 'www';
|
|
51
|
+
/** The lvh substring for subdomain route finding */
|
|
52
|
+
this.lvhSubstring = 'lvh';
|
|
46
53
|
this.isInitialized$ = this.isInitializedBs.asObservable();
|
|
54
|
+
this.window = _window || window;
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
57
|
* Loads all data that is needed upon initial loading of the website
|
|
@@ -52,7 +60,7 @@ export class Initializer {
|
|
|
52
60
|
// reads the language from local storage set in the parent app
|
|
53
61
|
// language loading
|
|
54
62
|
// Set languages for translation service
|
|
55
|
-
const lang = window.localStorage.getItem(languageStorageKey) || window.sessionStorage.getItem(languageStorageKey) || 'en';
|
|
63
|
+
const lang = this.window.localStorage.getItem(languageStorageKey) || this.window.sessionStorage.getItem(languageStorageKey) || 'en';
|
|
56
64
|
this.translateService.setDefaultLang(lang);
|
|
57
65
|
this.translateService.use(lang);
|
|
58
66
|
// Adapted from https://stackoverflow.com/a/41636880
|
|
@@ -75,11 +83,44 @@ export class Initializer {
|
|
|
75
83
|
this.http.get('./assets/configurations/theme.json').toPromise()
|
|
76
84
|
]);
|
|
77
85
|
this.configService.config = _.mergeWith(baseConfig, overrideConfig, this.mergeCustomizer);
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
const mergedLanguage = _.mergeWith(baseLang, overrideLang, this.mergeCustomizer);
|
|
87
|
+
this.translateService.setTranslation(this.translateService.currentLang, mergedLanguage);
|
|
88
|
+
const configurePartial = () => {
|
|
89
|
+
const configSnapShot = this.configService.config;
|
|
90
|
+
configSnapShot.theme = theme;
|
|
91
|
+
this.configService.config = configSnapShot;
|
|
92
|
+
this.themeService.initPalette(theme);
|
|
93
|
+
};
|
|
94
|
+
const subdomain = this.getSubdomain();
|
|
95
|
+
if (subdomain) {
|
|
96
|
+
try {
|
|
97
|
+
let [subdomainConfigs, subdomainLanguage] = await Promise.all([
|
|
98
|
+
lastValueFrom(this.http.get(`./assets/configurations/${subdomain}.${this.translateService.currentLang}.json`)),
|
|
99
|
+
lastValueFrom(this.http.get(`./assets/configurations/${subdomain}.appsettings.json`))
|
|
100
|
+
]);
|
|
101
|
+
this.configService.config = _.mergeWith(this.configService.config, subdomainConfigs, this.mergeCustomizer);
|
|
102
|
+
this.translateService.setTranslation(this.translateService.currentLang, _.mergeWith(mergedLanguage, subdomainLanguage, this.mergeCustomizer));
|
|
103
|
+
configurePartial();
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
if (this.configService.config.subdomain && this.configService.config.subdomain.subdomains.length && !this.configService.config.subdomain.subdomains.includes(subdomain)) {
|
|
107
|
+
this.router.dispose();
|
|
108
|
+
const error = `Invalid subdomain: ${subdomain}`;
|
|
109
|
+
console.error(error);
|
|
110
|
+
throw new Error(error);
|
|
111
|
+
}
|
|
112
|
+
else if (this.configService.config.subdomain?.requireConfiguredSubdomain && this.configService.config.subdomain?.subdomains.includes(subdomain)) {
|
|
113
|
+
this.router.dispose();
|
|
114
|
+
const error = `Configured subdomain: ${subdomain} does not have any subdomain specific configurations`;
|
|
115
|
+
reject(error);
|
|
116
|
+
console.error(error);
|
|
117
|
+
throw new Error(error);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
configurePartial();
|
|
123
|
+
}
|
|
83
124
|
}
|
|
84
125
|
catch (error) {
|
|
85
126
|
// Catch any errors during the get configurations API call
|
|
@@ -158,8 +199,12 @@ export class Initializer {
|
|
|
158
199
|
* @param config The Oidc Auth Settings
|
|
159
200
|
*/
|
|
160
201
|
async login(config) {
|
|
161
|
-
this.validateExistingTokenAgainstConfigs();
|
|
162
|
-
|
|
202
|
+
const isValid = this.validateExistingTokenAgainstConfigs();
|
|
203
|
+
const preservedRoute = this.window.sessionStorage.getItem(preSignInRouteStorageKey);
|
|
204
|
+
if (!preservedRoute) {
|
|
205
|
+
this.window.sessionStorage.setItem(preSignInRouteStorageKey, this.location.path());
|
|
206
|
+
}
|
|
207
|
+
if (config.requireLoginOnStartup || !isValid) {
|
|
163
208
|
return this.oAuthService.loadDiscoveryDocumentAndLogin({ state: this.location.path() })
|
|
164
209
|
// handles the case for expired access token or invalid nonce or people bookmarking the ids login page
|
|
165
210
|
.catch(async (res) => {
|
|
@@ -187,25 +232,40 @@ export class Initializer {
|
|
|
187
232
|
return srcValue;
|
|
188
233
|
}
|
|
189
234
|
}
|
|
190
|
-
/**
|
|
235
|
+
/**
|
|
236
|
+
* Validates the existing token against the configurations
|
|
237
|
+
* @returns true when token is valid
|
|
238
|
+
*/
|
|
191
239
|
validateExistingTokenAgainstConfigs() {
|
|
192
240
|
if (this.configService.config.oAuthSettings.disableStartupTokenValidation) {
|
|
193
|
-
return;
|
|
241
|
+
return true;
|
|
194
242
|
}
|
|
195
|
-
if (!window.sessionStorage.getItem('access_token')) {
|
|
196
|
-
return;
|
|
243
|
+
if (!this.window.sessionStorage.getItem('access_token')) {
|
|
244
|
+
return true;
|
|
197
245
|
}
|
|
198
|
-
const grantedScopes = this.oAuthService.getGrantedScopes()
|
|
199
|
-
.split(' ');
|
|
246
|
+
const grantedScopes = this.oAuthService.getGrantedScopes();
|
|
200
247
|
const configuredScopes = this.configService.config.oAuthSettings.scope.split(' ');
|
|
201
248
|
const diffs = grantedScopes.filter(x => !configuredScopes.includes(x))
|
|
202
249
|
.concat(configuredScopes.filter(x => !grantedScopes.includes(x)));
|
|
203
250
|
if (diffs.length || this.oAuthService.getIdentityClaims()['aud'] !== this.configService.config.oAuthSettings.clientId) {
|
|
204
|
-
window.sessionStorage.removeItem('access_token');
|
|
251
|
+
this.window.sessionStorage.removeItem('access_token');
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
/** Getting the subdomain from url */
|
|
257
|
+
getSubdomain() {
|
|
258
|
+
const domain = this.window.location.hostname;
|
|
259
|
+
if (domain.indexOf('.') < 0 ||
|
|
260
|
+
domain.split('.')[0] === this.exampleSubdomain || domain.split('.')[0] === this.lvhSubstring || domain.split('.')[0] === this.wwwSubstring) {
|
|
261
|
+
return '';
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
return domain.split('.')[0];
|
|
205
265
|
}
|
|
206
266
|
}
|
|
207
267
|
}
|
|
208
|
-
Initializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, deps: [{ token: i1.HttpClient }, { token: i2.TranslateService }, { token: i3.ThemeService }, { token: i4.BaseConfigService }, { token: i5.OAuthService }, { token: i6.Router }, { token: i7.Location }, { token: i8.CustomAuthConfigService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
268
|
+
Initializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, deps: [{ token: i1.HttpClient }, { token: i2.TranslateService }, { token: i3.ThemeService }, { token: i4.BaseConfigService }, { token: i5.OAuthService }, { token: i6.Router }, { token: i7.Location }, { token: i8.CustomAuthConfigService, optional: true }, { token: WINDOW, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
209
269
|
Initializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, providedIn: 'root' });
|
|
210
270
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, decorators: [{
|
|
211
271
|
type: Injectable,
|
|
@@ -214,5 +274,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
214
274
|
}]
|
|
215
275
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.TranslateService }, { type: i3.ThemeService }, { type: i4.BaseConfigService }, { type: i5.OAuthService }, { type: i6.Router }, { type: i7.Location }, { type: i8.CustomAuthConfigService, decorators: [{
|
|
216
276
|
type: Optional
|
|
277
|
+
}] }, { type: undefined, decorators: [{
|
|
278
|
+
type: Optional
|
|
279
|
+
}, {
|
|
280
|
+
type: Inject,
|
|
281
|
+
args: [WINDOW]
|
|
217
282
|
}] }]; } });
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvY29yZS9pbml0aWFsaXplci9pbml0aWFsaXplci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7QUFPekQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8sV0FBVztJQUt0Qiw4QkFBOEI7SUFDOUIsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUtEOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUNtQixJQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsYUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLFFBQWtCLEVBQ04sdUJBQWdEO1FBUDVELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTiw0QkFBdUIs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UUFDcEUsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO1lBQ3JILE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQzs7d0dBcE5VLFdBQVc7NEdBQVgsV0FBVyxjQUhSLE1BQU07MkZBR1QsV0FBVztrQkFMdkIsVUFBVTttQkFDVDtvQkFDRSxVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWtDRSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQXV0aENvbmZpZywgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcbmltcG9ydCB7IEp3a3NWYWxpZGF0aW9uSGFuZGxlciB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMtandrcyc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90aGVtaW5nL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsYW5ndWFnZVN0b3JhZ2VLZXkgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgT2lkY0F1dGhTZXR0aW5ncyB9IGZyb20gJy4uL21vZGVscy9vaWRjLWF1dGgtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBCYXNlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Jhc2UtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21BdXRoQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2N1c3RvbS1hdXRoLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzdGFydHVwIHNlcnZpY2UgaXMgdXNlZCB0byBjYWxsIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgcnVuIHdoZW4gaW5pdGlhbGx5IGxvYWRpbmcgdGhlIGFwcGxpY2F0aW9uXHJcbiAqL1xyXG5ASW5qZWN0YWJsZShcclxuICB7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIEluaXRpYWxpemVyIHtcclxuXHJcbiAgLyoqIFRoZSBjb25maWd1cmF0aW9uIGJlaGF2aW9yIHN1YmplY3QgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWRCczogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBHZXRzIHRoZSBjb25maWd1cmF0aW9ucyAqL1xyXG4gIHB1YmxpYyBnZXQgaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzSW5pdGlhbGl6ZWRCcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiBvYnNlcnZhYmxlICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIHRoZSBzdGFydHVwIHNlcnZpY2UuIEluY2x1ZGUgYW55IHNlcnZpY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZHVyaW5nIHN0YXJ0dXBcclxuICAgKiBAcGFyYW0gaHR0cCBUaGUgSFRUUCBDbGllbnRcclxuICAgKiBAcGFyYW0gdHJhbnNsYXRlU2VydmljZSBUaGUgdHJhbnNsYXRlIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gdGhlbWVTZXJ2aWNlIFRoZSB0aGVtZSBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIGNvbmZpZ1NlcnZpY2UgVGhlIGNvbmZpZ3VyYXRpb24gc2VydmljZVxyXG4gICAqIEBwYXJhbSBvQXV0aFNlcnZpY2UgVGhlIG9pZGMgYXV0aG9yaXphdGlvbiBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIHJvdXRlciBUaGUgcm91dGVyXHJcbiAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSBsb2NhdGlvblxyXG4gICAqIEBwYXJhbSBjdXN0b21BdXRoQ29uZmlnU2VydmljZSBUaGUgc2VydmljZSB0aGF0IHdpbGwgY29uZmlndXJlIHRoZSBhdXRoIGNvbmZpZ1xyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQmFzZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9BdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjdXN0b21BdXRoQ29uZmlnU2VydmljZTogQ3VzdG9tQXV0aENvbmZpZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuaXNJbml0aWFsaXplZCQgPSB0aGlzLmlzSW5pdGlhbGl6ZWRCcy5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIGFsbCBkYXRhIHRoYXQgaXMgbmVlZGVkIHVwb24gaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSB3ZWJzaXRlXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIHJlYWRzIHRoZSBsYW5ndWFnZSBmcm9tIGxvY2FsIHN0b3JhZ2Ugc2V0IGluIHRoZSBwYXJlbnQgYXBwXHJcbiAgICAvLyBsYW5ndWFnZSBsb2FkaW5nXHJcblxyXG4gICAgLy8gU2V0IGxhbmd1YWdlcyBmb3IgdHJhbnNsYXRpb24gc2VydmljZVxyXG4gICAgY29uc3QgbGFuZyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShsYW5ndWFnZVN0b3JhZ2VLZXkpIHx8IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGxhbmd1YWdlU3RvcmFnZUtleSkgfHwgJ2VuJztcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZyhsYW5nKTtcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UobGFuZyk7XHJcblxyXG4gICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MTYzNjg4MFxyXG4gICAgLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MTczNjI5M1xyXG5cclxuICAgIC8vIEEgY2FsbGJhY2sgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcm9taXNlLiBUaGlzIGNhbGxiYWNrIGlzIHBhc3NlZCB0d28gYXJndW1lbnRzOlxyXG4gICAgLy8gYSByZXNvbHZlIGNhbGxiYWNrIHVzZWQgcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIGEgdmFsdWUgb3IgdGhlIHJlc3VsdCBvZiBhbm90aGVyIHByb21pc2UsXHJcbiAgICAvLyBhbmQgYSByZWplY3QgY2FsbGJhY2sgdXNlZCB0byByZWplY3QgdGhlIHByb21pc2Ugd2l0aCBhIHByb3ZpZGVkIHJlYXNvbiBvciBlcnJvci5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIEdvIHRocm91Z2ggYWxsIHNlcnZpY2VzIGFuZCBjb21wbGV0ZSBhbnkgQVBJIGNhbGxzIG5lY2Vzc2FyeS5cclxuICAgICAgLy8gQXQgdGhlIGVuZCwgaWYgYWxsIHdvcmtzIGFuZCBsb2FkcyBhcyBleHBlY3RlZCwgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhbmQgc2V0IHN0YXJ0dXAgc3VjY2VzcyB0byB0cnVlLlxyXG4gICAgICAvLyBJZiBhbiBpc3N1ZSBpcyBlbmNvdW50ZXJlZCwgeW91IGNhbiBjYWxsIHJlamVjdCgpIHRvIGhpdCB0aGUgY2F0Y2goKSBjb2RlIGJlbG93LlxyXG5cclxuICAgICAgLy8gRmlyc3QsIGxvYWQgdGhlIGNvbmZpZ3VyYXRpb25zXHJcbiAgICAgIGxldCBbYmFzZUNvbmZpZywgb3ZlcnJpZGVDb25maWcsIGJhc2VMYW5nLCBvdmVycmlkZUxhbmcsIHRoZW1lXSA9IFtKU09OLCBKU09OLCBKU09OLCBKU09OLCBKU09OXTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBbYmFzZUNvbmZpZywgb3ZlcnJpZGVDb25maWcsIGJhc2VMYW5nLCBvdmVycmlkZUxhbmcsIHRoZW1lXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8SlNPTj4oJy4vYXNzZXRzL2Jhc2VsaW5lL2FwcHNldHRpbmdzLmpzb24nKS50b1Byb21pc2UoKSxcclxuICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8SlNPTj4oJy4vYXNzZXRzL2NvbmZpZ3VyYXRpb25zL2FwcHNldHRpbmdzLmpzb24nKS50b1Byb21pc2UoKSxcclxuICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8SlNPTj4oYC4vYXNzZXRzL2kxOG4vJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmd9Lmpzb25gKS50b1Byb21pc2UoKSxcclxuICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8SlNPTj4oYC4vYXNzZXRzL2NvbmZpZ3VyYXRpb25zLyR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nfS5qc29uYCkudG9Qcm9taXNlKCksXHJcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEpTT04+KCcuL2Fzc2V0cy9jb25maWd1cmF0aW9ucy90aGVtZS5qc29uJykudG9Qcm9taXNlKClcclxuICAgICAgICBdKTtcclxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnID0gXy5tZXJnZVdpdGgoYmFzZUNvbmZpZywgb3ZlcnJpZGVDb25maWcsIHRoaXMubWVyZ2VDdXN0b21pemVyKTtcclxuICAgICAgICBjb25zdCBjb25maWdTbmFwU2hvdCA9IHRoaXMuY29uZmlnU2VydmljZS5jb25maWc7XHJcbiAgICAgICAgY29uZmlnU25hcFNob3QudGhlbWUgPSB0aGVtZSBhcyBhbnk7XHJcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZyA9IGNvbmZpZ1NuYXBTaG90O1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcsIF8ubWVyZ2VXaXRoKGJhc2VMYW5nLCBvdmVycmlkZUxhbmcsIHRoaXMubWVyZ2VDdXN0b21pemVyKSk7XHJcbiAgICAgICAgdGhpcy50aGVtZVNlcnZpY2UuaW5pdFBhbGV0dGUodGhlbWUgYXMgYW55KTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAvLyBDYXRjaCBhbnkgZXJyb3JzIGR1cmluZyB0aGUgZ2V0IGNvbmZpZ3VyYXRpb25zIEFQSSBjYWxsXHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgTG9hZGluZyBDb25maWd1cmF0aW9ucyBvciBMYW5ndWFnZXMnKTtcclxuICAgICAgICAvLyBSZWplY3QgdGhlIHByb21pc2VcclxuICAgICAgICByZWplY3QoJ2Vycm9yJyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yLmVycm9yIHx8ICdTZXJ2ZXIgZXJyb3InKTtcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUF1dGhDb25maWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmN1c3RvbUF1dGhDb25maWdTZXJ2aWNlLmNvbmZpZ3VyZUF1dGhTZXR0aW5ncygpLnRoZW4oYXV0aENvbmZpZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhdXRoQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5vQXV0aFNldHRpbmdzO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvZ2luKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9BdXRoID0gYXdhaXQgdGhpcy5zZXRVcE9BdXRoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHJlamVjdChlcnJvcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHJlcXVlc3RlZCByb3V0ZVxyXG4gICAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5vQXV0aFNldHRpbmdzPy5wcmVzZXJ2ZVJvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLm9BdXRoU2VydmljZS5zdGF0ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaXNJbml0aWFsaXplZEJzLm5leHQodHJ1ZSk7XHJcbiAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgLy8gQ2F0Y2ggdGhlIGVycm9yXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBsb2FkaW5nIHRoZSBzdGFydHVwIGNvbmZpZ3VyYXRpb25zLicpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmUgaW1wbGljaXQgZmxvd1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgc2V0VXBPQXV0aCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnPy5vQXV0aFNldHRpbmdzPy5pc3N1ZXIpIHtcclxuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5vQXV0aFNldHRpbmdzO1xyXG4gICAgICBjb25zdCBhdXRoQ29uZmlnID0gbmV3IEF1dGhDb25maWcoe1xyXG4gICAgICAgIGNsaWVudElkOiBjb25maWcuY2xpZW50SWQsXHJcbiAgICAgICAgcmVkaXJlY3RVcmk6IGNvbmZpZy5yZWRpcmVjdFVyaSxcclxuICAgICAgICBpc3N1ZXI6IGNvbmZpZy5pc3N1ZXIsXHJcbiAgICAgICAgc2NvcGU6IGNvbmZpZy5zY29wZSxcclxuICAgICAgICBza2lwSXNzdWVyQ2hlY2s6IGNvbmZpZy5za2lwSXNzdWVyQ2hlY2sgIT0gdW5kZWZpbmVkID8gY29uZmlnLnNraXBJc3N1ZXJDaGVjayA6IHRydWUsXHJcbiAgICAgICAgdGltZW91dEZhY3RvcjogY29uZmlnLnRpbWVvdXRGYWN0b3IgfHwgMC43NSxcclxuICAgICAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IGNvbmZpZy5wb3N0TG9nb3V0UmVkaXJlY3RVcmksXHJcbiAgICAgICAgbG9naW5Vcmw6IGNvbmZpZy5sb2dpblVybCxcclxuICAgICAgICBzdHJpY3REaXNjb3ZlcnlEb2N1bWVudFZhbGlkYXRpb246IGZhbHNlLFxyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogY29uZmlnLnJlc3BvbnNlVHlwZSB8fCAnY29kZSdcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLmNvbmZpZ3VyZShhdXRoQ29uZmlnKTtcclxuICAgICAgdGhpcy5vQXV0aFNlcnZpY2Uuc2tpcElzc3VlckNoZWNrID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vQXV0aFNlcnZpY2UucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZSB8fCAnY29kZSc7XHJcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLnN0cmljdERpc2NvdmVyeURvY3VtZW50VmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm9BdXRoU2VydmljZS50b2tlblZhbGlkYXRpb25IYW5kbGVyID0gbmV3IEp3a3NWYWxpZGF0aW9uSGFuZGxlcigpO1xyXG4gICAgICB0aGlzLm9BdXRoU2VydmljZS50aW1lb3V0RmFjdG9yID0gMC43NTtcclxuICAgICAgdGhpcy5vQXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKHt9LCAnYWNjZXNzX3Rva2VuJyk7XHJcblxyXG4gICAgICAvLyBzZXQgaW5pdGlhbGl6ZWQgb24gc3RhcnQgdXAgdG8gdHJ1ZVxyXG4gICAgICBjb25maWcuYXV0aFNldE9uU3RhcnR1cCA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHRoaXMuY29uZmlnU2VydmljZS5jb25maWc7XHJcbiAgICAgIHBhcmVudENvbmZpZy5vQXV0aFNldHRpbmdzID0gY29uZmlnO1xyXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnID0gcGFyZW50Q29uZmlnO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMubG9naW4oY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIExvZ2luXHJcbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgT2lkYyBBdXRoIFNldHRpbmdzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbihjb25maWc6IE9pZGNBdXRoU2V0dGluZ3MpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMudmFsaWRhdGVFeGlzdGluZ1Rva2VuQWdhaW5zdENvbmZpZ3MoKTtcclxuICAgIGlmIChjb25maWcucmVxdWlyZUxvZ2luT25TdGFydHVwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9BdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnRBbmRMb2dpbih7c3RhdGU6IHRoaXMubG9jYXRpb24ucGF0aCgpfSlcclxuICAgICAgICAvLyBoYW5kbGVzIHRoZSBjYXNlIGZvciBleHBpcmVkIGFjY2VzcyB0b2tlbiBvciBpbnZhbGlkIG5vbmNlIG9yIHBlb3BsZSBib29rbWFya2luZyB0aGUgaWRzIGxvZ2luIHBhZ2VcclxuICAgICAgICAuY2F0Y2goYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vQXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdyh0aGlzLmxvY2F0aW9uLnBhdGgoKSk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5vQXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKVxyXG4gICAgICAgIC8vIGhhbmRsZXMgdGhlIGNhc2UgZm9yIGV4cGlyZWQgYWNjZXNzIHRva2VuIG9yIGludmFsaWQgbm9uY2Ugb3IgcGVvcGxlIGJvb2ttYXJraW5nIHRoZSBpZHMgbG9naW4gcGFnZVxyXG4gICAgICAgIC5jYXRjaChhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9BdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lcmdlcyB0aGUgdHdvIGNvbmZpZyBvYmplY3RzIGlnbm9yaW5nIHRoZSBhcnJheSB0eXBlXHJcbiAgICogQHBhcmFtIG9ialZhbHVlIFRoZSBkZWZhdWx0IGNvbmZpZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSBzcmNWYWx1ZSBUaGUgdGFyZ2V0IHN3aXRjaGJvYXJkIGNvbmZpZyB2YWx1ZVxyXG4gICAqIEByZXR1cm5zIFRoZSBtZXJnZSBvZiB0aGUgdHdvIGNvbmZpZ3MgcHJvdmlkZWRcclxuICAgKi9cclxuICBwcml2YXRlIG1lcmdlQ3VzdG9taXplcihvYmpWYWx1ZTogYW55LCBzcmNWYWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmIChfLmlzQXJyYXkob2JqVmFsdWUpICYmIHNyY1ZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBzcmNWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBWYWxpZGF0ZXMgdGhlIGV4aXN0aW5nIHRva2VuIGFnYWluc3QgdGhlIGNvbmZpZ3VyYXRpb25zICovXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUV4aXN0aW5nVG9rZW5BZ2FpbnN0Q29uZmlncygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLm9BdXRoU2V0dGluZ3MuZGlzYWJsZVN0YXJ0dXBUb2tlblZhbGlkYXRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JhbnRlZFNjb3BlczogQXJyYXk8c3RyaW5nPiA9IHRoaXMub0F1dGhTZXJ2aWNlLmdldEdyYW50ZWRTY29wZXMoKVswXVxyXG4gICAgICAuc3BsaXQoJyAnKTtcclxuICAgIGNvbnN0IGNvbmZpZ3VyZWRTY29wZXMgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLm9BdXRoU2V0dGluZ3Muc2NvcGUuc3BsaXQoJyAnKTtcclxuICAgIGNvbnN0IGRpZmZzID0gZ3JhbnRlZFNjb3Blcy5maWx0ZXIoeCA9PiAhY29uZmlndXJlZFNjb3Blcy5pbmNsdWRlcyh4KSlcclxuICAgICAgLmNvbmNhdChjb25maWd1cmVkU2NvcGVzLmZpbHRlcih4ID0+ICFncmFudGVkU2NvcGVzLmluY2x1ZGVzKHgpKSk7XHJcbiAgICBpZiAoZGlmZnMubGVuZ3RoIHx8IHRoaXMub0F1dGhTZXJ2aWNlLmdldElkZW50aXR5Q2xhaW1zKClbJ2F1ZCddICE9PSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLm9BdXRoU2V0dGluZ3MuY2xpZW50SWQpIHtcclxuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2FjY2Vzc190b2tlbicpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvY29yZS9pbml0aWFsaXplci9pbml0aWFsaXplci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7QUFPM0Y7O0dBRUc7QUFNSCxNQUFNLE9BQU8sV0FBVztJQWlCdEIsOEJBQThCO0lBQzlCLElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFLRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFDbUIsSUFBZ0IsRUFDaEIsZ0JBQWtDLEVBQ2xDLFlBQTBCLEVBQzFCLGFBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLE1BQWMsRUFDZCxRQUFrQixFQUNOLHVCQUFnRCxFQUN4QyxPQUFZO1FBUmhDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FB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U0FDN0I7SUFDSCxDQUFDOzt3R0F4UlUsV0FBVywwUUE2Q0EsTUFBTTs0R0E3Q2pCLFdBQVcsY0FIUixNQUFNOzJGQUdULFdBQVc7a0JBTHZCLFVBQVU7bUJBQ1Q7b0JBQ0UsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkE4Q0UsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuaW1wb3J0IHsgSndrc1ZhbGlkYXRpb25IYW5kbGVyIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYy1qd2tzJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGxhc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uL3RoZW1pbmcvc2VydmljZXMvdGhlbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IGxhbmd1YWdlU3RvcmFnZUtleSwgcHJlU2lnbkluUm91dGVTdG9yYWdlS2V5LCBXSU5ET1cgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgT2lkY0F1dGhTZXR0aW5ncyB9IGZyb20gJy4uL21vZGVscy9vaWRjLWF1dGgtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBCYXNlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Jhc2UtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21BdXRoQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2N1c3RvbS1hdXRoLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzdGFydHVwIHNlcnZpY2UgaXMgdXNlZCB0byBjYWxsIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgcnVuIHdoZW4gaW5pdGlhbGx5IGxvYWRpbmcgdGhlIGFwcGxpY2F0aW9uXHJcbiAqL1xyXG5ASW5qZWN0YWJsZShcclxuICB7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIEluaXRpYWxpemVyIHtcclxuXHJcbiAgLyoqIFRoZSBjb25maWd1cmF0aW9uIGJlaGF2aW9yIHN1YmplY3QgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWRCczogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBUaGUgYnJvd3NlciB3aW5kb3cgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogV2luZG93O1xyXG5cclxuICAvKiogVGhlIGV4YW1wbGUgdGhlIHN1YmRvbWFpbiBzdWJzdHJpbmcgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGV4YW1wbGVTdWJkb21haW46IHN0cmluZyA9ICdleGFtcGxlJztcclxuXHJcbiAgLyoqIFRoZSB3d3cgc3Vic3RyaW5nIGZvciBzdWJkb21haW4gcm91dGUgZmluZGluZyAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgd3d3U3Vic3RyaW5nOiBzdHJpbmcgPSAnd3d3JztcclxuXHJcbiAgLyoqIFRoZSBsdmggc3Vic3RyaW5nIGZvciBzdWJkb21haW4gcm91dGUgZmluZGluZyAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbHZoU3Vic3RyaW5nOiBzdHJpbmcgPSAnbHZoJ1xyXG5cclxuICAvKiogR2V0cyB0aGUgY29uZmlndXJhdGlvbnMgKi9cclxuICBwdWJsaWMgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0luaXRpYWxpemVkQnMudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIGNvbmZpZ3VyYXRpb24gb2JzZXJ2YWJsZSAqL1xyXG4gIHB1YmxpYyByZWFkb25seSBpc0luaXRpYWxpemVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0cyB0aGUgc3RhcnR1cCBzZXJ2aWNlLiBJbmNsdWRlIGFueSBzZXJ2aWNlcyB0aGF0IHNob3VsZCBiZSB1c2VkIGR1cmluZyBzdGFydHVwXHJcbiAgICogQHBhcmFtIGh0dHAgVGhlIEhUVFAgQ2xpZW50XHJcbiAgICogQHBhcmFtIHRyYW5zbGF0ZVNlcnZpY2UgVGhlIHRyYW5zbGF0ZSBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIHRoZW1lU2VydmljZSBUaGUgdGhlbWUgc2VydmljZVxyXG4gICAqIEBwYXJhbSBjb25maWdTZXJ2aWNlIFRoZSBjb25maWd1cmF0aW9uIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gb0F1dGhTZXJ2aWNlIFRoZSBvaWRjIGF1dGhvcml6YXRpb24gc2VydmljZVxyXG4gICAqIEBwYXJhbSByb3V0ZXIgVGhlIHJvdXRlclxyXG4gICAqIEBwYXJhbSBsb2NhdGlvbiBUaGUgbG9jYXRpb25cclxuICAgKiBAcGFyYW0gY3VzdG9tQXV0aENvbmZpZ1NlcnZpY2UgVGhlIHNlcnZpY2UgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUgYXV0aCBjb25maWdcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IEJhc2VDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBvQXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tQXV0aENvbmZpZ1NlcnZpY2U6IEN1c3RvbUF1dGhDb25maWdTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChXSU5ET1cpIHJlYWRvbmx5IF93aW5kb3c6IGFueVxyXG4gICkge1xyXG4gICAgdGhpcy5pc0luaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZEJzLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgdGhpcy53aW5kb3cgPSBfd2luZG93IHx8IHdpbmRvdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIGFsbCBkYXRhIHRoYXQgaXMgbmVlZGVkIHVwb24gaW5pdGlhbCBsb2FkaW5nIG9mIHRoZSB3ZWJzaXRlXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIHJlYWRzIHRoZSBsYW5ndWFnZSBmcm9tIGxvY2FsIHN0b3JhZ2Ugc2V0IGluIHRoZSBwYXJlbnQgYXBwXHJcbiAgICAvLyBsYW5ndWFnZSBsb2FkaW5nXHJcblxyXG4gICAgLy8gU2V0IGxhbmd1YWdlcyBmb3IgdHJhbnNsYXRpb24gc2VydmljZVxyXG4gICAgY29uc3QgbGFuZyA9IHRoaXMud2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGxhbmd1YWdlU3RvcmFnZUtleSkgfHwgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShsYW5ndWFnZVN0b3JhZ2VLZXkpIHx8ICdlbic7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0RGVmYXVsdExhbmcobGFuZyk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmcpO1xyXG5cclxuICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDE2MzY4ODBcclxuICAgIC8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDE3MzYyOTNcclxuXHJcbiAgICAvLyBBIGNhbGxiYWNrIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvbWlzZS4gVGhpcyBjYWxsYmFjayBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50czpcclxuICAgIC8vIGEgcmVzb2x2ZSBjYWxsYmFjayB1c2VkIHJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCBhIHZhbHVlIG9yIHRoZSByZXN1bHQgb2YgYW5vdGhlciBwcm9taXNlLFxyXG4gICAgLy8gYW5kIGEgcmVqZWN0IGNhbGxiYWNrIHVzZWQgdG8gcmVqZWN0IHRoZSBwcm9taXNlIHdpdGggYSBwcm92aWRlZCByZWFzb24gb3IgZXJyb3IuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBHbyB0aHJvdWdoIGFsbCBzZXJ2aWNlcyBhbmQgY29tcGxldGUgYW55IEFQSSBjYWxscyBuZWNlc3NhcnkuXHJcbiAgICAgIC8vIEF0IHRoZSBlbmQsIGlmIGFsbCB3b3JrcyBhbmQgbG9hZHMgYXMgZXhwZWN0ZWQsIHJlc29sdmUgdGhlIHByb21pc2UgYW5kIHNldCBzdGFydHVwIHN1Y2Nlc3MgdG8gdHJ1ZS5cclxuICAgICAgLy8gSWYgYW4gaXNzdWUgaXMgZW5jb3VudGVyZWQsIHlvdSBjYW4gY2FsbCByZWplY3QoKSB0byBoaXQgdGhlIGNhdGNoKCkgY29kZSBiZWxvdy5cclxuXHJcbiAgICAgIC8vIEZpcnN0LCBsb2FkIHRoZSBjb25maWd1cmF0aW9uc1xyXG4gICAgICBsZXQgW2Jhc2VDb25maWcsIG92ZXJyaWRlQ29uZmlnLCBiYXNlTGFuZywgb3ZlcnJpZGVMYW5nLCB0aGVtZV0gPSBbSlNPTiwgSlNPTiwgSlNPTiwgSlNPTiwgSlNPTl07XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgW2Jhc2VDb25maWcsIG92ZXJyaWRlQ29uZmlnLCBiYXNlTGFuZywgb3ZlcnJpZGVMYW5nLCB0aGVtZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEpTT04+KCcuL2Fzc2V0cy9iYXNlbGluZS9hcHBzZXR0aW5ncy5qc29uJykudG9Qcm9taXNlKCksXHJcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEpTT04+KCcuL2Fzc2V0cy9jb25maWd1cmF0aW9ucy9hcHBzZXR0aW5ncy5qc29uJykudG9Qcm9taXNlKCksXHJcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEpTT04+KGAuL2Fzc2V0cy9pMThuLyR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nfS5qc29uYCkudG9Qcm9taXNlKCksXHJcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEpTT04+KGAuL2Fzc2V0cy9jb25maWd1cmF0aW9ucy8ke3RoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZ30uanNvbmApLnRvUHJvbWlzZSgpLFxyXG4gICAgICAgICAgdGhpcy5odHRwLmdldDxKU09OPignLi9hc3NldHMvY29uZmlndXJhdGlvbnMvdGhlbWUuanNvbicpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZyA9IF8ubWVyZ2VXaXRoKGJhc2VDb25maWcsIG92ZXJyaWRlQ29uZmlnLCB0aGlzLm1lcmdlQ3VzdG9taXplcik7XHJcbiAgICAgICAgY29uc3QgbWVyZ2VkTGFuZ3VhZ2UgPSBfLm1lcmdlV2l0aChiYXNlTGFuZywgb3ZlcnJpZGVMYW5nLCB0aGlzLm1lcmdlQ3VzdG9taXplcik7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZywgbWVyZ2VkTGFuZ3VhZ2UpO1xyXG5cclxuICAgICAgICBjb25zdCBjb25maWd1cmVQYXJ0aWFsID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29uZmlnU25hcFNob3QgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnO1xyXG4gICAgICAgICAgY29uZmlnU25hcFNob3QudGhlbWUgPSB0aGVtZSBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnID0gY29uZmlnU25hcFNob3Q7XHJcbiAgICAgICAgICB0aGlzLnRoZW1lU2VydmljZS5pbml0UGFsZXR0ZSh0aGVtZSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWJkb21haW4gPSB0aGlzLmdldFN1YmRvbWFpbigpO1xyXG4gICAgICAgIGlmIChzdWJkb21haW4pIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBbc3ViZG9tYWluQ29uZmlncywgc3ViZG9tYWluTGFuZ3VhZ2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICAgIGxhc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxKU09OPihgLi9hc3NldHMvY29uZmlndXJhdGlvbnMvJHtzdWJkb21haW59LiR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nfS5qc29uYCkpLFxyXG4gICAgICAgICAgICAgIGxhc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxKU09OPihgLi9hc3NldHMvY29uZmlndXJhdGlvbnMvJHtzdWJkb21haW59LmFwcHNldHRpbmdzLmpzb25gKSlcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcgPSBfLm1lcmdlV2l0aCh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLCBzdWJkb21haW5Db25maWdzLCB0aGlzLm1lcmdlQ3VzdG9taXplcik7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcsIF8ubWVyZ2VXaXRoKG1lcmdlZExhbmd1YWdlLCBzdWJkb21haW5MYW5ndWFnZSwgdGhpcy5tZXJnZUN1c3RvbWl6ZXIpKTtcclxuICAgICAgICAgICAgY29uZmlndXJlUGFydGlhbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuc3ViZG9tYWluICYmIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuc3ViZG9tYWluLnN1YmRvbWFpbnMubGVuZ3RoICYmICF0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YmRvbWFpbi5zdWJkb21haW5zLmluY2x1ZGVzKHN1YmRvbWFpbikpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBgSW52YWxpZCBzdWJkb21haW46ICR7c3ViZG9tYWlufWA7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YmRvbWFpbj8ucmVxdWlyZUNvbmZpZ3VyZWRTdWJkb21haW4gJiYgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJkb21haW4/LnN1YmRvbWFpbnMuaW5jbHVkZXMoc3ViZG9tYWluKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGBDb25maWd1cmVkIHN1YmRvbWFpbjogJHtzdWJkb21haW59IGRvZXMgbm90IGhhdmUgYW55IHN1YmRvbWFpbiBzcGVjaWZpYyBjb25maWd1cmF0aW9uc2A7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uZmlndXJlUGFydGlhbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAvLyBDYXRjaCBhbnkgZXJyb3JzIGR1cmluZyB0aGUgZ2V0IGNvbmZpZ3VyYXRpb25zIEFQSSBjYWxsXHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgTG9hZGluZyBDb25maWd1cmF0aW9ucyBvciBMYW5ndWFnZXMnKTtcclxuICAgICAgICAvLyBSZWplY3QgdGhlIHByb21pc2VcclxuICAgICAgICByZWplY3QoJ2Vycm9yJyk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yLmVycm9yIHx8ICdTZXJ2ZXIgZXJyb3InKTtcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUF1dGhDb25maWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmN1c3RvbUF1dGhDb25maWdTZXJ2aWNlLmNvbmZpZ3VyZUF1dGhTZXR0aW5ncygpLnRoZW4oYXV0aENvbmZpZyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhdXRoQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5vQXV0aFNldHRpbmdzO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dpbihjb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvQXV0aCA9IGF3YWl0IHRoaXMuc2V0VXBPQXV0aCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICByZWplY3QoZXJyb3IpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSByZXF1ZXN0ZWQgcm91dGVcclxuICAgICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5jb25maWcub0F1dGhTZXR0aW5ncz8ucHJlc2VydmVSb3V0ZSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5vQXV0aFNlcnZpY2Uuc3RhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWRCcy5uZXh0KHRydWUpO1xyXG4gICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgIC8vIENhdGNoIHRoZSBlcnJvclxyXG4gICAgICBjb25zb2xlLmVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgbG9hZGluZyB0aGUgc3RhcnR1cCBjb25maWd1cmF0aW9ucy4nKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJlIGltcGxpY2l0IGZsb3dcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHNldFVwT0F1dGgoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZz8ub0F1dGhTZXR0aW5ncz8uaXNzdWVyKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2VydmljZS5jb25maWcub0F1dGhTZXR0aW5ncztcclxuICAgICAgY29uc3QgYXV0aENvbmZpZyA9IG5ldyBBdXRoQ29uZmlnKHtcclxuICAgICAgICBjbGllbnRJZDogY29uZmlnLmNsaWVudElkLFxyXG4gICAgICAgIHJlZGlyZWN0VXJpOiBjb25maWcucmVkaXJlY3RVcmksXHJcbiAgICAgICAgaXNzdWVyOiBjb25maWcuaXNzdWVyLFxyXG4gICAgICAgIHNjb3BlOiBjb25maWcuc2NvcGUsXHJcbiAgICAgICAgc2tpcElzc3VlckNoZWNrOiBjb25maWcuc2tpcElzc3VlckNoZWNrICE9IHVuZGVmaW5lZCA/IGNvbmZpZy5za2lwSXNzdWVyQ2hlY2sgOiB0cnVlLFxyXG4gICAgICAgIHRpbWVvdXRGYWN0b3I6IGNvbmZpZy50aW1lb3V0RmFjdG9yIHx8IDAuNzUsXHJcbiAgICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBjb25maWcucG9zdExvZ291dFJlZGlyZWN0VXJpLFxyXG4gICAgICAgIGxvZ2luVXJsOiBjb25maWcubG9naW5VcmwsXHJcbiAgICAgICAgc3RyaWN0RGlzY292ZXJ5RG9jdW1lbnRWYWxpZGF0aW9uOiBmYWxzZSxcclxuICAgICAgICByZXNwb25zZVR5cGU6IGNvbmZpZy5yZXNwb25zZVR5cGUgfHwgJ2NvZGUnXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLm9BdXRoU2VydmljZS5jb25maWd1cmUoYXV0aENvbmZpZyk7XHJcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLnNraXBJc3N1ZXJDaGVjayA9IHRydWU7XHJcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGUgfHwgJ2NvZGUnO1xyXG4gICAgICB0aGlzLm9BdXRoU2VydmljZS5zdHJpY3REaXNjb3ZlcnlEb2N1bWVudFZhbGlkYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5vQXV0aFNlcnZpY2UudG9rZW5WYWxpZGF0aW9uSGFuZGxlciA9IG5ldyBKd2tzVmFsaWRhdGlvbkhhbmRsZXIoKTtcclxuICAgICAgdGhpcy5vQXV0aFNlcnZpY2UudGltZW91dEZhY3RvciA9IDAuNzU7XHJcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCh7fSwgJ2FjY2Vzc190b2tlbicpO1xyXG5cclxuICAgICAgLy8gc2V0IGluaXRpYWxpemVkIG9uIHN0YXJ0IHVwIHRvIHRydWVcclxuICAgICAgY29uZmlnLmF1dGhTZXRPblN0YXJ0dXAgPSB0cnVlO1xyXG4gICAgICBjb25zdCBwYXJlbnRDb25maWcgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnO1xyXG4gICAgICBwYXJlbnRDb25maWcub0F1dGhTZXR0aW5ncyA9IGNvbmZpZztcclxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZyA9IHBhcmVudENvbmZpZztcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmxvZ2luKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBMb2dpblxyXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIE9pZGMgQXV0aCBTZXR0aW5nc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgbG9naW4oY29uZmlnOiBPaWRjQXV0aFNldHRpbmdzKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV4aXN0aW5nVG9rZW5BZ2FpbnN0Q29uZmlncygpO1xyXG4gICAgY29uc3QgcHJlc2VydmVkUm91dGUgPSB0aGlzLndpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHByZVNpZ25JblJvdXRlU3RvcmFnZUtleSk7XHJcbiAgICBpZiAoIXByZXNlcnZlZFJvdXRlKSB7XHJcbiAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0ocHJlU2lnbkluUm91dGVTdG9yYWdlS2V5LCB0aGlzLmxvY2F0aW9uLnBhdGgoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJlcXVpcmVMb2dpbk9uU3RhcnR1cCB8fCAhaXNWYWxpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vQXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kTG9naW4oe3N0YXRlOiB0aGlzLmxvY2F0aW9uLnBhdGgoKX0pXHJcbiAgICAgICAgLy8gaGFuZGxlcyB0aGUgY2FzZSBmb3IgZXhwaXJlZCBhY2Nlc3MgdG9rZW4gb3IgaW52YWxpZCBub25jZSBvciBwZW9wbGUgYm9va21hcmtpbmcgdGhlIGlkcyBsb2dpbiBwYWdlXHJcbiAgICAgICAgLmNhdGNoKGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3codGhpcy5sb2NhdGlvbi5wYXRoKCkpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMub0F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKClcclxuICAgICAgICAvLyBoYW5kbGVzIHRoZSBjYXNlIGZvciBleHBpcmVkIGFjY2VzcyB0b2tlbiBvciBpbnZhbGlkIG5vbmNlIG9yIHBlb3BsZSBib29rbWFya2luZyB0aGUgaWRzIGxvZ2luIHBhZ2VcclxuICAgICAgICAuY2F0Y2goYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vQXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXJnZXMgdGhlIHR3byBjb25maWcgb2JqZWN0cyBpZ25vcmluZyB0aGUgYXJyYXkgdHlwZVxyXG4gICAqIEBwYXJhbSBvYmpWYWx1ZSBUaGUgZGVmYXVsdCBjb25maWcgdmFsdWVcclxuICAgKiBAcGFyYW0gc3JjVmFsdWUgVGhlIHRhcmdldCBzd2l0Y2hib2FyZCBjb25maWcgdmFsdWVcclxuICAgKiBAcmV0dXJucyBUaGUgbWVyZ2Ugb2YgdGhlIHR3byBjb25maWdzIHByb3ZpZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtZXJnZUN1c3RvbWl6ZXIob2JqVmFsdWU6IGFueSwgc3JjVmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoXy5pc0FycmF5KG9ialZhbHVlKSAmJiBzcmNWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gc3JjVmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgdGhlIGV4aXN0aW5nIHRva2VuIGFnYWluc3QgdGhlIGNvbmZpZ3VyYXRpb25zXHJcbiAgICogQHJldHVybnMgdHJ1ZSB3aGVuIHRva2VuIGlzIHZhbGlkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUV4aXN0aW5nVG9rZW5BZ2FpbnN0Q29uZmlncygpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLm9BdXRoU2V0dGluZ3MuZGlzYWJsZVN0YXJ0dXBUb2tlblZhbGlkYXRpb24pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JhbnRlZFNjb3BlczogQXJyYXk8c3RyaW5nPiA9ICB0aGlzLm9BdXRoU2VydmljZS5nZXRHcmFudGVkU2NvcGVzKCkgYXMgQXJyYXk8c3RyaW5nPjtcclxuICAgIGNvbnN0IGNvbmZpZ3VyZWRTY29wZXMgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLm9BdXRoU2V0dGluZ3Muc2NvcGUuc3BsaXQoJyAnKTtcclxuICAgIGNvbnN0IGRpZmZzID0gZ3JhbnRlZFNjb3Blcy5maWx0ZXIoeCA9PiAhY29uZmlndXJlZFNjb3Blcy5pbmNsdWRlcyh4KSlcclxuICAgICAgLmNvbmNhdChjb25maWd1cmVkU2NvcGVzLmZpbHRlcih4ID0+ICFncmFudGVkU2NvcGVzLmluY2x1ZGVzKHgpKSk7XHJcbiAgICBpZiAoZGlmZnMubGVuZ3RoIHx8IHRoaXMub0F1dGhTZXJ2aWNlLmdldElkZW50aXR5Q2xhaW1zKClbJ2F1ZCddICE9PSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLm9BdXRoU2V0dGluZ3MuY2xpZW50SWQpIHtcclxuICAgICAgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYWNjZXNzX3Rva2VuJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldHRpbmcgdGhlIHN1YmRvbWFpbiBmcm9tIHVybCAqL1xyXG4gIHByaXZhdGUgZ2V0U3ViZG9tYWluKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcclxuICAgIGlmIChkb21haW4uaW5kZXhPZignLicpIDwgMCB8fFxyXG4gICAgICBkb21haW4uc3BsaXQoJy4nKVswXSA9PT0gdGhpcy5leGFtcGxlU3ViZG9tYWluIHx8IGRvbWFpbi5zcGxpdCgnLicpWzBdID09PSB0aGlzLmx2aFN1YnN0cmluZyB8fCBkb21haW4uc3BsaXQoJy4nKVswXSA9PT0gdGhpcy53d3dTdWJzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGRvbWFpbi5zcGxpdCgnLicpWzBdO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9zcmMvbGliL2NvcmUvbW9kZWxzL2Jhc2UtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaGVtZVBhbGV0dGVNb2RlbCB9IGZyb20gJy4uL2NsaWVudC1nZW5lcmF0ZWQvbW9kZWwvdGhlbWVQYWxldHRlTW9kZWwnO1xyXG5pbXBvcnQgeyBIZWFkZXJDb25maWcgfSBmcm9tICcuL2hlYWRlci1jb25maWcnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uQ29uZmlnIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLWNvbmZpZyc7XHJcbmltcG9ydCB7IE9pZGNBdXRoU2V0dGluZ3MgfSBmcm9tICcuL29pZGMtYXV0aC1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IFN1YmRvbWFpbkNvbmZpZyB9IGZyb20gJy4vc3ViZG9tYWluLWNvbmZpZyc7XHJcblxyXG4vKiogVGhlIGJhc2UgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgKi9cclxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29uZmlnIHtcclxuICAgIC8qKiBUaGUgb2lkYyBzZXR0aW5ncyAqL1xyXG4gICAgb0F1dGhTZXR0aW5nczogT2lkY0F1dGhTZXR0aW5ncztcclxuXHJcbiAgICAvKiogVGhlIGhlYWRlciBjb25maWd1cmF0aW9ucyAqL1xyXG4gICAgaGVhZGVyOiBIZWFkZXJDb25maWc7XHJcblxyXG4gICAgLyoqIFRoZSB0aGVtZSBwYWxldHRlICovXHJcbiAgICB0aGVtZTogVGhlbWVQYWxldHRlTW9kZWw7XHJcblxyXG4gICAgLyoqIFRoZSBuYXZpZ2F0aW9uIGNvbmZpZyAqL1xyXG4gICAgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkNvbmZpZztcclxuXHJcbiAgICAvKiogVGhlIHN1YiBkb21haW4gY29uZmlndXJhdGlvbnMgKi9cclxuICAgIHN1YmRvbWFpbj86IFN1YmRvbWFpbkNvbmZpZztcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViZG9tYWluLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvY29yZS9tb2RlbHMvc3ViZG9tYWluLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFRoZSBzdWJkb21haW4gY29uZmlndXJhdGlvbnMgKi9cclxuZXhwb3J0IGludGVyZmFjZSBTdWJkb21haW5Db25maWcge1xyXG4gICAgLyoqIFRydWUgd2hlbiB0aGUgc3ViZG9tYWluIGNvbmZpZ3VyYXRpb24gbXVzdCBleGlzdCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGxvYWQgKi9cclxuICAgIHJlcXVpcmVDb25maWd1cmVkU3ViZG9tYWluPzogYm9vbGVhbjtcclxuICAgIC8qKiB0aGUgY29uZmlndXJlZCBzdWJkb21haW5zIGZvciB0aGUgYXBwbGljYXRpb24gKi9cclxuICAgIHN1YmRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xyXG59Il19
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -14,6 +14,7 @@ export * from './lib/core/models/user-entity-service-config';
|
|
|
14
14
|
export * from './lib/core/client-generated/model/models';
|
|
15
15
|
export * from './lib/core/functions/guid';
|
|
16
16
|
export * from './lib/core/functions/naming-convention';
|
|
17
|
+
export * from './lib/core/functions/route-to-pre-login-route';
|
|
17
18
|
export * from './lib/core/initializer/abstract-startup-service';
|
|
18
19
|
export * from './lib/core/services/base-config.service';
|
|
19
20
|
export * from './lib/core/services/default-config.service';
|
|
@@ -21,6 +22,7 @@ export * from './lib/core/models/base-config';
|
|
|
21
22
|
export * from './lib/core/models/oidc-auth-settings';
|
|
22
23
|
export * from './lib/core/models/header-config';
|
|
23
24
|
export * from './lib/core/models/navigation-config';
|
|
25
|
+
export * from './lib/core/models/subdomain-config';
|
|
24
26
|
export * from './lib/core/services/custom-auth-config.service';
|
|
25
27
|
export * from './lib/core/components/app-template/app-template.component';
|
|
26
28
|
export * from './lib/core/services/banner.service';
|
|
@@ -46,4 +48,4 @@ export * from './lib/component-save-print/sof-ar-component-save-print.module';
|
|
|
46
48
|
export * from './lib/component-save-print/components/component-save-print/component-save-print.component';
|
|
47
49
|
export * from './lib/component-save-print/services/component-save-print.service';
|
|
48
50
|
export * from './lib/rbac/services/tokens';
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLE9BQU87QUFDUCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywyQ0FBMkMsQ0FBQztBQUUxRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsZ0RBQWdELENBQUE7QUFDOUQsY0FBYywyREFBMkQsQ0FBQztBQUMxRSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELE9BQU8sRUFDSCxjQUFjLEVBQ2QsTUFBTSxFQUNOLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ3JCLE1BQU0sNkJBQTZCLENBQUM7QUFFckMsVUFBVTtBQUNWLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUNBQXVDLENBQUM7QUFFdEQsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLDJGQUEyRixDQUFDO0FBQzFHLGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyw0QkFBNEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYXJtYXR1cmUgKi9cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYXJtYXR1cmUubW9kdWxlJztcclxuXHJcbi8vIGNvcmVcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL3VzZXItZW50aXR5LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2F1dGhvcml6YXRpb24uc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL21vZGVscy9kYXRhLXN0b3JlLWNvbmZpZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvbW9kZWxzL3R5cGVkLXNlc3Npb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL21vZGVscy9odHRwLXZlcmJzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9tb2RlbHMvc2Vzc2lvbi1jb25maWcnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL21vZGVscy9yb3V0ZS1wYXRoJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9tb2RlbHMvc3R5bGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9tb2RlbHMvdXNlci1lbnRpdHktc2VydmljZS1jb25maWcnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL2NsaWVudC1nZW5lcmF0ZWQvbW9kZWwvbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9mdW5jdGlvbnMvZ3VpZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvZnVuY3Rpb25zL25hbWluZy1jb252ZW50aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9mdW5jdGlvbnMvcm91dGUtdG8tcHJlLWxvZ2luLXJvdXRlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9pbml0aWFsaXplci9hYnN0cmFjdC1zdGFydHVwLXNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2Jhc2UtY29uZmlnLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2RlZmF1bHQtY29uZmlnLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL21vZGVscy9iYXNlLWNvbmZpZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvbW9kZWxzL29pZGMtYXV0aC1zZXR0aW5ncyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvbW9kZWxzL2hlYWRlci1jb25maWcnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL21vZGVscy9uYXZpZ2F0aW9uLWNvbmZpZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvbW9kZWxzL3N1YmRvbWFpbi1jb25maWcnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2N1c3RvbS1hdXRoLWNvbmZpZy5zZXJ2aWNlJ1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL2NvbXBvbmVudHMvYXBwLXRlbXBsYXRlL2FwcC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2Jhbm5lci5zZXJ2aWNlJztcclxuZXhwb3J0IHtcclxuICAgIFNFU1NJT05fQ09ORklHLFxyXG4gICAgV0lORE9XLFxyXG4gICAgVVNFUl9FTlRJVFlfU0VSVklDRV9DT05GSUcsXHJcbiAgICBwcmVTaWduSW5Sb3V0ZVN0b3JhZ2VLZXksXHJcbiAgICBsYW5ndWFnZVN0b3JhZ2VLZXlcclxufSBmcm9tICcuL2xpYi9jb3JlL21vZGVscy9jb25zdGFudHMnO1xyXG5cclxuLy8gbW9kdWxlc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXN0cmlidXRlZC1jYWNoZS9kaXN0cmlidXRlZC1jYWNoZS1hcGknO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lcnJvci9lcnJvci1hcGknO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9mYXEvZmFxLWFwaSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvb3Rlci9mb290ZXItYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybXMvZm9ybXMtYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVhZGVyL2hlYWRlci1hcGknO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uYXZpZ2F0aW9uL25hdmlnYXRpb24tYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvb2F1dGgvb2F1dGgtYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmJhYy9yYmFjLWFwaSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3J1bS9ydW0tYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2FtbC9zYW1sLWFwaSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RoZW1pbmcvdGhlbWUtYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQtYmFubmVyL2FsZXJ0LWJhbm5lci1hcGknO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc29mLXBpcGUvc29mLXBpcGUuYXBpJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzaXplLXBhbmVscy9yZXNpemUtcGFuZWxzLWFwaSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnQtc2F2ZS1wcmludC9zb2YtYXItY29tcG9uZW50LXNhdmUtcHJpbnQubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50LXNhdmUtcHJpbnQvY29tcG9uZW50cy9jb21wb25lbnQtc2F2ZS1wcmludC9jb21wb25lbnQtc2F2ZS1wcmludC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnQtc2F2ZS1wcmludC9zZXJ2aWNlcy9jb21wb25lbnQtc2F2ZS1wcmludC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmJhYy9zZXJ2aWNlcy90b2tlbnMnXHJcbiJdfQ==
|
|
@@ -14,7 +14,7 @@ import * as i2 from '@ngx-translate/core';
|
|
|
14
14
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
15
15
|
import * as i3 from '@angular/flex-layout/flex';
|
|
16
16
|
import * as i4 from '@angular/flex-layout/extended';
|
|
17
|
-
import { BehaviorSubject, of, Subscription, throwError, ReplaySubject } from 'rxjs';
|
|
17
|
+
import { BehaviorSubject, of, Subscription, lastValueFrom, throwError, ReplaySubject } from 'rxjs';
|
|
18
18
|
import { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';
|
|
19
19
|
import { map, catchError, filter, switchMap, take, share, first } from 'rxjs/operators';
|
|
20
20
|
import * as i1$2 from '@angular/cdk/layout';
|
|
@@ -2310,7 +2310,7 @@ class Initializer {
|
|
|
2310
2310
|
* @param location The location
|
|
2311
2311
|
* @param customAuthConfigService The service that will configure the auth config
|
|
2312
2312
|
*/
|
|
2313
|
-
constructor(http, translateService, themeService, configService, oAuthService, router, location, customAuthConfigService) {
|
|
2313
|
+
constructor(http, translateService, themeService, configService, oAuthService, router, location, customAuthConfigService, _window) {
|
|
2314
2314
|
this.http = http;
|
|
2315
2315
|
this.translateService = translateService;
|
|
2316
2316
|
this.themeService = themeService;
|
|
@@ -2319,9 +2319,17 @@ class Initializer {
|
|
|
2319
2319
|
this.router = router;
|
|
2320
2320
|
this.location = location;
|
|
2321
2321
|
this.customAuthConfigService = customAuthConfigService;
|
|
2322
|
+
this._window = _window;
|
|
2322
2323
|
/** The configuration behavior subject */
|
|
2323
2324
|
this.isInitializedBs = new BehaviorSubject(false);
|
|
2325
|
+
/** The example the subdomain substring */
|
|
2326
|
+
this.exampleSubdomain = 'example';
|
|
2327
|
+
/** The www substring for subdomain route finding */
|
|
2328
|
+
this.wwwSubstring = 'www';
|
|
2329
|
+
/** The lvh substring for subdomain route finding */
|
|
2330
|
+
this.lvhSubstring = 'lvh';
|
|
2324
2331
|
this.isInitialized$ = this.isInitializedBs.asObservable();
|
|
2332
|
+
this.window = _window || window;
|
|
2325
2333
|
}
|
|
2326
2334
|
/**
|
|
2327
2335
|
* Loads all data that is needed upon initial loading of the website
|
|
@@ -2331,7 +2339,7 @@ class Initializer {
|
|
|
2331
2339
|
// reads the language from local storage set in the parent app
|
|
2332
2340
|
// language loading
|
|
2333
2341
|
// Set languages for translation service
|
|
2334
|
-
const lang = window.localStorage.getItem(languageStorageKey) || window.sessionStorage.getItem(languageStorageKey) || 'en';
|
|
2342
|
+
const lang = this.window.localStorage.getItem(languageStorageKey) || this.window.sessionStorage.getItem(languageStorageKey) || 'en';
|
|
2335
2343
|
this.translateService.setDefaultLang(lang);
|
|
2336
2344
|
this.translateService.use(lang);
|
|
2337
2345
|
// Adapted from https://stackoverflow.com/a/41636880
|
|
@@ -2340,7 +2348,7 @@ class Initializer {
|
|
|
2340
2348
|
// a resolve callback used resolve the promise with a value or the result of another promise,
|
|
2341
2349
|
// and a reject callback used to reject the promise with a provided reason or error.
|
|
2342
2350
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
2343
|
-
var _a;
|
|
2351
|
+
var _a, _b, _c;
|
|
2344
2352
|
// Go through all services and complete any API calls necessary.
|
|
2345
2353
|
// At the end, if all works and loads as expected, resolve the promise and set startup success to true.
|
|
2346
2354
|
// If an issue is encountered, you can call reject() to hit the catch() code below.
|
|
@@ -2355,11 +2363,44 @@ class Initializer {
|
|
|
2355
2363
|
this.http.get('./assets/configurations/theme.json').toPromise()
|
|
2356
2364
|
]);
|
|
2357
2365
|
this.configService.config = _.mergeWith(baseConfig, overrideConfig, this.mergeCustomizer);
|
|
2358
|
-
const
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2366
|
+
const mergedLanguage = _.mergeWith(baseLang, overrideLang, this.mergeCustomizer);
|
|
2367
|
+
this.translateService.setTranslation(this.translateService.currentLang, mergedLanguage);
|
|
2368
|
+
const configurePartial = () => {
|
|
2369
|
+
const configSnapShot = this.configService.config;
|
|
2370
|
+
configSnapShot.theme = theme;
|
|
2371
|
+
this.configService.config = configSnapShot;
|
|
2372
|
+
this.themeService.initPalette(theme);
|
|
2373
|
+
};
|
|
2374
|
+
const subdomain = this.getSubdomain();
|
|
2375
|
+
if (subdomain) {
|
|
2376
|
+
try {
|
|
2377
|
+
let [subdomainConfigs, subdomainLanguage] = yield Promise.all([
|
|
2378
|
+
lastValueFrom(this.http.get(`./assets/configurations/${subdomain}.${this.translateService.currentLang}.json`)),
|
|
2379
|
+
lastValueFrom(this.http.get(`./assets/configurations/${subdomain}.appsettings.json`))
|
|
2380
|
+
]);
|
|
2381
|
+
this.configService.config = _.mergeWith(this.configService.config, subdomainConfigs, this.mergeCustomizer);
|
|
2382
|
+
this.translateService.setTranslation(this.translateService.currentLang, _.mergeWith(mergedLanguage, subdomainLanguage, this.mergeCustomizer));
|
|
2383
|
+
configurePartial();
|
|
2384
|
+
}
|
|
2385
|
+
catch (e) {
|
|
2386
|
+
if (this.configService.config.subdomain && this.configService.config.subdomain.subdomains.length && !this.configService.config.subdomain.subdomains.includes(subdomain)) {
|
|
2387
|
+
this.router.dispose();
|
|
2388
|
+
const error = `Invalid subdomain: ${subdomain}`;
|
|
2389
|
+
console.error(error);
|
|
2390
|
+
throw new Error(error);
|
|
2391
|
+
}
|
|
2392
|
+
else if (((_a = this.configService.config.subdomain) === null || _a === void 0 ? void 0 : _a.requireConfiguredSubdomain) && ((_b = this.configService.config.subdomain) === null || _b === void 0 ? void 0 : _b.subdomains.includes(subdomain))) {
|
|
2393
|
+
this.router.dispose();
|
|
2394
|
+
const error = `Configured subdomain: ${subdomain} does not have any subdomain specific configurations`;
|
|
2395
|
+
reject(error);
|
|
2396
|
+
console.error(error);
|
|
2397
|
+
throw new Error(error);
|
|
2398
|
+
}
|
|
2399
|
+
}
|
|
2400
|
+
}
|
|
2401
|
+
else {
|
|
2402
|
+
configurePartial();
|
|
2403
|
+
}
|
|
2363
2404
|
}
|
|
2364
2405
|
catch (error) {
|
|
2365
2406
|
// Catch any errors during the get configurations API call
|
|
@@ -2389,7 +2430,7 @@ class Initializer {
|
|
|
2389
2430
|
return throwError(error);
|
|
2390
2431
|
}
|
|
2391
2432
|
// Navigate to the requested route
|
|
2392
|
-
if ((
|
|
2433
|
+
if ((_c = this.configService.config.oAuthSettings) === null || _c === void 0 ? void 0 : _c.preserveRoute) {
|
|
2393
2434
|
this.router.navigateByUrl(this.oAuthService.state);
|
|
2394
2435
|
}
|
|
2395
2436
|
this.isInitializedBs.next(true);
|
|
@@ -2443,8 +2484,12 @@ class Initializer {
|
|
|
2443
2484
|
*/
|
|
2444
2485
|
login(config) {
|
|
2445
2486
|
return __awaiter(this, void 0, void 0, function* () {
|
|
2446
|
-
this.validateExistingTokenAgainstConfigs();
|
|
2447
|
-
|
|
2487
|
+
const isValid = this.validateExistingTokenAgainstConfigs();
|
|
2488
|
+
const preservedRoute = this.window.sessionStorage.getItem(preSignInRouteStorageKey);
|
|
2489
|
+
if (!preservedRoute) {
|
|
2490
|
+
this.window.sessionStorage.setItem(preSignInRouteStorageKey, this.location.path());
|
|
2491
|
+
}
|
|
2492
|
+
if (config.requireLoginOnStartup || !isValid) {
|
|
2448
2493
|
return this.oAuthService.loadDiscoveryDocumentAndLogin({ state: this.location.path() })
|
|
2449
2494
|
// handles the case for expired access token or invalid nonce or people bookmarking the ids login page
|
|
2450
2495
|
.catch((res) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -2473,25 +2518,40 @@ class Initializer {
|
|
|
2473
2518
|
return srcValue;
|
|
2474
2519
|
}
|
|
2475
2520
|
}
|
|
2476
|
-
/**
|
|
2521
|
+
/**
|
|
2522
|
+
* Validates the existing token against the configurations
|
|
2523
|
+
* @returns true when token is valid
|
|
2524
|
+
*/
|
|
2477
2525
|
validateExistingTokenAgainstConfigs() {
|
|
2478
2526
|
if (this.configService.config.oAuthSettings.disableStartupTokenValidation) {
|
|
2479
|
-
return;
|
|
2527
|
+
return true;
|
|
2480
2528
|
}
|
|
2481
|
-
if (!window.sessionStorage.getItem('access_token')) {
|
|
2482
|
-
return;
|
|
2529
|
+
if (!this.window.sessionStorage.getItem('access_token')) {
|
|
2530
|
+
return true;
|
|
2483
2531
|
}
|
|
2484
|
-
const grantedScopes = this.oAuthService.getGrantedScopes()
|
|
2485
|
-
.split(' ');
|
|
2532
|
+
const grantedScopes = this.oAuthService.getGrantedScopes();
|
|
2486
2533
|
const configuredScopes = this.configService.config.oAuthSettings.scope.split(' ');
|
|
2487
2534
|
const diffs = grantedScopes.filter(x => !configuredScopes.includes(x))
|
|
2488
2535
|
.concat(configuredScopes.filter(x => !grantedScopes.includes(x)));
|
|
2489
2536
|
if (diffs.length || this.oAuthService.getIdentityClaims()['aud'] !== this.configService.config.oAuthSettings.clientId) {
|
|
2490
|
-
window.sessionStorage.removeItem('access_token');
|
|
2537
|
+
this.window.sessionStorage.removeItem('access_token');
|
|
2538
|
+
return false;
|
|
2539
|
+
}
|
|
2540
|
+
return true;
|
|
2541
|
+
}
|
|
2542
|
+
/** Getting the subdomain from url */
|
|
2543
|
+
getSubdomain() {
|
|
2544
|
+
const domain = this.window.location.hostname;
|
|
2545
|
+
if (domain.indexOf('.') < 0 ||
|
|
2546
|
+
domain.split('.')[0] === this.exampleSubdomain || domain.split('.')[0] === this.lvhSubstring || domain.split('.')[0] === this.wwwSubstring) {
|
|
2547
|
+
return '';
|
|
2548
|
+
}
|
|
2549
|
+
else {
|
|
2550
|
+
return domain.split('.')[0];
|
|
2491
2551
|
}
|
|
2492
2552
|
}
|
|
2493
2553
|
}
|
|
2494
|
-
Initializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, deps: [{ token: i2$1.HttpClient }, { token: i2.TranslateService }, { token: ThemeService }, { token: BaseConfigService }, { token: i1$1.OAuthService }, { token: i1$3.Router }, { token: i1.Location }, { token: CustomAuthConfigService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2554
|
+
Initializer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, deps: [{ token: i2$1.HttpClient }, { token: i2.TranslateService }, { token: ThemeService }, { token: BaseConfigService }, { token: i1$1.OAuthService }, { token: i1$3.Router }, { token: i1.Location }, { token: CustomAuthConfigService, optional: true }, { token: WINDOW, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2495
2555
|
Initializer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, providedIn: 'root' });
|
|
2496
2556
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: Initializer, decorators: [{
|
|
2497
2557
|
type: Injectable,
|
|
@@ -2501,6 +2561,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
2501
2561
|
}], ctorParameters: function () {
|
|
2502
2562
|
return [{ type: i2$1.HttpClient }, { type: i2.TranslateService }, { type: ThemeService }, { type: BaseConfigService }, { type: i1$1.OAuthService }, { type: i1$3.Router }, { type: i1.Location }, { type: CustomAuthConfigService, decorators: [{
|
|
2503
2563
|
type: Optional
|
|
2564
|
+
}] }, { type: undefined, decorators: [{
|
|
2565
|
+
type: Optional
|
|
2566
|
+
}, {
|
|
2567
|
+
type: Inject,
|
|
2568
|
+
args: [WINDOW]
|
|
2504
2569
|
}] }];
|
|
2505
2570
|
} });
|
|
2506
2571
|
|
|
@@ -5293,6 +5358,18 @@ var ApplicationUserModel;
|
|
|
5293
5358
|
};
|
|
5294
5359
|
})(ApplicationUserModel || (ApplicationUserModel = {}));
|
|
5295
5360
|
|
|
5361
|
+
/**
|
|
5362
|
+
* Routes to the pre login in route
|
|
5363
|
+
* @param router The router
|
|
5364
|
+
*/
|
|
5365
|
+
const routeToPreLoginRoute = (router) => {
|
|
5366
|
+
const preservedRoute = window.sessionStorage.getItem(preSignInRouteStorageKey);
|
|
5367
|
+
if (preservedRoute) {
|
|
5368
|
+
router.navigateByUrl(preservedRoute);
|
|
5369
|
+
window.sessionStorage.removeItem(preSignInRouteStorageKey);
|
|
5370
|
+
}
|
|
5371
|
+
};
|
|
5372
|
+
|
|
5296
5373
|
const BASE_PATH = new InjectionToken('basePath');
|
|
5297
5374
|
const COLLECTION_FORMATS = {
|
|
5298
5375
|
'csv': ',',
|
|
@@ -7191,5 +7268,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
7191
7268
|
* Generated bundle index. Do not edit.
|
|
7192
7269
|
*/
|
|
7193
7270
|
|
|
7194
|
-
export { ALERT_BANNER_CONFIG, AbstractSamlEntryService, AbstractSamlService, AbstractStartupService, AccessTokenClaims, AlertBannerComponent, AlertBannerModule, AlertBannerService, AlertService, AlphaNumericDirective, AppTemplateComponent, ApplicationUserModel, ArRoleNavService, ArmError, ArmatureFooterComponent, ArmatureFooterModule, ArmatureHeaderComponent, ArmatureHeaderModule, ArmatureModule, ArmatureNavigationComponent, ArmatureResizePanelsModule, Attribute, AuthorizationService, BannerService, BannerType, BaseComponentModule, BaseConfigService, CacheExpirationType, ComponentSavePrintComponent, ComponentSavePrintService, Configuration, ConfirmAddressData, CoverageDetail, CssOverride, CssOverrideDirective, CustomAuthConfigService, DISABLE_ACCESS_FOR_NO_PAGES_ROLE, DISTRIBUTED_CACHE_BASE_PATH, DataStoreConfig, DecodedAccessToken, DefaultConfigService, DialogResult, DistributedCacheModule, ErrorCommonComponent, ErrorCommonConfig, ErrorModule, FAQ, FAQConfig, FaqComponent, FaqModule, FooterConfig, FormsModule, HYBRID_SAML_OAUTH_CONFIG, HeaderAuthSettings, HybridSamlOAuthConfig, HybridSamlOauthService, InputTrimDirective, LettersCharactersDirective, LettersOnlyDirective, MobileHeaderMenuComponent, ModalData, NavigationModule, NumbersOnlyDirective, Oauth2RoleService, OauthModule, PhoneFormatPipe, PolicyPerson, RBAC_CONFIG, RbacActionDirective, RbacConfig, RbacModule, RedirectSamlComponent, RedirectSamlRequest, RedirectSessionConfigs, ResizePanelsComponent, RoleAccess, RoleNavService, RoutePath, RumConfig, RumModule, RumService, SESSION_CONFIG, SOF_BLANK_LANGUAGE_OVERRIDE, SOF_DATE_PIPE_FORMATS, SamlModule, SamlService, ServerCacheService, SessionConfig, SessionService, SharedErrorService, SiteMapComponent, SiteMapDirection, SofAddressComponent, SofAlertComponent, SofArComponentSavePrintModule, SofBadgeComponent, SofBannerComponent, SofBlankPipe, SofButtonToggleGroupComponent, SofConfirmAddressComponent, SofDatePipe, SofImageCheckboxComponent, SofModalComponent, SofPipeModule, SofProgressBarComponent, SofRadioCardComponent, SofSimpleAlertComponent, SofSsnPipe, SofStarRatingComponent, SoftheonErrorHandlerService, SsoGatewayEntryService, SsoGatewayModel, States, ThemeModule, ThemeService, TypedSession, USER_ENTITY_SERVICE_CONFIG, UserEntityService, UserEntityServiceConfig, ValidationKeys, WINDOW, httpVerb, initializerFactory, keyPathPrefix, languageStorageKey, newGuid, pascalToCamel, preSignInRouteStorageKey, sessionBasePathFactory };
|
|
7271
|
+
export { ALERT_BANNER_CONFIG, AbstractSamlEntryService, AbstractSamlService, AbstractStartupService, AccessTokenClaims, AlertBannerComponent, AlertBannerModule, AlertBannerService, AlertService, AlphaNumericDirective, AppTemplateComponent, ApplicationUserModel, ArRoleNavService, ArmError, ArmatureFooterComponent, ArmatureFooterModule, ArmatureHeaderComponent, ArmatureHeaderModule, ArmatureModule, ArmatureNavigationComponent, ArmatureResizePanelsModule, Attribute, AuthorizationService, BannerService, BannerType, BaseComponentModule, BaseConfigService, CacheExpirationType, ComponentSavePrintComponent, ComponentSavePrintService, Configuration, ConfirmAddressData, CoverageDetail, CssOverride, CssOverrideDirective, CustomAuthConfigService, DISABLE_ACCESS_FOR_NO_PAGES_ROLE, DISTRIBUTED_CACHE_BASE_PATH, DataStoreConfig, DecodedAccessToken, DefaultConfigService, DialogResult, DistributedCacheModule, ErrorCommonComponent, ErrorCommonConfig, ErrorModule, FAQ, FAQConfig, FaqComponent, FaqModule, FooterConfig, FormsModule, HYBRID_SAML_OAUTH_CONFIG, HeaderAuthSettings, HybridSamlOAuthConfig, HybridSamlOauthService, InputTrimDirective, LettersCharactersDirective, LettersOnlyDirective, MobileHeaderMenuComponent, ModalData, NavigationModule, NumbersOnlyDirective, Oauth2RoleService, OauthModule, PhoneFormatPipe, PolicyPerson, RBAC_CONFIG, RbacActionDirective, RbacConfig, RbacModule, RedirectSamlComponent, RedirectSamlRequest, RedirectSessionConfigs, ResizePanelsComponent, RoleAccess, RoleNavService, RoutePath, RumConfig, RumModule, RumService, SESSION_CONFIG, SOF_BLANK_LANGUAGE_OVERRIDE, SOF_DATE_PIPE_FORMATS, SamlModule, SamlService, ServerCacheService, SessionConfig, SessionService, SharedErrorService, SiteMapComponent, SiteMapDirection, SofAddressComponent, SofAlertComponent, SofArComponentSavePrintModule, SofBadgeComponent, SofBannerComponent, SofBlankPipe, SofButtonToggleGroupComponent, SofConfirmAddressComponent, SofDatePipe, SofImageCheckboxComponent, SofModalComponent, SofPipeModule, SofProgressBarComponent, SofRadioCardComponent, SofSimpleAlertComponent, SofSsnPipe, SofStarRatingComponent, SoftheonErrorHandlerService, SsoGatewayEntryService, SsoGatewayModel, States, ThemeModule, ThemeService, TypedSession, USER_ENTITY_SERVICE_CONFIG, UserEntityService, UserEntityServiceConfig, ValidationKeys, WINDOW, httpVerb, initializerFactory, keyPathPrefix, languageStorageKey, newGuid, pascalToCamel, preSignInRouteStorageKey, routeToPreLoginRoute, sessionBasePathFactory };
|
|
7195
7272
|
//# sourceMappingURL=softheon-armature.mjs.map
|