@odx/auth 17.2.1 → 18.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 +91 -0
- package/fesm2022/odx-auth-plugins-service-connect.mjs +3 -3
- package/fesm2022/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2022/odx-auth.mjs +41 -41
- package/fesm2022/odx-auth.mjs.map +1 -1
- package/index.d.ts +744 -15
- package/package.json +4 -8
- package/plugins/service-connect/index.d.ts +186 -8
- package/esm2022/index.mjs +0 -16
- package/esm2022/lib/auth.component.mjs +0 -50
- package/esm2022/lib/auth.config.mjs +0 -71
- package/esm2022/lib/auth.directive.mjs +0 -51
- package/esm2022/lib/auth.guard.mjs +0 -44
- package/esm2022/lib/auth.i18n.mjs +0 -13
- package/esm2022/lib/auth.interceptor.mjs +0 -23
- package/esm2022/lib/auth.logger.mjs +0 -3
- package/esm2022/lib/auth.module.mjs +0 -19
- package/esm2022/lib/auth.providers.mjs +0 -136
- package/esm2022/lib/auth.service.mjs +0 -317
- package/esm2022/lib/auth.typings.mjs +0 -2
- package/esm2022/lib/components/auth-actions/auth-actions.component.mjs +0 -40
- package/esm2022/lib/components/auth-loading-screen/auth-loading-screen.component.mjs +0 -53
- package/esm2022/lib/components/index.mjs +0 -3
- package/esm2022/lib/directives/auth-action.directive.mjs +0 -30
- package/esm2022/lib/directives/index.mjs +0 -4
- package/esm2022/lib/directives/sign-in.directive.mjs +0 -52
- package/esm2022/lib/directives/sign-out.directive.mjs +0 -50
- package/esm2022/lib/helpers/create-auth-host-url.mjs +0 -18
- package/esm2022/lib/helpers/create-inititals.mjs +0 -32
- package/esm2022/lib/helpers/handle-auth-error.mjs +0 -31
- package/esm2022/lib/helpers/handle-oauth-event.mjs +0 -13
- package/esm2022/lib/helpers/index.mjs +0 -9
- package/esm2022/lib/helpers/resolve-email.mjs +0 -34
- package/esm2022/lib/helpers/resolve-username.mjs +0 -38
- package/esm2022/lib/helpers/set-http-auth-header.mjs +0 -22
- package/esm2022/lib/helpers/user-language-loader.mjs +0 -17
- package/esm2022/lib/models/auth-environment.mjs +0 -3
- package/esm2022/lib/models/auth-plugin-manager.mjs +0 -49
- package/esm2022/lib/models/authorized-handler.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -5
- package/esm2022/lib/models/offline-auth-error-handler.mjs +0 -7
- package/esm2022/lib/plugins/core-debug.plugin.mjs +0 -29
- package/esm2022/lib/plugins/core-identity.plugin.mjs +0 -20
- package/esm2022/lib/plugins/index.mjs +0 -4
- package/esm2022/lib/plugins/user-profile-link.plugin.mjs +0 -18
- package/esm2022/lib/unauth.guard.mjs +0 -38
- package/esm2022/odx-auth.mjs +0 -5
- package/esm2022/plugins/service-connect/index.mjs +0 -9
- package/esm2022/plugins/service-connect/lib/dtos/get-service-connect-rights-response.dto.mjs +0 -2
- package/esm2022/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.mjs +0 -2
- package/esm2022/plugins/service-connect/lib/dtos/index.mjs +0 -3
- package/esm2022/plugins/service-connect/lib/helpers/build-service-connect-url.mjs +0 -16
- package/esm2022/plugins/service-connect/lib/helpers/has-roles-or-rights-handler.mjs +0 -12
- package/esm2022/plugins/service-connect/lib/helpers/has-roles-or-rights.mjs +0 -11
- package/esm2022/plugins/service-connect/lib/helpers/index.mjs +0 -5
- package/esm2022/plugins/service-connect/lib/helpers/service-connect-plugin-factory.mjs +0 -25
- package/esm2022/plugins/service-connect/lib/service-connect-rights.directive.mjs +0 -44
- package/esm2022/plugins/service-connect/lib/service-connect-rights.guard.mjs +0 -15
- package/esm2022/plugins/service-connect/lib/service-connect-rights.plugin.mjs +0 -16
- package/esm2022/plugins/service-connect/lib/service-connect-user-language.plugin.mjs +0 -34
- package/esm2022/plugins/service-connect/lib/service-connect-user-profile.plugin.mjs +0 -28
- package/esm2022/plugins/service-connect/lib/service-connect.config.mjs +0 -17
- package/esm2022/plugins/service-connect/odx-auth-plugins-service-connect.mjs +0 -5
- package/lib/auth.component.d.ts +0 -20
- package/lib/auth.config.d.ts +0 -84
- package/lib/auth.directive.d.ts +0 -25
- package/lib/auth.guard.d.ts +0 -11
- package/lib/auth.i18n.d.ts +0 -3
- package/lib/auth.interceptor.d.ts +0 -10
- package/lib/auth.logger.d.ts +0 -3
- package/lib/auth.module.d.ts +0 -10
- package/lib/auth.providers.d.ts +0 -46
- package/lib/auth.service.d.ts +0 -206
- package/lib/auth.typings.d.ts +0 -27
- package/lib/components/auth-actions/auth-actions.component.d.ts +0 -16
- package/lib/components/auth-loading-screen/auth-loading-screen.component.d.ts +0 -24
- package/lib/components/index.d.ts +0 -2
- package/lib/directives/auth-action.directive.d.ts +0 -18
- package/lib/directives/index.d.ts +0 -3
- package/lib/directives/sign-in.directive.d.ts +0 -29
- package/lib/directives/sign-out.directive.d.ts +0 -28
- package/lib/helpers/create-auth-host-url.d.ts +0 -14
- package/lib/helpers/create-inititals.d.ts +0 -18
- package/lib/helpers/handle-auth-error.d.ts +0 -13
- package/lib/helpers/handle-oauth-event.d.ts +0 -11
- package/lib/helpers/index.d.ts +0 -8
- package/lib/helpers/resolve-email.d.ts +0 -21
- package/lib/helpers/resolve-username.d.ts +0 -22
- package/lib/helpers/set-http-auth-header.d.ts +0 -11
- package/lib/helpers/user-language-loader.d.ts +0 -11
- package/lib/models/auth-environment.d.ts +0 -6
- package/lib/models/auth-plugin-manager.d.ts +0 -21
- package/lib/models/authorized-handler.d.ts +0 -3
- package/lib/models/index.d.ts +0 -4
- package/lib/models/offline-auth-error-handler.d.ts +0 -2
- package/lib/plugins/core-debug.plugin.d.ts +0 -11
- package/lib/plugins/core-identity.plugin.d.ts +0 -18
- package/lib/plugins/index.d.ts +0 -3
- package/lib/plugins/user-profile-link.plugin.d.ts +0 -18
- package/lib/unauth.guard.d.ts +0 -11
- package/plugins/service-connect/lib/dtos/get-service-connect-rights-response.dto.d.ts +0 -3
- package/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.d.ts +0 -14
- package/plugins/service-connect/lib/dtos/index.d.ts +0 -2
- package/plugins/service-connect/lib/helpers/build-service-connect-url.d.ts +0 -10
- package/plugins/service-connect/lib/helpers/has-roles-or-rights-handler.d.ts +0 -10
- package/plugins/service-connect/lib/helpers/has-roles-or-rights.d.ts +0 -11
- package/plugins/service-connect/lib/helpers/index.d.ts +0 -4
- package/plugins/service-connect/lib/helpers/service-connect-plugin-factory.d.ts +0 -20
- package/plugins/service-connect/lib/service-connect-rights.directive.d.ts +0 -21
- package/plugins/service-connect/lib/service-connect-rights.guard.d.ts +0 -11
- package/plugins/service-connect/lib/service-connect-rights.plugin.d.ts +0 -18
- package/plugins/service-connect/lib/service-connect-user-language.plugin.d.ts +0 -24
- package/plugins/service-connect/lib/service-connect-user-profile.plugin.d.ts +0 -23
- package/plugins/service-connect/lib/service-connect.config.d.ts +0 -15
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odx/auth",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "18.0.1",
|
|
4
4
|
"author": "Drägerwerk AG & Co.KGaA",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"peerDependencies": {
|
|
7
|
-
"@odx/angular": "^
|
|
7
|
+
"@odx/angular": "^13.0.0"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"angular-oauth2-oidc": "^
|
|
11
|
-
"tslib": "^2.8.
|
|
10
|
+
"angular-oauth2-oidc": "^20.0.2",
|
|
11
|
+
"tslib": "^2.8.1"
|
|
12
12
|
},
|
|
13
13
|
"publishConfig": {
|
|
14
14
|
"access": "public",
|
|
@@ -23,14 +23,10 @@
|
|
|
23
23
|
},
|
|
24
24
|
".": {
|
|
25
25
|
"types": "./index.d.ts",
|
|
26
|
-
"esm2022": "./esm2022/odx-auth.mjs",
|
|
27
|
-
"esm": "./esm2022/odx-auth.mjs",
|
|
28
26
|
"default": "./fesm2022/odx-auth.mjs"
|
|
29
27
|
},
|
|
30
28
|
"./plugins/service-connect": {
|
|
31
29
|
"types": "./plugins/service-connect/index.d.ts",
|
|
32
|
-
"esm2022": "./esm2022/plugins/service-connect/odx-auth-plugins-service-connect.mjs",
|
|
33
|
-
"esm": "./esm2022/plugins/service-connect/odx-auth-plugins-service-connect.mjs",
|
|
34
30
|
"default": "./fesm2022/odx-auth-plugins-service-connect.mjs"
|
|
35
31
|
}
|
|
36
32
|
}
|
|
@@ -1,8 +1,186 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import * as i1 from '@odx/auth';
|
|
2
|
+
import { AuthEnvironment, AuthorizedHandler, AuthPluginFactory } from '@odx/auth';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { CanActivateFn } from '@angular/router';
|
|
5
|
+
import * as _odx_auth_plugins_service_connect from '@odx/auth/plugins/service-connect';
|
|
6
|
+
|
|
7
|
+
interface GetServiceConnectRightsResponseDto {
|
|
8
|
+
rights: string[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface GetServiceConnectUserResponseDto {
|
|
12
|
+
user_id: string;
|
|
13
|
+
first_name: string;
|
|
14
|
+
last_name: string;
|
|
15
|
+
language_code: string;
|
|
16
|
+
preferred_language: string;
|
|
17
|
+
country: string;
|
|
18
|
+
institution_id: number;
|
|
19
|
+
institution_name: string;
|
|
20
|
+
institution_name_2?: string | null;
|
|
21
|
+
institution_name_3?: string | null;
|
|
22
|
+
account_number?: string | null;
|
|
23
|
+
institution_shortname: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type ServiceConnectEnvironment = {
|
|
27
|
+
custom: string;
|
|
28
|
+
};
|
|
29
|
+
declare const ServiceConnectEnvironments: Record<AuthEnvironment, string>;
|
|
30
|
+
declare const ServiceConnectScopes: {
|
|
31
|
+
BASE: string;
|
|
32
|
+
PROFILE: string;
|
|
33
|
+
RIGHTS: string;
|
|
34
|
+
INSTITUTION: string;
|
|
35
|
+
};
|
|
36
|
+
declare const ServiceConnectEndpoints: {
|
|
37
|
+
user: string;
|
|
38
|
+
userRights: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Builds a service connect URL based on the provided environment and endpoints.
|
|
43
|
+
*
|
|
44
|
+
* @param {ServiceConnectEnvironment | AuthEnvironment} environment - The environment configuration which can be either a `ServiceConnectEnvironment` or `AuthEnvironment`.
|
|
45
|
+
* @param {string[]} endpoints - A list of endpoint strings to be appended to the base URL.
|
|
46
|
+
* @returns {string} - The constructed service connect URL as a string.
|
|
47
|
+
*/
|
|
48
|
+
declare function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string;
|
|
49
|
+
|
|
50
|
+
type Right = string | number;
|
|
51
|
+
type Role = Right[];
|
|
52
|
+
type RolesOrRights = Array<Role | Right>;
|
|
53
|
+
/**
|
|
54
|
+
* Checks if the user has any of the specified roles or rights.
|
|
55
|
+
*
|
|
56
|
+
* @param {Right[]} userRights - An array of rights that the user possesses.
|
|
57
|
+
* @param {RolesOrRights} rolesOrRights - An array of roles or rights to check against. A role is represented as an array of rights.
|
|
58
|
+
* @returns {boolean} - `true` if the user has any of the specified roles or rights, otherwise `false`.
|
|
59
|
+
*/
|
|
60
|
+
declare function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Creates an authorized handler that checks if the user has the specified roles or rights.
|
|
64
|
+
*
|
|
65
|
+
* @param {RolesOrRights} rolesOrRights - The roles or rights to check against the user's claims.
|
|
66
|
+
* @returns {AuthorizedHandler} - An handler function that takes user claims and returns a boolean indicating
|
|
67
|
+
* whether the user has the required roles or rights.
|
|
68
|
+
*/
|
|
69
|
+
declare function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler;
|
|
70
|
+
|
|
71
|
+
interface ServiceConnectPluginOptions<Dto = unknown> {
|
|
72
|
+
environment?: ServiceConnectEnvironment;
|
|
73
|
+
additionalClaims?: (dto: (Dto & Record<string, unknown>) | null) => Partial<OdxAuth.AuthPluginResult>;
|
|
74
|
+
}
|
|
75
|
+
interface ServiceConnectPluginFactoryOptions<Dto> {
|
|
76
|
+
endpoint: string[];
|
|
77
|
+
parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;
|
|
78
|
+
defaultValue?: Partial<OdxAuth.AuthPluginResult>;
|
|
79
|
+
setup?: (pluginOptions?: ServiceConnectPluginOptions<Dto>) => void;
|
|
80
|
+
}
|
|
81
|
+
type ServiceConnectPluginFactory<Dto = unknown> = (pluginOptions?: ServiceConnectPluginOptions<Dto>) => AuthPluginFactory;
|
|
82
|
+
/**
|
|
83
|
+
* Creates a plugin factory for fetching and parsing service connect data.
|
|
84
|
+
*
|
|
85
|
+
* @param {ServiceConnectPluginFactoryOptions<Dto>} options - The options for the service connect plugin factory.
|
|
86
|
+
* @returns {ServiceConnectPluginFactory} - A function that creates an auth plugin factory for fetching and parsing service connect data.
|
|
87
|
+
*/
|
|
88
|
+
declare function serviceConnectPluginFactory<Dto = unknown>(options: ServiceConnectPluginFactoryOptions<Dto>): ServiceConnectPluginFactory<Dto>;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* A directive that extends the functionality of the `AuthDirective` to handle
|
|
92
|
+
* roles or rights for service connection authorization.
|
|
93
|
+
*
|
|
94
|
+
* @see AuthDirective
|
|
95
|
+
*
|
|
96
|
+
* This directive should be used on an `ng-template` element with the selector
|
|
97
|
+
* `odxAuthServiceConnectRights`.
|
|
98
|
+
*/
|
|
99
|
+
declare class ServiceConnectRightsDirective {
|
|
100
|
+
private readonly authDirective;
|
|
101
|
+
/**
|
|
102
|
+
* Sets the roles or rights that the user must have to display the content.
|
|
103
|
+
*/
|
|
104
|
+
set rolesOrRights(value: RolesOrRights | null | undefined);
|
|
105
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ServiceConnectRightsDirective, never>;
|
|
106
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ServiceConnectRightsDirective, "ng-template[odxAuthServiceConnectRights]", never, { "rolesOrRights": { "alias": "odxAuthServiceConnectRights"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.AuthDirective; inputs: { "odxAuthElse": "odxAuthServiceConnectRightsElse"; }; outputs: {}; }]>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* A guard function to check if the user has the required roles or rights to access a route.
|
|
111
|
+
*
|
|
112
|
+
* @param {RolesOrRights} rolesOrRights - The roles or rights required to access the route.
|
|
113
|
+
* @param {string | any[]} redirectTo - (Optional) The route to redirect to if the user does not have the required roles or rights.
|
|
114
|
+
* @param {boolean} isExternal - (Optional) A flag indicating if the redirection is to an external URL. Defaults to `false`.
|
|
115
|
+
* @returns {CanActivateFn} - A function that checks the user's roles or rights and handles redirection if necessary.
|
|
116
|
+
*/
|
|
117
|
+
declare function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[], isExternal?: boolean): CanActivateFn;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* A plugin for fetching and parsing service connect rights.
|
|
121
|
+
*
|
|
122
|
+
* This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches user rights
|
|
123
|
+
* from the specified endpoint and parses the response to extract the rights.
|
|
124
|
+
*
|
|
125
|
+
* @see {serviceConnectPluginFactory}
|
|
126
|
+
*/
|
|
127
|
+
declare const serviceConnectRightsPlugin: _odx_auth_plugins_service_connect.ServiceConnectPluginFactory<GetServiceConnectRightsResponseDto>;
|
|
128
|
+
|
|
129
|
+
declare global {
|
|
130
|
+
namespace OdxAuth {
|
|
131
|
+
interface AuthPluginResult {
|
|
132
|
+
rights: (string | number)[];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Gets the preferred language from a service connect user response.
|
|
139
|
+
*
|
|
140
|
+
* @param {GetServiceConnectUserResponseDto | null} res - The service connect user response.
|
|
141
|
+
* @returns {string | undefined} - The language or undefined.
|
|
142
|
+
*/
|
|
143
|
+
declare function getServiceConnectUserLanguage(res?: GetServiceConnectUserResponseDto | null): string | undefined;
|
|
144
|
+
/**
|
|
145
|
+
* Gets the language code from a service connect user response.
|
|
146
|
+
*
|
|
147
|
+
* @param {GetServiceConnectUserResponseDto | null} res - The service connect user response.
|
|
148
|
+
* @returns {string | undefined} - The language code or undefined.
|
|
149
|
+
*/
|
|
150
|
+
declare function getServiceConnectUserLanguageCode(res?: GetServiceConnectUserResponseDto | null): string | undefined;
|
|
151
|
+
/**
|
|
152
|
+
* A plugin for fetching and parsing the user's preferred language from service connect.
|
|
153
|
+
*
|
|
154
|
+
* This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches the user's preferred language
|
|
155
|
+
* from the user endpoint and parses the response to extract the preferred language.
|
|
156
|
+
*
|
|
157
|
+
* @see {serviceConnectPluginFactory}
|
|
158
|
+
*/
|
|
159
|
+
declare const serviceConnectUserLanguagePlugin: _odx_auth_plugins_service_connect.ServiceConnectPluginFactory<GetServiceConnectUserResponseDto>;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* A plugin for fetching and parsing the user's profile from service connect.
|
|
163
|
+
*
|
|
164
|
+
* This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches the user's profile
|
|
165
|
+
* from the user endpoint and parses the response to extract the user's profile information.
|
|
166
|
+
*
|
|
167
|
+
* @see {serviceConnectPluginFactory}
|
|
168
|
+
*/
|
|
169
|
+
declare const serviceConnectUserProfilePlugin: _odx_auth_plugins_service_connect.ServiceConnectPluginFactory<GetServiceConnectUserResponseDto>;
|
|
170
|
+
|
|
171
|
+
declare global {
|
|
172
|
+
namespace OdxAuth {
|
|
173
|
+
interface AuthPluginResult {
|
|
174
|
+
country?: string;
|
|
175
|
+
institutionId?: number;
|
|
176
|
+
institutionName?: string;
|
|
177
|
+
institutionName2?: string;
|
|
178
|
+
institutionName3?: string;
|
|
179
|
+
institutionShortname?: string;
|
|
180
|
+
accountNumber?: string;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export { ServiceConnectEndpoints, ServiceConnectEnvironments, ServiceConnectRightsDirective, ServiceConnectScopes, buildServiceConnectUrl, getServiceConnectUserLanguage, getServiceConnectUserLanguageCode, hasRolesOrRights, hasRolesOrRightsHandler, serviceConnectPluginFactory, serviceConnectRightsGuard, serviceConnectRightsPlugin, serviceConnectUserLanguagePlugin, serviceConnectUserProfilePlugin };
|
|
186
|
+
export type { GetServiceConnectRightsResponseDto, GetServiceConnectUserResponseDto, Right, Role, RolesOrRights, ServiceConnectEnvironment, ServiceConnectPluginFactory, ServiceConnectPluginFactoryOptions, ServiceConnectPluginOptions };
|
package/esm2022/index.mjs
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export * from './lib/auth.component';
|
|
2
|
-
export * from './lib/auth.config';
|
|
3
|
-
export * from './lib/auth.directive';
|
|
4
|
-
export * from './lib/auth.guard';
|
|
5
|
-
export * from './lib/auth.interceptor';
|
|
6
|
-
export * from './lib/auth.module';
|
|
7
|
-
export * from './lib/auth.providers';
|
|
8
|
-
export * from './lib/auth.service';
|
|
9
|
-
export * from './lib/auth.typings';
|
|
10
|
-
export * from './lib/components';
|
|
11
|
-
export * from './lib/directives';
|
|
12
|
-
export * from './lib/helpers';
|
|
13
|
-
export * from './lib/models';
|
|
14
|
-
export * from './lib/plugins';
|
|
15
|
-
export * from './lib/unauth.guard';
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLmludGVyY2VwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGgucHJvdmlkZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnR5cGluZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BsdWdpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdW5hdXRoLmd1YXJkJztcbiJdfQ==
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { AsyncPipe } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, inject, input, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { AreaHeaderModule } from '@odx/angular/components/area-header';
|
|
4
|
-
import { DropdownModule } from '@odx/angular/components/dropdown';
|
|
5
|
-
import { HeaderModule } from '@odx/angular/components/header';
|
|
6
|
-
import { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';
|
|
7
|
-
import { provideTranslations, TranslatePipe } from '@odx/angular/internal/translate';
|
|
8
|
-
import { Position } from '@odx/angular/utils';
|
|
9
|
-
import { combineLatest } from 'rxjs';
|
|
10
|
-
import { injectAuthConfig } from './auth.config';
|
|
11
|
-
import translations from './auth.i18n';
|
|
12
|
-
import { AuthService } from './auth.service';
|
|
13
|
-
import { AuthActionsComponent } from './components';
|
|
14
|
-
import { SignInDirective } from './directives';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "@angular/common";
|
|
17
|
-
import * as i2 from "@odx/angular/components/area-header";
|
|
18
|
-
import * as i3 from "@odx/angular/components/avatar";
|
|
19
|
-
import * as i4 from "@odx/angular/components/action-group";
|
|
20
|
-
import * as i5 from "@odx/angular/components/button";
|
|
21
|
-
import * as i6 from "@odx/angular/components/icon";
|
|
22
|
-
import * as i7 from "@odx/angular/components/dropdown";
|
|
23
|
-
export class AuthComponent {
|
|
24
|
-
constructor() {
|
|
25
|
-
this.authConfig = injectAuthConfig();
|
|
26
|
-
this.authService = inject(AuthService);
|
|
27
|
-
this.dropdownOptions = {
|
|
28
|
-
position: Position.BOTTOM_END,
|
|
29
|
-
enableFallback: false,
|
|
30
|
-
containerClass: 'odx-auth-user-profile',
|
|
31
|
-
};
|
|
32
|
-
this.vm$ = combineLatest({
|
|
33
|
-
idClaims: this.authService.identityClaims$,
|
|
34
|
-
isAuthenticated: this.authService.isAuthenticated$,
|
|
35
|
-
});
|
|
36
|
-
/**
|
|
37
|
-
* Whether to hide the institution information.
|
|
38
|
-
*
|
|
39
|
-
* @type {InputSignal<boolean>}
|
|
40
|
-
*/
|
|
41
|
-
this.hideInstitution = input(false);
|
|
42
|
-
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AuthComponent, isStandalone: true, selector: "odx-auth", inputs: { hideInstitution: { classPropertyName: "hideInstitution", publicName: "hideInstitution", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslations(translations)], ngImport: i0, template: "<odx-action-group>\n @if (vm$ | async; as vm) {\n <ng-container ngProjectAs=\"[odxButton]\">\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" />\n </button>\n } @else {\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft />\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n }\n <ng-template #userProfileMenu>\n @if (!hideInstitution() && vm.idClaims?.institutionName; as institutionName) {\n <p class=\"odx-padding-x-8\" data-testid=\"odx-auth-institution-name\">{{ institutionName }}</p>\n }\n <odx-area-header class=\"odx-padding-x-8 odx-margin-y-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\" />\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 />\n <odx-auth-actions [claims]=\"vm.idClaims\" />\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-container>\n }\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner{border-block-width:var(--odx-control-border-width);max-width:max(400px,25vw);min-width:320px}\n"], dependencies: [{ kind: "ngmodule", type: AreaHeaderModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: i2.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i2.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i3.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i4.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i6.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i7.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: SignInDirective, selector: "[odxButton][odxAuthSignIn]", outputs: ["odxAuthSignIn"] }, { 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 }); }
|
|
45
|
-
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthComponent, decorators: [{
|
|
47
|
-
type: Component,
|
|
48
|
-
args: [{ standalone: true, selector: 'odx-auth', imports: [AreaHeaderModule, DropdownModule, HeaderModule, SignInDirective, LoadingSpinnerModule, AuthActionsComponent, TranslatePipe, AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [provideTranslations(translations)], template: "<odx-action-group>\n @if (vm$ | async; as vm) {\n <ng-container ngProjectAs=\"[odxButton]\">\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" />\n </button>\n } @else {\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft />\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n }\n <ng-template #userProfileMenu>\n @if (!hideInstitution() && vm.idClaims?.institutionName; as institutionName) {\n <p class=\"odx-padding-x-8\" data-testid=\"odx-auth-institution-name\">{{ institutionName }}</p>\n }\n <odx-area-header class=\"odx-padding-x-8 odx-margin-y-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\" />\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 />\n <odx-auth-actions [claims]=\"vm.idClaims\" />\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-container>\n }\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner{border-block-width:var(--odx-control-border-width);max-width:max(400px,25vw);min-width:320px}\n"] }]
|
|
49
|
-
}] });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFtQixNQUFNLGtDQUFrQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sWUFBWSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7OztBQVkvQyxNQUFNLE9BQU8sYUFBYTtJQVYxQjtRQVdxQixlQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxvQkFBZSxHQUFHO1lBQ25DLFFBQVEsRUFBRSxRQUFRLENBQUMsVUFBVTtZQUM3QixjQUFjLEVBQUUsS0FBSztZQUNyQixjQUFjLEVBQUUsdUJBQXVCO1NBQ1osQ0FBQztRQUNYLFFBQUcsR0FBRyxhQUFhLENBQUM7WUFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZTtZQUMxQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7U0FDbkQsQ0FBQyxDQUFDO1FBRUg7Ozs7V0FJRztRQUNhLG9CQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2hEOytHQW5CWSxhQUFhO21HQUFiLGFBQWEseU5BRmIsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQywwQkN2QmhELGdpREFtQ0Esb01EakJZLGdCQUFnQiw2NEJBQUUsY0FBYywwZkFBRSxZQUFZLCtCQUFFLGVBQWUsa0dBQUUsb0JBQW9CLCtCQUFFLG9CQUFvQiw0RUFBRSxhQUFhOzs0RkFPekgsYUFBYTtrQkFWekIsU0FBUztpQ0FDSSxJQUFJLFlBQ04sVUFBVSxXQUNYLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxtQkFHL0gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcmVhSGVhZGVyTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvYXJlYS1oZWFkZXInO1xuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUsIERyb3Bkb3duT3B0aW9ucyB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEhlYWRlck1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2hlYWRlcic7XG5pbXBvcnQgeyBMb2FkaW5nU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsYXRpb25zLCBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsL3RyYW5zbGF0ZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RBdXRoQ29uZmlnIH0gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vYXV0aC5pMThuJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aEFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgU2lnbkluRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnb2R4LWF1dGgnLFxuICBpbXBvcnRzOiBbQXJlYUhlYWRlck1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIEhlYWRlck1vZHVsZSwgU2lnbkluRGlyZWN0aXZlLCBMb2FkaW5nU3Bpbm5lck1vZHVsZSwgQXV0aEFjdGlvbnNDb21wb25lbnQsIFRyYW5zbGF0ZVBpcGUsIEFzeW5jUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXV0aC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpXSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0aENvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBhdXRoQ29uZmlnID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd25PcHRpb25zID0ge1xuICAgIHBvc2l0aW9uOiBQb3NpdGlvbi5CT1RUT01fRU5ELFxuICAgIGVuYWJsZUZhbGxiYWNrOiBmYWxzZSxcbiAgICBjb250YWluZXJDbGFzczogJ29keC1hdXRoLXVzZXItcHJvZmlsZScsXG4gIH0gYXMgUGFydGlhbDxEcm9wZG93bk9wdGlvbnM+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdm0kID0gY29tYmluZUxhdGVzdCh7XG4gICAgaWRDbGFpbXM6IHRoaXMuYXV0aFNlcnZpY2UuaWRlbnRpdHlDbGFpbXMkLFxuICAgIGlzQXV0aGVudGljYXRlZDogdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQkLFxuICB9KTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBoaWRlIHRoZSBpbnN0aXR1dGlvbiBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHR5cGUge0lucHV0U2lnbmFsPGJvb2xlYW4+fVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhpZGVJbnN0aXR1dGlvbiA9IGlucHV0KGZhbHNlKTtcbn1cbiIsIjxvZHgtYWN0aW9uLWdyb3VwPlxuICBAaWYgKHZtJCB8IGFzeW5jOyBhcyB2bSkge1xuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbb2R4QnV0dG9uXVwiPlxuICAgICAgQGlmICh2bS5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgPGJ1dHRvbiBvZHhCdXR0b24gW29keERyb3Bkb3duXT1cInVzZXJQcm9maWxlTWVudVwiIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwiZHJvcGRvd25PcHRpb25zXCIgZGF0YS10ZXN0aWQ9XCJvZHgtYXV0aC11c2VyLXByb2ZpbGUtYnV0dG9uXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVzZXJBdmF0YXJcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8YnV0dG9uIGNsYXNzPVwib2R4LWF1dGgtc2lnbi1pblwiIG9keEJ1dHRvbiBvZHhBdXRoU2lnbkluIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBkYXRhLXRlc3RpZD1cIm9keC1hdXRoLXNpZ24taW4tYnV0dG9uXCI+XG4gICAgICAgICAgPG9keC1pY29uIG5hbWU9XCJ1c2VyXCIgYWxpZ25MZWZ0IC8+XG4gICAgICAgICAge3sgJ3NpZ25JbkJ1dHRvblRleHQnIHwgb2R4VHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICA8bmctdGVtcGxhdGUgI3VzZXJQcm9maWxlTWVudT5cbiAgICAgICAgQGlmICghaGlkZUluc3RpdHV0aW9uKCkgJiYgdm0uaWRDbGFpbXM/Lmluc3RpdHV0aW9uTmFtZTsgYXMgaW5zdGl0dXRpb25OYW1lKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJvZHgtcGFkZGluZy14LThcIiBkYXRhLXRlc3RpZD1cIm9keC1hdXRoLWluc3RpdHV0aW9uLW5hbWVcIj57eyBpbnN0aXR1dGlvbk5hbWUgfX08L3A+XG4gICAgICAgIH1cbiAgICAgICAgPG9keC1hcmVhLWhlYWRlciBjbGFzcz1cIm9keC1wYWRkaW5nLXgtOCBvZHgtbWFyZ2luLXktMTJcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidXNlckF2YXRhclwiIG5nUHJvamVjdEFzPVwib2R4LWF2YXRhclwiIC8+XG4gICAgICAgICAge3sgdm0uaWRDbGFpbXM/LnVzZXJuYW1lIH19XG4gICAgICAgICAgPG9keC1hcmVhLWhlYWRlci1zdWJ0aXRsZT5cbiAgICAgICAgICAgIHt7IHZtLmlkQ2xhaW1zPy5lbWFpbCB9fVxuICAgICAgICAgIDwvb2R4LWFyZWEtaGVhZGVyLXN1YnRpdGxlPlxuICAgICAgICA8L29keC1hcmVhLWhlYWRlcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgPG9keC1hdXRoLWFjdGlvbnMgW2NsYWltc109XCJ2bS5pZENsYWltc1wiIC8+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICN1c2VyQXZhdGFyPlxuICAgICAgICA8b2R4LWF2YXRhciBjbGFzcz1cIm9keC1hdXRoLXVzZXItYXZhdGFyXCI+XG4gICAgICAgICAge3sgdm0uaWRDbGFpbXM/LmluaXRpYWxzID8/ICcnIH19XG4gICAgICAgIDwvb2R4LWF2YXRhcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIH1cbjwvb2R4LWFjdGlvbi1ncm91cD5cbiJdfQ==
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { createConfigTokens } from '@odx/angular/utils';
|
|
2
|
-
import { createInitials, resolveEmail, resolveUsername } from './helpers';
|
|
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
|
-
dev: 'https://dev.login.draeger.com',
|
|
7
|
-
stage: 'https://test.login.draeger.com',
|
|
8
|
-
prod: 'https://login.draeger.com',
|
|
9
|
-
};
|
|
10
|
-
export const ODX_AUTH_USER_PROFILE_HOSTS = {
|
|
11
|
-
dev: 'https://lemon-ocean-04a922703.3.azurestaticapps.net',
|
|
12
|
-
stage: 'https://purple-cliff-0e61c5703.3.azurestaticapps.net',
|
|
13
|
-
prod: 'https://id.draeger.com',
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Tools for injecting and providing the auth configuration with default configuration for the authentication.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* // Providing custom authentication configuration.
|
|
20
|
-
* ```ts
|
|
21
|
-
* import { createInitials, resolveEmail, resolveUsername } from './helpers';
|
|
22
|
-
*
|
|
23
|
-
* providers: [provideAuthConfig({
|
|
24
|
-
* environment: 'dev',
|
|
25
|
-
* redirectPath: 'login/callback',
|
|
26
|
-
* allowedUrls: [],
|
|
27
|
-
* timeoutFactor: 0.75,
|
|
28
|
-
* maxOfflineTime: 60 * 60, // 1 hour
|
|
29
|
-
* loadUserProfile: false,
|
|
30
|
-
* errorHandler: (error) => {
|
|
31
|
-
* throw error;
|
|
32
|
-
* },
|
|
33
|
-
* createInitials,
|
|
34
|
-
* resolveEmail,
|
|
35
|
-
* resolveUsername,
|
|
36
|
-
* plugins: [],
|
|
37
|
-
* defaultAuthorizedHandler: null,
|
|
38
|
-
* enableLoadingScreen: true,
|
|
39
|
-
* loadingScreenMessage: 'Loading...',
|
|
40
|
-
* waitForTokenInMs: 500,
|
|
41
|
-
*
|
|
42
|
-
* })],
|
|
43
|
-
*
|
|
44
|
-
* // Injecting the datepicker configuration.
|
|
45
|
-
* ```ts
|
|
46
|
-
* @Component({})
|
|
47
|
-
* export class MyComponent {
|
|
48
|
-
* constructor(@Inject(injectAuthConfig()) private readonly authConfig: AuthConfig) {}
|
|
49
|
-
* }
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {
|
|
53
|
-
environment: 'prod',
|
|
54
|
-
redirectPath: 'login/callback',
|
|
55
|
-
allowedUrls: [],
|
|
56
|
-
timeoutFactor: 0.75,
|
|
57
|
-
maxOfflineTime: 24 * 60 * 60, // 1 day
|
|
58
|
-
loadUserProfile: false,
|
|
59
|
-
errorHandler: (error) => {
|
|
60
|
-
throw error;
|
|
61
|
-
},
|
|
62
|
-
createInitials,
|
|
63
|
-
resolveEmail,
|
|
64
|
-
resolveUsername,
|
|
65
|
-
plugins: [],
|
|
66
|
-
defaultAuthorizedHandler: null,
|
|
67
|
-
enableLoadingScreen: true,
|
|
68
|
-
loadingScreenMessage: null,
|
|
69
|
-
waitForTokenInMs: 1000,
|
|
70
|
-
});
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJMUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN4RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW9DO0lBQzdELEdBQUcsRUFBRSwrQkFBK0I7SUFDcEMsS0FBSyxFQUFFLGdDQUFnQztJQUN2QyxJQUFJLEVBQUUsMkJBQTJCO0NBQ2xDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBb0M7SUFDMUUsR0FBRyxFQUFFLHFEQUFxRDtJQUMxRCxLQUFLLEVBQUUsc0RBQXNEO0lBQzdELElBQUksRUFBRSx3QkFBd0I7Q0FDL0IsQ0FBQztBQTJDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO0lBQzVILFdBQVcsRUFBRSxNQUFNO0lBQ25CLFlBQVksRUFBRSxnQkFBZ0I7SUFDOUIsV0FBVyxFQUFFLEVBQUU7SUFDZixhQUFhLEVBQUUsSUFBSTtJQUNuQixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUTtJQUN0QyxlQUFlLEVBQUUsS0FBSztJQUN0QixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN0QixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxjQUFjO0lBQ2QsWUFBWTtJQUNaLGVBQWU7SUFDZixPQUFPLEVBQUUsRUFBRTtJQUNYLHdCQUF3QixFQUFFLElBQUk7SUFDOUIsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLGdCQUFnQixFQUFFLElBQUk7Q0FDVCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEeW5hbWljVGV4dENvbnRlbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2R5bmFtaWMtdmlldyc7XG5pbXBvcnQgeyBjcmVhdGVDb25maWdUb2tlbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgT0F1dGhFcnJvckV2ZW50LCBPQXV0aFN0b3JhZ2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7IGNyZWF0ZUluaXRpYWxzLCByZXNvbHZlRW1haWwsIHJlc29sdmVVc2VybmFtZSB9IGZyb20gJy4vaGVscGVycyc7XG5cbmltcG9ydCB7IEF1dGhFbnZpcm9ubWVudCwgQXV0aG9yaXplZEhhbmRsZXIsIEF1dGhQbHVnaW5GYWN0b3J5IH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgQVVUSF9IVFRQX0hFQURFUiA9ICdBdXRob3JpemF0aW9uJztcbmV4cG9ydCBjb25zdCBPRFhfQVVUSF9ERUZBVUxUX1NDT1BFUyA9IFsnb3BlbmlkJywgJ3Byb2ZpbGUnLCAnZW1haWwnLCAnb2ZmbGluZV9hY2Nlc3MnXTtcbmV4cG9ydCBjb25zdCBPRFhfQVVUSF9IT1NUUzogUmVjb3JkPEF1dGhFbnZpcm9ubWVudCwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnaHR0cHM6Ly9kZXYubG9naW4uZHJhZWdlci5jb20nLFxuICBzdGFnZTogJ2h0dHBzOi8vdGVzdC5sb2dpbi5kcmFlZ2VyLmNvbScsXG4gIHByb2Q6ICdodHRwczovL2xvZ2luLmRyYWVnZXIuY29tJyxcbn07XG5leHBvcnQgY29uc3QgT0RYX0FVVEhfVVNFUl9QUk9GSUxFX0hPU1RTOiBSZWNvcmQ8QXV0aEVudmlyb25tZW50LCBzdHJpbmc+ID0ge1xuICBkZXY6ICdodHRwczovL2xlbW9uLW9jZWFuLTA0YTkyMjcwMy4zLmF6dXJlc3RhdGljYXBwcy5uZXQnLFxuICBzdGFnZTogJ2h0dHBzOi8vcHVycGxlLWNsaWZmLTBlNjFjNTcwMy4zLmF6dXJlc3RhdGljYXBwcy5uZXQnLFxuICBwcm9kOiAnaHR0cHM6Ly9pZC5kcmFlZ2VyLmNvbScsXG59O1xuXG5leHBvcnQgdHlwZSBBdXRoRXJyb3JIYW5kbGVyRm4gPSAoZXJyb3I6IE9BdXRoRXJyb3JFdmVudCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFJlc29sdmVVc2VybmFtZUZuID0gKHJhd0NsYWltczogT2R4QXV0aC5SYXdJZGVudGl0eUNsYWltcykgPT4gc3RyaW5nO1xuZXhwb3J0IHR5cGUgUmVzb2x2ZUVtYWlsRm4gPSAocmF3Q2xhaW1zOiBPZHhBdXRoLlJhd0lkZW50aXR5Q2xhaW1zKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBDcmVhdGVJbml0aWFsc0ZuID0gKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBtb2R1bGUuXG4gKlxuICogQGludGVyZmFjZSBBdXRoQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIGVudmlyb25tZW50OiBBdXRoRW52aXJvbm1lbnQ7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIHJlZGlyZWN0UGF0aDogc3RyaW5nO1xuICBhbGxvd2VkVXJsczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgdGltZW91dEZhY3RvcjogbnVtYmVyO1xuICBtYXhPZmZsaW5lVGltZTogbnVtYmVyO1xuICBsb2FkVXNlclByb2ZpbGU6IGJvb2xlYW47XG4gIHBvc3RMb2dvdXRSZWRpcmVjdFVybD86IHN0cmluZztcbiAgc2NvcGVzPzogc3RyaW5nW107XG4gIGRpc2NvdmVyeVVybD86IHN0cmluZztcbiAgZXJyb3JIYW5kbGVyOiBBdXRoRXJyb3JIYW5kbGVyRm47XG4gIGNyZWF0ZUluaXRpYWxzOiBDcmVhdGVJbml0aWFsc0ZuO1xuICByZXNvbHZlRW1haWw6IFJlc29sdmVFbWFpbEZuO1xuICByZXNvbHZlVXNlcm5hbWU6IFJlc29sdmVVc2VybmFtZUZuO1xuICBzdG9yYWdlPzogT0F1dGhTdG9yYWdlO1xuICBwbHVnaW5zOiBBdXRoUGx1Z2luRmFjdG9yeVtdO1xuICBwbHVnaW5zRXJyb3JIYW5kbGVyPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuICBkZWZhdWx0QXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciB8IG51bGw7XG4gIGVuYWJsZUxvYWRpbmdTY3JlZW46IGJvb2xlYW47XG4gIHJlZnJlc2hUb2tlbk9uSW5pdD86IGJvb2xlYW47XG4gIGxvYWRpbmdTY3JlZW5NZXNzYWdlPzogRHluYW1pY1RleHRDb250ZW50IHwgbnVsbDtcbiAgdXNlclByb2ZpbGVVcmw/OiBzdHJpbmc7XG4gIHJlcXVpcmVTaWduSW4/OiBib29sZWFuO1xuICByZXF1aXJlU2lnbkluRm9yUmVxdWVzdHM/OiBib29sZWFuO1xuICB3YWl0Rm9yVG9rZW5Jbk1zPzogbnVtYmVyO1xuICBzaG93RGVidWdJbmZvcm1hdGlvbj86IGJvb2xlYW47XG4gIHBsdWdpblRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVG9vbHMgZm9yIGluamVjdGluZyBhbmQgcHJvdmlkaW5nIHRoZSBhdXRoIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhdXRoZW50aWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUHJvdmlkaW5nIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogYGBgdHNcbiAqICAgaW1wb3J0IHsgY3JlYXRlSW5pdGlhbHMsIHJlc29sdmVFbWFpbCwgcmVzb2x2ZVVzZXJuYW1lIH0gZnJvbSAnLi9oZWxwZXJzJztcbiAqXG4gKiAgIHByb3ZpZGVyczogW3Byb3ZpZGVBdXRoQ29uZmlnKHtcbiAqICAgICAgICBlbnZpcm9ubWVudDogJ2RldicsXG4gKiAgICAgICAgcmVkaXJlY3RQYXRoOiAnbG9naW4vY2FsbGJhY2snLFxuICogICAgICAgIGFsbG93ZWRVcmxzOiBbXSxcbiAqICAgICAgICB0aW1lb3V0RmFjdG9yOiAwLjc1LFxuICogICAgICAgIG1heE9mZmxpbmVUaW1lOiA2MCAqIDYwLCAvLyAxIGhvdXJcbiAqICAgICAgICBsb2FkVXNlclByb2ZpbGU6IGZhbHNlLFxuICogICAgICAgIGVycm9ySGFuZGxlcjogKGVycm9yKSA9PiB7XG4gKiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAqICAgICAgICB9LFxuICogICAgICAgIGNyZWF0ZUluaXRpYWxzLFxuICogICAgICAgIHJlc29sdmVFbWFpbCxcbiAqICAgICAgICByZXNvbHZlVXNlcm5hbWUsXG4gKiAgICAgICAgcGx1Z2luczogW10sXG4gKiAgICAgICAgZGVmYXVsdEF1dGhvcml6ZWRIYW5kbGVyOiBudWxsLFxuICogICAgICAgIGVuYWJsZUxvYWRpbmdTY3JlZW46IHRydWUsXG4gKiAgICAgICAgbG9hZGluZ1NjcmVlbk1lc3NhZ2U6ICdMb2FkaW5nLi4uJyxcbiAqICAgICAgICB3YWl0Rm9yVG9rZW5Jbk1zOiA1MDAsXG4gKlxuICogICAgfSldLFxuICpcbiAqIC8vIEluamVjdGluZyB0aGUgZGF0ZXBpY2tlciBjb25maWd1cmF0aW9uLlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe30pXG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogIGNvbnN0cnVjdG9yKEBJbmplY3QoaW5qZWN0QXV0aENvbmZpZygpKSBwcml2YXRlIHJlYWRvbmx5IGF1dGhDb25maWc6IEF1dGhDb25maWcpIHt9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHsgQXV0aERlZmF1bHRDb25maWcsIEF1dGhDb25maWcsIGluamVjdEF1dGhDb25maWcsIHByb3ZpZGVBdXRoQ29uZmlnIH0gPSBjcmVhdGVDb25maWdUb2tlbnMoJ0F1dGgnLCAnQG9keC9hdXRoJywge1xuICBlbnZpcm9ubWVudDogJ3Byb2QnLFxuICByZWRpcmVjdFBhdGg6ICdsb2dpbi9jYWxsYmFjaycsXG4gIGFsbG93ZWRVcmxzOiBbXSxcbiAgdGltZW91dEZhY3RvcjogMC43NSxcbiAgbWF4T2ZmbGluZVRpbWU6IDI0ICogNjAgKiA2MCwgLy8gMSBkYXlcbiAgbG9hZFVzZXJQcm9maWxlOiBmYWxzZSxcbiAgZXJyb3JIYW5kbGVyOiAoZXJyb3IpID0+IHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSxcbiAgY3JlYXRlSW5pdGlhbHMsXG4gIHJlc29sdmVFbWFpbCxcbiAgcmVzb2x2ZVVzZXJuYW1lLFxuICBwbHVnaW5zOiBbXSxcbiAgZGVmYXVsdEF1dGhvcml6ZWRIYW5kbGVyOiBudWxsLFxuICBlbmFibGVMb2FkaW5nU2NyZWVuOiB0cnVlLFxuICBsb2FkaW5nU2NyZWVuTWVzc2FnZTogbnVsbCxcbiAgd2FpdEZvclRva2VuSW5NczogMTAwMCxcbn0gYXMgQXV0aENvbmZpZyk7XG4iXX0=
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { NgIf } from '@angular/common';
|
|
2
|
-
import { Directive, inject, Input, TemplateRef } from '@angular/core';
|
|
3
|
-
import { isString, untilDestroyed } from '@odx/angular/utils';
|
|
4
|
-
import { AuthService } from './auth.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
export class AuthDirective {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.authService = inject(AuthService);
|
|
10
|
-
this.ngIfDirective = inject(NgIf, { host: true });
|
|
11
|
-
this.takeUntilDestroyed = untilDestroyed();
|
|
12
|
-
/**
|
|
13
|
-
* The authorization handler or a string representing the handler.
|
|
14
|
-
*
|
|
15
|
-
* @type {AuthorizedHandler | null | string}
|
|
16
|
-
*/
|
|
17
|
-
this.authorizationHandler = null;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Sets the template to be displayed when the authorization check fails.
|
|
21
|
-
*
|
|
22
|
-
* @param {TemplateRef<NgIfContext<unknown>>} value - The template reference.
|
|
23
|
-
*/
|
|
24
|
-
// eslint-disable-next-line @angular-eslint/no-input-rename
|
|
25
|
-
set elseTemplate(value) {
|
|
26
|
-
this.ngIfDirective.ngIfElse = value;
|
|
27
|
-
}
|
|
28
|
-
ngAfterViewInit() {
|
|
29
|
-
this.authService.identityClaims$.pipe(this.takeUntilDestroyed()).subscribe(() => {
|
|
30
|
-
const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;
|
|
31
|
-
this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
35
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AuthDirective, isStandalone: true, selector: "ng-template[odxAuth]", inputs: { authorizationHandler: ["odxAuth", "authorizationHandler"], elseTemplate: ["odxAuthElse", "elseTemplate"] }, hostDirectives: [{ directive: i1.NgIf }], ngImport: i0 }); }
|
|
36
|
-
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthDirective, decorators: [{
|
|
38
|
-
type: Directive,
|
|
39
|
-
args: [{
|
|
40
|
-
standalone: true,
|
|
41
|
-
selector: 'ng-template[odxAuth]',
|
|
42
|
-
hostDirectives: [NgIf],
|
|
43
|
-
}]
|
|
44
|
-
}], propDecorators: { authorizationHandler: [{
|
|
45
|
-
type: Input,
|
|
46
|
-
args: ['odxAuth']
|
|
47
|
-
}], elseTemplate: [{
|
|
48
|
-
type: Input,
|
|
49
|
-
args: ['odxAuthElse']
|
|
50
|
-
}] } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFlLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVE3QyxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQU1tQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUV2RDs7OztXQUlHO1FBRUkseUJBQW9CLEdBQXVDLElBQUksQ0FBQztLQW1CeEU7SUFqQkM7Ozs7T0FJRztJQUNILDJEQUEyRDtJQUMzRCxJQUNXLFlBQVksQ0FBQyxLQUF3QztRQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM5RSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3ZGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0E3QlUsYUFBYTttR0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUx6QixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUM7aUJBQ3ZCOzhCQVlRLG9CQUFvQjtzQkFEMUIsS0FBSzt1QkFBQyxTQUFTO2dCQVVMLFlBQVk7c0JBRHRCLEtBQUs7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nSWZDb250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzU3RyaW5nLCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhvcml6ZWRIYW5kbGVyIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtvZHhBdXRoXScsXG4gIGhvc3REaXJlY3RpdmVzOiBbTmdJZl0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmdJZkRpcmVjdGl2ZSA9IGluamVjdChOZ0lmLCB7IGhvc3Q6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6YXRpb24gaGFuZGxlciBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGhhbmRsZXIuXG4gICAqXG4gICAqIEB0eXBlIHtBdXRob3JpemVkSGFuZGxlciB8IG51bGwgfCBzdHJpbmd9XG4gICAqL1xuICBASW5wdXQoJ29keEF1dGgnKVxuICBwdWJsaWMgYXV0aG9yaXphdGlvbkhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciB8IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW1wbGF0ZSB0byBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgYXV0aG9yaXphdGlvbiBjaGVjayBmYWlscy5cbiAgICpcbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxOZ0lmQ29udGV4dDx1bmtub3duPj59IHZhbHVlIC0gVGhlIHRlbXBsYXRlIHJlZmVyZW5jZS5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnb2R4QXV0aEVsc2UnKVxuICBwdWJsaWMgc2V0IGVsc2VUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGVSZWY8TmdJZkNvbnRleHQ8dW5rbm93bj4+KSB7XG4gICAgdGhpcy5uZ0lmRGlyZWN0aXZlLm5nSWZFbHNlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXV0aFNlcnZpY2UuaWRlbnRpdHlDbGFpbXMkLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBpc1N0cmluZyh0aGlzLmF1dGhvcml6YXRpb25IYW5kbGVyKSA/IG51bGwgOiB0aGlzLmF1dGhvcml6YXRpb25IYW5kbGVyO1xuICAgICAgdGhpcy5uZ0lmRGlyZWN0aXZlLm5nSWYgPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aG9yaXplZChoYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { inject } from '@angular/core';
|
|
2
|
-
import { Router } from '@angular/router';
|
|
3
|
-
import { WindowRef } from '@odx/angular';
|
|
4
|
-
import { isString } from '@odx/angular/utils';
|
|
5
|
-
import { EMPTY, of, switchMap, take, tap } from 'rxjs';
|
|
6
|
-
import { AuthService } from './auth.service';
|
|
7
|
-
/**
|
|
8
|
-
* Guard function to protect routes from unauthorized access.
|
|
9
|
-
*
|
|
10
|
-
* @param {AuthorizedHandler} [authorizedHandler] - Optional handler to check if the user is authorized.
|
|
11
|
-
* @param {string | any[]} [redirectTo] - Optional URL or route to redirect unauthorized users to. Can be a string or an array of strings.
|
|
12
|
-
* @param {boolean} [isExternal=false] - Optional flag to indicate if the redirection should be external. Defaults to false.
|
|
13
|
-
* @returns {CanActivateFn} A function that implements the CanActivateFn interface.
|
|
14
|
-
*/
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
-
export function authGuard(authorizedHandler, redirectTo, isExternal = false) {
|
|
17
|
-
return (_, state) => {
|
|
18
|
-
const authService = inject(AuthService);
|
|
19
|
-
const windowRef = inject(WindowRef);
|
|
20
|
-
const router = inject(Router, { optional: true });
|
|
21
|
-
return authService.isAuthenticated$.pipe(switchMap((isAuthenticated) => {
|
|
22
|
-
if (!isAuthenticated) {
|
|
23
|
-
authService.signIn(state.url);
|
|
24
|
-
return EMPTY;
|
|
25
|
-
}
|
|
26
|
-
return of(authService.isAuthorized(authorizedHandler));
|
|
27
|
-
}), tap((isAuthorized) => {
|
|
28
|
-
if (isAuthorized || !router)
|
|
29
|
-
return;
|
|
30
|
-
if (isString(redirectTo)) {
|
|
31
|
-
if (isExternal) {
|
|
32
|
-
windowRef.location.assign(redirectTo);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
router.navigateByUrl(redirectTo);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else if (Array.isArray(redirectTo)) {
|
|
39
|
-
router.navigate(redirectTo);
|
|
40
|
-
}
|
|
41
|
-
}), take(1));
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3Qzs7Ozs7OztHQU9HO0FBQ0gsOERBQThEO0FBQzlELE1BQU0sVUFBVSxTQUFTLENBQUMsaUJBQXFDLEVBQUUsVUFBMkIsRUFBRSxVQUFVLEdBQUcsS0FBSztJQUM5RyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWxELE9BQU8sV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDdEMsU0FBUyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNyQixXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFOUIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxZQUFZLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFDcEMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm4sIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgRU1QVFksIG9mLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemVkSGFuZGxlciB9IGZyb20gJy4vbW9kZWxzJztcblxuLyoqXG4gKiBHdWFyZCBmdW5jdGlvbiB0byBwcm90ZWN0IHJvdXRlcyBmcm9tIHVuYXV0aG9yaXplZCBhY2Nlc3MuXG4gKlxuICogQHBhcmFtIHtBdXRob3JpemVkSGFuZGxlcn0gW2F1dGhvcml6ZWRIYW5kbGVyXSAtIE9wdGlvbmFsIGhhbmRsZXIgdG8gY2hlY2sgaWYgdGhlIHVzZXIgaXMgYXV0aG9yaXplZC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgYW55W119IFtyZWRpcmVjdFRvXSAtIE9wdGlvbmFsIFVSTCBvciByb3V0ZSB0byByZWRpcmVjdCB1bmF1dGhvcml6ZWQgdXNlcnMgdG8uIENhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNFeHRlcm5hbD1mYWxzZV0gLSBPcHRpb25hbCBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSByZWRpcmVjdGlvbiBzaG91bGQgYmUgZXh0ZXJuYWwuIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHJldHVybnMge0NhbkFjdGl2YXRlRm59IEEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIHRoZSBDYW5BY3RpdmF0ZUZuIGludGVyZmFjZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBhdXRoR3VhcmQoYXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlciwgcmVkaXJlY3RUbz86IGFueVtdIHwgc3RyaW5nLCBpc0V4dGVybmFsID0gZmFsc2UpOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuIChfLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgICBjb25zdCB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoaXNBdXRoZW50aWNhdGVkKSA9PiB7XG4gICAgICAgIGlmICghaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgYXV0aFNlcnZpY2Uuc2lnbkluKHN0YXRlLnVybCk7XG5cbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKGF1dGhTZXJ2aWNlLmlzQXV0aG9yaXplZChhdXRob3JpemVkSGFuZGxlcikpO1xuICAgICAgfSksXG4gICAgICB0YXAoKGlzQXV0aG9yaXplZCkgPT4ge1xuICAgICAgICBpZiAoaXNBdXRob3JpemVkIHx8ICFyb3V0ZXIpIHJldHVybjtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHJlZGlyZWN0VG8pKSB7XG4gICAgICAgICAgaWYgKGlzRXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlZi5sb2NhdGlvbi5hc3NpZ24ocmVkaXJlY3RUbyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJlZGlyZWN0VG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlZGlyZWN0VG8pKSB7XG4gICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHJlZGlyZWN0VG8pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
en: {
|
|
3
|
-
userProfileLink: 'My profile',
|
|
4
|
-
signInButtonText: 'Sign in',
|
|
5
|
-
signOutButtonText: 'Sign out',
|
|
6
|
-
},
|
|
7
|
-
de: {
|
|
8
|
-
userProfileLink: 'Mein Profil',
|
|
9
|
-
signInButtonText: 'Einloggen',
|
|
10
|
-
signOutButtonText: 'Ausloggen',
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pMThuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGVBQWU7SUFDYixFQUFFLEVBQUU7UUFDRixlQUFlLEVBQUUsWUFBWTtRQUM3QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLGlCQUFpQixFQUFFLFVBQVU7S0FDOUI7SUFDRCxFQUFFLEVBQUU7UUFDRixlQUFlLEVBQUUsYUFBYTtRQUM5QixnQkFBZ0IsRUFBRSxXQUFXO1FBQzdCLGlCQUFpQixFQUFFLFdBQVc7S0FDL0I7Q0FDbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0aW9uT2JqZWN0IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsL3RyYW5zbGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW46IHtcbiAgICB1c2VyUHJvZmlsZUxpbms6ICdNeSBwcm9maWxlJyxcbiAgICBzaWduSW5CdXR0b25UZXh0OiAnU2lnbiBpbicsXG4gICAgc2lnbk91dEJ1dHRvblRleHQ6ICdTaWduIG91dCcsXG4gIH0sXG4gIGRlOiB7XG4gICAgdXNlclByb2ZpbGVMaW5rOiAnTWVpbiBQcm9maWwnLFxuICAgIHNpZ25JbkJ1dHRvblRleHQ6ICdFaW5sb2dnZW4nLFxuICAgIHNpZ25PdXRCdXR0b25UZXh0OiAnQXVzbG9nZ2VuJyxcbiAgfSxcbn0gYXMgVHJhbnNsYXRpb25PYmplY3Q7XG4iXX0=
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { HttpContextToken } from '@angular/common/http';
|
|
2
|
-
import { inject } from '@angular/core';
|
|
3
|
-
import { matchUrl } from '@odx/angular/utils';
|
|
4
|
-
import { mergeMap } from 'rxjs';
|
|
5
|
-
import { injectAuthConfig } from './auth.config';
|
|
6
|
-
import { AuthService } from './auth.service';
|
|
7
|
-
export const requireAuthentication = new HttpContextToken(() => false);
|
|
8
|
-
/**
|
|
9
|
-
* Interceptor to handle authentication for HTTP requests.
|
|
10
|
-
*
|
|
11
|
-
* This interceptor checks if the request URL is allowed or if the request requires authentication.
|
|
12
|
-
* If the URL is not allowed and the request does not require authentication, it simply forwards the request.
|
|
13
|
-
* Otherwise, it prepares the authentication request using the AuthService.
|
|
14
|
-
*/
|
|
15
|
-
export const authInterceptor = (req, next) => {
|
|
16
|
-
const { allowedUrls, requireSignInForRequests } = injectAuthConfig();
|
|
17
|
-
const isUrlAllowed = allowedUrls.some((allowedUrl) => matchUrl(req.url, allowedUrl));
|
|
18
|
-
if (!isUrlAllowed && !req.context.get(requireAuthentication)) {
|
|
19
|
-
return next(req);
|
|
20
|
-
}
|
|
21
|
-
return inject(AuthService).prepareAuthRequest$(req, requireSignInForRequests).pipe(mergeMap(next));
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGdCQUFnQixDQUFVLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWhGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDOUQsTUFBTSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDckUsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyRixJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENvbnRleHRUb2tlbiwgSHR0cEludGVyY2VwdG9yRm4gfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hdGNoVXJsIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RBdXRoQ29uZmlnIH0gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHJlcXVpcmVBdXRoZW50aWNhdGlvbiA9IG5ldyBIdHRwQ29udGV4dFRva2VuPGJvb2xlYW4+KCgpID0+IGZhbHNlKTtcblxuLyoqXG4gKiBJbnRlcmNlcHRvciB0byBoYW5kbGUgYXV0aGVudGljYXRpb24gZm9yIEhUVFAgcmVxdWVzdHMuXG4gKlxuICogVGhpcyBpbnRlcmNlcHRvciBjaGVja3MgaWYgdGhlIHJlcXVlc3QgVVJMIGlzIGFsbG93ZWQgb3IgaWYgdGhlIHJlcXVlc3QgcmVxdWlyZXMgYXV0aGVudGljYXRpb24uXG4gKiBJZiB0aGUgVVJMIGlzIG5vdCBhbGxvd2VkIGFuZCB0aGUgcmVxdWVzdCBkb2VzIG5vdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLCBpdCBzaW1wbHkgZm9yd2FyZHMgdGhlIHJlcXVlc3QuXG4gKiBPdGhlcndpc2UsIGl0IHByZXBhcmVzIHRoZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHVzaW5nIHRoZSBBdXRoU2VydmljZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGhJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAocmVxLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHsgYWxsb3dlZFVybHMsIHJlcXVpcmVTaWduSW5Gb3JSZXF1ZXN0cyB9ID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICBjb25zdCBpc1VybEFsbG93ZWQgPSBhbGxvd2VkVXJscy5zb21lKChhbGxvd2VkVXJsKSA9PiBtYXRjaFVybChyZXEudXJsLCBhbGxvd2VkVXJsKSk7XG4gIGlmICghaXNVcmxBbGxvd2VkICYmICFyZXEuY29udGV4dC5nZXQocmVxdWlyZUF1dGhlbnRpY2F0aW9uKSkge1xuICAgIHJldHVybiBuZXh0KHJlcSk7XG4gIH1cblxuICByZXR1cm4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5wcmVwYXJlQXV0aFJlcXVlc3QkKHJlcSwgcmVxdWlyZVNpZ25JbkZvclJlcXVlc3RzKS5waXBlKG1lcmdlTWFwKG5leHQpKTtcbn07XG4iXX0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@odx/angular/internal';
|
|
2
|
-
export default new Logger('@odx/auth');
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFL0MsZUFBZSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlciB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbCc7XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBMb2dnZXIoJ0BvZHgvYXV0aCcpO1xuIl19
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { AuthComponent } from './auth.component';
|
|
3
|
-
import { AuthDirective } from './auth.directive';
|
|
4
|
-
import { SignInDirective, SignOutDirective } from './directives';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
const modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];
|
|
7
|
-
export class AuthModule {
|
|
8
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
9
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, imports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective], exports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective] }); }
|
|
10
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, imports: [AuthComponent] }); }
|
|
11
|
-
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, decorators: [{
|
|
13
|
-
type: NgModule,
|
|
14
|
-
args: [{
|
|
15
|
-
imports: [...modules],
|
|
16
|
-
exports: [...modules],
|
|
17
|
-
}]
|
|
18
|
-
}] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFakUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBTWxGLE1BQU0sT0FBTyxVQUFVOytHQUFWLFVBQVU7Z0hBQVYsVUFBVSxZQU5OLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixhQUEvRCxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0I7Z0hBTW5FLFVBQVUsWUFOTixhQUFhOzs0RkFNakIsVUFBVTtrQkFKdEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDckIsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhDb21wb25lbnQgfSBmcm9tICcuL2F1dGguY29tcG9uZW50JztcbmltcG9ydCB7IEF1dGhEaXJlY3RpdmUgfSBmcm9tICcuL2F1dGguZGlyZWN0aXZlJztcbmltcG9ydCB7IFNpZ25JbkRpcmVjdGl2ZSwgU2lnbk91dERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5cbmNvbnN0IG1vZHVsZXMgPSBbQXV0aENvbXBvbmVudCwgQXV0aERpcmVjdGl2ZSwgU2lnbkluRGlyZWN0aXZlLCBTaWduT3V0RGlyZWN0aXZlXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLm1vZHVsZXNdLFxuICBleHBvcnRzOiBbLi4ubW9kdWxlc10sXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhNb2R1bGUge31cbiJdfQ==
|