@osovitny/anatoly 3.16.16 → 3.16.17

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.
Files changed (46) hide show
  1. package/esm2022/lib/anatoly.module.mjs +15 -1
  2. package/esm2022/lib/core/services/appcontext.service.mjs +14 -2
  3. package/esm2022/lib/core/services/starter.service.mjs +9 -4
  4. package/esm2022/lib/iam/b2c/b2c.mjs +43 -0
  5. package/esm2022/lib/iam/b2c/consts.mjs +25 -0
  6. package/esm2022/lib/iam/b2c/index.mjs +21 -0
  7. package/esm2022/lib/iam/configs.mjs +107 -0
  8. package/esm2022/lib/iam/consts.mjs +23 -0
  9. package/esm2022/lib/iam/guards/admin.guard.mjs +47 -0
  10. package/esm2022/lib/iam/guards/authentication.guard.mjs +31 -0
  11. package/esm2022/lib/iam/guards/index.mjs +20 -0
  12. package/esm2022/lib/iam/iam-pages.module.mjs +54 -0
  13. package/esm2022/lib/iam/iam-pages.routes.mjs +45 -0
  14. package/esm2022/lib/iam/iam.module.mjs +100 -0
  15. package/esm2022/lib/iam/index.mjs +18 -0
  16. package/esm2022/lib/iam/pages/signin.page.mjs +40 -0
  17. package/esm2022/lib/iam/pages/signout.page.mjs +40 -0
  18. package/esm2022/lib/iam/pages/signup.page.mjs +39 -0
  19. package/esm2022/lib/iam/redirect.mjs +29 -0
  20. package/esm2022/lib/iam/services/auth.service.mjs +246 -0
  21. package/esm2022/lib/iam/storage.mjs +39 -0
  22. package/esm2022/public-api.mjs +5 -1
  23. package/fesm2022/osovitny-anatoly.mjs +934 -7
  24. package/fesm2022/osovitny-anatoly.mjs.map +1 -1
  25. package/lib/anatoly.module.d.ts +4 -2
  26. package/lib/core/services/appcontext.service.d.ts +2 -0
  27. package/lib/iam/b2c/b2c.d.ts +5 -0
  28. package/lib/iam/b2c/consts.d.ts +6 -0
  29. package/lib/iam/b2c/index.d.ts +2 -0
  30. package/lib/iam/configs.d.ts +5 -0
  31. package/lib/iam/consts.d.ts +3 -0
  32. package/lib/iam/guards/admin.guard.d.ts +13 -0
  33. package/lib/iam/guards/authentication.guard.d.ts +13 -0
  34. package/lib/iam/guards/index.d.ts +2 -0
  35. package/lib/iam/iam-pages.module.d.ts +12 -0
  36. package/lib/iam/iam-pages.routes.d.ts +6 -0
  37. package/lib/iam/iam.module.d.ts +9 -0
  38. package/lib/iam/index.d.ts +1 -0
  39. package/lib/iam/pages/signin.page.d.ts +11 -0
  40. package/lib/iam/pages/signout.page.d.ts +11 -0
  41. package/lib/iam/pages/signup.page.d.ts +11 -0
  42. package/lib/iam/redirect.d.ts +3 -0
  43. package/lib/iam/services/auth.service.d.ts +37 -0
  44. package/lib/iam/storage.d.ts +8 -0
  45. package/package.json +1 -1
  46. 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