@odx/auth 7.0.0 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +16 -10
- package/esm2022/index.mjs +2 -1
- package/esm2022/lib/auth.component.mjs +2 -2
- package/esm2022/lib/auth.config.mjs +6 -23
- package/esm2022/lib/auth.guard.mjs +10 -3
- package/esm2022/lib/auth.i18n.mjs +1 -1
- package/esm2022/lib/auth.interceptor.mjs +15 -0
- package/esm2022/lib/auth.logger.mjs +3 -0
- package/esm2022/lib/auth.providers.mjs +53 -36
- package/esm2022/lib/auth.service.mjs +29 -17
- package/esm2022/lib/auth.typings.mjs +1 -1
- package/esm2022/lib/components/auth-actions/auth-actions.component.mjs +2 -2
- package/esm2022/lib/components/auth-loading-screen/auth-loading-screen.component.mjs +6 -6
- package/esm2022/lib/helpers/create-auth-host-url.mjs +6 -0
- package/esm2022/lib/helpers/index.mjs +4 -1
- package/esm2022/lib/helpers/set-http-auth-header.mjs +13 -0
- package/esm2022/lib/helpers/user-language-loader.mjs +10 -0
- package/esm2022/lib/models/auth-environment.mjs +3 -2
- package/esm2022/lib/models/auth-http-cache.mjs +19 -23
- package/esm2022/lib/models/auth-plugin-manager.mjs +14 -9
- package/esm2022/lib/plugins/core-debug.plugin.mjs +20 -0
- package/esm2022/lib/plugins/index.mjs +2 -1
- package/esm2022/lib/plugins/user-profile-link.plugin.mjs +3 -3
- package/esm2022/lib/unauth.guard.mjs +10 -3
- package/esm2022/plugins/service-connect/index.mjs +2 -2
- package/esm2022/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.mjs +2 -0
- package/esm2022/plugins/service-connect/lib/dtos/index.mjs +2 -1
- package/esm2022/plugins/service-connect/lib/service-connect-rights.guard.mjs +3 -3
- package/esm2022/plugins/service-connect/lib/service-connect-rights.plugin.mjs +1 -2
- package/esm2022/plugins/service-connect/lib/service-connect-user-language.plugin.mjs +8 -0
- package/esm2022/plugins/service-connect/lib/service-connect.config.mjs +6 -4
- package/fesm2022/odx-auth-plugins-service-connect.mjs +15 -9
- package/fesm2022/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2022/odx-auth.mjs +311 -243
- package/fesm2022/odx-auth.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/auth.config.d.ts +11 -10
- package/lib/auth.guard.d.ts +1 -1
- package/lib/auth.i18n.d.ts +2 -2
- package/lib/auth.interceptor.d.ts +2 -0
- package/lib/auth.logger.d.ts +3 -0
- package/lib/auth.providers.d.ts +7 -4
- package/lib/auth.service.d.ts +6 -2
- package/lib/auth.typings.d.ts +1 -1
- package/lib/helpers/create-auth-host-url.d.ts +2 -0
- package/lib/helpers/index.d.ts +3 -0
- package/lib/helpers/set-http-auth-header.d.ts +2 -0
- package/lib/helpers/user-language-loader.d.ts +4 -0
- package/lib/models/auth-environment.d.ts +6 -1
- package/lib/models/auth-http-cache.d.ts +3 -1
- package/lib/models/auth-plugin-manager.d.ts +2 -0
- package/lib/plugins/core-debug.plugin.d.ts +2 -0
- package/lib/plugins/index.d.ts +1 -0
- package/lib/unauth.guard.d.ts +1 -1
- package/package.json +2 -2
- package/plugins/service-connect/index.d.ts +1 -1
- package/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.d.ts +3 -0
- package/plugins/service-connect/lib/dtos/index.d.ts +1 -0
- package/plugins/service-connect/lib/service-connect-rights.guard.d.ts +1 -1
- package/plugins/service-connect/lib/service-connect-rights.plugin.d.ts +8 -1
- package/plugins/service-connect/lib/service-connect-user-language.plugin.d.ts +1 -0
- package/plugins/service-connect/lib/service-connect.config.d.ts +1 -0
- package/esm2022/plugins/service-connect/lib/service-connect.typings.mjs +0 -2
- package/plugins/service-connect/lib/service-connect.typings.d.ts +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# @odx/auth
|
|
2
2
|
|
|
3
|
+
## 8.0.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c618486: Fixed z-layer stacking issues
|
|
8
|
+
|
|
9
|
+
Fixed over position calculation by using CSS variables
|
|
10
|
+
|
|
11
|
+
WithTabIndex directive now applies tabindex correctly
|
|
12
|
+
|
|
13
|
+
Fixed various linting errors
|
|
14
|
+
|
|
15
|
+
- a62275c: Reduce buffer size of used `shareReplay` operators in order to reduce runtime memory consumption
|
|
16
|
+
|
|
17
|
+
## 8.0.0
|
|
18
|
+
|
|
19
|
+
### Minor Changes
|
|
20
|
+
|
|
21
|
+
- 106b206: Add ability for guards to redirect to external URL
|
|
22
|
+
|
|
23
|
+
Add `userLanguageLoader` to load the active language from identity claims
|
|
24
|
+
|
|
25
|
+
Add new config option to enable debug information
|
|
26
|
+
|
|
27
|
+
Add new config option to enforce sign in for requests made to a protected URL
|
|
28
|
+
|
|
29
|
+
Add new config option to configure a global auth plugin timeout
|
|
30
|
+
|
|
31
|
+
Add new config option to set the time the intercetpor waits for an access token in milliseconds
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- a553e2c: Replace the external library intercetor with own interceptor implementation to ensure a valid access token is send
|
|
36
|
+
- Updated dependencies [fe51ce2]
|
|
37
|
+
- Updated dependencies [3d72124]
|
|
38
|
+
- @odx/angular@5.0.0
|
|
39
|
+
|
|
3
40
|
## 7.0.0
|
|
4
41
|
|
|
5
42
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @odx/auth
|
|
2
2
|
|
|
3
|
-
[<img src="https://img.shields.io/npm/v/@odx/
|
|
3
|
+
[<img src="https://img.shields.io/npm/v/@odx/auth" />](https://npmjs.org/package/@odx/auth)
|
|
4
4
|
[<img src="https://img.shields.io/npm/dependency-version/@odx/auth/peer/@odx/angular" />](https://npmjs.org/package/@odx/angular)
|
|
5
5
|
|
|
6
6
|
### Install 🚀
|
|
@@ -41,24 +41,30 @@ The configuration object has the following interface:
|
|
|
41
41
|
interface AuthConfig {
|
|
42
42
|
environment: AuthEnvironment;
|
|
43
43
|
clientId: string;
|
|
44
|
-
issuer
|
|
44
|
+
issuer?: string;
|
|
45
45
|
redirectPath: string;
|
|
46
46
|
allowedUrls: Array<string | RegExp>;
|
|
47
47
|
timeoutFactor: number;
|
|
48
48
|
maxOfflineTime: number;
|
|
49
49
|
loadUserProfile: boolean;
|
|
50
|
-
postLogoutRedirectUrl
|
|
51
|
-
scopes
|
|
52
|
-
discoveryUrl
|
|
50
|
+
postLogoutRedirectUrl?: string;
|
|
51
|
+
scopes?: string[];
|
|
52
|
+
discoveryUrl?: string;
|
|
53
53
|
errorHandler: AuthErrorHandlerFn;
|
|
54
54
|
createInitials: CreateInitialsFn;
|
|
55
55
|
resolveEmail: ResolveEmailFn;
|
|
56
56
|
resolveUsername: ResolveUsernameFn;
|
|
57
|
-
storage
|
|
57
|
+
storage?: OAuthStorage;
|
|
58
58
|
plugins: AuthPluginFactory[];
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
defaultAuthorizedHandler?: AuthorizedHandler | null;
|
|
60
|
+
enableLoadingScreen: boolean;
|
|
61
|
+
refreshTokenOnInit?: boolean;
|
|
62
|
+
loadingScreenMessage?: DynamicTextContent | null;
|
|
63
|
+
userProfileUrl?: string;
|
|
64
|
+
requireSignIn?: boolean;
|
|
65
|
+
requireSignInForRequests?: boolean;
|
|
66
|
+
waitForTokenInMs?: number;
|
|
67
|
+
showDebugInformation?: boolean;
|
|
62
68
|
}
|
|
63
69
|
```
|
|
64
70
|
|
|
@@ -72,4 +78,4 @@ In order to add the UI for signing in and out, add the `odx-auth` component to t
|
|
|
72
78
|
</odx-header>
|
|
73
79
|
```
|
|
74
80
|
|
|
75
|
-
> Use the `
|
|
81
|
+
> Use the `LocalizationService.setLanguage` method from **`@odx/angular/localization`** to change the language.
|
package/esm2022/index.mjs
CHANGED
|
@@ -2,6 +2,7 @@ export * from './lib/auth.component';
|
|
|
2
2
|
export * from './lib/auth.config';
|
|
3
3
|
export * from './lib/auth.directive';
|
|
4
4
|
export * from './lib/auth.guard';
|
|
5
|
+
export * from './lib/auth.interceptor';
|
|
5
6
|
export * from './lib/auth.module';
|
|
6
7
|
export * from './lib/auth.providers';
|
|
7
8
|
export * from './lib/auth.service';
|
|
@@ -12,4 +13,4 @@ export * from './lib/helpers';
|
|
|
12
13
|
export * from './lib/models';
|
|
13
14
|
export * from './lib/plugins';
|
|
14
15
|
export * from './lib/unauth.guard';
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLmludGVyY2VwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgucHJvdmlkZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnR5cGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BsdWdpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdW5hdXRoLmd1YXJkJztcbiJdfQ==
|
|
@@ -32,7 +32,7 @@ export class AuthComponent {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AuthComponent, isStandalone: true, selector: "odx-auth", providers: [provideTranslations(translations)], ngImport: i0, template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <odx-auth-actions [claims]=\"vm.idClaims\"></odx-auth-actions>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ 'signOutButtonText' | odxTranslate | async }}\n <odx-icon name=\"logout\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}.odx-auth-actions{display:block;margin-top:calc(var(--odx-vertical-rythm-base-size) * .5);margin-bottom:calc(var(--odx-vertical-rythm-base-size) * .5);margin-right:calc(var(--odx-vertical-rythm-base-size) * .25);margin-left:calc(var(--odx-vertical-rythm-base-size) * .25)}\n"], dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: AreaHeaderModule }, { kind: "component", type: i3.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i3.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i4.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i5.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i7.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i8.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "directive", type: SignInDirective, selector: "[odxButton][odxAuthSignIn]", outputs: ["odxAuthSignIn"] }, { kind: "directive", type: SignOutDirective, selector: "[odxButton][odxAuthSignOut]", outputs: ["odxAuthSignOut"] }, { kind: "ngmodule", type: LoadingSpinnerModule }, { kind: "component", type: AuthActionsComponent, selector: "odx-auth-actions", inputs: ["claims"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
35
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AuthComponent, isStandalone: true, selector: "odx-auth", providers: [provideTranslations(translations)], ngImport: i0, template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <odx-auth-actions [claims]=\"vm.idClaims\"></odx-auth-actions>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ 'signOutButtonText' | odxTranslate | async }}\n <odx-icon name=\"logout\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}.odx-auth-actions{display:block;margin-top:calc(var(--odx-vertical-rythm-base-size) * .5);margin-bottom:calc(var(--odx-vertical-rythm-base-size) * .5);margin-right:calc(var(--odx-vertical-rythm-base-size) * .25);margin-left:calc(var(--odx-vertical-rythm-base-size) * .25)}\n"], dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: AreaHeaderModule }, { kind: "component", type: i3.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i3.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i4.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i5.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i7.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i8.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "directive", type: SignInDirective, selector: "[odxButton][odxAuthSignIn]", outputs: ["odxAuthSignIn"] }, { kind: "directive", type: SignOutDirective, selector: "[odxButton][odxAuthSignOut]", outputs: ["odxAuthSignOut"] }, { kind: "ngmodule", type: LoadingSpinnerModule }, { kind: "component", type: AuthActionsComponent, selector: "odx-auth-actions", inputs: ["claims"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
36
36
|
}
|
|
37
37
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthComponent, decorators: [{
|
|
38
38
|
type: Component,
|
|
@@ -49,4 +49,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
49
49
|
TranslatePipe,
|
|
50
50
|
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [provideTranslations(translations)], template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <odx-auth-actions [claims]=\"vm.idClaims\"></odx-auth-actions>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ 'signOutButtonText' | odxTranslate | async }}\n <odx-icon name=\"logout\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}.odx-auth-actions{display:block;margin-top:calc(var(--odx-vertical-rythm-base-size) * .5);margin-bottom:calc(var(--odx-vertical-rythm-base-size) * .5);margin-right:calc(var(--odx-vertical-rythm-base-size) * .25);margin-left:calc(var(--odx-vertical-rythm-base-size) * .25)}\n"] }]
|
|
51
51
|
}] });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFtQixNQUFNLGtDQUFrQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxZQUFZLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQXVCakUsTUFBTSxPQUFPLGFBQWE7SUFyQjFCO1FBc0JxQixlQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxvQkFBZSxHQUFHO1lBQ25DLFFBQVEsRUFBRSxRQUFRLENBQUMsVUFBVTtZQUM3QixjQUFjLEVBQUUsS0FBSztZQUNyQixjQUFjLEVBQUUsdUJBQXVCO1NBQ1osQ0FBQztLQUMvQjsrR0FSWSxhQUFhO21HQUFiLGFBQWEsdURBRmIsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQywwQkNsQ2hELGc3REFzQ0Esa2JEbkJJLFVBQVUsOGNBQ1YsZ0JBQWdCLGlyQkFDaEIsY0FBYywwZkFDZCxZQUFZLCtCQUNaLGFBQWEsa0ZBQ2IsZUFBZSxtR0FDZixnQkFBZ0Isb0dBQ2hCLG9CQUFvQiwrQkFDcEIsb0JBQW9CLDRFQUNwQixhQUFhOzs0RkFRSixhQUFhO2tCQXJCekIsU0FBUztpQ0FDSSxJQUFJLFlBQ04sVUFBVSxXQUNYO3dCQUNQLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixvQkFBb0I7d0JBQ3BCLGFBQWE7cUJBQ2QsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQXJlYUhlYWRlck1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FyZWEtaGVhZGVyJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlLCBEcm9wZG93bk9wdGlvbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBIZWFkZXJNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9oZWFkZXInO1xuaW1wb3J0IHsgTG9hZGluZ1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IHsgTG9nb0RpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xvZ28nO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbGF0aW9ucywgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbC90cmFuc2xhdGUnO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgaW5qZWN0QXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL2F1dGguaTE4bic7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhBY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IFNpZ25JbkRpcmVjdGl2ZSwgU2lnbk91dERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ29keC1hdXRoJyxcbiAgaW1wb3J0czogW1xuICAgIENvcmVNb2R1bGUsXG4gICAgQXJlYUhlYWRlck1vZHVsZSxcbiAgICBEcm9wZG93bk1vZHVsZSxcbiAgICBIZWFkZXJNb2R1bGUsXG4gICAgTG9nb0RpcmVjdGl2ZSxcbiAgICBTaWduSW5EaXJlY3RpdmUsXG4gICAgU2lnbk91dERpcmVjdGl2ZSxcbiAgICBMb2FkaW5nU3Bpbm5lck1vZHVsZSxcbiAgICBBdXRoQWN0aW9uc0NvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F1dGguY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKV0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aENvbmZpZyA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyb3Bkb3duT3B0aW9ucyA9IHtcbiAgICBwb3NpdGlvbjogUG9zaXRpb24uQk9UVE9NX0VORCxcbiAgICBlbmFibGVGYWxsYmFjazogZmFsc2UsXG4gICAgY29udGFpbmVyQ2xhc3M6ICdvZHgtYXV0aC11c2VyLXByb2ZpbGUnLFxuICB9IGFzIFBhcnRpYWw8RHJvcGRvd25PcHRpb25zPjtcbn1cbiIsIjxvZHgtYWN0aW9uLWdyb3VwPlxuICA8bmctdGVtcGxhdGUgW25ncnhMZXRdPVwieyBpZENsYWltczogYXV0aFNlcnZpY2UuaWRlbnRpdHlDbGFpbXMkLCBpc0F1dGhlbnRpY2F0ZWQ6IGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQgfVwiIGxldC12bT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidm0uaXNBdXRoZW50aWNhdGVkXCIgW25nSWZFbHNlXT1cIm5vdEF1dGhlbnRpY2F0ZWRcIj5cbiAgICAgIDxidXR0b24gb2R4QnV0dG9uIFtvZHhEcm9wZG93bl09XCJ1c2VyUHJvZmlsZU1lbnVcIiBbb2R4RHJvcGRvd25PcHRpb25zXT1cImRyb3Bkb3duT3B0aW9uc1wiIGRhdGEtdGVzdGlkPVwib2R4LWF1dGgtdXNlci1wcm9maWxlLWJ1dHRvblwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidXNlckF2YXRhclwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXNlclByb2ZpbGVNZW51PlxuICAgICAgICA8b2R4LWFyZWEtaGVhZGVyIGNsYXNzPVwib2R4LXBhZGRpbmcteC0xMlwiIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ1c2VyQXZhdGFyXCIgbmdQcm9qZWN0QXM9XCJvZHgtYXZhdGFyXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICB7eyB2bS5pZENsYWltcz8udXNlcm5hbWUgfX1cbiAgICAgICAgICA8b2R4LWFyZWEtaGVhZGVyLXN1YnRpdGxlPlxuICAgICAgICAgICAge3sgdm0uaWRDbGFpbXM/LmVtYWlsIH19XG4gICAgICAgICAgPC9vZHgtYXJlYS1oZWFkZXItc3VidGl0bGU+XG4gICAgICAgIDwvb2R4LWFyZWEtaGVhZGVyPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxvZHgtYXV0aC1hY3Rpb25zIFtjbGFpbXNdPVwidm0uaWRDbGFpbXNcIj48L29keC1hdXRoLWFjdGlvbnM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvZHgtbWFyZ2luLXRvcC0xMlwiIG9keExheW91dD1cImZsZXggdmVydGljYWwtY2VudGVyXCI+XG4gICAgICAgICAgPG9keC1sb2dvIG9keExheW91dD1cImF1dG9cIiBjbGFzcz1cIm9keC1tYXJnaW4tbGVmdC0xMiBvZHgtbWFyZ2luLXJpZ2h0LWF1dG9cIj48L29keC1sb2dvPlxuICAgICAgICAgIDxidXR0b24gb2R4QnV0dG9uIG9keEF1dGhTaWduT3V0IHZhcmlhbnQ9XCJnaG9zdFwiIGRhdGEtdGVzdGlkPVwib2R4LWF1dGgtc2lnbi1vdXQtYnV0dG9uXCI+XG4gICAgICAgICAgICB7eyAnc2lnbk91dEJ1dHRvblRleHQnIHwgb2R4VHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDxvZHgtaWNvbiBuYW1lPVwibG9nb3V0XCIgYWxpZ25SaWdodD48L29keC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI25vdEF1dGhlbnRpY2F0ZWQ+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwib2R4LWF1dGgtc2lnbi1pblwiIG9keEJ1dHRvbiBvZHhBdXRoU2lnbkluIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBkYXRhLXRlc3RpZD1cIm9keC1hdXRoLXNpZ24taW4tYnV0dG9uXCI+XG4gICAgICAgIDxvZHgtaWNvbiBuYW1lPVwidXNlclwiIGFsaWduTGVmdD48L29keC1pY29uPlxuICAgICAgICB7eyAnc2lnbkluQnV0dG9uVGV4dCcgfCBvZHhUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI3VzZXJBdmF0YXI+XG4gICAgICA8b2R4LWF2YXRhciBjbGFzcz1cIm9keC1hdXRoLXVzZXItYXZhdGFyXCI+XG4gICAgICAgIHt7IHZtLmlkQ2xhaW1zPy5pbml0aWFscyA/PyAnJyB9fVxuICAgICAgPC9vZHgtYXZhdGFyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG48L29keC1hY3Rpb24tZ3JvdXA+XG4iXX0=
|
|
@@ -1,33 +1,17 @@
|
|
|
1
|
-
import { inject, InjectionToken } from '@angular/core';
|
|
2
1
|
import { createConfigTokens } from '@odx/angular/utils';
|
|
3
2
|
import { createInitials, resolveEmail, resolveUsername } from './helpers';
|
|
4
|
-
export const
|
|
5
|
-
export const
|
|
3
|
+
export const AUTH_HTTP_HEADER = 'Authorization';
|
|
4
|
+
export const ODX_AUTH_DEFAULT_SCOPES = ['openid', 'profile', 'email', 'offline_access'];
|
|
5
|
+
export const ODX_AUTH_HOSTS = {
|
|
6
6
|
dev: 'https://dev.login.draeger.com',
|
|
7
7
|
stage: 'https://test.login.draeger.com',
|
|
8
8
|
prod: 'https://login.draeger.com',
|
|
9
9
|
};
|
|
10
|
-
export const
|
|
10
|
+
export const ODX_AUTH_USER_PROFILE_HOSTS = {
|
|
11
11
|
dev: 'https://lemon-ocean-04a922703.3.azurestaticapps.net',
|
|
12
12
|
stage: 'https://purple-cliff-0e61c5703.3.azurestaticapps.net',
|
|
13
13
|
prod: 'https://id.draeger.com',
|
|
14
14
|
};
|
|
15
|
-
export const ODX_AUTH_CORE_PLUGINS = new InjectionToken('@odx/auth::CorePlugins', {
|
|
16
|
-
providedIn: 'root',
|
|
17
|
-
factory: () => [],
|
|
18
|
-
});
|
|
19
|
-
export const ODX_AUTH_ERROR_HANDLERS = new InjectionToken('@odx/auth::ErrorHandlers', {
|
|
20
|
-
providedIn: 'root',
|
|
21
|
-
factory: () => [],
|
|
22
|
-
});
|
|
23
|
-
export const ODX_AUTH_PLUGINS = new InjectionToken('@odx/auth::Plugins', {
|
|
24
|
-
providedIn: 'root',
|
|
25
|
-
factory: () => {
|
|
26
|
-
const { plugins } = injectAuthConfig();
|
|
27
|
-
const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);
|
|
28
|
-
return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
15
|
export const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {
|
|
32
16
|
environment: 'prod',
|
|
33
17
|
redirectPath: 'login/callback',
|
|
@@ -45,7 +29,6 @@ export const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfi
|
|
|
45
29
|
defaultAuthorizedHandler: null,
|
|
46
30
|
enableLoadingScreen: true,
|
|
47
31
|
loadingScreenMessage: null,
|
|
48
|
-
|
|
49
|
-
requireSignIn: false,
|
|
32
|
+
waitForTokenInMs: 1000,
|
|
50
33
|
});
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJMUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN4RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW9DO0lBQzdELEdBQUcsRUFBRSwrQkFBK0I7SUFDcEMsS0FBSyxFQUFFLGdDQUFnQztJQUN2QyxJQUFJLEVBQUUsMkJBQTJCO0NBQ2xDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBb0M7SUFDMUUsR0FBRyxFQUFFLHFEQUFxRDtJQUMxRCxLQUFLLEVBQUUsc0RBQXNEO0lBQzdELElBQUksRUFBRSx3QkFBd0I7Q0FDL0IsQ0FBQztBQXFDRixNQUFNLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUU7SUFDNUgsV0FBVyxFQUFFLE1BQU07SUFDbkIsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDNUIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0lBQ0QsY0FBYztJQUNkLFlBQVk7SUFDWixlQUFlO0lBQ2YsT0FBTyxFQUFFLEVBQUU7SUFDWCx3QkFBd0IsRUFBRSxJQUFJO0lBQzlCLG1CQUFtQixFQUFFLElBQUk7SUFDekIsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixnQkFBZ0IsRUFBRSxJQUFJO0NBQ1QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHluYW1pY1RleHRDb250ZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9keW5hbWljLXZpZXcnO1xuaW1wb3J0IHsgY3JlYXRlQ29uZmlnVG9rZW5zIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IE9BdXRoRXJyb3JFdmVudCwgT0F1dGhTdG9yYWdlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBjcmVhdGVJbml0aWFscywgcmVzb2x2ZUVtYWlsLCByZXNvbHZlVXNlcm5hbWUgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBBdXRoRW52aXJvbm1lbnQsIEF1dGhvcml6ZWRIYW5kbGVyLCBBdXRoUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IEFVVEhfSFRUUF9IRUFERVIgPSAnQXV0aG9yaXphdGlvbic7XG5leHBvcnQgY29uc3QgT0RYX0FVVEhfREVGQVVMVF9TQ09QRVMgPSBbJ29wZW5pZCcsICdwcm9maWxlJywgJ2VtYWlsJywgJ29mZmxpbmVfYWNjZXNzJ107XG5leHBvcnQgY29uc3QgT0RYX0FVVEhfSE9TVFM6IFJlY29yZDxBdXRoRW52aXJvbm1lbnQsIHN0cmluZz4gPSB7XG4gIGRldjogJ2h0dHBzOi8vZGV2LmxvZ2luLmRyYWVnZXIuY29tJyxcbiAgc3RhZ2U6ICdodHRwczovL3Rlc3QubG9naW4uZHJhZWdlci5jb20nLFxuICBwcm9kOiAnaHR0cHM6Ly9sb2dpbi5kcmFlZ2VyLmNvbScsXG59O1xuZXhwb3J0IGNvbnN0IE9EWF9BVVRIX1VTRVJfUFJPRklMRV9IT1NUUzogUmVjb3JkPEF1dGhFbnZpcm9ubWVudCwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnaHR0cHM6Ly9sZW1vbi1vY2Vhbi0wNGE5MjI3MDMuMy5henVyZXN0YXRpY2FwcHMubmV0JyxcbiAgc3RhZ2U6ICdodHRwczovL3B1cnBsZS1jbGlmZi0wZTYxYzU3MDMuMy5henVyZXN0YXRpY2FwcHMubmV0JyxcbiAgcHJvZDogJ2h0dHBzOi8vaWQuZHJhZWdlci5jb20nLFxufTtcblxuZXhwb3J0IHR5cGUgQXV0aEVycm9ySGFuZGxlckZuID0gKGVycm9yOiBPQXV0aEVycm9yRXZlbnQpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBSZXNvbHZlVXNlcm5hbWVGbiA9IChyYXdDbGFpbXM6IE9keEF1dGguUmF3SWRlbnRpdHlDbGFpbXMpID0+IHN0cmluZztcbmV4cG9ydCB0eXBlIFJlc29sdmVFbWFpbEZuID0gKHJhd0NsYWltczogT2R4QXV0aC5SYXdJZGVudGl0eUNsYWltcykgPT4gc3RyaW5nO1xuZXhwb3J0IHR5cGUgQ3JlYXRlSW5pdGlhbHNGbiA9ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIGVudmlyb25tZW50OiBBdXRoRW52aXJvbm1lbnQ7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIHJlZGlyZWN0UGF0aDogc3RyaW5nO1xuICBhbGxvd2VkVXJsczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgdGltZW91dEZhY3RvcjogbnVtYmVyO1xuICBtYXhPZmZsaW5lVGltZTogbnVtYmVyO1xuICBsb2FkVXNlclByb2ZpbGU6IGJvb2xlYW47XG4gIHBvc3RMb2dvdXRSZWRpcmVjdFVybD86IHN0cmluZztcbiAgc2NvcGVzPzogc3RyaW5nW107XG4gIGRpc2NvdmVyeVVybD86IHN0cmluZztcbiAgZXJyb3JIYW5kbGVyOiBBdXRoRXJyb3JIYW5kbGVyRm47XG4gIGNyZWF0ZUluaXRpYWxzOiBDcmVhdGVJbml0aWFsc0ZuO1xuICByZXNvbHZlRW1haWw6IFJlc29sdmVFbWFpbEZuO1xuICByZXNvbHZlVXNlcm5hbWU6IFJlc29sdmVVc2VybmFtZUZuO1xuICBzdG9yYWdlPzogT0F1dGhTdG9yYWdlO1xuICBwbHVnaW5zOiBBdXRoUGx1Z2luRmFjdG9yeVtdO1xuICBkZWZhdWx0QXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciB8IG51bGw7XG4gIGVuYWJsZUxvYWRpbmdTY3JlZW46IGJvb2xlYW47XG4gIHJlZnJlc2hUb2tlbk9uSW5pdD86IGJvb2xlYW47XG4gIGxvYWRpbmdTY3JlZW5NZXNzYWdlPzogRHluYW1pY1RleHRDb250ZW50IHwgbnVsbDtcbiAgdXNlclByb2ZpbGVVcmw/OiBzdHJpbmc7XG4gIHJlcXVpcmVTaWduSW4/OiBib29sZWFuO1xuICByZXF1aXJlU2lnbkluRm9yUmVxdWVzdHM/OiBib29sZWFuO1xuICB3YWl0Rm9yVG9rZW5Jbk1zPzogbnVtYmVyO1xuICBzaG93RGVidWdJbmZvcm1hdGlvbj86IGJvb2xlYW47XG4gIHBsdWdpblRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCB7IEF1dGhEZWZhdWx0Q29uZmlnLCBBdXRoQ29uZmlnLCBpbmplY3RBdXRoQ29uZmlnLCBwcm92aWRlQXV0aENvbmZpZyB9ID0gY3JlYXRlQ29uZmlnVG9rZW5zKCdBdXRoJywgJ0BvZHgvYXV0aCcsIHtcbiAgZW52aXJvbm1lbnQ6ICdwcm9kJyxcbiAgcmVkaXJlY3RQYXRoOiAnbG9naW4vY2FsbGJhY2snLFxuICBhbGxvd2VkVXJsczogW10sXG4gIHRpbWVvdXRGYWN0b3I6IDAuNzUsXG4gIG1heE9mZmxpbmVUaW1lOiAyNCAqIDYwICogNjAsIC8vIDEgZGF5XG4gIGxvYWRVc2VyUHJvZmlsZTogZmFsc2UsXG4gIGVycm9ySGFuZGxlcjogKGVycm9yKSA9PiB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0sXG4gIGNyZWF0ZUluaXRpYWxzLFxuICByZXNvbHZlRW1haWwsXG4gIHJlc29sdmVVc2VybmFtZSxcbiAgcGx1Z2luczogW10sXG4gIGRlZmF1bHRBdXRob3JpemVkSGFuZGxlcjogbnVsbCxcbiAgZW5hYmxlTG9hZGluZ1NjcmVlbjogdHJ1ZSxcbiAgbG9hZGluZ1NjcmVlbk1lc3NhZ2U6IG51bGwsXG4gIHdhaXRGb3JUb2tlbkluTXM6IDEwMDAsXG59IGFzIEF1dGhDb25maWcpO1xuIl19
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { inject } from '@angular/core';
|
|
2
2
|
import { Router } from '@angular/router';
|
|
3
|
+
import { WindowRef } from '@odx/angular';
|
|
3
4
|
import { isString } from '@odx/angular/utils';
|
|
4
5
|
import { EMPTY, of, switchMap, take, tap } from 'rxjs';
|
|
5
6
|
import { AuthService } from './auth.service';
|
|
6
7
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
-
export function authGuard(authorizedHandler, redirectTo) {
|
|
8
|
+
export function authGuard(authorizedHandler, redirectTo, isExternal = false) {
|
|
8
9
|
return (_, state) => {
|
|
9
10
|
const authService = inject(AuthService);
|
|
11
|
+
const windowRef = inject(WindowRef);
|
|
10
12
|
const router = inject(Router, { optional: true });
|
|
11
13
|
return authService.isAuthenticated$.pipe(switchMap((isAuthenticated) => {
|
|
12
14
|
if (!isAuthenticated) {
|
|
@@ -18,7 +20,12 @@ export function authGuard(authorizedHandler, redirectTo) {
|
|
|
18
20
|
if (isAuthorized || !router)
|
|
19
21
|
return;
|
|
20
22
|
if (isString(redirectTo)) {
|
|
21
|
-
|
|
23
|
+
if (isExternal) {
|
|
24
|
+
windowRef.location.assign(redirectTo);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
router.navigateByUrl(redirectTo);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
else if (Array.isArray(redirectTo)) {
|
|
24
31
|
router.navigate(redirectTo);
|
|
@@ -26,4 +33,4 @@ export function authGuard(authorizedHandler, redirectTo) {
|
|
|
26
33
|
}), take(1));
|
|
27
34
|
};
|
|
28
35
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3Qyw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxpQkFBcUMsRUFBRSxVQUEyQixFQUFFLFVBQVUsR0FBRyxLQUFLO0lBQzlHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDbEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbEQsT0FBTyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFOUIsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ25CLElBQUksWUFBWSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLFVBQVUsRUFBRTtvQkFDZCxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdkM7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm4sIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgRU1QVFksIG9mLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemVkSGFuZGxlciB9IGZyb20gJy4vbW9kZWxzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBhdXRoR3VhcmQoYXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciwgcmVkaXJlY3RUbz86IGFueVtdIHwgc3RyaW5nLCBpc0V4dGVybmFsID0gZmFsc2UpOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuIChfLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoaXNBdXRoZW50aWNhdGVkKSA9PiB7XG4gICAgICAgIGlmICghaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgYXV0aFNlcnZpY2Uuc2lnbkluKHN0YXRlLnVybCk7XG5cbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKGF1dGhTZXJ2aWNlLmlzQXV0aG9yaXplZChhdXRob3JpemVkSGFuZGxlcikpO1xuICAgICAgfSksXG4gICAgICB0YXAoKGlzQXV0aG9yaXplZCkgPT4ge1xuICAgICAgICBpZiAoaXNBdXRob3JpemVkIHx8ICFyb3V0ZXIpIHJldHVybjtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHJlZGlyZWN0VG8pKSB7XG4gICAgICAgICAgaWYgKGlzRXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlZi5sb2NhdGlvbi5hc3NpZ24ocmVkaXJlY3RUbyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJlZGlyZWN0VG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlZGlyZWN0VG8pKSB7XG4gICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHJlZGlyZWN0VG8pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -10,4 +10,4 @@ export default {
|
|
|
10
10
|
signOutButtonText: 'Ausloggen',
|
|
11
11
|
},
|
|
12
12
|
};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pMThuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGVBQWU7SUFDYixFQUFFLEVBQUU7UUFDRixlQUFlLEVBQUUsWUFBWTtRQUM3QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLGlCQUFpQixFQUFFLFVBQVU7S0FDOUI7SUFDRCxFQUFFLEVBQUU7UUFDRixlQUFlLEVBQUUsYUFBYTtRQUM5QixnQkFBZ0IsRUFBRSxXQUFXO1FBQzdCLGlCQUFpQixFQUFFLFdBQVc7S0FDL0I7Q0FDbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0aW9uT2JqZWN0IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsL3RyYW5zbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW46IHtcbiAgICB1c2VyUHJvZmlsZUxpbms6ICdNeSBwcm9maWxlJyxcbiAgICBzaWduSW5CdXR0b25UZXh0OiAnU2lnbiBpbicsXG4gICAgc2lnbk91dEJ1dHRvblRleHQ6ICdTaWduIG91dCcsXG4gIH0sXG4gIGRlOiB7XG4gICAgdXNlclByb2ZpbGVMaW5rOiAnTWVpbiBQcm9maWwnLFxuICAgIHNpZ25JbkJ1dHRvblRleHQ6ICdFaW5sb2dnZW4nLFxuICAgIHNpZ25PdXRCdXR0b25UZXh0OiAnQXVzbG9nZ2VuJyxcbiAgfSxcbn0gYXMgVHJhbnNsYXRpb25PYmplY3Q7XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { matchUrl } from '@odx/angular/utils';
|
|
3
|
+
import { mergeMap } from 'rxjs';
|
|
4
|
+
import { injectAuthConfig } from './auth.config';
|
|
5
|
+
import { AuthService } from './auth.service';
|
|
6
|
+
export const authInterceptor = (req, next) => {
|
|
7
|
+
const { allowedUrls, requireSignInForRequests } = injectAuthConfig();
|
|
8
|
+
const isUrlAllowed = allowedUrls.some((allowedUrl) => matchUrl(req.url, allowedUrl));
|
|
9
|
+
if (!isUrlAllowed) {
|
|
10
|
+
return next(req);
|
|
11
|
+
}
|
|
12
|
+
const authService = inject(AuthService);
|
|
13
|
+
return authService.prepareAuthRequest$(req, requireSignInForRequests).pipe(mergeMap(next));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDOUQsTUFBTSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDckUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyRixJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sV0FBVyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWF0Y2hVcmwgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluamVjdEF1dGhDb25maWcgfSBmcm9tICcuL2F1dGguY29uZmlnJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgYXV0aEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXEsIG5leHQpID0+IHtcbiAgY29uc3QgeyBhbGxvd2VkVXJscywgcmVxdWlyZVNpZ25JbkZvclJlcXVlc3RzIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gIGNvbnN0IGlzVXJsQWxsb3dlZCA9IGFsbG93ZWRVcmxzLnNvbWUoKGFsbG93ZWRVcmwpID0+IG1hdGNoVXJsKHJlcS51cmwsIGFsbG93ZWRVcmwpKTtcbiAgaWYgKCFpc1VybEFsbG93ZWQpIHtcbiAgICByZXR1cm4gbmV4dChyZXEpO1xuICB9XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcblxuICByZXR1cm4gYXV0aFNlcnZpY2UucHJlcGFyZUF1dGhSZXF1ZXN0JChyZXEsIHJlcXVpcmVTaWduSW5Gb3JSZXF1ZXN0cykucGlwZShtZXJnZU1hcChuZXh0KSk7XG59O1xuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Logger } from '@odx/angular/internal';
|
|
2
|
+
export default new Logger('@odx/auth');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsZUFBZSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBMb2dnZXIoJ0BvZHgvYXV0aCcpO1xuIl19
|
|
@@ -1,23 +1,54 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { provideHttpClient, withInterceptors } from '@angular/common/http';
|
|
2
|
+
import { APP_INITIALIZER, ENVIRONMENT_INITIALIZER, InjectionToken, inject, makeEnvironmentProviders } from '@angular/core';
|
|
2
3
|
import { WindowRef } from '@odx/angular';
|
|
3
4
|
import { DynamicViewService } from '@odx/angular/cdk/dynamic-view';
|
|
4
|
-
import { buildUrl
|
|
5
|
-
import {
|
|
5
|
+
import { buildUrl } from '@odx/angular/utils';
|
|
6
|
+
import { OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';
|
|
6
7
|
import { tap } from 'rxjs';
|
|
7
|
-
import {
|
|
8
|
+
import { ODX_AUTH_DEFAULT_SCOPES, injectAuthConfig, provideAuthConfig } from './auth.config';
|
|
9
|
+
import { authInterceptor } from './auth.interceptor';
|
|
10
|
+
import logger from './auth.logger';
|
|
8
11
|
import { AuthService } from './auth.service';
|
|
9
12
|
import { AuthLoadingScreenComponent } from './components';
|
|
10
|
-
import { handleAuthError } from './helpers';
|
|
13
|
+
import { createAuthHostUrl, handleAuthError } from './helpers';
|
|
11
14
|
import { offlineAuthErrorHandler } from './models';
|
|
12
|
-
import { coreIdentityPlugin, userProfileUrlPlugin } from './plugins';
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
import { coreDebugPlugin, coreIdentityPlugin, userProfileUrlPlugin } from './plugins';
|
|
16
|
+
export const ODX_AUTH_ERROR_HANDLERS = new InjectionToken('@odx/auth::ErrorHandlers', {
|
|
17
|
+
providedIn: 'root',
|
|
18
|
+
factory: () => {
|
|
19
|
+
const { errorHandler } = injectAuthConfig();
|
|
20
|
+
return [offlineAuthErrorHandler, errorHandler];
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
export const ODX_AUTH_CORE_PLUGINS = new InjectionToken('@odx/auth::CorePlugins', {
|
|
24
|
+
providedIn: 'root',
|
|
25
|
+
factory: () => {
|
|
26
|
+
const { showDebugInformation } = injectAuthConfig();
|
|
27
|
+
const plugins = [coreIdentityPlugin, userProfileUrlPlugin];
|
|
28
|
+
if (showDebugInformation) {
|
|
29
|
+
plugins.push(coreDebugPlugin);
|
|
30
|
+
}
|
|
31
|
+
return plugins;
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
export const ODX_AUTH_PLUGINS = new InjectionToken('@odx/auth::Plugins', {
|
|
35
|
+
providedIn: 'root',
|
|
36
|
+
factory: () => {
|
|
37
|
+
const { plugins } = injectAuthConfig();
|
|
38
|
+
const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);
|
|
39
|
+
return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
export function provideAuthLogger() {
|
|
16
43
|
return {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
44
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
45
|
+
useFactory: () => {
|
|
46
|
+
const { showDebugInformation } = injectAuthConfig();
|
|
47
|
+
if (!showDebugInformation)
|
|
48
|
+
logger.disable();
|
|
49
|
+
return () => void 0;
|
|
20
50
|
},
|
|
51
|
+
multi: true,
|
|
21
52
|
};
|
|
22
53
|
}
|
|
23
54
|
export function initializeAuthErrorHandlers() {
|
|
@@ -28,41 +59,31 @@ export function initializeAuthErrorHandlers() {
|
|
|
28
59
|
export function initalizeAuthConfig() {
|
|
29
60
|
const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl, enableLoadingScreen } = injectAuthConfig();
|
|
30
61
|
const authService = inject(AuthService);
|
|
31
|
-
const
|
|
32
|
-
const scope = Array.from(new Set(
|
|
62
|
+
const redirectUri = buildUrl(inject(WindowRef).getOrigin(), redirectPath);
|
|
63
|
+
const scope = Array.from(new Set(ODX_AUTH_DEFAULT_SCOPES.concat(scopes ?? []))).join(' ');
|
|
33
64
|
if (enableLoadingScreen) {
|
|
34
65
|
AuthLoadingScreenComponent.initialize(authService, inject(DynamicViewService));
|
|
35
66
|
}
|
|
36
67
|
return () => authService.initialize({
|
|
37
68
|
clientId,
|
|
38
|
-
issuer: issuer ??
|
|
69
|
+
issuer: issuer ?? createAuthHostUrl(environment, 'oauth2/default'),
|
|
39
70
|
scope,
|
|
40
|
-
redirectUri
|
|
71
|
+
redirectUri,
|
|
41
72
|
postLogoutRedirectUri: postLogoutRedirectUrl,
|
|
42
73
|
preserveRequestedRoute: true,
|
|
43
74
|
strictDiscoveryDocumentValidation: !discoveryUrl,
|
|
44
75
|
responseType: 'code',
|
|
45
|
-
showDebugInformation:
|
|
76
|
+
showDebugInformation: false,
|
|
46
77
|
timeoutFactor,
|
|
78
|
+
waitForTokenInMsec: 1000,
|
|
47
79
|
});
|
|
48
80
|
}
|
|
49
81
|
export function provideAuth(config) {
|
|
50
82
|
return makeEnvironmentProviders([
|
|
51
83
|
provideAuthConfig(config),
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
useFactory: configureInterceptor,
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
provide: ENVIRONMENT_INITIALIZER,
|
|
59
|
-
useValue: initializeAuthErrorHandlers,
|
|
60
|
-
multi: true,
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
provide: ODX_AUTH_ERROR_HANDLERS,
|
|
64
|
-
useFactory: () => [offlineAuthErrorHandler, injectAuthConfig().errorHandler],
|
|
65
|
-
},
|
|
84
|
+
provideAuthLogger(),
|
|
85
|
+
provideOAuthClient({ resourceServer: { sendAccessToken: false, allowedUrls: [] } }),
|
|
86
|
+
provideHttpClient(withInterceptors([authInterceptor])),
|
|
66
87
|
{
|
|
67
88
|
provide: APP_INITIALIZER,
|
|
68
89
|
useFactory: initalizeAuthConfig,
|
|
@@ -72,10 +93,6 @@ export function provideAuth(config) {
|
|
|
72
93
|
provide: OAuthStorage,
|
|
73
94
|
useFactory: () => injectAuthConfig().storage ?? inject(WindowRef).nativeWindow.localStorage,
|
|
74
95
|
},
|
|
75
|
-
{
|
|
76
|
-
provide: ODX_AUTH_CORE_PLUGINS,
|
|
77
|
-
useValue: [coreIdentityPlugin, userProfileUrlPlugin],
|
|
78
|
-
},
|
|
79
96
|
]);
|
|
80
97
|
}
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLnByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEVBQ3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFDLFFBQVEsRUFBc0MsUUFBUSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekIsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDakQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRW5FLE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsTUFBTSxFQUFDLFdBQVcsRUFBQyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDekMsTUFBTSxJQUFJLEdBQUcsV0FBVyxD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VSxFQUFFLG1CQUFtQjtZQUMvQixLQUFLLEVBQUUsSUFBSTtTQUNaO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsWUFBWTtZQUNyQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZO1NBQzVGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLFFBQVEsRUFBRSxDQUFDLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDO1NBQ3JEO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFQUF9JTklUSUFMSVpFUixcbiAgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBpbmplY3QsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVyc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V2luZG93UmVmfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHtEeW5hbWljVmlld1NlcnZpY2V9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvZHluYW1pYy12aWV3JztcbmltcG9ydCB7YnVpbGRVcmwsIENvbmZpZ0RlcGVuZGVuY2llcywgQ29uZmlnUHJvdmlkZXIsIGlzU3RyaW5nfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHtPQXV0aE1vZHVsZUNvbmZpZywgT0F1dGhTdG9yYWdlLCBwcm92aWRlT0F1dGhDbGllbnR9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXV0aENvbmZpZyxcbiAgREVGQVVMVF9BVVRIX1NDT1BFUyxcbiAgREVGQVVMVF9PS1RBX1VSTFMsXG4gIGluamVjdEF1dGhDb25maWcsXG4gIE9EWF9BVVRIX0NPUkVfUExVR0lOUyxcbiAgT0RYX0FVVEhfRVJST1JfSEFORExFUlMsXG4gIHByb3ZpZGVBdXRoQ29uZmlnLFxufSBmcm9tICcuL2F1dGguY29uZmlnJztcbmltcG9ydCB7QXV0aFNlcnZpY2V9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7QXV0aExvYWRpbmdTY3JlZW5Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQge2hhbmRsZUF1dGhFcnJvcn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7b2ZmbGluZUF1dGhFcnJvckhhbmRsZXJ9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7Y29yZUlkZW50aXR5UGx1Z2luLCB1c2VyUHJvZmlsZVVybFBsdWdpbn0gZnJvbSAnLi9wbHVnaW5zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZUludGVyY2VwdG9yKCk6IE9BdXRoTW9kdWxlQ29uZmlnIHtcbiAgY29uc3Qge2FsbG93ZWRVcmxzfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgY29uc3QgdXJscyA9IGFsbG93ZWRVcmxzLmZpbHRlcihCb29sZWFuKTtcblxuICByZXR1cm4ge1xuICAgIHJlc291cmNlU2VydmVyOiB7XG4gICAgICBjdXN0b21VcmxWYWxpZGF0aW9uOiAodXJsKSA9PiB1cmxzLnNvbWUoKGFsbG93ZWRVcmwpID0+IChpc1N0cmluZyhhbGxvd2VkVXJsKSA/IHVybC5zdGFydHNXaXRoKGFsbG93ZWRVcmwpIDogISF1cmwubWF0Y2goYWxsb3dlZFVybCkpKSxcbiAgICAgIHNlbmRBY2Nlc3NUb2tlbjogdHJ1ZSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUF1dGhFcnJvckhhbmRsZXJzKCk6IHZvaWQge1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVBdXRoRXJyb3IoaW5qZWN0KE9EWF9BVVRIX0VSUk9SX0hBTkRMRVJTKSk7XG5cbiAgYXV0aFNlcnZpY2UuZXJyb3JzJC5waXBlKHRhcCgoZXJyb3IpID0+IGhhbmRsZXIoZXJyb3IpKSkuc3Vic2NyaWJlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0YWxpemVBdXRoQ29uZmlnKCk6ICgpID0+IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgY2xpZW50SWQsXG4gICAgc2NvcGVzLFxuICAgIHJlZGlyZWN0UGF0aCxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgaXNzdWVyLFxuICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgZGlzY292ZXJ5VXJsLFxuICAgIGVuYWJsZUxvYWRpbmdTY3JlZW5cbiAgfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCBvcmlnaW4gPSBpbmplY3QoV2luZG93UmVmKS5nZXRPcmlnaW4oKTtcbiAgY29uc3Qgc2NvcGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoREVGQVVMVF9BVVRIX1NDT1BFUy5jb25jYXQoc2NvcGVzID8/IFtdKSkpLmpvaW4oJyAnKTtcbiAgaWYgKGVuYWJsZUxvYWRpbmdTY3JlZW4pIHtcbiAgICBBdXRoTG9hZGluZ1NjcmVlbkNvbXBvbmVudC5pbml0aWFsaXplKGF1dGhTZXJ2aWNlLCBpbmplY3QoRHluYW1pY1ZpZXdTZXJ2aWNlKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+XG4gICAgYXV0aFNlcnZpY2UuaW5pdGlhbGl6ZSh7XG4gICAgICBjbGllbnRJZCxcbiAgICAgIGlzc3VlcjogaXNzdWVyID8/IGAke0RFRkFVTFRfT0tUQV9VUkxTW2Vudmlyb25tZW50XX0vb2F1dGgyL2RlZmF1bHRgLFxuICAgICAgc2NvcGUsXG4gICAgICByZWRpcmVjdFVyaTogYnVpbGRVcmwob3JpZ2luLCByZWRpcmVjdFBhdGgpLFxuICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgICBwcmVzZXJ2ZVJlcXVlc3RlZFJvdXRlOiB0cnVlLFxuICAgICAgc3RyaWN0RGlzY292ZXJ5RG9jdW1lbnRWYWxpZGF0aW9uOiAhZGlzY292ZXJ5VXJsLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXG4gICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogZW52aXJvbm1lbnQgPT09ICdkZXYnLFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBdXRoPEQgZXh0ZW5kcyBDb25maWdEZXBlbmRlbmNpZXM+KGNvbmZpZzogQ29uZmlnUHJvdmlkZXI8UGFydGlhbDxBdXRoQ29uZmlnPiwgRD4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHByb3ZpZGVBdXRoQ29uZmlnKGNvbmZpZyksXG4gICAgcHJvdmlkZU9BdXRoQ2xpZW50KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogT0F1dGhNb2R1bGVDb25maWcsXG4gICAgICB1c2VGYWN0b3J5OiBjb25maWd1cmVJbnRlcmNlcHRvcixcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlVmFsdWU6IGluaXRpYWxpemVBdXRoRXJyb3JIYW5kbGVycyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogT0RYX0FVVEhfRVJST1JfSEFORExFUlMsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiBbb2ZmbGluZUF1dGhFcnJvckhhbmRsZXIsIGluamVjdEF1dGhDb25maWcoKS5lcnJvckhhbmRsZXJdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgdXNlRmFjdG9yeTogaW5pdGFsaXplQXV0aENvbmZpZyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogT0F1dGhTdG9yYWdlLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4gaW5qZWN0QXV0aENvbmZpZygpLnN0b3JhZ2UgPz8gaW5qZWN0KFdpbmRvd1JlZikubmF0aXZlV2luZG93LmxvY2FsU3RvcmFnZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9EWF9BVVRIX0NPUkVfUExVR0lOUyxcbiAgICAgIHVzZVZhbHVlOiBbY29yZUlkZW50aXR5UGx1Z2luLCB1c2VyUHJvZmlsZVVybFBsdWdpbl0sXG4gICAgfSxcbiAgXSk7XG59XG4iXX0=
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLnByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUF3QixjQUFjLEVBQVksTUFBTSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFzQyxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQWtDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9ELE9BQU8sRUFBaUMsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FB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QUFZO1NBQzVGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIEluamVjdGlvblRva2VuLCBQcm92aWRlciwgaW5qZWN0LCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBEeW5hbWljVmlld1NlcnZpY2UgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2R5bmFtaWMtdmlldyc7XG5pbXBvcnQgeyBDb25maWdEZXBlbmRlbmNpZXMsIENvbmZpZ1Byb3ZpZGVyLCBidWlsZFVybCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPQXV0aFN0b3JhZ2UsIHByb3ZpZGVPQXV0aENsaWVudCB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBBdXRoRXJyb3JIYW5kbGVyRm4sIE9EWF9BVVRIX0RFRkFVTFRfU0NPUEVTLCBpbmplY3RBdXRoQ29uZmlnLCBwcm92aWRlQXV0aENvbmZpZyB9IGZyb20gJy4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHsgYXV0aEludGVyY2VwdG9yIH0gZnJvbSAnLi9hdXRoLmludGVyY2VwdG9yJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9hdXRoLmxvZ2dlcic7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhMb2FkaW5nU2NyZWVuQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhIb3N0VXJsLCBoYW5kbGVBdXRoRXJyb3IgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQXV0aFBsdWdpbiwgQXV0aFBsdWdpbkZhY3RvcnksIG9mZmxpbmVBdXRoRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgY29yZURlYnVnUGx1Z2luLCBjb3JlSWRlbnRpdHlQbHVnaW4sIHVzZXJQcm9maWxlVXJsUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zJztcblxuZXhwb3J0IGNvbnN0IE9EWF9BVVRIX0VSUk9SX0hBTkRMRVJTID0gbmV3IEluamVjdGlvblRva2VuPEF1dGhFcnJvckhhbmRsZXJGbltdPignQG9keC9hdXRoOjpFcnJvckhhbmRsZXJzJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICBjb25zdCB7IGVycm9ySGFuZGxlciB9ID0gaW5qZWN0QXV0aENvbmZpZygpO1xuXG4gICAgcmV0dXJuIFtvZmZsaW5lQXV0aEVycm9ySGFuZGxlciwgZXJyb3JIYW5kbGVyXTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgT0RYX0FVVEhfQ09SRV9QTFVHSU5TID0gbmV3IEluamVjdGlvblRva2VuPEF1dGhQbHVnaW5GYWN0b3J5W10+KCdAb2R4L2F1dGg6OkNvcmVQbHVnaW5zJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICBjb25zdCB7IHNob3dEZWJ1Z0luZm9ybWF0aW9uIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gICAgY29uc3QgcGx1Z2lucyA9IFtjb3JlSWRlbnRpdHlQbHVnaW4sIHVzZXJQcm9maWxlVXJsUGx1Z2luXTtcbiAgICBpZiAoc2hvd0RlYnVnSW5mb3JtYXRpb24pIHtcbiAgICAgIHBsdWdpbnMucHVzaChjb3JlRGVidWdQbHVnaW4pO1xuICAgIH1cblxuICAgIHJldHVybiBwbHVnaW5zO1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBPRFhfQVVUSF9QTFVHSU5TID0gbmV3IEluamVjdGlvblRva2VuPEF1dGhQbHVnaW5bXT4oJ0BvZHgvYXV0aDo6UGx1Z2lucycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgY29uc3QgeyBwbHVnaW5zIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gICAgY29uc3QgY29yZVBsdWdpbnMgPSBpbmplY3QoT0RYX0FVVEhfQ09SRV9QTFVHSU5TKTtcblxuICAgIHJldHVybiBbLi4uY29yZVBsdWdpbnMsIC4uLnBsdWdpbnNdLm1hcCgocGx1Z2luRmFjdG9yeSkgPT4gcGx1Z2luRmFjdG9yeSgpKTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUF1dGhMb2dnZXIoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2hvd0RlYnVnSW5mb3JtYXRpb24gfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgICAgIGlmICghc2hvd0RlYnVnSW5mb3JtYXRpb24pIGxvZ2dlci5kaXNhYmxlKCk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB2b2lkIDA7XG4gICAgfSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVBdXRoRXJyb3JIYW5kbGVycygpOiB2b2lkIHtcbiAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBjb25zdCBoYW5kbGVyID0gaGFuZGxlQXV0aEVycm9yKGluamVjdChPRFhfQVVUSF9FUlJPUl9IQU5ETEVSUykpO1xuXG4gIGF1dGhTZXJ2aWNlLmVycm9ycyQucGlwZSh0YXAoKGVycm9yKSA9PiBoYW5kbGVyKGVycm9yKSkpLnN1YnNjcmliZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGFsaXplQXV0aENvbmZpZygpOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjbGllbnRJZCwgc2NvcGVzLCByZWRpcmVjdFBhdGgsIGVudmlyb25tZW50LCBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsIGlzc3VlciwgdGltZW91dEZhY3RvciwgZGlzY292ZXJ5VXJsLCBlbmFibGVMb2FkaW5nU2NyZWVuIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3QgcmVkaXJlY3RVcmkgPSBidWlsZFVybChpbmplY3QoV2luZG93UmVmKS5nZXRPcmlnaW4oKSwgcmVkaXJlY3RQYXRoKTtcbiAgY29uc3Qgc2NvcGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoT0RYX0FVVEhfREVGQVVMVF9TQ09QRVMuY29uY2F0KHNjb3BlcyA/PyBbXSkpKS5qb2luKCcgJyk7XG4gIGlmIChlbmFibGVMb2FkaW5nU2NyZWVuKSB7XG4gICAgQXV0aExvYWRpbmdTY3JlZW5Db21wb25lbnQuaW5pdGlhbGl6ZShhdXRoU2VydmljZSwgaW5qZWN0KER5bmFtaWNWaWV3U2VydmljZSkpO1xuICB9XG4gIHJldHVybiAoKSA9PlxuICAgIGF1dGhTZXJ2aWNlLmluaXRpYWxpemUoe1xuICAgICAgY2xpZW50SWQsXG4gICAgICBpc3N1ZXI6IGlzc3VlciA/PyBjcmVhdGVBdXRoSG9zdFVybChlbnZpcm9ubWVudCwgJ29hdXRoMi9kZWZhdWx0JyksXG4gICAgICBzY29wZSxcbiAgICAgIHJlZGlyZWN0VXJpLFxuICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgICBwcmVzZXJ2ZVJlcXVlc3RlZFJvdXRlOiB0cnVlLFxuICAgICAgc3RyaWN0RGlzY292ZXJ5RG9jdW1lbnRWYWxpZGF0aW9uOiAhZGlzY292ZXJ5VXJsLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXG4gICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogZmFsc2UsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgd2FpdEZvclRva2VuSW5Nc2VjOiAxMDAwLFxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUF1dGg8RCBleHRlbmRzIENvbmZpZ0RlcGVuZGVuY2llcz4oY29uZmlnOiBDb25maWdQcm92aWRlcjxQYXJ0aWFsPEF1dGhDb25maWc+LCBEPik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgcHJvdmlkZUF1dGhDb25maWcoY29uZmlnKSxcbiAgICBwcm92aWRlQXV0aExvZ2dlcigpLFxuICAgIHByb3ZpZGVPQXV0aENsaWVudCh7IHJlc291cmNlU2VydmVyOiB7IHNlbmRBY2Nlc3NUb2tlbjogZmFsc2UsIGFsbG93ZWRVcmxzOiBbXSB9IH0pLFxuICAgIHByb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnMoW2F1dGhJbnRlcmNlcHRvcl0pKSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiBpbml0YWxpemVBdXRoQ29uZmlnLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBPQXV0aFN0b3JhZ2UsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiBpbmplY3RBdXRoQ29uZmlnKCkuc3RvcmFnZSA/PyBpbmplY3QoV2luZG93UmVmKS5uYXRpdmVXaW5kb3cubG9jYWxTdG9yYWdlLFxuICAgIH0sXG4gIF0pO1xufVxuIl19
|