@odx/auth 14.0.0 → 15.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 +17 -0
- package/esm2022/lib/auth.component.mjs +9 -4
- package/esm2022/lib/auth.config.mjs +38 -1
- package/esm2022/lib/auth.directive.mjs +14 -4
- package/esm2022/lib/auth.guard.mjs +9 -1
- package/esm2022/lib/auth.interceptor.mjs +8 -1
- package/esm2022/lib/auth.module.mjs +4 -4
- package/esm2022/lib/auth.providers.mjs +35 -1
- package/esm2022/lib/auth.service.mjs +162 -4
- package/esm2022/lib/components/auth-actions/auth-actions.component.mjs +13 -4
- package/esm2022/lib/components/auth-loading-screen/auth-loading-screen.component.mjs +18 -6
- package/esm2022/lib/directives/auth-action.directive.mjs +10 -4
- package/esm2022/lib/directives/sign-in.directive.mjs +23 -4
- package/esm2022/lib/directives/sign-out.directive.mjs +23 -4
- package/esm2022/lib/helpers/create-auth-host-url.mjs +13 -1
- package/esm2022/lib/helpers/create-inititals.mjs +18 -1
- package/esm2022/lib/helpers/handle-auth-error.mjs +13 -3
- package/esm2022/lib/helpers/handle-oauth-event.mjs +9 -1
- package/esm2022/lib/helpers/resolve-email.mjs +21 -1
- package/esm2022/lib/helpers/resolve-username.mjs +22 -1
- package/esm2022/lib/helpers/set-http-auth-header.mjs +10 -1
- package/esm2022/lib/helpers/user-language-loader.mjs +8 -1
- package/esm2022/lib/models/auth-plugin-manager.mjs +3 -3
- package/esm2022/lib/plugins/core-debug.plugin.mjs +10 -1
- package/esm2022/lib/plugins/core-identity.plugin.mjs +8 -1
- package/esm2022/lib/plugins/user-profile-link.plugin.mjs +10 -1
- package/esm2022/lib/unauth.guard.mjs +9 -1
- package/esm2022/plugins/service-connect/lib/helpers/build-service-connect-url.mjs +8 -1
- package/esm2022/plugins/service-connect/lib/helpers/has-roles-or-rights-handler.mjs +8 -1
- package/esm2022/plugins/service-connect/lib/helpers/has-roles-or-rights.mjs +8 -1
- package/esm2022/plugins/service-connect/lib/helpers/service-connect-plugin-factory.mjs +7 -1
- package/esm2022/plugins/service-connect/lib/service-connect-rights.directive.mjs +16 -4
- package/esm2022/plugins/service-connect/lib/service-connect-rights.guard.mjs +9 -1
- package/esm2022/plugins/service-connect/lib/service-connect-rights.plugin.mjs +9 -1
- package/esm2022/plugins/service-connect/lib/service-connect-user-language.plugin.mjs +15 -1
- package/esm2022/plugins/service-connect/lib/service-connect-user-profile.plugin.mjs +9 -1
- package/fesm2022/odx-auth-plugins-service-connect.mjs +80 -3
- package/fesm2022/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2022/odx-auth.mjs +497 -36
- package/fesm2022/odx-auth.mjs.map +1 -1
- package/lib/auth.component.d.ts +5 -0
- package/lib/auth.config.d.ts +43 -1
- package/lib/auth.directive.d.ts +10 -0
- package/lib/auth.guard.d.ts +8 -0
- package/lib/auth.interceptor.d.ts +7 -0
- package/lib/auth.providers.d.ts +34 -0
- package/lib/auth.service.d.ts +156 -0
- package/lib/components/auth-actions/auth-actions.component.d.ts +9 -0
- package/lib/components/auth-loading-screen/auth-loading-screen.component.d.ts +13 -0
- package/lib/directives/auth-action.directive.d.ts +6 -0
- package/lib/directives/sign-in.directive.d.ts +19 -0
- package/lib/directives/sign-out.directive.d.ts +19 -0
- package/lib/helpers/create-auth-host-url.d.ts +12 -0
- package/lib/helpers/create-inititals.d.ts +17 -0
- package/lib/helpers/handle-auth-error.d.ts +10 -0
- package/lib/helpers/handle-oauth-event.d.ts +8 -0
- package/lib/helpers/resolve-email.d.ts +20 -0
- package/lib/helpers/resolve-username.d.ts +21 -0
- package/lib/helpers/set-http-auth-header.d.ts +9 -0
- package/lib/helpers/user-language-loader.d.ts +7 -0
- package/lib/plugins/core-debug.plugin.d.ts +9 -0
- package/lib/plugins/core-identity.plugin.d.ts +7 -0
- package/lib/plugins/user-profile-link.plugin.d.ts +9 -0
- package/lib/unauth.guard.d.ts +8 -0
- package/package.json +2 -2
- package/plugins/service-connect/lib/helpers/build-service-connect-url.d.ts +7 -0
- package/plugins/service-connect/lib/helpers/has-roles-or-rights-handler.d.ts +7 -0
- package/plugins/service-connect/lib/helpers/has-roles-or-rights.d.ts +7 -0
- package/plugins/service-connect/lib/helpers/service-connect-plugin-factory.d.ts +6 -0
- package/plugins/service-connect/lib/service-connect-rights.directive.d.ts +12 -0
- package/plugins/service-connect/lib/service-connect-rights.guard.d.ts +8 -0
- package/plugins/service-connect/lib/service-connect-rights.plugin.d.ts +8 -0
- package/plugins/service-connect/lib/service-connect-user-language.plugin.d.ts +14 -0
- package/plugins/service-connect/lib/service-connect-user-profile.plugin.d.ts +8 -0
|
@@ -3,9 +3,28 @@ import { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner
|
|
|
3
3
|
import { AuthActionDirective } from './auth-action.directive';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@odx/angular/components/loading-spinner";
|
|
6
|
+
/**
|
|
7
|
+
* A directive that handles the sign-out action for a button element.
|
|
8
|
+
*
|
|
9
|
+
* This directive extends the `AuthActionDirective` and uses the `LoadingSpinnerDirective`
|
|
10
|
+
* to show a loading spinner during the sign-out process.
|
|
11
|
+
*
|
|
12
|
+
* @see {AuthActionDirective}
|
|
13
|
+
* @see {LoadingSpinnerDirective}
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```html
|
|
17
|
+
* <button odxButton odxAuthSignOut (odxAuthSignOut)="onSignOut()">Sign Out</button>
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
6
20
|
export class SignOutDirective extends AuthActionDirective {
|
|
7
21
|
constructor() {
|
|
8
22
|
super(...arguments);
|
|
23
|
+
/**
|
|
24
|
+
* Emits an event after the sign-out action is completed.
|
|
25
|
+
*
|
|
26
|
+
* @type {EventEmitter<void>}
|
|
27
|
+
*/
|
|
9
28
|
// eslint-disable-next-line @angular-eslint/no-output-rename
|
|
10
29
|
this.afterSignOut = new EventEmitter();
|
|
11
30
|
}
|
|
@@ -13,10 +32,10 @@ export class SignOutDirective extends AuthActionDirective {
|
|
|
13
32
|
this.authService.signOut();
|
|
14
33
|
this.afterSignOut.next();
|
|
15
34
|
}
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
17
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
35
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SignOutDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
36
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: SignOutDirective, isStandalone: true, selector: "[odxButton][odxAuthSignOut]", outputs: { afterSignOut: "odxAuthSignOut" }, host: { listeners: { "click": "handleClick()" } }, usesInheritance: true, hostDirectives: [{ directive: i1.LoadingSpinnerDirective }], ngImport: i0 }); }
|
|
18
37
|
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SignOutDirective, decorators: [{
|
|
20
39
|
type: Directive,
|
|
21
40
|
args: [{
|
|
22
41
|
standalone: true,
|
|
@@ -30,4 +49,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
30
49
|
type: HostListener,
|
|
31
50
|
args: ['click']
|
|
32
51
|
}] } });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1vdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvZGlyZWN0aXZlcy9zaWduLW91dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBRTlEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFNSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBTHpEOztRQU1FOzs7O1dBSUc7UUFDSCw0REFBNEQ7UUFFckQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBT2hEO0lBSm9CLFdBQVc7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBZFUsZ0JBQWdCO21HQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBTDVCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLGNBQWMsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUMxQzs4QkFTUSxZQUFZO3NCQURsQixNQUFNO3VCQUFDLGdCQUFnQjtnQkFJTCxXQUFXO3NCQUQ3QixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvYWRpbmdTcGlubmVyRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IEF1dGhBY3Rpb25EaXJlY3RpdmUgfSBmcm9tICcuL2F1dGgtYWN0aW9uLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdGhhdCBoYW5kbGVzIHRoZSBzaWduLW91dCBhY3Rpb24gZm9yIGEgYnV0dG9uIGVsZW1lbnQuXG4gKlxuICogVGhpcyBkaXJlY3RpdmUgZXh0ZW5kcyB0aGUgYEF1dGhBY3Rpb25EaXJlY3RpdmVgIGFuZCB1c2VzIHRoZSBgTG9hZGluZ1NwaW5uZXJEaXJlY3RpdmVgXG4gKiB0byBzaG93IGEgbG9hZGluZyBzcGlubmVyIGR1cmluZyB0aGUgc2lnbi1vdXQgcHJvY2Vzcy5cbiAqXG4gKiBAc2VlIHtBdXRoQWN0aW9uRGlyZWN0aXZlfVxuICogQHNlZSB7TG9hZGluZ1NwaW5uZXJEaXJlY3RpdmV9XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gb2R4QnV0dG9uIG9keEF1dGhTaWduT3V0IChvZHhBdXRoU2lnbk91dCk9XCJvblNpZ25PdXQoKVwiPlNpZ24gT3V0PC9idXR0b24+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW29keEJ1dHRvbl1bb2R4QXV0aFNpZ25PdXRdJyxcbiAgaG9zdERpcmVjdGl2ZXM6IFtMb2FkaW5nU3Bpbm5lckRpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNpZ25PdXREaXJlY3RpdmUgZXh0ZW5kcyBBdXRoQWN0aW9uRGlyZWN0aXZlIHtcbiAgLyoqXG4gICAqIEVtaXRzIGFuIGV2ZW50IGFmdGVyIHRoZSBzaWduLW91dCBhY3Rpb24gaXMgY29tcGxldGVkLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPHZvaWQ+fVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtcmVuYW1lXG4gIEBPdXRwdXQoJ29keEF1dGhTaWduT3V0JylcbiAgcHVibGljIGFmdGVyU2lnbk91dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHByb3RlY3RlZCBvdmVycmlkZSBoYW5kbGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25PdXQoKTtcbiAgICB0aGlzLmFmdGVyU2lnbk91dC5uZXh0KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import { buildUrl } from '@odx/angular/utils';
|
|
2
2
|
import { ODX_AUTH_HOSTS } from '../auth.config';
|
|
3
|
+
/**
|
|
4
|
+
* Creates an authentication host URL based on the provided environment and URL segments.
|
|
5
|
+
*
|
|
6
|
+
* @param {AuthEnvironment} environment - The authentication environment (e.g., 'development', 'production').
|
|
7
|
+
* @param {string[]} segments - Additional URL segments to append to the base URL.
|
|
8
|
+
* @returns {string} The constructed authentication host URL.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* createAuthHostUrl('dev', 'api', 'v1', 'users'); // returns 'https://dev-auth.odx.com/api/v1/users'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
3
15
|
export function createAuthHostUrl(environment, ...segments) {
|
|
4
16
|
return buildUrl(ODX_AUTH_HOSTS[environment], ...segments);
|
|
5
17
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWF1dGgtaG9zdC11cmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9oZWxwZXJzL2NyZWF0ZS1hdXRoLWhvc3QtdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsV0FBNEIsRUFBRSxHQUFHLFFBQWtCO0lBQ25GLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZFVybCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPRFhfQVVUSF9IT1NUUyB9IGZyb20gJy4uL2F1dGguY29uZmlnJztcbmltcG9ydCB7IEF1dGhFbnZpcm9ubWVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhdXRoZW50aWNhdGlvbiBob3N0IFVSTCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZW52aXJvbm1lbnQgYW5kIFVSTCBzZWdtZW50cy5cbiAqXG4gKiBAcGFyYW0ge0F1dGhFbnZpcm9ubWVudH0gZW52aXJvbm1lbnQgLSBUaGUgYXV0aGVudGljYXRpb24gZW52aXJvbm1lbnQgKGUuZy4sICdkZXZlbG9wbWVudCcsICdwcm9kdWN0aW9uJykuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzZWdtZW50cyAtIEFkZGl0aW9uYWwgVVJMIHNlZ21lbnRzIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBVUkwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29uc3RydWN0ZWQgYXV0aGVudGljYXRpb24gaG9zdCBVUkwuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjcmVhdGVBdXRoSG9zdFVybCgnZGV2JywgJ2FwaScsICd2MScsICd1c2VycycpOyAvLyByZXR1cm5zICdodHRwczovL2Rldi1hdXRoLm9keC5jb20vYXBpL3YxL3VzZXJzJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdXRoSG9zdFVybChlbnZpcm9ubWVudDogQXV0aEVudmlyb25tZW50LCAuLi5zZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYnVpbGRVcmwoT0RYX0FVVEhfSE9TVFNbZW52aXJvbm1lbnRdLCAuLi5zZWdtZW50cyk7XG59XG4iXX0=
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates initials from a given string.
|
|
3
|
+
*
|
|
4
|
+
* This function takes a string input, removes any text within parentheses,
|
|
5
|
+
* trims any leading or trailing whitespace, and then splits the string into
|
|
6
|
+
* parts based on spaces. It then constructs initials using the first letter
|
|
7
|
+
* of the first and last parts of the string, converting them to uppercase.
|
|
8
|
+
*
|
|
9
|
+
* @param {string | null} value - The input string from which to create initials. It can be
|
|
10
|
+
* undefined or null, in which case an empty string is returned.
|
|
11
|
+
* @returns {string} - A string containing the initials derived from the input string.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* createInitials('John Smith'); // returns 'JS'
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
1
18
|
export function createInitials(value) {
|
|
2
19
|
if (!value)
|
|
3
20
|
return '';
|
|
@@ -12,4 +29,4 @@ export function createInitials(value) {
|
|
|
12
29
|
return initials;
|
|
13
30
|
}, '');
|
|
14
31
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWluaXRpdGFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2hlbHBlcnMvY3JlYXRlLWluaXRpdGFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBcUI7SUFDbEQsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN0QixNQUFNLEtBQUssR0FBRyxLQUFLO1NBQ2hCLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1NBQ3pCLElBQUksRUFBRTtTQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVkLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDNUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZXMgaW5pdGlhbHMgZnJvbSBhIGdpdmVuIHN0cmluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGlucHV0LCByZW1vdmVzIGFueSB0ZXh0IHdpdGhpbiBwYXJlbnRoZXNlcyxcbiAqIHRyaW1zIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGFuZCB0aGVuIHNwbGl0cyB0aGUgc3RyaW5nIGludG9cbiAqIHBhcnRzIGJhc2VkIG9uIHNwYWNlcy4gSXQgdGhlbiBjb25zdHJ1Y3RzIGluaXRpYWxzIHVzaW5nIHRoZSBmaXJzdCBsZXR0ZXJcbiAqIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBwYXJ0cyBvZiB0aGUgc3RyaW5nLCBjb252ZXJ0aW5nIHRoZW0gdG8gdXBwZXJjYXNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdmFsdWUgLSBUaGUgaW5wdXQgc3RyaW5nIGZyb20gd2hpY2ggdG8gY3JlYXRlIGluaXRpYWxzLiBJdCBjYW4gYmVcbiAqICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBvciBudWxsLCBpbiB3aGljaCBjYXNlIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQSBzdHJpbmcgY29udGFpbmluZyB0aGUgaW5pdGlhbHMgZGVyaXZlZCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjcmVhdGVJbml0aWFscygnSm9obiBTbWl0aCcpOyAvLyByZXR1cm5zICdKUydcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5pdGlhbHModmFsdWU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICBjb25zdCBwYXJ0cyA9IHZhbHVlXG4gICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKS8sICcnKVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyAnKTtcblxuICByZXR1cm4gcGFydHMucmVkdWNlKChpbml0aWFscywgY3VyciwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IDAgfHwgaW5kZXggPT09IHBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGluaXRpYWxzICs9IGN1cnJbMF0udG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxzO1xuICB9LCAnJyk7XG59XG4iXX0=
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { EnvironmentInjector, inject } from '@angular/core';
|
|
1
|
+
import { EnvironmentInjector, inject, runInInjectionContext } from '@angular/core';
|
|
2
2
|
import { OAuthErrorEvent } from 'angular-oauth2-oidc';
|
|
3
|
+
/**
|
|
4
|
+
* Handles authentication errors by executing a series of error handler functions.
|
|
5
|
+
*
|
|
6
|
+
* @param {AuthErrorHandlerFn[]} handlers - An array of functions that handle authentication errors.
|
|
7
|
+
* Each function is expected to take an `OAuthErrorEvent` as an argument.
|
|
8
|
+
*
|
|
9
|
+
* @returns A function that takes an `OAuthErrorEvent` and processes it using the provided handlers.
|
|
10
|
+
* The function will stop processing once a handler successfully handles the error without throwing.
|
|
11
|
+
* If a handler throws an error that is not an instance of `OAuthErrorEvent`, the original error is re-thrown.
|
|
12
|
+
*/
|
|
3
13
|
export function handleAuthError(handlers) {
|
|
4
14
|
const injector = inject(EnvironmentInjector);
|
|
5
15
|
return (error) => {
|
|
6
|
-
injector
|
|
16
|
+
runInInjectionContext(injector, () => {
|
|
7
17
|
for (const handler of handlers) {
|
|
8
18
|
try {
|
|
9
19
|
handler(error);
|
|
@@ -18,4 +28,4 @@ export function handleAuthError(handlers) {
|
|
|
18
28
|
});
|
|
19
29
|
};
|
|
20
30
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLWF1dGgtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9oZWxwZXJzL2hhbmRsZS1hdXRoLWVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3REOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBOEI7SUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFN0MsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNuQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUM7b0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNmLE1BQU07Z0JBQ1IsQ0FBQztnQkFBQyxPQUFPLGNBQWMsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsQ0FBQyxjQUFjLFlBQVksZUFBZSxDQUFDO3dCQUFFLE1BQU0sS0FBSyxDQUFDO29CQUM5RCxTQUFTO2dCQUNYLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRJbmplY3RvciwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9BdXRoRXJyb3JFdmVudCB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgQXV0aEVycm9ySGFuZGxlckZuIH0gZnJvbSAnLi4vYXV0aC5jb25maWcnO1xuXG4vKipcbiAqIEhhbmRsZXMgYXV0aGVudGljYXRpb24gZXJyb3JzIGJ5IGV4ZWN1dGluZyBhIHNlcmllcyBvZiBlcnJvciBoYW5kbGVyIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0F1dGhFcnJvckhhbmRsZXJGbltdfSBoYW5kbGVycyAtIEFuIGFycmF5IG9mIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBhdXRoZW50aWNhdGlvbiBlcnJvcnMuXG4gKiBFYWNoIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHRha2UgYW4gYE9BdXRoRXJyb3JFdmVudGAgYXMgYW4gYXJndW1lbnQuXG4gKlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGBPQXV0aEVycm9yRXZlbnRgIGFuZCBwcm9jZXNzZXMgaXQgdXNpbmcgdGhlIHByb3ZpZGVkIGhhbmRsZXJzLlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgc3RvcCBwcm9jZXNzaW5nIG9uY2UgYSBoYW5kbGVyIHN1Y2Nlc3NmdWxseSBoYW5kbGVzIHRoZSBlcnJvciB3aXRob3V0IHRocm93aW5nLlxuICogSWYgYSBoYW5kbGVyIHRocm93cyBhbiBlcnJvciB0aGF0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBgT0F1dGhFcnJvckV2ZW50YCwgdGhlIG9yaWdpbmFsIGVycm9yIGlzIHJlLXRocm93bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUF1dGhFcnJvcihoYW5kbGVyczogQXV0aEVycm9ySGFuZGxlckZuW10pOiAoZXJyb3I6IE9BdXRoRXJyb3JFdmVudCkgPT4gdm9pZCB7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuXG4gIHJldHVybiAoZXJyb3IpID0+IHtcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGhhbmRsZXIoZXJyb3IpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoICh1bmhhbmRsZWRFcnJvcikge1xuICAgICAgICAgIGlmICghKHVuaGFuZGxlZEVycm9yIGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { filter, switchMap } from 'rxjs';
|
|
2
|
+
/**
|
|
3
|
+
* Handles OAuth events of a specific type by applying a provided handler function.
|
|
4
|
+
*
|
|
5
|
+
* @template {T} - The type of OAuth event.
|
|
6
|
+
* @param {T['type']} type - The type of the OAuth event to handle.
|
|
7
|
+
* @param {(event: T) => Promise<void>} handler - A function that takes an event of type T and returns a Promise that resolves to void.
|
|
8
|
+
* @returns {OperatorFunction<T, void>} - An OperatorFunction that filters events of the specified type and applies the handler function.
|
|
9
|
+
*/
|
|
2
10
|
export function handleOAuthEvent(type, handler) {
|
|
3
11
|
return (source$) => source$.pipe(filter((event) => event.type === type), switchMap((event) => handler(event)));
|
|
4
12
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLW9hdXRoLWV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvaGVscGVycy9oYW5kbGUtb2F1dGgtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBZ0MsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQXVCLElBQWUsRUFBRSxPQUFvQztJQUMxRyxPQUFPLENBQUMsT0FBc0IsRUFBRSxFQUFFLENBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUN0QyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNyQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9BdXRoRXZlbnQgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7IGZpbHRlciwgT2JzZXJ2YWJsZSwgT3BlcmF0b3JGdW5jdGlvbiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogSGFuZGxlcyBPQXV0aCBldmVudHMgb2YgYSBzcGVjaWZpYyB0eXBlIGJ5IGFwcGx5aW5nIGEgcHJvdmlkZWQgaGFuZGxlciBmdW5jdGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUge1R9IC0gVGhlIHR5cGUgb2YgT0F1dGggZXZlbnQuXG4gKiBAcGFyYW0ge1RbJ3R5cGUnXX0gdHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBPQXV0aCBldmVudCB0byBoYW5kbGUuXG4gKiBAcGFyYW0geyhldmVudDogVCkgPT4gUHJvbWlzZTx2b2lkPn0gaGFuZGxlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBldmVudCBvZiB0eXBlIFQgYW5kIHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdm9pZC5cbiAqIEByZXR1cm5zIHtPcGVyYXRvckZ1bmN0aW9uPFQsIHZvaWQ+fSAtIEFuIE9wZXJhdG9yRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGV2ZW50cyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgYW5kIGFwcGxpZXMgdGhlIGhhbmRsZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVPQXV0aEV2ZW50PFQgZXh0ZW5kcyBPQXV0aEV2ZW50Pih0eXBlOiBUWyd0eXBlJ10sIGhhbmRsZXI6IChldmVudDogVCkgPT4gUHJvbWlzZTx2b2lkPik6IE9wZXJhdG9yRnVuY3Rpb248VCwgdm9pZD4ge1xuICByZXR1cm4gKHNvdXJjZSQ6IE9ic2VydmFibGU8VD4pID0+XG4gICAgc291cmNlJC5waXBlKFxuICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQudHlwZSA9PT0gdHlwZSksXG4gICAgICBzd2l0Y2hNYXAoKGV2ZW50KSA9PiBoYW5kbGVyKGV2ZW50KSksXG4gICAgKTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { isString } from '@odx/angular/utils';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the email address from the given identity claims.
|
|
4
|
+
*
|
|
5
|
+
* This function attempts to extract an email address from the provided
|
|
6
|
+
* `OdxAuth.RawIdentityClaims` object by checking the following properties
|
|
7
|
+
* in order:
|
|
8
|
+
* 1. `email` - if it is a string, it is returned.
|
|
9
|
+
* 2. `email_address` - if it is a string, it is returned.
|
|
10
|
+
* 3. `emails` - if it is an array and the first element is a string, the first element is returned.
|
|
11
|
+
*
|
|
12
|
+
* If none of these properties contain a valid string email address, an empty string is returned.
|
|
13
|
+
*
|
|
14
|
+
* @param {OdxAuth.RawIdentityClaims} claims - The identity claims object from which to resolve the email address.
|
|
15
|
+
* @returns {string} - The resolved email address as a string, or an empty string if no valid email address is found.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* resolveEmail({ email_address: 'email.address@mdn.com' }) // returns 'email.address@mdn.com';
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
2
22
|
export function resolveEmail(claims) {
|
|
3
23
|
if (isString(claims['email'])) {
|
|
4
24
|
return claims['email'];
|
|
@@ -11,4 +31,4 @@ export function resolveEmail(claims) {
|
|
|
11
31
|
}
|
|
12
32
|
return '';
|
|
13
33
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2hlbHBlcnMvcmVzb2x2ZS1lbWFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWlDO0lBQzVELElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBlbWFpbCBhZGRyZXNzIGZyb20gdGhlIGdpdmVuIGlkZW50aXR5IGNsYWltcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGV4dHJhY3QgYW4gZW1haWwgYWRkcmVzcyBmcm9tIHRoZSBwcm92aWRlZFxuICogYE9keEF1dGguUmF3SWRlbnRpdHlDbGFpbXNgIG9iamVjdCBieSBjaGVja2luZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXNcbiAqIGluIG9yZGVyOlxuICogMS4gYGVtYWlsYCAtIGlmIGl0IGlzIGEgc3RyaW5nLCBpdCBpcyByZXR1cm5lZC5cbiAqIDIuIGBlbWFpbF9hZGRyZXNzYCAtIGlmIGl0IGlzIGEgc3RyaW5nLCBpdCBpcyByZXR1cm5lZC5cbiAqIDMuIGBlbWFpbHNgIC0gaWYgaXQgaXMgYW4gYXJyYXkgYW5kIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgc3RyaW5nLCB0aGUgZmlyc3QgZWxlbWVudCBpcyByZXR1cm5lZC5cbiAqXG4gKiBJZiBub25lIG9mIHRoZXNlIHByb3BlcnRpZXMgY29udGFpbiBhIHZhbGlkIHN0cmluZyBlbWFpbCBhZGRyZXNzLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtPZHhBdXRoLlJhd0lkZW50aXR5Q2xhaW1zfSBjbGFpbXMgLSBUaGUgaWRlbnRpdHkgY2xhaW1zIG9iamVjdCBmcm9tIHdoaWNoIHRvIHJlc29sdmUgdGhlIGVtYWlsIGFkZHJlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSByZXNvbHZlZCBlbWFpbCBhZGRyZXNzIGFzIGEgc3RyaW5nLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm8gdmFsaWQgZW1haWwgYWRkcmVzcyBpcyBmb3VuZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHJlc29sdmVFbWFpbCh7IGVtYWlsX2FkZHJlc3M6ICdlbWFpbC5hZGRyZXNzQG1kbi5jb20nIH0pIC8vIHJldHVybnMgJ2VtYWlsLmFkZHJlc3NAbWRuLmNvbSc7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbWFpbChjbGFpbXM6IE9keEF1dGguUmF3SWRlbnRpdHlDbGFpbXMpOiBzdHJpbmcge1xuICBpZiAoaXNTdHJpbmcoY2xhaW1zWydlbWFpbCddKSkge1xuICAgIHJldHVybiBjbGFpbXNbJ2VtYWlsJ107XG4gIH1cbiAgaWYgKGlzU3RyaW5nKGNsYWltc1snZW1haWxfYWRkcmVzcyddKSkge1xuICAgIHJldHVybiBjbGFpbXNbJ2VtYWlsX2FkZHJlc3MnXTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShjbGFpbXNbJ2VtYWlscyddKSAmJiBpc1N0cmluZyhjbGFpbXNbJ2VtYWlscyddWzBdKSkge1xuICAgIHJldHVybiBjbGFpbXNbJ2VtYWlscyddWzBdO1xuICB9XG4gIHJldHVybiAnJztcbn1cbiJdfQ==
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import { isString } from '@odx/angular/utils';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the username from the provided identity claims.
|
|
4
|
+
*
|
|
5
|
+
* The function attempts to construct a username from the claims in the following order:
|
|
6
|
+
* 1. If both 'firstname' and 'lastname' are strings, it returns them concatenated with a space.
|
|
7
|
+
* 2. If both 'given_name' and 'family_name' are strings, it returns them concatenated with a space.
|
|
8
|
+
* 3. If 'name' is a string, it returns the 'name'.
|
|
9
|
+
* 4. If 'displayname' is a string, it returns the 'displayname'.
|
|
10
|
+
* 5. If none of the above conditions are met, it returns an empty string.
|
|
11
|
+
*
|
|
12
|
+
* @param {OdxAuth.RawIdentityClaims} claims - The raw identity claims from which to resolve the username.
|
|
13
|
+
* @returns {string} - The resolved username as a string.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* resolveUsername({ firstname: 'John', lastname: 'Doe' }) // returns 'John Doe';
|
|
18
|
+
* resolveUsername({ given_name: 'John', family_name: 'Doe' }) // returns 'John Doe';
|
|
19
|
+
* resolveUsername({ name: 'John Doe' }) // returns 'John Doe';
|
|
20
|
+
* resolveUsername({ displayname: 'John Doe' }) // returns 'John Doe';
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
2
23
|
export function resolveUsername(claims) {
|
|
3
24
|
if (isString(claims['firstname']) && isString(claims['lastname'])) {
|
|
4
25
|
return `${claims['firstname']} ${claims['lastname']}`;
|
|
@@ -14,4 +35,4 @@ export function resolveUsername(claims) {
|
|
|
14
35
|
}
|
|
15
36
|
return '';
|
|
16
37
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS11c2VybmFtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2hlbHBlcnMvcmVzb2x2ZS11c2VybmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFpQztJQUMvRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHVzZXJuYW1lIGZyb20gdGhlIHByb3ZpZGVkIGlkZW50aXR5IGNsYWltcy5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gY29uc3RydWN0IGEgdXNlcm5hbWUgZnJvbSB0aGUgY2xhaW1zIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gKiAxLiBJZiBib3RoICdmaXJzdG5hbWUnIGFuZCAnbGFzdG5hbWUnIGFyZSBzdHJpbmdzLCBpdCByZXR1cm5zIHRoZW0gY29uY2F0ZW5hdGVkIHdpdGggYSBzcGFjZS5cbiAqIDIuIElmIGJvdGggJ2dpdmVuX25hbWUnIGFuZCAnZmFtaWx5X25hbWUnIGFyZSBzdHJpbmdzLCBpdCByZXR1cm5zIHRoZW0gY29uY2F0ZW5hdGVkIHdpdGggYSBzcGFjZS5cbiAqIDMuIElmICduYW1lJyBpcyBhIHN0cmluZywgaXQgcmV0dXJucyB0aGUgJ25hbWUnLlxuICogNC4gSWYgJ2Rpc3BsYXluYW1lJyBpcyBhIHN0cmluZywgaXQgcmV0dXJucyB0aGUgJ2Rpc3BsYXluYW1lJy5cbiAqIDUuIElmIG5vbmUgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlIG1ldCwgaXQgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPZHhBdXRoLlJhd0lkZW50aXR5Q2xhaW1zfSBjbGFpbXMgLSBUaGUgcmF3IGlkZW50aXR5IGNsYWltcyBmcm9tIHdoaWNoIHRvIHJlc29sdmUgdGhlIHVzZXJuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcmVzb2x2ZWQgdXNlcm5hbWUgYXMgYSBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiByZXNvbHZlVXNlcm5hbWUoeyBmaXJzdG5hbWU6ICdKb2huJywgbGFzdG5hbWU6ICdEb2UnIH0pIC8vIHJldHVybnMgJ0pvaG4gRG9lJztcbiAqIHJlc29sdmVVc2VybmFtZSh7IGdpdmVuX25hbWU6ICdKb2huJywgZmFtaWx5X25hbWU6ICdEb2UnIH0pIC8vIHJldHVybnMgJ0pvaG4gRG9lJztcbiAqIHJlc29sdmVVc2VybmFtZSh7IG5hbWU6ICdKb2huIERvZScgfSkgLy8gcmV0dXJucyAnSm9obiBEb2UnO1xuICogcmVzb2x2ZVVzZXJuYW1lKHsgZGlzcGxheW5hbWU6ICdKb2huIERvZScgfSkgLy8gcmV0dXJucyAnSm9obiBEb2UnO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlcm5hbWUoY2xhaW1zOiBPZHhBdXRoLlJhd0lkZW50aXR5Q2xhaW1zKTogc3RyaW5nIHtcbiAgaWYgKGlzU3RyaW5nKGNsYWltc1snZmlyc3RuYW1lJ10pICYmIGlzU3RyaW5nKGNsYWltc1snbGFzdG5hbWUnXSkpIHtcbiAgICByZXR1cm4gYCR7Y2xhaW1zWydmaXJzdG5hbWUnXX0gJHtjbGFpbXNbJ2xhc3RuYW1lJ119YDtcbiAgfVxuICBpZiAoaXNTdHJpbmcoY2xhaW1zWydnaXZlbl9uYW1lJ10pICYmIGlzU3RyaW5nKGNsYWltc1snZmFtaWx5X25hbWUnXSkpIHtcbiAgICByZXR1cm4gYCR7Y2xhaW1zWydnaXZlbl9uYW1lJ119ICR7Y2xhaW1zWydmYW1pbHlfbmFtZSddfWA7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKGNsYWltc1snbmFtZSddKSkge1xuICAgIHJldHVybiBjbGFpbXNbJ25hbWUnXTtcbiAgfVxuICBpZiAoaXNTdHJpbmcoY2xhaW1zWydkaXNwbGF5bmFtZSddKSkge1xuICAgIHJldHVybiBjbGFpbXNbJ2Rpc3BsYXluYW1lJ107XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4iXX0=
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { HttpRequest } from '@angular/common/http';
|
|
2
2
|
import { AUTH_HTTP_HEADER } from '../auth.config';
|
|
3
|
+
/**
|
|
4
|
+
* Sets the HTTP Authorization header for a given request.
|
|
5
|
+
*
|
|
6
|
+
* @template R - The type of the request, which extends HttpRequest<T> or Request.
|
|
7
|
+
* @template T - The type of the request body.
|
|
8
|
+
* @param {R} req - The HTTP request to which the Authorization header will be added.
|
|
9
|
+
* @param {string | null} [token] - The token to be used in the Authorization header. If no token is provided, the request is returned unchanged.
|
|
10
|
+
* @returns {R} - The modified HTTP request with the Authorization header set, or the original request if no token is provided.
|
|
11
|
+
*/
|
|
3
12
|
export function setHttpAuthHeader(req, token) {
|
|
4
13
|
if (!token)
|
|
5
14
|
return req;
|
|
@@ -10,4 +19,4 @@ export function setHttpAuthHeader(req, token) {
|
|
|
10
19
|
req.headers.set(AUTH_HTTP_HEADER, header);
|
|
11
20
|
return req;
|
|
12
21
|
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWh0dHAtYXV0aC1oZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9oZWxwZXJzL3NldC1odHRwLWF1dGgtaGVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBd0MsR0FBTSxFQUFFLEtBQXFCO0lBQ3BHLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztJQUNqQyxJQUFJLEdBQUcsWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUMvQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBTSxDQUFDO0lBQ2hGLENBQUM7SUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEFVVEhfSFRUUF9IRUFERVIgfSBmcm9tICcuLi9hdXRoLmNvbmZpZyc7XG5cbi8qKlxuICogU2V0cyB0aGUgSFRUUCBBdXRob3JpemF0aW9uIGhlYWRlciBmb3IgYSBnaXZlbiByZXF1ZXN0LlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlcXVlc3QsIHdoaWNoIGV4dGVuZHMgSHR0cFJlcXVlc3Q8VD4gb3IgUmVxdWVzdC5cbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIHJlcXVlc3QgYm9keS5cbiAqIEBwYXJhbSB7Un0gcmVxIC0gVGhlIEhUVFAgcmVxdWVzdCB0byB3aGljaCB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgd2lsbCBiZSBhZGRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gW3Rva2VuXSAtIFRoZSB0b2tlbiB0byBiZSB1c2VkIGluIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci4gSWYgbm8gdG9rZW4gaXMgcHJvdmlkZWQsIHRoZSByZXF1ZXN0IGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqIEByZXR1cm5zIHtSfSAtIFRoZSBtb2RpZmllZCBIVFRQIHJlcXVlc3Qgd2l0aCB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgc2V0LCBvciB0aGUgb3JpZ2luYWwgcmVxdWVzdCBpZiBubyB0b2tlbiBpcyBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEh0dHBBdXRoSGVhZGVyPFIgZXh0ZW5kcyBIdHRwUmVxdWVzdDxUPiB8IFJlcXVlc3QsIFQ+KHJlcTogUiwgdG9rZW4/OiBzdHJpbmcgfCBudWxsKTogUiB7XG4gIGlmICghdG9rZW4pIHJldHVybiByZXE7XG4gIGNvbnN0IGhlYWRlciA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICBpZiAocmVxIGluc3RhbmNlb2YgSHR0cFJlcXVlc3QpIHtcbiAgICByZXR1cm4gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuc2V0KEFVVEhfSFRUUF9IRUFERVIsIGhlYWRlcikgfSkgYXMgUjtcbiAgfVxuICByZXEuaGVhZGVycy5zZXQoQVVUSF9IVFRQX0hFQURFUiwgaGVhZGVyKTtcblxuICByZXR1cm4gcmVxO1xufVxuIl19
|
|
@@ -2,9 +2,16 @@ import { inject } from '@angular/core';
|
|
|
2
2
|
import { isNonEmptyString } from '@odx/angular/utils';
|
|
3
3
|
import { map } from 'rxjs';
|
|
4
4
|
import { AuthService } from '../auth.service';
|
|
5
|
+
/**
|
|
6
|
+
* A function that creates a language loader function for user authentication.
|
|
7
|
+
*
|
|
8
|
+
* @param {LanguageSelector} languageSelector - A function that takes optional identity claims and returns a language string, null, or undefined.
|
|
9
|
+
* Defaults to a function that returns the preferred language from the claims.
|
|
10
|
+
* @returns {LanguageLoaderFn} - A function that retrieves the user's preferred language from the identity claims.
|
|
11
|
+
*/
|
|
5
12
|
export function userLanguageLoader(languageSelector = (claims) => claims?.preferredLanguage) {
|
|
6
13
|
return () => {
|
|
7
14
|
return inject(AuthService).identityClaims$.pipe(map(languageSelector), map((value) => (isNonEmptyString(value) ? value : undefined)));
|
|
8
15
|
};
|
|
9
16
|
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1sYW5ndWFnZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9oZWxwZXJzL3VzZXItbGFuZ3VhZ2UtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLG1CQUFxQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQjtJQUMzRyxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNyQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhbmd1YWdlTG9hZGVyRm4gfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7IGlzTm9uRW1wdHlTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5cbnR5cGUgTGFuZ3VhZ2VTZWxlY3RvciA9IChjbGFpbXM/OiBPZHhBdXRoLklkZW50aXlDbGFpbXMgfCBudWxsKSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbGFuZ3VhZ2UgbG9hZGVyIGZ1bmN0aW9uIGZvciB1c2VyIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZWxlY3Rvcn0gbGFuZ3VhZ2VTZWxlY3RvciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBvcHRpb25hbCBpZGVudGl0eSBjbGFpbXMgYW5kIHJldHVybnMgYSBsYW5ndWFnZSBzdHJpbmcsIG51bGwsIG9yIHVuZGVmaW5lZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHByZWZlcnJlZCBsYW5ndWFnZSBmcm9tIHRoZSBjbGFpbXMuXG4gKiBAcmV0dXJucyB7TGFuZ3VhZ2VMb2FkZXJGbn0gLSBBIGZ1bmN0aW9uIHRoYXQgcmV0cmlldmVzIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlIGZyb20gdGhlIGlkZW50aXR5IGNsYWltcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJMYW5ndWFnZUxvYWRlcihsYW5ndWFnZVNlbGVjdG9yOiBMYW5ndWFnZVNlbGVjdG9yID0gKGNsYWltcykgPT4gY2xhaW1zPy5wcmVmZXJyZWRMYW5ndWFnZSk6IExhbmd1YWdlTG9hZGVyRm4ge1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHJldHVybiBpbmplY3QoQXV0aFNlcnZpY2UpLmlkZW50aXR5Q2xhaW1zJC5waXBlKFxuICAgICAgbWFwKGxhbmd1YWdlU2VsZWN0b3IpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKGlzTm9uRW1wdHlTdHJpbmcodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpKSxcbiAgICApO1xuICB9O1xufVxuIl19
|
|
@@ -39,10 +39,10 @@ export class AuthPluginManager {
|
|
|
39
39
|
runPlugin(authService, plugin) {
|
|
40
40
|
return plugin(authService).pipe(isNumber(this.authConfig.pluginTimeout) ? timeout(Math.max(0, this.authConfig.pluginTimeout)) : tap(), catchError((error) => this.handlePluginError(error)));
|
|
41
41
|
}
|
|
42
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
43
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthPluginManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
43
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthPluginManager, providedIn: 'root' }); }
|
|
44
44
|
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthPluginManager, decorators: [{
|
|
46
46
|
type: Injectable,
|
|
47
47
|
args: [{ providedIn: 'root' }]
|
|
48
48
|
}] });
|
|
@@ -2,6 +2,15 @@ import { DestroyRef, inject } from '@angular/core';
|
|
|
2
2
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
3
|
import { of } from 'rxjs';
|
|
4
4
|
import logger from '../auth.logger';
|
|
5
|
+
/**
|
|
6
|
+
* A factory function that creates a core debug plugin for the authentication service.
|
|
7
|
+
* This plugin logs detailed information about the user's identity claims and tokens.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* This plugin is intended for debugging purposes only and should not be used in production environments.
|
|
11
|
+
*
|
|
12
|
+
* @returns {AuthPluginFactory} A function that takes an authentication service and sets up logging for identity claims and tokens.
|
|
13
|
+
*/
|
|
5
14
|
export const coreDebugPlugin = () => {
|
|
6
15
|
logger.warn('DEBUG MODE ENABLED - DO NOT USE IN PRODUCTION!');
|
|
7
16
|
const destroyRef = inject(DestroyRef);
|
|
@@ -17,4 +26,4 @@ export const coreDebugPlugin = () => {
|
|
|
17
26
|
return of({});
|
|
18
27
|
};
|
|
19
28
|
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1kZWJ1Zy5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9wbHVnaW5zL2NvcmUtZGVidWcucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBZ0IsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFDO0FBR3BDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFzQixHQUFHLEVBQUU7SUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxJQUFJLFFBQVEsR0FBd0IsSUFBSSxDQUFDO0lBRXpDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUNyQixRQUFRLEtBQUssV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsTUFBTSxFQUFFLFFBQVEsS0FBSyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vYXV0aC5sb2dnZXInO1xuaW1wb3J0IHsgQXV0aFBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG4vKipcbiAqIEEgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBjb3JlIGRlYnVnIHBsdWdpbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UuXG4gKiBUaGlzIHBsdWdpbiBsb2dzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyJ3MgaWRlbnRpdHkgY2xhaW1zIGFuZCB0b2tlbnMuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoaXMgcGx1Z2luIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzLlxuICpcbiAqIEByZXR1cm5zIHtBdXRoUGx1Z2luRmFjdG9yeX0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGFuIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgYW5kIHNldHMgdXAgbG9nZ2luZyBmb3IgaWRlbnRpdHkgY2xhaW1zIGFuZCB0b2tlbnMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb3JlRGVidWdQbHVnaW46IEF1dGhQbHVnaW5GYWN0b3J5ID0gKCkgPT4ge1xuICBsb2dnZXIud2FybignREVCVUcgTU9ERSBFTkFCTEVEIC0gRE8gTk9UIFVTRSBJTiBQUk9EVUNUSU9OIScpO1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBsZXQgaW5zdGFuY2U6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHJldHVybiAoYXV0aFNlcnZpY2UpID0+IHtcbiAgICBpbnN0YW5jZSA/Pz0gYXV0aFNlcnZpY2UuaWRlbnRpdHlDbGFpbXMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKGRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGNsYWltcykgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYFVzZXI6ICR7Y2xhaW1zPy51c2VybmFtZX0gKCR7Y2xhaW1zPy5lbWFpbH0pYCk7XG4gICAgICBsb2dnZXIuZ3JvdXAoJ0lkZW50aXR5IGNsYWltcycsIChsb2cpID0+IGxvZyhjbGFpbXMpLCBmYWxzZSk7XG4gICAgICBsb2dnZXIuZ3JvdXAoJ0FjY2VzcyB0b2tlbicsIChsb2cpID0+IGxvZyhhdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpKSk7XG4gICAgICBsb2dnZXIuZ3JvdXAoJ1JlZnJlc2ggdG9rZW4nLCAobG9nKSA9PiBsb2coYXV0aFNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCkpKTtcbiAgICAgIGxvZ2dlci5ncm91cCgnSUQgdG9rZW4nLCAobG9nKSA9PiBsb2coYXV0aFNlcnZpY2UuZ2V0SWRUb2tlbigpKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2Yoe30pO1xuICB9O1xufTtcbiJdfQ==
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { of } from 'rxjs';
|
|
2
2
|
import { injectAuthConfig } from '../auth.config';
|
|
3
|
+
/**
|
|
4
|
+
* Core identity plugin for authentication.
|
|
5
|
+
*
|
|
6
|
+
* This plugin extracts and processes identity claims from the authentication service.
|
|
7
|
+
*
|
|
8
|
+
* @returns {AuthPluginFactory} A factory function that returns an observable with the processed identity claims.
|
|
9
|
+
*/
|
|
3
10
|
export const coreIdentityPlugin = () => {
|
|
4
11
|
const { resolveEmail, resolveUsername, createInitials } = injectAuthConfig();
|
|
5
12
|
return (authService) => {
|
|
@@ -10,4 +17,4 @@ export const coreIdentityPlugin = () => {
|
|
|
10
17
|
return of({ email: resolveEmail(claims), username, initials: createInitials(username) });
|
|
11
18
|
};
|
|
12
19
|
};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1pZGVudGl0eS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9wbHVnaW5zL2NvcmUtaWRlbnRpdHkucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFjbEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNCLEdBQUcsRUFBRTtJQUN4RCxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRTdFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUNyQixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RBdXRoQ29uZmlnIH0gZnJvbSAnLi4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHsgQXV0aFBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIG5hbWVzcGFjZSBPZHhBdXRoIHtcbiAgICBpbnRlcmZhY2UgQXV0aFBsdWdpblJlc3VsdCB7XG4gICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgaW5pdGlhbHM6IHN0cmluZztcbiAgICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29yZSBpZGVudGl0eSBwbHVnaW4gZm9yIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIFRoaXMgcGx1Z2luIGV4dHJhY3RzIGFuZCBwcm9jZXNzZXMgaWRlbnRpdHkgY2xhaW1zIGZyb20gdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UuXG4gKlxuICogQHJldHVybnMge0F1dGhQbHVnaW5GYWN0b3J5fSBBIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUgd2l0aCB0aGUgcHJvY2Vzc2VkIGlkZW50aXR5IGNsYWltcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvcmVJZGVudGl0eVBsdWdpbjogQXV0aFBsdWdpbkZhY3RvcnkgPSAoKSA9PiB7XG4gIGNvbnN0IHsgcmVzb2x2ZUVtYWlsLCByZXNvbHZlVXNlcm5hbWUsIGNyZWF0ZUluaXRpYWxzIH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG5cbiAgcmV0dXJuIChhdXRoU2VydmljZSkgPT4ge1xuICAgIGNvbnN0IGNsYWltcyA9IGF1dGhTZXJ2aWNlLmdldFJhd0lkZW50aXR5Q2xhaW1zKCk7XG4gICAgaWYgKCFjbGFpbXMpIHJldHVybiBvZih7fSk7XG4gICAgY29uc3QgdXNlcm5hbWUgPSByZXNvbHZlVXNlcm5hbWUoY2xhaW1zKTtcblxuICAgIHJldHVybiBvZih7IGVtYWlsOiByZXNvbHZlRW1haWwoY2xhaW1zKSwgdXNlcm5hbWUsIGluaXRpYWxzOiBjcmVhdGVJbml0aWFscyh1c2VybmFtZSkgfSk7XG4gIH07XG59O1xuIl19
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { of } from 'rxjs';
|
|
2
2
|
import { ODX_AUTH_USER_PROFILE_HOSTS, injectAuthConfig } from '../auth.config';
|
|
3
|
+
/**
|
|
4
|
+
* A plugin factory that generates a user profile URL plugin.
|
|
5
|
+
*
|
|
6
|
+
* This plugin retrieves the user profile URL from the authentication configuration.
|
|
7
|
+
* If the user profile URL is not specified in the configuration, it falls back to
|
|
8
|
+
* using the default URL for the current environment from `ODX_AUTH_USER_PROFILE_HOSTS`.
|
|
9
|
+
*
|
|
10
|
+
* @returns A function that returns an observable emitting an object containing the user profile URL.
|
|
11
|
+
*/
|
|
3
12
|
export const userProfileUrlPlugin = () => {
|
|
4
13
|
const { environment, userProfileUrl } = injectAuthConfig();
|
|
5
14
|
return () => {
|
|
6
15
|
return of({ userProfileUrl: userProfileUrl ?? ODX_AUTH_USER_PROFILE_HOSTS[environment] });
|
|
7
16
|
};
|
|
8
17
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcm9maWxlLWxpbmsucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvcGx1Z2lucy91c2VyLXByb2ZpbGUtbGluay5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVkvRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFzQixHQUFHLEVBQUU7SUFDMUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzNELE9BQU8sR0FBRyxFQUFFO1FBQ1YsT0FBTyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsY0FBYyxJQUFJLDJCQUEyQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT0RYX0FVVEhfVVNFUl9QUk9GSUxFX0hPU1RTLCBpbmplY3RBdXRoQ29uZmlnIH0gZnJvbSAnLi4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHsgQXV0aFBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIG5hbWVzcGFjZSBPZHhBdXRoIHtcbiAgICBpbnRlcmZhY2UgQXV0aFBsdWdpblJlc3VsdCB7XG4gICAgICB1c2VyUHJvZmlsZVVybDogc3RyaW5nO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgcGx1Z2luIGZhY3RvcnkgdGhhdCBnZW5lcmF0ZXMgYSB1c2VyIHByb2ZpbGUgVVJMIHBsdWdpbi5cbiAqXG4gKiBUaGlzIHBsdWdpbiByZXRyaWV2ZXMgdGhlIHVzZXIgcHJvZmlsZSBVUkwgZnJvbSB0aGUgYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIElmIHRoZSB1c2VyIHByb2ZpbGUgVVJMIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGl0IGZhbGxzIGJhY2sgdG9cbiAqIHVzaW5nIHRoZSBkZWZhdWx0IFVSTCBmb3IgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZnJvbSBgT0RYX0FVVEhfVVNFUl9QUk9GSUxFX0hPU1RTYC5cbiAqXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBvYnNlcnZhYmxlIGVtaXR0aW5nIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1c2VyIHByb2ZpbGUgVVJMLlxuICovXG5leHBvcnQgY29uc3QgdXNlclByb2ZpbGVVcmxQbHVnaW46IEF1dGhQbHVnaW5GYWN0b3J5ID0gKCkgPT4ge1xuICBjb25zdCB7IGVudmlyb25tZW50LCB1c2VyUHJvZmlsZVVybCB9ID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHJldHVybiBvZih7IHVzZXJQcm9maWxlVXJsOiB1c2VyUHJvZmlsZVVybCA/PyBPRFhfQVVUSF9VU0VSX1BST0ZJTEVfSE9TVFNbZW52aXJvbm1lbnRdIH0pO1xuICB9O1xufTtcbiJdfQ==
|
|
@@ -4,6 +4,14 @@ import { WindowRef } from '@odx/angular';
|
|
|
4
4
|
import { isString } from '@odx/angular/utils';
|
|
5
5
|
import { map, take, tap } from 'rxjs';
|
|
6
6
|
import { AuthService } from './auth.service';
|
|
7
|
+
/**
|
|
8
|
+
* Guard function to prevent unauthorized access to routes.
|
|
9
|
+
*
|
|
10
|
+
* @param {AuthorizedHandler} authorizedHandler - Optional handler to check if the user is authorized.
|
|
11
|
+
* @param {any[] | string} redirectTo - Optional URL or route to redirect unauthorized users to. Can be a string or an array of strings.
|
|
12
|
+
* @param {boolean} isExternal - Optional flag to indicate if the redirection should be external. Defaults to false.
|
|
13
|
+
* @returns {CanActivateFn} - A function that implements the CanActivateFn interface.
|
|
14
|
+
*/
|
|
7
15
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
16
|
export function unauthGuard(authorizedHandler, redirectTo, isExternal = false) {
|
|
9
17
|
return (_) => {
|
|
@@ -27,4 +35,4 @@ export function unauthGuard(authorizedHandler, redirectTo, isExternal = false) {
|
|
|
27
35
|
}), take(1));
|
|
28
36
|
};
|
|
29
37
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hdXRoLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvdW5hdXRoLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFpQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDOzs7Ozs7O0dBT0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxpQkFBcUMsRUFBRSxVQUEyQixFQUFFLFVBQVUsR0FBRyxLQUFLO0lBQ2hILE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNYLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBDLE9BQU8sV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQ3ZELEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3JCLElBQUksY0FBYyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3RDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhvcml6ZWRIYW5kbGVyIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG4vKipcbiAqIEd1YXJkIGZ1bmN0aW9uIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGFjY2VzcyB0byByb3V0ZXMuXG4gKlxuICogQHBhcmFtIHtBdXRob3JpemVkSGFuZGxlcn0gYXV0aG9yaXplZEhhbmRsZXIgLSBPcHRpb25hbCBoYW5kbGVyIHRvIGNoZWNrIGlmIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQuXG4gKiBAcGFyYW0ge2FueVtdIHwgc3RyaW5nfSByZWRpcmVjdFRvIC0gT3B0aW9uYWwgVVJMIG9yIHJvdXRlIHRvIHJlZGlyZWN0IHVuYXV0aG9yaXplZCB1c2VycyB0by4gQ2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRXh0ZXJuYWwgLSBPcHRpb25hbCBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSByZWRpcmVjdGlvbiBzaG91bGQgYmUgZXh0ZXJuYWwuIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHJldHVybnMge0NhbkFjdGl2YXRlRm59IC0gQSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIENhbkFjdGl2YXRlRm4gaW50ZXJmYWNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHVuYXV0aEd1YXJkKGF1dGhvcml6ZWRIYW5kbGVyPzogQXV0aG9yaXplZEhhbmRsZXIsIHJlZGlyZWN0VG8/OiBhbnlbXSB8IHN0cmluZywgaXNFeHRlcm5hbCA9IGZhbHNlKTogQ2FuQWN0aXZhdGVGbiB7XG4gIHJldHVybiAoXykgPT4ge1xuICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgIGNvbnN0IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuXG4gICAgcmV0dXJuIGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQucGlwZShcbiAgICAgIG1hcCgoKSA9PiAhYXV0aFNlcnZpY2UuaXNBdXRob3JpemVkKGF1dGhvcml6ZWRIYW5kbGVyKSksXG4gICAgICB0YXAoKGlzVW5hdXRob3JpemVkKSA9PiB7XG4gICAgICAgIGlmIChpc1VuYXV0aG9yaXplZCB8fCAhcm91dGVyKSByZXR1cm47XG4gICAgICAgIGlmIChpc1N0cmluZyhyZWRpcmVjdFRvKSkge1xuICAgICAgICAgIGlmIChpc0V4dGVybmFsKSB7XG4gICAgICAgICAgICB3aW5kb3dSZWYubG9jYXRpb24uYXNzaWduKHJlZGlyZWN0VG8pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZWRpcmVjdFRvKSkge1xuICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShyZWRpcmVjdFRvKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlKDEpLFxuICAgICk7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { buildUrl, isString } from '@odx/angular/utils';
|
|
2
2
|
import { ServiceConnnectEnvironments } from '../service-connect.config';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a service connect URL based on the provided environment and endpoints.
|
|
5
|
+
*
|
|
6
|
+
* @param {ServiceConnectEnvironment | AuthEnvironment} environment - The environment configuration which can be either a `ServiceConnectEnvironment` or `AuthEnvironment`.
|
|
7
|
+
* @param {string[]} endpoints - A list of endpoint strings to be appended to the base URL.
|
|
8
|
+
* @returns {string} - The constructed service connect URL as a string.
|
|
9
|
+
*/
|
|
3
10
|
export function buildServiceConnectUrl(environment, ...endpoints) {
|
|
4
11
|
if (isString(environment)) {
|
|
5
12
|
return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);
|
|
6
13
|
}
|
|
7
14
|
return buildUrl(environment.custom, ...endpoints);
|
|
8
15
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2VydmljZS1jb25uZWN0LXVybC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9wbHVnaW5zL3NlcnZpY2UtY29ubmVjdC9zcmMvbGliL2hlbHBlcnMvYnVpbGQtc2VydmljZS1jb25uZWN0LXVybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELE9BQU8sRUFBNkIsMkJBQTJCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsV0FBd0QsRUFBRSxHQUFHLFNBQW1CO0lBQ3JILElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsMkJBQTJCLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZFVybCwgaXNTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQXV0aEVudmlyb25tZW50IH0gZnJvbSAnQG9keC9hdXRoJztcbmltcG9ydCB7IFNlcnZpY2VDb25uZWN0RW52aXJvbm1lbnQsIFNlcnZpY2VDb25ubmVjdEVudmlyb25tZW50cyB9IGZyb20gJy4uL3NlcnZpY2UtY29ubmVjdC5jb25maWcnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHNlcnZpY2UgY29ubmVjdCBVUkwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGVudmlyb25tZW50IGFuZCBlbmRwb2ludHMuXG4gKlxuICogQHBhcmFtIHtTZXJ2aWNlQ29ubmVjdEVudmlyb25tZW50IHwgQXV0aEVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIFRoZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBgU2VydmljZUNvbm5lY3RFbnZpcm9ubWVudGAgb3IgYEF1dGhFbnZpcm9ubWVudGAuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBlbmRwb2ludHMgLSBBIGxpc3Qgb2YgZW5kcG9pbnQgc3RyaW5ncyB0byBiZSBhcHBlbmRlZCB0byB0aGUgYmFzZSBVUkwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjb25zdHJ1Y3RlZCBzZXJ2aWNlIGNvbm5lY3QgVVJMIGFzIGEgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTZXJ2aWNlQ29ubmVjdFVybChlbnZpcm9ubWVudDogU2VydmljZUNvbm5lY3RFbnZpcm9ubWVudCB8IEF1dGhFbnZpcm9ubWVudCwgLi4uZW5kcG9pbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChpc1N0cmluZyhlbnZpcm9ubWVudCkpIHtcbiAgICByZXR1cm4gYnVpbGRVcmwoU2VydmljZUNvbm5uZWN0RW52aXJvbm1lbnRzW2Vudmlyb25tZW50XSwgLi4uZW5kcG9pbnRzKTtcbiAgfVxuICByZXR1cm4gYnVpbGRVcmwoZW52aXJvbm1lbnQuY3VzdG9tLCAuLi5lbmRwb2ludHMpO1xufVxuIl19
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { hasRolesOrRights } from './has-roles-or-rights';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an authorized handler that checks if the user has the specified roles or rights.
|
|
4
|
+
*
|
|
5
|
+
* @param {RolesOrRights} rolesOrRights - The roles or rights to check against the user's claims.
|
|
6
|
+
* @returns {AuthorizedHandler} - An handler function that takes user claims and returns a boolean indicating
|
|
7
|
+
* whether the user has the required roles or rights.
|
|
8
|
+
*/
|
|
2
9
|
export function hasRolesOrRightsHandler(rolesOrRights) {
|
|
3
10
|
return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);
|
|
4
11
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXJvbGVzLW9yLXJpZ2h0cy1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3BsdWdpbnMvc2VydmljZS1jb25uZWN0L3NyYy9saWIvaGVscGVycy9oYXMtcm9sZXMtb3ItcmlnaHRzLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLHVCQUF1QixDQUFDO0FBRXhFOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxhQUE0QjtJQUNsRSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aG9yaXplZEhhbmRsZXIgfSBmcm9tICdAb2R4L2F1dGgnO1xuaW1wb3J0IHsgaGFzUm9sZXNPclJpZ2h0cywgUm9sZXNPclJpZ2h0cyB9IGZyb20gJy4vaGFzLXJvbGVzLW9yLXJpZ2h0cyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhdXRob3JpemVkIGhhbmRsZXIgdGhhdCBjaGVja3MgaWYgdGhlIHVzZXIgaGFzIHRoZSBzcGVjaWZpZWQgcm9sZXMgb3IgcmlnaHRzLlxuICpcbiAqIEBwYXJhbSB7Um9sZXNPclJpZ2h0c30gcm9sZXNPclJpZ2h0cyAtIFRoZSByb2xlcyBvciByaWdodHMgdG8gY2hlY2sgYWdhaW5zdCB0aGUgdXNlcidzIGNsYWltcy5cbiAqIEByZXR1cm5zIHtBdXRob3JpemVkSGFuZGxlcn0gLSBBbiBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdXNlciBjbGFpbXMgYW5kIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmdcbiAqICAgICAgICAgIHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSByZXF1aXJlZCByb2xlcyBvciByaWdodHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlc09yUmlnaHRzSGFuZGxlcihyb2xlc09yUmlnaHRzOiBSb2xlc09yUmlnaHRzKTogQXV0aG9yaXplZEhhbmRsZXIge1xuICByZXR1cm4gKGNsYWltcykgPT4gaGFzUm9sZXNPclJpZ2h0cyhjbGFpbXM/LnJpZ2h0cyA/PyBbXSwgcm9sZXNPclJpZ2h0cyk7XG59XG4iXX0=
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if the user has any of the specified roles or rights.
|
|
3
|
+
*
|
|
4
|
+
* @param {Right[]} userRights - An array of rights that the user possesses.
|
|
5
|
+
* @param {RolesOrRights} rolesOrRights - An array of roles or rights to check against. A role is represented as an array of rights.
|
|
6
|
+
* @returns {boolean} - `true` if the user has any of the specified roles or rights, otherwise `false`.
|
|
7
|
+
*/
|
|
1
8
|
export function hasRolesOrRights(userRights, rolesOrRights) {
|
|
2
9
|
return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));
|
|
3
10
|
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXJvbGVzLW9yLXJpZ2h0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9wbHVnaW5zL3NlcnZpY2UtY29ubmVjdC9zcmMvbGliL2hlbHBlcnMvaGFzLXJvbGVzLW9yLXJpZ2h0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsVUFBbUIsRUFBRSxhQUE0QjtJQUNoRixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUmlnaHQgPSBzdHJpbmcgfCBudW1iZXI7XG5leHBvcnQgdHlwZSBSb2xlID0gUmlnaHRbXTtcbmV4cG9ydCB0eXBlIFJvbGVzT3JSaWdodHMgPSBBcnJheTxSb2xlIHwgUmlnaHQ+O1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgdXNlciBoYXMgYW55IG9mIHRoZSBzcGVjaWZpZWQgcm9sZXMgb3IgcmlnaHRzLlxuICpcbiAqIEBwYXJhbSB7UmlnaHRbXX0gdXNlclJpZ2h0cyAtIEFuIGFycmF5IG9mIHJpZ2h0cyB0aGF0IHRoZSB1c2VyIHBvc3Nlc3Nlcy5cbiAqIEBwYXJhbSB7Um9sZXNPclJpZ2h0c30gcm9sZXNPclJpZ2h0cyAtIEFuIGFycmF5IG9mIHJvbGVzIG9yIHJpZ2h0cyB0byBjaGVjayBhZ2FpbnN0LiBBIHJvbGUgaXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2YgcmlnaHRzLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gYHRydWVgIGlmIHRoZSB1c2VyIGhhcyBhbnkgb2YgdGhlIHNwZWNpZmllZCByb2xlcyBvciByaWdodHMsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUm9sZXNPclJpZ2h0cyh1c2VyUmlnaHRzOiBSaWdodFtdLCByb2xlc09yUmlnaHRzOiBSb2xlc09yUmlnaHRzKTogYm9vbGVhbiB7XG4gIHJldHVybiByb2xlc09yUmlnaHRzLnNvbWUoKHJpZ2h0cykgPT4gKEFycmF5LmlzQXJyYXkocmlnaHRzKSA/IHJpZ2h0cyA6IFtyaWdodHNdKT8uZXZlcnkoKHJpZ2h0KSA9PiB1c2VyUmlnaHRzLmluY2x1ZGVzKHJpZ2h0KSkpO1xufVxuIl19
|
|
@@ -3,6 +3,12 @@ import { inject } from '@angular/core';
|
|
|
3
3
|
import { injectAuthConfig, requireAuthentication } from '@odx/auth';
|
|
4
4
|
import { defer, map } from 'rxjs';
|
|
5
5
|
import { buildServiceConnectUrl } from './build-service-connect-url';
|
|
6
|
+
/**
|
|
7
|
+
* Creates a plugin factory for fetching and parsing service connect data.
|
|
8
|
+
*
|
|
9
|
+
* @param {ServiceConnectPluginFactoryOptions<Dto>} options - The options for the service connect plugin factory.
|
|
10
|
+
* @returns {ServiceConnectPluginFactory} - A function that creates an auth plugin factory for fetching and parsing service connect data.
|
|
11
|
+
*/
|
|
6
12
|
export function serviceConnectPluginFactory(options) {
|
|
7
13
|
return (pluginOptions) => () => {
|
|
8
14
|
options.setup?.(pluginOptions);
|
|
@@ -15,4 +21,4 @@ export function serviceConnectPluginFactory(options) {
|
|
|
15
21
|
})).pipe(map((dto) => parseResponse(dto)));
|
|
16
22
|
};
|
|
17
23
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXBsdWdpbi1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3BsdWdpbnMvc2VydmljZS1jb25uZWN0L3NyYy9saWIvaGVscGVycy9zZXJ2aWNlLWNvbm5lY3QtcGx1Z2luLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBcUIsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFlckU7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQWdCLE9BQWdEO0lBQ3pHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUM3QixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxXQUFXLElBQUksV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25HLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBRXBHLE9BQU8sR0FBRyxFQUFFLENBQ1YsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUNULFVBQVUsQ0FBQyxHQUFHLENBQU0sR0FBRyxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUM7U0FDNUQsQ0FBQyxDQUNILENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cENvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhQbHVnaW5GYWN0b3J5LCBpbmplY3RBdXRoQ29uZmlnLCByZXF1aXJlQXV0aGVudGljYXRpb24gfSBmcm9tICdAb2R4L2F1dGgnO1xuaW1wb3J0IHsgZGVmZXIsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VydmljZUNvbm5lY3RFbnZpcm9ubWVudCB9IGZyb20gJy4uL3NlcnZpY2UtY29ubmVjdC5jb25maWcnO1xuaW1wb3J0IHsgYnVpbGRTZXJ2aWNlQ29ubmVjdFVybCB9IGZyb20gJy4vYnVpbGQtc2VydmljZS1jb25uZWN0LXVybCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RQbHVnaW5PcHRpb25zIHtcbiAgZW52aXJvbm1lbnQ/OiBTZXJ2aWNlQ29ubmVjdEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeU9wdGlvbnM8RHRvPiB7XG4gIGVuZHBvaW50OiBzdHJpbmdbXTtcbiAgcGFyc2VSZXNwb25zZTogKHJlczogRHRvIHwgbnVsbCkgPT4gUGFydGlhbDxPZHhBdXRoLkF1dGhQbHVnaW5SZXN1bHQ+O1xuICBkZWZhdWx0VmFsdWU/OiBQYXJ0aWFsPE9keEF1dGguQXV0aFBsdWdpblJlc3VsdD47XG4gIHNldHVwPzogKHBsdWdpbk9wdGlvbnM/OiBTZXJ2aWNlQ29ubmVjdFBsdWdpbk9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIFNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeSA9IChwbHVnaW5PcHRpb25zPzogU2VydmljZUNvbm5lY3RQbHVnaW5PcHRpb25zKSA9PiBBdXRoUGx1Z2luRmFjdG9yeTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcGx1Z2luIGZhY3RvcnkgZm9yIGZldGNoaW5nIGFuZCBwYXJzaW5nIHNlcnZpY2UgY29ubmVjdCBkYXRhLlxuICpcbiAqIEBwYXJhbSB7U2VydmljZUNvbm5lY3RQbHVnaW5GYWN0b3J5T3B0aW9uczxEdG8+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBzZXJ2aWNlIGNvbm5lY3QgcGx1Z2luIGZhY3RvcnkuXG4gKiBAcmV0dXJucyB7U2VydmljZUNvbm5lY3RQbHVnaW5GYWN0b3J5fSAtIEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFuIGF1dGggcGx1Z2luIGZhY3RvcnkgZm9yIGZldGNoaW5nIGFuZCBwYXJzaW5nIHNlcnZpY2UgY29ubmVjdCBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUNvbm5lY3RQbHVnaW5GYWN0b3J5PER0byA9IHVua25vd24+KG9wdGlvbnM6IFNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeU9wdGlvbnM8RHRvPik6IFNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeSB7XG4gIHJldHVybiAocGx1Z2luT3B0aW9ucykgPT4gKCkgPT4ge1xuICAgIG9wdGlvbnMuc2V0dXA/LihwbHVnaW5PcHRpb25zKTtcbiAgICBjb25zdCB7IGVudmlyb25tZW50IH0gPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gICAgY29uc3QgaHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgICBjb25zdCB1cmwgPSBidWlsZFNlcnZpY2VDb25uZWN0VXJsKHBsdWdpbk9wdGlvbnM/LmVudmlyb25tZW50ID8/IGVudmlyb25tZW50LCAuLi5vcHRpb25zLmVuZHBvaW50KTtcbiAgICBjb25zdCBwYXJzZVJlc3BvbnNlID0gKGR0bzogRHRvIHwgbnVsbCkgPT4gb3B0aW9ucy5wYXJzZVJlc3BvbnNlKGR0bykgPz8gb3B0aW9ucy5kZWZhdWx0VmFsdWUgPz8ge307XG5cbiAgICByZXR1cm4gKCkgPT5cbiAgICAgIGRlZmVyKCgpID0+XG4gICAgICAgIGh0dHBDbGllbnQuZ2V0PER0bz4odXJsLCB7XG4gICAgICAgICAgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KHJlcXVpcmVBdXRoZW50aWNhdGlvbiwgdHJ1ZSksXG4gICAgICAgIH0pLFxuICAgICAgKS5waXBlKG1hcCgoZHRvKSA9PiBwYXJzZVJlc3BvbnNlKGR0bykpKTtcbiAgfTtcbn1cbiJdfQ==
|