@osovitny/anatoly 3.16.16 → 3.16.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/anatoly.module.mjs +15 -1
- package/esm2022/lib/core/services/appcontext.service.mjs +14 -2
- package/esm2022/lib/core/services/starter.service.mjs +9 -4
- package/esm2022/lib/iam/b2c/b2c.mjs +43 -0
- package/esm2022/lib/iam/b2c/consts.mjs +25 -0
- package/esm2022/lib/iam/b2c/index.mjs +21 -0
- package/esm2022/lib/iam/configs.mjs +107 -0
- package/esm2022/lib/iam/consts.mjs +23 -0
- package/esm2022/lib/iam/guards/admin.guard.mjs +47 -0
- package/esm2022/lib/iam/guards/authentication.guard.mjs +31 -0
- package/esm2022/lib/iam/guards/index.mjs +20 -0
- package/esm2022/lib/iam/iam-pages.module.mjs +54 -0
- package/esm2022/lib/iam/iam-pages.routes.mjs +45 -0
- package/esm2022/lib/iam/iam.module.mjs +100 -0
- package/esm2022/lib/iam/index.mjs +18 -0
- package/esm2022/lib/iam/pages/signin.page.mjs +40 -0
- package/esm2022/lib/iam/pages/signout.page.mjs +40 -0
- package/esm2022/lib/iam/pages/signup.page.mjs +39 -0
- package/esm2022/lib/iam/redirect.mjs +29 -0
- package/esm2022/lib/iam/services/auth.service.mjs +246 -0
- package/esm2022/lib/iam/storage.mjs +39 -0
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/osovitny-anatoly.mjs +934 -7
- package/fesm2022/osovitny-anatoly.mjs.map +1 -1
- package/lib/anatoly.module.d.ts +3 -2
- package/lib/core/services/appcontext.service.d.ts +2 -0
- package/lib/iam/b2c/b2c.d.ts +5 -0
- package/lib/iam/b2c/consts.d.ts +6 -0
- package/lib/iam/b2c/index.d.ts +2 -0
- package/lib/iam/configs.d.ts +5 -0
- package/lib/iam/consts.d.ts +3 -0
- package/lib/iam/guards/admin.guard.d.ts +13 -0
- package/lib/iam/guards/authentication.guard.d.ts +13 -0
- package/lib/iam/guards/index.d.ts +2 -0
- package/lib/iam/iam-pages.module.d.ts +12 -0
- package/lib/iam/iam-pages.routes.d.ts +6 -0
- package/lib/iam/iam.module.d.ts +9 -0
- package/lib/iam/index.d.ts +1 -0
- package/lib/iam/pages/signin.page.d.ts +11 -0
- package/lib/iam/pages/signout.page.d.ts +11 -0
- package/lib/iam/pages/signup.page.d.ts +11 -0
- package/lib/iam/redirect.d.ts +3 -0
- package/lib/iam/services/auth.service.d.ts +37 -0
- package/lib/iam/storage.d.ts +8 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<file>
|
|
3
|
+
Project:
|
|
4
|
+
@osovitny/anatoly
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Vadim Osovitny vadim@osovitny.com
|
|
8
|
+
Anatoly Osovitny anatoly@osovitny.com
|
|
9
|
+
|
|
10
|
+
Created:
|
|
11
|
+
2 May 2023
|
|
12
|
+
|
|
13
|
+
Description:
|
|
14
|
+
Identity and Access Management
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
|
|
17
|
+
</file>
|
|
18
|
+
*/
|
|
19
|
+
//Node
|
|
20
|
+
import { RouterModule } from "@angular/router";
|
|
21
|
+
//Pages
|
|
22
|
+
import { SignInPage } from "./pages/signin.page";
|
|
23
|
+
import { SignOutPage } from "./pages/signout.page";
|
|
24
|
+
import { SignUpPage } from "./pages/signup.page";
|
|
25
|
+
const routes = [
|
|
26
|
+
{
|
|
27
|
+
path: "signin",
|
|
28
|
+
component: SignInPage
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
path: "signup",
|
|
32
|
+
component: SignUpPage
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
path: "signout",
|
|
36
|
+
component: SignOutPage
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
export const IAMRouterModule = RouterModule.forChild(routes);
|
|
40
|
+
export const PAGES = [
|
|
41
|
+
SignInPage,
|
|
42
|
+
SignUpPage,
|
|
43
|
+
SignOutPage
|
|
44
|
+
];
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLXBhZ2VzLnJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9pYW0vaWFtLXBhZ2VzLnJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUFFRixNQUFNO0FBQ04sT0FBTyxFQUFFLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU87QUFDUCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxNQUFNLE1BQU0sR0FBVztJQUNyQjtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLFVBQVU7S0FDdEI7SUFDRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLFVBQVU7S0FDdEI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUyxFQUFFLFdBQVc7S0FDdkI7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0QsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLFVBQVU7SUFDVixVQUFVO0lBQ1YsV0FBVztDQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuXHRDcmVhdGVkOlxyXG5cdFx0MiBNYXkgMjAyM1xyXG5cclxuICBEZXNjcmlwdGlvbjpcclxuICAgIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudFxyXG5cclxuXHRDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbi8vUGFnZXNcclxuaW1wb3J0IHsgU2lnbkluUGFnZSB9IGZyb20gXCIuL3BhZ2VzL3NpZ25pbi5wYWdlXCI7XHJcbmltcG9ydCB7IFNpZ25PdXRQYWdlIH0gZnJvbSBcIi4vcGFnZXMvc2lnbm91dC5wYWdlXCI7XHJcbmltcG9ydCB7IFNpZ25VcFBhZ2UgfSBmcm9tIFwiLi9wYWdlcy9zaWdudXAucGFnZVwiO1xyXG5cclxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAge1xyXG4gICAgcGF0aDogXCJzaWduaW5cIixcclxuICAgIGNvbXBvbmVudDogU2lnbkluUGFnZVxyXG4gIH0sXHJcbiAge1xyXG4gICAgcGF0aDogXCJzaWdudXBcIixcclxuICAgIGNvbXBvbmVudDogU2lnblVwUGFnZVxyXG4gIH0sXHJcbiAge1xyXG4gICAgcGF0aDogXCJzaWdub3V0XCIsXHJcbiAgICBjb21wb25lbnQ6IFNpZ25PdXRQYWdlXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IElBTVJvdXRlck1vZHVsZSA9IFJvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpO1xyXG5leHBvcnQgY29uc3QgUEFHRVMgPSBbXHJcbiAgU2lnbkluUGFnZSxcclxuICBTaWduVXBQYWdlLFxyXG4gIFNpZ25PdXRQYWdlXHJcbl07XHJcbiJdfQ==
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<file>
|
|
3
|
+
Project:
|
|
4
|
+
@osovitny/anatoly
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Vadim Osovitny vadim@osovitny.com
|
|
8
|
+
Anatoly Osovitny anatoly@osovitny.com
|
|
9
|
+
|
|
10
|
+
Created:
|
|
11
|
+
6 Dec 2018
|
|
12
|
+
|
|
13
|
+
Description:
|
|
14
|
+
Identity and Access Management
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
|
|
17
|
+
</file>
|
|
18
|
+
*/
|
|
19
|
+
//Node
|
|
20
|
+
import { CommonModule } from '@angular/common';
|
|
21
|
+
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
22
|
+
import { NgModule } from '@angular/core';
|
|
23
|
+
import { MsalBroadcastService, MsalInterceptor, MsalModule, MsalService, MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG } from '@azure/msal-angular';
|
|
24
|
+
//App
|
|
25
|
+
import { MSALGuardConfigFactory, MSALInstanceFactory, MSALInterceptorConfigFactory } from './configs';
|
|
26
|
+
import { AuthenticationGuard, AdminGuard } from './guards';
|
|
27
|
+
import { AuthService } from './services/auth.service';
|
|
28
|
+
import * as i0 from "@angular/core";
|
|
29
|
+
export class AnatolyIAMModule {
|
|
30
|
+
static ɵfac = function AnatolyIAMModule_Factory(t) { return new (t || AnatolyIAMModule)(); };
|
|
31
|
+
static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: AnatolyIAMModule });
|
|
32
|
+
static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
|
|
33
|
+
{
|
|
34
|
+
provide: HTTP_INTERCEPTORS,
|
|
35
|
+
useClass: MsalInterceptor,
|
|
36
|
+
multi: true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
provide: MSAL_INTERCEPTOR_CONFIG,
|
|
40
|
+
useFactory: MSALInterceptorConfigFactory
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
provide: MSAL_GUARD_CONFIG,
|
|
44
|
+
useFactory: MSALGuardConfigFactory
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
provide: MSAL_INSTANCE,
|
|
48
|
+
useFactory: MSALInstanceFactory
|
|
49
|
+
},
|
|
50
|
+
MsalService,
|
|
51
|
+
MsalBroadcastService,
|
|
52
|
+
//App
|
|
53
|
+
AuthService,
|
|
54
|
+
AuthenticationGuard,
|
|
55
|
+
AdminGuard
|
|
56
|
+
], imports: [CommonModule,
|
|
57
|
+
HttpClientModule,
|
|
58
|
+
MsalModule] });
|
|
59
|
+
}
|
|
60
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnatolyIAMModule, [{
|
|
61
|
+
type: NgModule,
|
|
62
|
+
args: [{
|
|
63
|
+
imports: [
|
|
64
|
+
CommonModule,
|
|
65
|
+
HttpClientModule,
|
|
66
|
+
MsalModule
|
|
67
|
+
],
|
|
68
|
+
exports: [],
|
|
69
|
+
declarations: [],
|
|
70
|
+
providers: [
|
|
71
|
+
{
|
|
72
|
+
provide: HTTP_INTERCEPTORS,
|
|
73
|
+
useClass: MsalInterceptor,
|
|
74
|
+
multi: true
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
provide: MSAL_INTERCEPTOR_CONFIG,
|
|
78
|
+
useFactory: MSALInterceptorConfigFactory
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
provide: MSAL_GUARD_CONFIG,
|
|
82
|
+
useFactory: MSALGuardConfigFactory
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
provide: MSAL_INSTANCE,
|
|
86
|
+
useFactory: MSALInstanceFactory
|
|
87
|
+
},
|
|
88
|
+
MsalService,
|
|
89
|
+
MsalBroadcastService,
|
|
90
|
+
//App
|
|
91
|
+
AuthService,
|
|
92
|
+
AuthenticationGuard,
|
|
93
|
+
AdminGuard
|
|
94
|
+
]
|
|
95
|
+
}]
|
|
96
|
+
}], null, null); })();
|
|
97
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(AnatolyIAMModule, { imports: [CommonModule,
|
|
98
|
+
HttpClientModule,
|
|
99
|
+
MsalModule] }); })();
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9pYW0vaWFtLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUFFRixNQUFNO0FBQ04sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhLLEtBQUs7QUFDTCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBdUN0RCxNQUFNLE9BQU8sZ0JBQWdCOzBFQUFoQixnQkFBZ0I7NERBQWhCLGdCQUFnQjtpRUEzQmhCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRDtnQkFDRSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxVQUFVLEVBQUUsNEJBQTRCO2FBQ3pDO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsVUFBVSxFQUFFLHNCQUFzQjthQUNuQztZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixVQUFVLEVBQUUsbUJBQW1CO2FBQ2hDO1lBQ0QsV0FBVztZQUNYLG9CQUFvQjtZQUVwQixLQUFLO1lBQ0wsV0FBVztZQUNYLG1CQUFtQjtZQUNuQixVQUFVO1NBQ1gsWUFqQ0MsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixVQUFVOzt1RkFpQ0QsZ0JBQWdCO2NBckM1QixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLFlBQVk7b0JBQ1osZ0JBQWdCO29CQUNoQixVQUFVO2lCQUNYO2dCQUNELE9BQU8sRUFBRSxFQUNSO2dCQUNELFlBQVksRUFBRSxFQUNiO2dCQUNELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixRQUFRLEVBQUUsZUFBZTt3QkFDekIsS0FBSyxFQUFFLElBQUk7cUJBQ1o7b0JBQ0Q7d0JBQ0UsT0FBTyxFQUFFLHVCQUF1Qjt3QkFDaEMsVUFBVSxFQUFFLDRCQUE0QjtxQkFDekM7b0JBQ0Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsVUFBVSxFQUFFLHNCQUFzQjtxQkFDbkM7b0JBQ0Q7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFVBQVUsRUFBRSxtQkFBbUI7cUJBQ2hDO29CQUNELFdBQVc7b0JBQ1gsb0JBQW9CO29CQUVwQixLQUFLO29CQUNMLFdBQVc7b0JBQ1gsbUJBQW1CO29CQUNuQixVQUFVO2lCQUNYO2FBQ0Y7O3dGQUNZLGdCQUFnQixjQW5DekIsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDYgRGVjIDIwMThcclxuXHJcbiAgRGVzY3JpcHRpb246XHJcbiAgICBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSwgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1zYWxCcm9hZGNhc3RTZXJ2aWNlLCBNc2FsSW50ZXJjZXB0b3IsIE1zYWxNb2R1bGUsIE1zYWxTZXJ2aWNlLCBNU0FMX0dVQVJEX0NPTkZJRywgTVNBTF9JTlNUQU5DRSwgTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IE1TQUxHdWFyZENvbmZpZ0ZhY3RvcnksIE1TQUxJbnN0YW5jZUZhY3RvcnksIE1TQUxJbnRlcmNlcHRvckNvbmZpZ0ZhY3RvcnkgfSBmcm9tICcuL2NvbmZpZ3MnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkd1YXJkLCBBZG1pbkd1YXJkIH0gZnJvbSAnLi9ndWFyZHMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgSHR0cENsaWVudE1vZHVsZSxcclxuICAgIE1zYWxNb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxyXG4gICAgICB1c2VDbGFzczogTXNhbEludGVyY2VwdG9yLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTVNBTF9JTlRFUkNFUFRPUl9DT05GSUcsXHJcbiAgICAgIHVzZUZhY3Rvcnk6IE1TQUxJbnRlcmNlcHRvckNvbmZpZ0ZhY3RvcnlcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE1TQUxfR1VBUkRfQ09ORklHLFxyXG4gICAgICB1c2VGYWN0b3J5OiBNU0FMR3VhcmRDb25maWdGYWN0b3J5XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBNU0FMX0lOU1RBTkNFLFxyXG4gICAgICB1c2VGYWN0b3J5OiBNU0FMSW5zdGFuY2VGYWN0b3J5XHJcbiAgICB9LFxyXG4gICAgTXNhbFNlcnZpY2UsXHJcbiAgICBNc2FsQnJvYWRjYXN0U2VydmljZSxcclxuXHJcbiAgICAvL0FwcFxyXG4gICAgQXV0aFNlcnZpY2UsXHJcbiAgICBBdXRoZW50aWNhdGlvbkd1YXJkLFxyXG4gICAgQWRtaW5HdWFyZFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFuYXRvbHlJQU1Nb2R1bGUge1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<file>
|
|
3
|
+
Project:
|
|
4
|
+
@osovitny/anatoly
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Vadim Osovitny vadim@osovitny.com
|
|
8
|
+
Anatoly Osovitny anatoly@osovitny.com
|
|
9
|
+
|
|
10
|
+
Created:
|
|
11
|
+
27 Nov 2023
|
|
12
|
+
|
|
13
|
+
Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
|
|
14
|
+
</file>
|
|
15
|
+
*/
|
|
16
|
+
//services
|
|
17
|
+
export * from './services/auth.service';
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvaWFtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsVUFBVTtBQUNWLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMjcgTm92IDIwMjNcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL3NlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<file>
|
|
3
|
+
Project:
|
|
4
|
+
@osovitny/anatoly
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Vadim Osovitny vadim@osovitny.com
|
|
8
|
+
Anatoly Osovitny anatoly@osovitny.com
|
|
9
|
+
|
|
10
|
+
Created:
|
|
11
|
+
20 Sep 2023
|
|
12
|
+
|
|
13
|
+
Description:
|
|
14
|
+
Identity and Access Management
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
|
|
17
|
+
</file>
|
|
18
|
+
*/
|
|
19
|
+
//Node
|
|
20
|
+
import { Component } from '@angular/core';
|
|
21
|
+
import { BasePage } from '../../ui/components/base/base.page';
|
|
22
|
+
import * as i0 from "@angular/core";
|
|
23
|
+
import * as i1 from "../services/auth.service";
|
|
24
|
+
export class SignInPage extends BasePage {
|
|
25
|
+
auth;
|
|
26
|
+
constructor(auth) {
|
|
27
|
+
super();
|
|
28
|
+
this.auth = auth;
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
this.auth.login().subscribe();
|
|
32
|
+
}
|
|
33
|
+
static ɵfac = function SignInPage_Factory(t) { return new (t || SignInPage)(i0.ɵɵdirectiveInject(i1.AuthService)); };
|
|
34
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SignInPage, selectors: [["iam-signin-page"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SignInPage_Template(rf, ctx) { }, encapsulation: 2 });
|
|
35
|
+
}
|
|
36
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SignInPage, [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: 'iam-signin-page', template: "" }]
|
|
39
|
+
}], function () { return [{ type: i1.AuthService }]; }, null); })();
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmluLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvaWFtL3BhZ2VzL3NpZ25pbi5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBTTlELE1BQU0sT0FBTyxVQUFXLFNBQVEsUUFBUTtJQUNsQjtJQUFwQixZQUFvQixJQUFpQjtRQUNuQyxLQUFLLEVBQUUsQ0FBQztRQURVLFNBQUksR0FBSixJQUFJLENBQWE7SUFFckMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7b0VBUFUsVUFBVTs2REFBVixVQUFVOzt1RkFBVixVQUFVO2NBSnRCLFNBQVM7MkJBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDIwIFNlcCAyMDIzXHJcblxyXG4gIERlc2NyaXB0aW9uOlxyXG4gICAgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50XHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VQYWdlIH0gZnJvbSAnLi4vLi4vdWkvY29tcG9uZW50cy9iYXNlL2Jhc2UucGFnZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lhbS1zaWduaW4tcGFnZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NpZ25pbi5wYWdlLmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWduSW5QYWdlIGV4dGVuZHMgQmFzZVBhZ2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aDogQXV0aFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXV0aC5sb2dpbigpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<file>
|
|
3
|
+
Project:
|
|
4
|
+
@osovitny/anatoly
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Vadim Osovitny vadim@osovitny.com
|
|
8
|
+
Anatoly Osovitny anatoly@osovitny.com
|
|
9
|
+
|
|
10
|
+
Created:
|
|
11
|
+
20 Sep 2023
|
|
12
|
+
|
|
13
|
+
Description:
|
|
14
|
+
Identity and Access Management
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
|
|
17
|
+
</file>
|
|
18
|
+
*/
|
|
19
|
+
//Node
|
|
20
|
+
import { Component } from '@angular/core';
|
|
21
|
+
import { BasePage } from '../../ui/components/base/base.page';
|
|
22
|
+
import * as i0 from "@angular/core";
|
|
23
|
+
import * as i1 from "../services/auth.service";
|
|
24
|
+
export class SignOutPage extends BasePage {
|
|
25
|
+
auth;
|
|
26
|
+
constructor(auth) {
|
|
27
|
+
super();
|
|
28
|
+
this.auth = auth;
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
this.auth.logout();
|
|
32
|
+
}
|
|
33
|
+
static ɵfac = function SignOutPage_Factory(t) { return new (t || SignOutPage)(i0.ɵɵdirectiveInject(i1.AuthService)); };
|
|
34
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SignOutPage, selectors: [["iam-signout-page"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SignOutPage_Template(rf, ctx) { }, encapsulation: 2 });
|
|
35
|
+
}
|
|
36
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SignOutPage, [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: 'iam-signout-page', template: "" }]
|
|
39
|
+
}], function () { return [{ type: i1.AuthService }]; }, null); })();
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbm91dC5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2lhbS9wYWdlcy9zaWdub3V0LnBhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFJbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7QUFNOUQsTUFBTSxPQUFPLFdBQVksU0FBUSxRQUFRO0lBQ25CO0lBQXBCLFlBQW9CLElBQWlCO1FBQ25DLEtBQUssRUFBRSxDQUFDO1FBRFUsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUVyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDckIsQ0FBQztxRUFQVSxXQUFXOzZEQUFYLFdBQVc7O3VGQUFYLFdBQVc7Y0FKdkIsU0FBUzsyQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuXHRDcmVhdGVkOlxyXG5cdFx0MjAgU2VwIDIwMjNcclxuXHJcbiAgRGVzY3JpcHRpb246XHJcbiAgICBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnRcclxuXHJcblx0Q29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVBhZ2UgfSBmcm9tICcuLi8uLi91aS9jb21wb25lbnRzL2Jhc2UvYmFzZS5wYWdlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWFtLXNpZ25vdXQtcGFnZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NpZ25vdXQucGFnZS5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lnbk91dFBhZ2UgZXh0ZW5kcyBCYXNlUGFnZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoOiBBdXRoU2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hdXRoLmxvZ291dCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<file>
|
|
3
|
+
Project:
|
|
4
|
+
@osovitny/anatoly
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Vadim Osovitny vadim@osovitny.com
|
|
8
|
+
Anatoly Osovitny anatoly@osovitny.com
|
|
9
|
+
|
|
10
|
+
Created:
|
|
11
|
+
20 Sep 2023
|
|
12
|
+
|
|
13
|
+
Description:
|
|
14
|
+
Identity and Access Management
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
|
|
17
|
+
</file>
|
|
18
|
+
*/
|
|
19
|
+
//Node
|
|
20
|
+
import { Component } from '@angular/core';
|
|
21
|
+
import { BasePage } from '../../ui/components/base/base.page';
|
|
22
|
+
import * as i0 from "@angular/core";
|
|
23
|
+
import * as i1 from "../services/auth.service";
|
|
24
|
+
export class SignUpPage extends BasePage {
|
|
25
|
+
auth;
|
|
26
|
+
constructor(auth) {
|
|
27
|
+
super();
|
|
28
|
+
this.auth = auth;
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
}
|
|
32
|
+
static ɵfac = function SignUpPage_Factory(t) { return new (t || SignUpPage)(i0.ɵɵdirectiveInject(i1.AuthService)); };
|
|
33
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SignUpPage, selectors: [["iam-signup-page"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SignUpPage_Template(rf, ctx) { }, encapsulation: 2 });
|
|
34
|
+
}
|
|
35
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SignUpPage, [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{ selector: 'iam-signup-page', template: "" }]
|
|
38
|
+
}], function () { return [{ type: i1.AuthService }]; }, null); })();
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbnVwLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvaWFtL3BhZ2VzL3NpZ251cC5wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBTTlELE1BQU0sT0FBTyxVQUFXLFNBQVEsUUFBUTtJQUNsQjtJQUFwQixZQUFvQixJQUFpQjtRQUNuQyxLQUFLLEVBQUUsQ0FBQztRQURVLFNBQUksR0FBSixJQUFJLENBQWE7SUFFckMsQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO29FQU5VLFVBQVU7NkRBQVYsVUFBVTs7dUZBQVYsVUFBVTtjQUp0QixTQUFTOzJCQUNFLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG5cdENyZWF0ZWQ6XHJcblx0XHQyMCBTZXAgMjAyM1xyXG5cclxuICBEZXNjcmlwdGlvbjpcclxuICAgIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudFxyXG5cclxuXHRDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlUGFnZSB9IGZyb20gJy4uLy4uL3VpL2NvbXBvbmVudHMvYmFzZS9iYXNlLnBhZ2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpYW0tc2lnbnVwLXBhZ2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWdudXAucGFnZS5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2lnblVwUGFnZSBleHRlbmRzIEJhc2VQYWdlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<file>
|
|
3
|
+
Project:
|
|
4
|
+
@osovitny/anatoly
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Vadim Osovitny vadim@osovitny.com
|
|
8
|
+
Anatoly Osovitny anatoly@osovitny.com
|
|
9
|
+
|
|
10
|
+
Created:
|
|
11
|
+
20 Sep 2023
|
|
12
|
+
|
|
13
|
+
Description:
|
|
14
|
+
Identity and Access Management
|
|
15
|
+
|
|
16
|
+
Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
|
|
17
|
+
</file>
|
|
18
|
+
*/
|
|
19
|
+
import { MSALStorage } from './storage';
|
|
20
|
+
export class MSALRedirect {
|
|
21
|
+
static handle(router, calledBy) {
|
|
22
|
+
let redirectTo = MSALStorage.getRedirectState(calledBy);
|
|
23
|
+
if (redirectTo) {
|
|
24
|
+
MSALStorage.clearRedirectState(calledBy);
|
|
25
|
+
router.navigate([redirectTo]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvaWFtL3JlZGlyZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCRTtBQUVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsTUFBTSxPQUFPLFlBQVk7SUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBZ0I7UUFDM0MsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksVUFBVSxFQUFFO1lBQ2QsV0FBVyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcblx0Q3JlYXRlZDpcclxuXHRcdDIwIFNlcCAyMDIzXHJcblxyXG4gIERlc2NyaXB0aW9uOlxyXG4gICAgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50XHJcblxyXG5cdENvcHlyaWdodCAoYykgMjAxNi0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuaW1wb3J0IHsgTVNBTFN0b3JhZ2UgfSBmcm9tICcuL3N0b3JhZ2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1TQUxSZWRpcmVjdCB7XHJcbiAgcHVibGljIHN0YXRpYyBoYW5kbGUocm91dGVyLCBjYWxsZWRCeTogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVkaXJlY3RUbyA9IE1TQUxTdG9yYWdlLmdldFJlZGlyZWN0U3RhdGUoY2FsbGVkQnkpO1xyXG4gICAgaWYgKHJlZGlyZWN0VG8pIHtcclxuICAgICAgTVNBTFN0b3JhZ2UuY2xlYXJSZWRpcmVjdFN0YXRlKGNhbGxlZEJ5KTtcclxuICAgICAgcm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdFRvXSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { Subject, catchError, filter, map, of, takeUntil } from 'rxjs';
|
|
3
|
+
import { MSAL_GUARD_CONFIG } from '@azure/msal-angular';
|
|
4
|
+
import { EventType, InteractionRequiredAuthError, InteractionStatus, InteractionType } from '@azure/msal-browser';
|
|
5
|
+
//App
|
|
6
|
+
import { ApiServiceBase } from '../../data/base/api.service';
|
|
7
|
+
import { MSALApiConfig } from '../consts';
|
|
8
|
+
import { MSALRedirect } from '../redirect';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/common/http";
|
|
11
|
+
import * as i2 from "@angular/router";
|
|
12
|
+
import * as i3 from "../../core/services/appcontext.service";
|
|
13
|
+
import * as i4 from "@azure/msal-angular";
|
|
14
|
+
export class AuthService extends ApiServiceBase {
|
|
15
|
+
http;
|
|
16
|
+
router;
|
|
17
|
+
appContext;
|
|
18
|
+
msalGuardConfig;
|
|
19
|
+
msalService;
|
|
20
|
+
msalBroadcastService;
|
|
21
|
+
msalDestroying$ = new Subject();
|
|
22
|
+
initialized = false;
|
|
23
|
+
constructor(http, router, appContext, msalGuardConfig, msalService, msalBroadcastService) {
|
|
24
|
+
super(http);
|
|
25
|
+
this.http = http;
|
|
26
|
+
this.router = router;
|
|
27
|
+
this.appContext = appContext;
|
|
28
|
+
this.msalGuardConfig = msalGuardConfig;
|
|
29
|
+
this.msalService = msalService;
|
|
30
|
+
this.msalBroadcastService = msalBroadcastService;
|
|
31
|
+
this.init();
|
|
32
|
+
}
|
|
33
|
+
ngOnDestroy() {
|
|
34
|
+
this.msalDestroying$.next(undefined);
|
|
35
|
+
this.msalDestroying$.complete();
|
|
36
|
+
}
|
|
37
|
+
init() {
|
|
38
|
+
this.setDefaults();
|
|
39
|
+
this.msalService.initialize().subscribe(() => {
|
|
40
|
+
this.initialized = true;
|
|
41
|
+
console.log(`msal.app: initMSAL started`);
|
|
42
|
+
this.initMSAL();
|
|
43
|
+
console.log(`msal.app: initMSAL finished`);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
setDefaults() {
|
|
47
|
+
}
|
|
48
|
+
initMSAL() {
|
|
49
|
+
this.msalService.instance.enableAccountStorageEvents();
|
|
50
|
+
this.msalService.handleRedirectObservable().subscribe({
|
|
51
|
+
next: (result) => {
|
|
52
|
+
console.log(`msal.app: handleRedirectObservable`);
|
|
53
|
+
},
|
|
54
|
+
error: (error) => {
|
|
55
|
+
console.log(error);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this.msalBroadcastService.msalSubject$
|
|
59
|
+
.pipe(filter((msg) => msg.eventType === EventType.INITIALIZE_END ||
|
|
60
|
+
msg.eventType === EventType.ACCOUNT_ADDED ||
|
|
61
|
+
msg.eventType === EventType.ACCOUNT_REMOVED ||
|
|
62
|
+
msg.eventType === EventType.LOGIN_SUCCESS ||
|
|
63
|
+
msg.eventType === EventType.LOGIN_FAILURE ||
|
|
64
|
+
msg.eventType === EventType.LOGOUT_SUCCESS ||
|
|
65
|
+
msg.eventType === EventType.LOGOUT_FAILURE), takeUntil(this.msalDestroying$))
|
|
66
|
+
.subscribe((msg) => {
|
|
67
|
+
switch (msg.eventType) {
|
|
68
|
+
case EventType.INITIALIZE_END:
|
|
69
|
+
console.log(`msal.app: INITIALIZE_END fired`);
|
|
70
|
+
break;
|
|
71
|
+
case EventType.ACCOUNT_ADDED:
|
|
72
|
+
case EventType.LOGIN_SUCCESS:
|
|
73
|
+
let payload = msg.payload;
|
|
74
|
+
if (payload) {
|
|
75
|
+
this.msalService.instance.setActiveAccount(payload.account);
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
case EventType.ACCOUNT_REMOVED:
|
|
79
|
+
if (this.msalService.instance.getAllAccounts().length === 0) {
|
|
80
|
+
window.location.pathname = "/";
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
this.msalBroadcastService.inProgress$
|
|
86
|
+
.pipe(filter((status) => status === InteractionStatus.Startup ||
|
|
87
|
+
status === InteractionStatus.None), takeUntil(this.msalDestroying$))
|
|
88
|
+
.subscribe((status) => {
|
|
89
|
+
switch (status) {
|
|
90
|
+
/**
|
|
91
|
+
* Initial status before interaction occurs
|
|
92
|
+
*/
|
|
93
|
+
case InteractionStatus.Startup:
|
|
94
|
+
console.log(`msal.app: InteractionStatus.Startup`);
|
|
95
|
+
break;
|
|
96
|
+
/**
|
|
97
|
+
* Status set when interaction is complete
|
|
98
|
+
*/
|
|
99
|
+
case InteractionStatus.None:
|
|
100
|
+
console.log(`msal.app: InteractionStatus.None`);
|
|
101
|
+
MSALRedirect.handle(this.router, 'msalBroadcastService.inProgress$ InteractionStatus.None');
|
|
102
|
+
this.checkAndSetActiveAccount();
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
getActiveAccount() {
|
|
108
|
+
this.checkAndSetActiveAccount();
|
|
109
|
+
return this.msalService.instance.getActiveAccount();
|
|
110
|
+
}
|
|
111
|
+
checkAndSetActiveAccount() {
|
|
112
|
+
let activeAccount = this.msalService.instance.getActiveAccount();
|
|
113
|
+
let accounts = this.msalService.instance.getAllAccounts();
|
|
114
|
+
if (!activeAccount && accounts.length > 0) {
|
|
115
|
+
this.msalService.instance.setActiveAccount(accounts[0]);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
isPopup(popup) {
|
|
119
|
+
if (typeof popup === "undefined") {
|
|
120
|
+
return this.msalGuardConfig.interactionType === InteractionType.Popup;
|
|
121
|
+
}
|
|
122
|
+
return popup;
|
|
123
|
+
}
|
|
124
|
+
acquireToken() {
|
|
125
|
+
let request = {
|
|
126
|
+
scopes: MSALApiConfig.scopes
|
|
127
|
+
};
|
|
128
|
+
if (this.isPopup()) {
|
|
129
|
+
return this.msalService.acquireTokenPopup(request).pipe(map(response => {
|
|
130
|
+
return response ? response.accessToken : null;
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return this.msalService.acquireTokenRedirect(request).pipe(map(() => {
|
|
135
|
+
return null;
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
getUserEmail() {
|
|
140
|
+
let currentUser = this.appContext.currentUser;
|
|
141
|
+
let activeAccount = this.getActiveAccount();
|
|
142
|
+
if (activeAccount) {
|
|
143
|
+
return activeAccount.username;
|
|
144
|
+
}
|
|
145
|
+
return currentUser ? currentUser.Email : '';
|
|
146
|
+
}
|
|
147
|
+
getUserName() {
|
|
148
|
+
let currentUser = this.appContext.currentUser;
|
|
149
|
+
let activeAccount = this.getActiveAccount();
|
|
150
|
+
if (activeAccount) {
|
|
151
|
+
return activeAccount.name ? activeAccount.name : currentUser ? currentUser.displayNameOrFullName : '';
|
|
152
|
+
}
|
|
153
|
+
return currentUser ? currentUser.displayNameOrFullName : '';
|
|
154
|
+
}
|
|
155
|
+
/*
|
|
156
|
+
VadimOS:
|
|
157
|
+
WARNING to all developers! Be sure that you really need to directly call this method!
|
|
158
|
+
*/
|
|
159
|
+
getAccessToken(requestUrl) {
|
|
160
|
+
let activeAccount = this.getActiveAccount();
|
|
161
|
+
let silentRequest = {
|
|
162
|
+
scopes: MSALApiConfig.scopes,
|
|
163
|
+
account: activeAccount
|
|
164
|
+
};
|
|
165
|
+
if (activeAccount) {
|
|
166
|
+
return this.msalService.acquireTokenSilent(silentRequest).pipe(map(response => {
|
|
167
|
+
return response.accessToken;
|
|
168
|
+
}), catchError(error => {
|
|
169
|
+
console.log("Silent token acquisition fails.");
|
|
170
|
+
if (error instanceof InteractionRequiredAuthError) {
|
|
171
|
+
return this.acquireToken();
|
|
172
|
+
}
|
|
173
|
+
return of(null);
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
return this.acquireToken();
|
|
177
|
+
}
|
|
178
|
+
login(popup) {
|
|
179
|
+
let authRequest = this.msalGuardConfig.authRequest;
|
|
180
|
+
if (this.isPopup(popup)) {
|
|
181
|
+
if (authRequest) {
|
|
182
|
+
return this.msalService.loginPopup({ ...authRequest }).pipe(map((response) => {
|
|
183
|
+
this.msalService.instance.setActiveAccount(response.account);
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
return this.msalService.loginPopup().pipe(map((response) => {
|
|
188
|
+
this.msalService.instance.setActiveAccount(response.account);
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
if (authRequest) {
|
|
194
|
+
return this.msalService.loginRedirect({ ...authRequest });
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
return this.msalService.loginRedirect();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
logout(popup) {
|
|
202
|
+
let activeAccount = this.getActiveAccount();
|
|
203
|
+
if (!activeAccount) {
|
|
204
|
+
return of(null);
|
|
205
|
+
}
|
|
206
|
+
if (this.isPopup(popup)) {
|
|
207
|
+
return this.msalService.logoutPopup({ account: activeAccount, mainWindowRedirectUri: "/" }).pipe(map(() => {
|
|
208
|
+
this.appContext.clearWebStorage();
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
return this.msalService.logoutRedirect({ account: activeAccount }).pipe(map(() => {
|
|
213
|
+
this.appContext.clearWebStorage();
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
isUserAuthenticated() {
|
|
218
|
+
return this.msalService.instance.getActiveAccount() != null;
|
|
219
|
+
}
|
|
220
|
+
isUserSignedIn() {
|
|
221
|
+
if (!this.isUserAuthenticated()) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
let currentUser = this.appContext.currentUser;
|
|
225
|
+
return currentUser && currentUser.UserID;
|
|
226
|
+
}
|
|
227
|
+
isUserAdmin() {
|
|
228
|
+
if (!this.isUserSignedIn()) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
let currentUser = this.appContext.currentUser;
|
|
232
|
+
return currentUser && currentUser.isUserAdmin;
|
|
233
|
+
}
|
|
234
|
+
static ɵfac = function AuthService_Factory(t) { return new (t || AuthService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.Router), i0.ɵɵinject(i3.AppContextService), i0.ɵɵinject(MSAL_GUARD_CONFIG), i0.ɵɵinject(i4.MsalService), i0.ɵɵinject(i4.MsalBroadcastService)); };
|
|
235
|
+
static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AuthService, factory: AuthService.ɵfac, providedIn: 'root' });
|
|
236
|
+
}
|
|
237
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthService, [{
|
|
238
|
+
type: Injectable,
|
|
239
|
+
args: [{
|
|
240
|
+
providedIn: 'root'
|
|
241
|
+
}]
|
|
242
|
+
}], function () { return [{ type: i1.HttpClient }, { type: i2.Router }, { type: i3.AppContextService }, { type: undefined, decorators: [{
|
|
243
|
+
type: Inject,
|
|
244
|
+
args: [MSAL_GUARD_CONFIG]
|
|
245
|
+
}] }, { type: i4.MsalService }, { type: i4.MsalBroadcastService }]; }, null); })();
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2lhbS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQTZELE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFtRCxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUVwSSxNQUFNLHFCQUFxQixDQUFDO0FBRTdCLEtBQUs7QUFDTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7QUFLM0MsTUFBTSxPQUFPLFdBQVksU0FBUSxjQUFjO0lBS2pDO0lBQ0Y7SUFDQTtJQUdBO0lBQ0E7SUFDQTtJQVhPLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQy9DLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFFckMsWUFDWSxJQUFnQixFQUNsQixNQUFjLEVBQ2QsVUFBNkIsRUFHN0IsZUFBdUMsRUFDdkMsV0FBd0IsRUFDeEIsb0JBQTBDO1FBQ2xELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQVJGLFNBQUksR0FBSixJQUFJLENBQVk7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRzdCLG9CQUFlLEdBQWYsZUFBZSxD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OUMsT0FBTyxXQUFXLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUNoRCxDQUFDO3FFQWhSVSxXQUFXLHFHQVNaLGlCQUFpQjtnRUFUaEIsV0FBVyxXQUFYLFdBQVcsbUJBRlYsTUFBTTs7dUZBRVAsV0FBVztjQUh2QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7O3NCQVVJLE1BQU07dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDYgRGVjIDIwMThcclxuXHJcbiAgRGVzY3JpcHRpb246XHJcbiAgICBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG9mLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTVNBTF9HVUFSRF9DT05GSUcsIE1zYWxCcm9hZGNhc3RTZXJ2aWNlLCBNc2FsR3VhcmRDb25maWd1cmF0aW9uLCBNc2FsU2VydmljZSB9IGZyb20gJ0BhenVyZS9tc2FsLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBBY2NvdW50SW5mbywgQXV0aGVudGljYXRpb25SZXN1bHQsIEV2ZW50TWVzc2FnZSwgRXZlbnRUeXBlLCBJbnRlcmFjdGlvblJlcXVpcmVkQXV0aEVycm9yLCBJbnRlcmFjdGlvblN0YXR1cywgSW50ZXJhY3Rpb25UeXBlLCBQb3B1cFJlcXVlc3QsXHJcbiAgUmVkaXJlY3RSZXF1ZXN0LCBTaWxlbnRSZXF1ZXN0XHJcbn0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlQmFzZSB9IGZyb20gJy4uLy4uL2RhdGEvYmFzZS9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9hcHBjb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNU0FMQXBpQ29uZmlnIH0gZnJvbSAnLi4vY29uc3RzJztcclxuaW1wb3J0IHsgTVNBTFJlZGlyZWN0IH0gZnJvbSAnLi4vcmVkaXJlY3QnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgZXh0ZW5kcyBBcGlTZXJ2aWNlQmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBtc2FsRGVzdHJveWluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFwcENvbnRleHQ6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG5cclxuICAgIEBJbmplY3QoTVNBTF9HVUFSRF9DT05GSUcpXHJcbiAgICBwcml2YXRlIG1zYWxHdWFyZENvbmZpZzogTXNhbEd1YXJkQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtc2FsQnJvYWRjYXN0U2VydmljZTogTXNhbEJyb2FkY2FzdFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGh0dHApO1xyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubXNhbERlc3Ryb3lpbmckLm5leHQodW5kZWZpbmVkKTtcclxuICAgIHRoaXMubXNhbERlc3Ryb3lpbmckLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQoKSB7XHJcbiAgICB0aGlzLnNldERlZmF1bHRzKCk7XHJcblxyXG4gICAgdGhpcy5tc2FsU2VydmljZS5pbml0aWFsaXplKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGluaXRNU0FMIHN0YXJ0ZWRgKTtcclxuICAgICAgdGhpcy5pbml0TVNBTCgpO1xyXG4gICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IGluaXRNU0FMIGZpbmlzaGVkYCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGVmYXVsdHMoKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRNU0FMKCkge1xyXG4gICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5lbmFibGVBY2NvdW50U3RvcmFnZUV2ZW50cygpO1xyXG4gICAgdGhpcy5tc2FsU2VydmljZS5oYW5kbGVSZWRpcmVjdE9ic2VydmFibGUoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzdWx0OiBBdXRoZW50aWNhdGlvblJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBtc2FsLmFwcDogaGFuZGxlUmVkaXJlY3RPYnNlcnZhYmxlYCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UubXNhbFN1YmplY3QkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigobXNnOiBFdmVudE1lc3NhZ2UpID0+XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuSU5JVElBTElaRV9FTkQgfHxcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5BQ0NPVU5UX0FEREVEIHx8XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuQUNDT1VOVF9SRU1PVkVEIHx8XHJcbiAgICAgICAgICBtc2cuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTE9HSU5fU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkxPR0lOX0ZBSUxVUkUgfHxcclxuICAgICAgICAgIG1zZy5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5MT0dPVVRfU1VDQ0VTUyB8fFxyXG4gICAgICAgICAgbXNnLmV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkxPR09VVF9GQUlMVVJFXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5tc2FsRGVzdHJveWluZyQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgobXNnOiBFdmVudE1lc3NhZ2UpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKG1zZy5ldmVudFR5cGUpIHtcclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLklOSVRJQUxJWkVfRU5EOlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IElOSVRJQUxJWkVfRU5EIGZpcmVkYCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkFDQ09VTlRfQURERUQ6XHJcbiAgICAgICAgICBjYXNlIEV2ZW50VHlwZS5MT0dJTl9TVUNDRVNTOlxyXG4gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IG1zZy5wYXlsb2FkIGFzIEF1dGhlbnRpY2F0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgICBpZiAocGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2Uuc2V0QWN0aXZlQWNjb3VudChwYXlsb2FkLmFjY291bnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLkFDQ09VTlRfUkVNT1ZFRDpcclxuICAgICAgICAgICAgaWYgKHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgPSBcIi9cIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMubXNhbEJyb2FkY2FzdFNlcnZpY2UuaW5Qcm9ncmVzcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PlxyXG4gICAgICAgICAgc3RhdHVzID09PSBJbnRlcmFjdGlvblN0YXR1cy5TdGFydHVwIHx8XHJcbiAgICAgICAgICBzdGF0dXMgPT09IEludGVyYWN0aW9uU3RhdHVzLk5vbmVcclxuICAgICAgICApLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm1zYWxEZXN0cm95aW5nJClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChzdGF0dXM6IEludGVyYWN0aW9uU3RhdHVzKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogSW5pdGlhbCBzdGF0dXMgYmVmb3JlIGludGVyYWN0aW9uIG9jY3Vyc1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICBjYXNlIEludGVyYWN0aW9uU3RhdHVzLlN0YXJ0dXA6XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBtc2FsLmFwcDogSW50ZXJhY3Rpb25TdGF0dXMuU3RhcnR1cGApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICogU3RhdHVzIHNldCB3aGVuIGludGVyYWN0aW9uIGlzIGNvbXBsZXRlXHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgICAgY2FzZSBJbnRlcmFjdGlvblN0YXR1cy5Ob25lOlxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbXNhbC5hcHA6IEludGVyYWN0aW9uU3RhdHVzLk5vbmVgKTtcclxuXHJcbiAgICAgICAgICAgIE1TQUxSZWRpcmVjdC5oYW5kbGUodGhpcy5yb3V0ZXIsICdtc2FsQnJvYWRjYXN0U2VydmljZS5pblByb2dyZXNzJCBJbnRlcmFjdGlvblN0YXR1cy5Ob25lJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRTZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFjdGl2ZUFjY291bnQoKTogQWNjb3VudEluZm8gfCBudWxsIHtcclxuICAgIHRoaXMuY2hlY2tBbmRTZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrQW5kU2V0QWN0aXZlQWNjb3VudCgpIHtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICBsZXQgYWNjb3VudHMgPSB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKCk7XHJcblxyXG4gICAgaWYgKCFhY3RpdmVBY2NvdW50ICYmIGFjY291bnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5zZXRBY3RpdmVBY2NvdW50KGFjY291bnRzWzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNQb3B1cChwb3B1cD86IGJvb2xlYW4pIHtcclxuICAgIGlmICh0eXBlb2YgcG9wdXAgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbEd1YXJkQ29uZmlnLmludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLlBvcHVwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwb3B1cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWNxdWlyZVRva2VuKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBsZXQgcmVxdWVzdCA9IHtcclxuICAgICAgc2NvcGVzOiBNU0FMQXBpQ29uZmlnLnNjb3Blc1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUG9wdXAoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5hY3F1aXJlVG9rZW5Qb3B1cChyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UgPyByZXNwb25zZS5hY2Nlc3NUb2tlbiA6IG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5hY3F1aXJlVG9rZW5SZWRpcmVjdChyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckVtYWlsKCkge1xyXG4gICAgbGV0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBDb250ZXh0LmN1cnJlbnRVc2VyO1xyXG4gICAgbGV0IGFjdGl2ZUFjY291bnQgPSB0aGlzLmdldEFjdGl2ZUFjY291bnQoKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICByZXR1cm4gYWN0aXZlQWNjb3VudC51c2VybmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudFVzZXIgPyBjdXJyZW50VXNlci5FbWFpbCA6ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlck5hbWUoKSB7XHJcbiAgICBsZXQgY3VycmVudFVzZXIgPSB0aGlzLmFwcENvbnRleHQuY3VycmVudFVzZXI7XHJcbiAgICBsZXQgYWN0aXZlQWNjb3VudCA9IHRoaXMuZ2V0QWN0aXZlQWNjb3VudCgpO1xyXG5cclxuICAgIGlmIChhY3RpdmVBY2NvdW50KSB7XHJcbiAgICAgIHJldHVybiBhY3RpdmVBY2NvdW50Lm5hbWUgPyBhY3RpdmVBY2NvdW50Lm5hbWUgOiBjdXJyZW50VXNlciA/IGN1cnJlbnRVc2VyLmRpc3BsYXlOYW1lT3JGdWxsTmFtZSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50VXNlciA/IGN1cnJlbnRVc2VyLmRpc3BsYXlOYW1lT3JGdWxsTmFtZSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIFZhZGltT1M6XHJcbiAgICBXQVJOSU5HIHRvIGFsbCBkZXZlbG9wZXJzISBCZSBzdXJlIHRoYXQgeW91IHJlYWxseSBuZWVkIHRvIGRpcmVjdGx5IGNhbGwgdGhpcyBtZXRob2QhXHJcbiAgKi9cclxuICBnZXRBY2Nlc3NUb2tlbihyZXF1ZXN0VXJsPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICBsZXQgc2lsZW50UmVxdWVzdDogU2lsZW50UmVxdWVzdCA9IHtcclxuICAgICAgc2NvcGVzOiBNU0FMQXBpQ29uZmlnLnNjb3BlcyxcclxuICAgICAgYWNjb3VudDogYWN0aXZlQWNjb3VudFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoYWN0aXZlQWNjb3VudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5hY3F1aXJlVG9rZW5TaWxlbnQoc2lsZW50UmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJTaWxlbnQgdG9rZW4gYWNxdWlzaXRpb24gZmFpbHMuXCIpO1xyXG5cclxuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEludGVyYWN0aW9uUmVxdWlyZWRBdXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYWNxdWlyZVRva2VuKCk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihwb3B1cD86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IGF1dGhSZXF1ZXN0ID0gdGhpcy5tc2FsR3VhcmRDb25maWcuYXV0aFJlcXVlc3Q7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNQb3B1cChwb3B1cCkpIHtcclxuICAgICAgaWYgKGF1dGhSZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UubG9naW5Qb3B1cCh7IC4uLmF1dGhSZXF1ZXN0IH0gYXMgUG9wdXBSZXF1ZXN0KS5waXBlKG1hcCgocmVzcG9uc2U6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocmVzcG9uc2UuYWNjb3VudCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1zYWxTZXJ2aWNlLmxvZ2luUG9wdXAoKS5waXBlKG1hcCgocmVzcG9uc2U6IEF1dGhlbnRpY2F0aW9uUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLnNldEFjdGl2ZUFjY291bnQocmVzcG9uc2UuYWNjb3VudCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKGF1dGhSZXF1ZXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UubG9naW5SZWRpcmVjdCh7IC4uLmF1dGhSZXF1ZXN0IH0gYXMgUmVkaXJlY3RSZXF1ZXN0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5sb2dpblJlZGlyZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ291dChwb3B1cD86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIGxldCBhY3RpdmVBY2NvdW50ID0gdGhpcy5nZXRBY3RpdmVBY2NvdW50KCk7XHJcbiAgICBpZiAoIWFjdGl2ZUFjY291bnQpIHtcclxuICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzUG9wdXAocG9wdXApKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFBvcHVwKHsgYWNjb3VudDogYWN0aXZlQWNjb3VudCwgbWFpbldpbmRvd1JlZGlyZWN0VXJpOiBcIi9cIiB9KS5waXBlKG1hcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0LmNsZWFyV2ViU3RvcmFnZSgpO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UmVkaXJlY3QoeyBhY2NvdW50OiBhY3RpdmVBY2NvdW50IH0pLnBpcGUobWFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQuY2xlYXJXZWJTdG9yYWdlKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBY3RpdmVBY2NvdW50KCkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIGlzVXNlclNpZ25lZEluKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlckF1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBDb250ZXh0LmN1cnJlbnRVc2VyO1xyXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyICYmIGN1cnJlbnRVc2VyLlVzZXJJRDtcclxuICB9XHJcblxyXG4gIGlzVXNlckFkbWluKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlclNpZ25lZEluKCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50VXNlcjtcclxuICAgIHJldHVybiBjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5pc1VzZXJBZG1pbjtcclxuICB9XHJcbn1cclxuIl19
|