@odx/auth 3.0.1 → 3.1.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/esm2020/index.mjs +2 -1
- package/esm2020/lib/models/auth-http-cache.mjs +2 -2
- package/esm2020/lib/unauth.guard.mjs +28 -0
- package/esm2020/plugins/service-connect/lib/helpers/has-roles-or-rights.mjs +1 -2
- package/esm2020/plugins/service-connect/lib/helpers/index.mjs +2 -1
- package/esm2020/plugins/service-connect/lib/helpers/service-connect-plugin-factory.mjs +27 -0
- package/esm2020/plugins/service-connect/lib/service-connect-rights.plugin.mjs +8 -27
- package/esm2020/plugins/service-connect/lib/service-connect.config.mjs +2 -2
- package/fesm2015/odx-auth-plugins-service-connect.mjs +35 -27
- package/fesm2015/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2015/odx-auth.mjs +25 -2
- package/fesm2015/odx-auth.mjs.map +1 -1
- package/fesm2020/odx-auth-plugins-service-connect.mjs +32 -25
- package/fesm2020/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2020/odx-auth.mjs +25 -2
- package/fesm2020/odx-auth.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/unauth.guard.d.ts +3 -0
- package/package.json +1 -1
- package/plugins/service-connect/lib/helpers/has-roles-or-rights.d.ts +0 -1
- package/plugins/service-connect/lib/helpers/index.d.ts +1 -0
- package/plugins/service-connect/lib/helpers/service-connect-plugin-factory.d.ts +12 -0
- package/plugins/service-connect/lib/service-connect-rights.plugin.d.ts +1 -6
package/esm2020/index.mjs
CHANGED
|
@@ -10,4 +10,5 @@ export * from './lib/directives';
|
|
|
10
10
|
export * from './lib/helpers';
|
|
11
11
|
export * from './lib/models';
|
|
12
12
|
export * from './lib/plugins';
|
|
13
|
-
|
|
13
|
+
export * from './lib/unauth.guard';
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnByb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC50eXBpbmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGx1Z2lucyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91bmF1dGguZ3VhcmQnO1xuIl19
|
|
@@ -21,7 +21,7 @@ export class AuthHttpCache {
|
|
|
21
21
|
catch {
|
|
22
22
|
// ignore request errors
|
|
23
23
|
}
|
|
24
|
-
return cache.match(request
|
|
24
|
+
return cache.match(request).then((res) => res?.json() ?? null);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
AuthHttpCache.CACHE_KEY = '@odx/auth/http-cache';
|
|
@@ -31,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
31
31
|
type: Injectable,
|
|
32
32
|
args: [{ providedIn: 'root' }]
|
|
33
33
|
}] });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1odHRwLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL21vZGVscy9hdXRoLWh0dHAtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRXpDLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFlLGlDQUFpQyxFQUFFO0lBQzdHLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07Q0FDckQsQ0FBQyxDQUFDO0FBR0gsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFHbUIsaUJBQVksR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQWtCckU7SUFoQlEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUEwQjtRQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUksT0FBMEI7UUFDaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsSUFBSTtZQUNGLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQjtRQUFDLE1BQU07WUFDTix3QkFBd0I7U0FDekI7UUFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQzs7QUFsQnVCLHVCQUFTLEdBQUcsc0JBQXNCLENBQUM7MEdBRGhELGFBQWE7OEdBQWIsYUFBYSxjQURBLE1BQU07MkZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcblxuZXhwb3J0IGNvbnN0IE9EWF9BVVRIX0hUVFBfQ0FDSEVfU1RPUkFHRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDYWNoZVN0b3JhZ2U+KCdAb2R4L2F1dGg6OkF1dGhIdHRwQ2FjaGVTdG9yYWdlJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IGluamVjdChXaW5kb3dSZWYpLm5hdGl2ZVdpbmRvdy5jYWNoZXMsXG59KTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRoSHR0cENhY2hlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfS0VZID0gJ0BvZHgvYXV0aC9odHRwLWNhY2hlJztcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZVN0b3JhZ2UgPSBpbmplY3QoT0RYX0FVVEhfSFRUUF9DQUNIRV9TVE9SQUdFKTtcblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKHJlcXVlc3Q6IFJlcXVlc3RJbmZvIHwgVVJMKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmNhY2hlU3RvcmFnZS5vcGVuKEF1dGhIdHRwQ2FjaGUuQ0FDSEVfS0VZKTtcblxuICAgIHJldHVybiBjYWNoZS5kZWxldGUocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUPihyZXF1ZXN0OiBSZXF1ZXN0SW5mbyB8IFVSTCk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMuY2FjaGVTdG9yYWdlLm9wZW4oQXV0aEh0dHBDYWNoZS5DQUNIRV9LRVkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjYWNoZS5hZGQocmVxdWVzdCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmUgcmVxdWVzdCBlcnJvcnNcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGUubWF0Y2gocmVxdWVzdCkudGhlbigocmVzKSA9PiByZXM/Lmpzb24oKSA/PyBudWxsKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { isString } from '@odx/angular/utils';
|
|
4
|
+
import { map, take, tap } from 'rxjs';
|
|
5
|
+
import { AuthService } from './auth.service';
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
export function unauthGuard(authorizedHandler, redirectTo) {
|
|
8
|
+
return (_) => {
|
|
9
|
+
const authService = inject(AuthService);
|
|
10
|
+
const router = inject(Router, { optional: true });
|
|
11
|
+
return authService.isAuthenticated$.pipe(map((isAuthenticated) => {
|
|
12
|
+
if (isAuthenticated && authorizedHandler) {
|
|
13
|
+
return !authorizedHandler(authService.getIdentityClaims(), authService, router);
|
|
14
|
+
}
|
|
15
|
+
return !isAuthenticated;
|
|
16
|
+
}), tap((isUnauthorized) => {
|
|
17
|
+
if (isUnauthorized || !router)
|
|
18
|
+
return;
|
|
19
|
+
if (isString(redirectTo)) {
|
|
20
|
+
router.navigateByUrl(redirectTo);
|
|
21
|
+
}
|
|
22
|
+
else if (Array.isArray(redirectTo)) {
|
|
23
|
+
router.navigate(redirectTo);
|
|
24
|
+
}
|
|
25
|
+
}), take(1));
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hdXRoLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9zcmMvbGliL3VuYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBaUIsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0MsOERBQThEO0FBQzlELE1BQU0sVUFBVSxXQUFXLENBQUMsaUJBQXFDLEVBQUUsVUFBMkI7SUFDNUYsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ1gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVsRCxPQUFPLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3RDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO1lBQ3RCLElBQUksZUFBZSxJQUFJLGlCQUFpQixFQUFFO2dCQUN4QyxPQUFPLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ2pGO1lBQ0QsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUMxQixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUNyQixJQUFJLGNBQWMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNsQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkFjdGl2YXRlRm4sIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemVkSGFuZGxlciB9IGZyb20gJy4vbW9kZWxzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiB1bmF1dGhHdWFyZChhdXRob3JpemVkSGFuZGxlcj86IEF1dGhvcml6ZWRIYW5kbGVyLCByZWRpcmVjdFRvPzogYW55W10gfCBzdHJpbmcpOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuIChfKSA9PiB7XG4gICAgY29uc3QgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICByZXR1cm4gYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkJC5waXBlKFxuICAgICAgbWFwKChpc0F1dGhlbnRpY2F0ZWQpID0+IHtcbiAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCAmJiBhdXRob3JpemVkSGFuZGxlcikge1xuICAgICAgICAgIHJldHVybiAhYXV0aG9yaXplZEhhbmRsZXIoYXV0aFNlcnZpY2UuZ2V0SWRlbnRpdHlDbGFpbXMoKSwgYXV0aFNlcnZpY2UsIHJvdXRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFpc0F1dGhlbnRpY2F0ZWQ7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoaXNVbmF1dGhvcml6ZWQpID0+IHtcbiAgICAgICAgaWYgKGlzVW5hdXRob3JpemVkIHx8ICFyb3V0ZXIpIHJldHVybjtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHJlZGlyZWN0VG8pKSB7XG4gICAgICAgICAgcm91dGVyLm5hdmlnYXRlQnlVcmwocmVkaXJlY3RUbyk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZWRpcmVjdFRvKSkge1xuICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShyZWRpcmVjdFRvKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlKDEpLFxuICAgICk7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import '../service-connect.typings';
|
|
2
1
|
export function hasRolesOrRights(userRights, rolesOrRights) {
|
|
3
2
|
return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));
|
|
4
3
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXJvbGVzLW9yLXJpZ2h0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvcGx1Z2lucy9zZXJ2aWNlLWNvbm5lY3Qvc3JjL2xpYi9oZWxwZXJzL2hhcy1yb2xlcy1vci1yaWdodHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFVBQW1CLEVBQUUsYUFBNEI7SUFDaEYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFJpZ2h0ID0gc3RyaW5nIHwgbnVtYmVyO1xuZXhwb3J0IHR5cGUgUm9sZSA9IFJpZ2h0W107XG5leHBvcnQgdHlwZSBSb2xlc09yUmlnaHRzID0gQXJyYXk8Um9sZSB8IFJpZ2h0PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1JvbGVzT3JSaWdodHModXNlclJpZ2h0czogUmlnaHRbXSwgcm9sZXNPclJpZ2h0czogUm9sZXNPclJpZ2h0cyk6IGJvb2xlYW4ge1xuICByZXR1cm4gcm9sZXNPclJpZ2h0cy5zb21lKChyaWdodHMpID0+IChBcnJheS5pc0FycmF5KHJpZ2h0cykgPyByaWdodHMgOiBbcmlnaHRzXSk/LmV2ZXJ5KChyaWdodCkgPT4gdXNlclJpZ2h0cy5pbmNsdWRlcyhyaWdodCkpKTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './build-service-connect-url';
|
|
2
2
|
export * from './has-roles-or-rights';
|
|
3
3
|
export * from './has-roles-or-rights-handler';
|
|
4
|
-
|
|
4
|
+
export * from './service-connect-plugin-factory';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3BsdWdpbnMvc2VydmljZS1jb25uZWN0L3NyYy9saWIvaGVscGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idWlsZC1zZXJ2aWNlLWNvbm5lY3QtdXJsJztcbmV4cG9ydCAqIGZyb20gJy4vaGFzLXJvbGVzLW9yLXJpZ2h0cyc7XG5leHBvcnQgKiBmcm9tICcuL2hhcy1yb2xlcy1vci1yaWdodHMtaGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UtY29ubmVjdC1wbHVnaW4tZmFjdG9yeSc7XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { AuthHttpCache, injectAuthConfig } from '@odx/auth';
|
|
3
|
+
import { defer } from 'rxjs';
|
|
4
|
+
import { buildServiceConnectUrl } from './build-service-connect-url';
|
|
5
|
+
export function serviceConnectPluginFactory(options) {
|
|
6
|
+
return (pluginOptions) => () => {
|
|
7
|
+
const { environment } = injectAuthConfig();
|
|
8
|
+
const httpCache = inject(AuthHttpCache);
|
|
9
|
+
options.setup?.();
|
|
10
|
+
const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);
|
|
11
|
+
const plugin = (authService) => defer(async () => {
|
|
12
|
+
const request = new Request(url);
|
|
13
|
+
const token = authService.getAccessToken();
|
|
14
|
+
let result = null;
|
|
15
|
+
if (token) {
|
|
16
|
+
request.headers.set('Authorization', `Bearer ${token}`);
|
|
17
|
+
result = await httpCache.request(request).then((res) => options.parseResponse(res));
|
|
18
|
+
}
|
|
19
|
+
else if (!authService.isAuthenticated()) {
|
|
20
|
+
await httpCache.delete(request);
|
|
21
|
+
}
|
|
22
|
+
return result ?? options.defaultValue ?? {};
|
|
23
|
+
});
|
|
24
|
+
return plugin;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXBsdWdpbi1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXV0aC9wbHVnaW5zL3NlcnZpY2UtY29ubmVjdC9zcmMvbGliL2hlbHBlcnMvc2VydmljZS1jb25uZWN0LXBsdWdpbi1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBaUMsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0YsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQWFyRSxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLE9BQWdEO0lBRWhELE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUM3QixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbEIsTUFBTSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsYUFBYSxFQUFFLFdBQVcsSUFBSSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbkcsTUFBTSxNQUFNLEdBQWUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUN6QyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBRXhELE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQU0sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDMUY7aUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsT0FBTyxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoSHR0cENhY2hlLCBBdXRoUGx1Z2luLCBBdXRoUGx1Z2luRmFjdG9yeSwgaW5qZWN0QXV0aENvbmZpZyB9IGZyb20gJ0BvZHgvYXV0aCc7XG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VydmljZUNvbm5lY3RFbnZpcm9ubWVudCB9IGZyb20gJy4uL3NlcnZpY2UtY29ubmVjdC5jb25maWcnO1xuaW1wb3J0IHsgYnVpbGRTZXJ2aWNlQ29ubmVjdFVybCB9IGZyb20gJy4vYnVpbGQtc2VydmljZS1jb25uZWN0LXVybCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUNvbm5lY3RQbHVnaW5PcHRpb25zIHtcbiAgZW52aXJvbm1lbnQ/OiBTZXJ2aWNlQ29ubmVjdEVudmlyb25tZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeU9wdGlvbnM8RHRvPiB7XG4gIGVuZHBvaW50OiBzdHJpbmdbXTtcbiAgcGFyc2VSZXNwb25zZTogKHJlczogRHRvIHwgbnVsbCkgPT4gUGFydGlhbDxPZHhBdXRoLkF1dGhQbHVnaW5SZXN1bHQ+O1xuICBkZWZhdWx0VmFsdWU/OiBQYXJ0aWFsPE9keEF1dGguQXV0aFBsdWdpblJlc3VsdD47XG4gIHNldHVwPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeTxEdG8gPSB1bmtub3duPihcbiAgb3B0aW9uczogU2VydmljZUNvbm5lY3RQbHVnaW5GYWN0b3J5T3B0aW9uczxEdG8+LFxuKTogKHBsdWdpbk9wdGlvbnM/OiBTZXJ2aWNlQ29ubmVjdFBsdWdpbk9wdGlvbnMpID0+IEF1dGhQbHVnaW5GYWN0b3J5IHtcbiAgcmV0dXJuIChwbHVnaW5PcHRpb25zKSA9PiAoKSA9PiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudCB9ID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICAgIGNvbnN0IGh0dHBDYWNoZSA9IGluamVjdChBdXRoSHR0cENhY2hlKTtcbiAgICBvcHRpb25zLnNldHVwPy4oKTtcbiAgICBjb25zdCB1cmwgPSBidWlsZFNlcnZpY2VDb25uZWN0VXJsKHBsdWdpbk9wdGlvbnM/LmVudmlyb25tZW50ID8/IGVudmlyb25tZW50LCAuLi5vcHRpb25zLmVuZHBvaW50KTtcblxuICAgIGNvbnN0IHBsdWdpbjogQXV0aFBsdWdpbiA9IChhdXRoU2VydmljZSkgPT5cbiAgICAgIGRlZmVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCk7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG5cbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBodHRwQ2FjaGUucmVxdWVzdDxEdG8+KHJlcXVlc3QpLnRoZW4oKHJlcykgPT4gb3B0aW9ucy5wYXJzZVJlc3BvbnNlKHJlcykpO1xuICAgICAgICB9IGVsc2UgaWYgKCFhdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgICAgIGF3YWl0IGh0dHBDYWNoZS5kZWxldGUocmVxdWVzdCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0ID8/IG9wdGlvbnMuZGVmYXVsdFZhbHVlID8/IHt9O1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gcGx1Z2luO1xuICB9O1xufVxuIl19
|
|
@@ -1,29 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AuthHttpCache, injectAuthConfig } from '@odx/auth';
|
|
3
|
-
import { defer } from 'rxjs';
|
|
4
|
-
import { buildServiceConnectUrl } from './helpers';
|
|
1
|
+
import { serviceConnectPluginFactory } from './helpers';
|
|
5
2
|
import { ServiceConnectEndpoints } from './service-connect.config';
|
|
6
3
|
import './service-connect.typings';
|
|
7
|
-
export const serviceConnectRightsPlugin = (
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const token = authService.getAccessToken();
|
|
15
|
-
let result = null;
|
|
16
|
-
if (token) {
|
|
17
|
-
request.headers.set('Authorization', `Bearer ${token}`);
|
|
18
|
-
result = await httpCache.request(request).then((res) => ({ rights: res?.rights ?? [] }));
|
|
19
|
-
}
|
|
20
|
-
else if (!authService.isAuthenticated()) {
|
|
21
|
-
await httpCache.delete(request);
|
|
22
|
-
}
|
|
23
|
-
return result ?? { rights: [] };
|
|
24
|
-
});
|
|
25
|
-
// inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
26
|
-
return plugin;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXJpZ2h0cy5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3BsdWdpbnMvc2VydmljZS1jb25uZWN0L3NyYy9saWIvc2VydmljZS1jb25uZWN0LXJpZ2h0cy5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFpQyxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQTZCLE1BQU0sMEJBQTBCLENBQUM7QUFDOUYsT0FBTywyQkFBMkIsQ0FBQztBQU1uQyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLE9BQTJDLEVBQXFCLEVBQUU7SUFDM0csT0FBTyxHQUFHLEVBQUU7UUFDVixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsTUFBTSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxXQUFXLEVBQUUsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUcsTUFBTSxNQUFNLEdBQWUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUN6QyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBRXhELE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQXFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM5SDtpQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDakM7WUFFRCxPQUFPLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNMLHFIQUFxSDtRQUVySCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhIdHRwQ2FjaGUsIEF1dGhQbHVnaW4sIEF1dGhQbHVnaW5GYWN0b3J5LCBpbmplY3RBdXRoQ29uZmlnIH0gZnJvbSAnQG9keC9hdXRoJztcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHZXRTZXJ2aWNlQ29ubmVjdFJpZ2h0c1Jlc3BvbnNlRHRvIH0gZnJvbSAnLi9kdG9zJztcbmltcG9ydCB7IGJ1aWxkU2VydmljZUNvbm5lY3RVcmwgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgU2VydmljZUNvbm5lY3RFbmRwb2ludHMsIFNlcnZpY2VDb25uZWN0RW52aXJvbm1lbnQgfSBmcm9tICcuL3NlcnZpY2UtY29ubmVjdC5jb25maWcnO1xuaW1wb3J0ICcuL3NlcnZpY2UtY29ubmVjdC50eXBpbmdzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29ubmVjdFJpZ2h0c1BsdWdpbk9wdGlvbnMge1xuICBlbnZpcm9ubWVudD86IFNlcnZpY2VDb25uZWN0RW52aXJvbm1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBzZXJ2aWNlQ29ubmVjdFJpZ2h0c1BsdWdpbiA9IChvcHRpb25zPzogU2VydmljZUNvbm5lY3RSaWdodHNQbHVnaW5PcHRpb25zKTogQXV0aFBsdWdpbkZhY3RvcnkgPT4ge1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGNvbnN0IHsgZW52aXJvbm1lbnQgfSA9IGluamVjdEF1dGhDb25maWcoKTtcbiAgICBjb25zdCBodHRwQ2FjaGUgPSBpbmplY3QoQXV0aEh0dHBDYWNoZSk7XG4gICAgY29uc3QgdXJsID0gYnVpbGRTZXJ2aWNlQ29ubmVjdFVybChvcHRpb25zPy5lbnZpcm9ubWVudCA/PyBlbnZpcm9ubWVudCwgU2VydmljZUNvbm5lY3RFbmRwb2ludHMudXNlclJpZ2h0cyk7XG5cbiAgICBjb25zdCBwbHVnaW46IEF1dGhQbHVnaW4gPSAoYXV0aFNlcnZpY2UpID0+XG4gICAgICBkZWZlcihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwpO1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApO1xuXG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaHR0cENhY2hlLnJlcXVlc3Q8R2V0U2VydmljZUNvbm5lY3RSaWdodHNSZXNwb25zZUR0bz4ocmVxdWVzdCkudGhlbigocmVzKSA9PiAoeyByaWdodHM6IHJlcz8ucmlnaHRzID8/IFtdIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmICghYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgICAgICBhd2FpdCBodHRwQ2FjaGUuZGVsZXRlKHJlcXVlc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdCA/PyB7IHJpZ2h0czogW10gfTtcbiAgICAgIH0pO1xuICAgIC8vIGluamVjdChBdXRoQ29uZmlnKS5zY29wZXM/LnB1c2goU2VydmljZUNvbm5lY3RTY29wZXMuUklHSFRTKTsgLy8gVE9ETzogZW5hYmxlIHNjb3BlIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBDU0kgdGVhbVxuXG4gICAgcmV0dXJuIHBsdWdpbjtcbiAgfTtcbn07XG4iXX0=
|
|
4
|
+
export const serviceConnectRightsPlugin = serviceConnectPluginFactory({
|
|
5
|
+
endpoint: [ServiceConnectEndpoints.userRights],
|
|
6
|
+
parseResponse: (res) => ({ rights: res?.rights ?? [] }),
|
|
7
|
+
defaultValue: { rights: [] },
|
|
8
|
+
// setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXJpZ2h0cy5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hdXRoL3BsdWdpbnMvc2VydmljZS1jb25uZWN0L3NyYy9saWIvc2VydmljZS1jb25uZWN0LXJpZ2h0cy5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sMkJBQTJCLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsMkJBQTJCLENBQXFDO0lBQ3hHLFFBQVEsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQztJQUM5QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN2RCxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0lBQzVCLG1JQUFtSTtDQUNwSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZXRTZXJ2aWNlQ29ubmVjdFJpZ2h0c1Jlc3BvbnNlRHRvIH0gZnJvbSAnLi9kdG9zJztcbmltcG9ydCB7IHNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29ubmVjdEVuZHBvaW50cyB9IGZyb20gJy4vc2VydmljZS1jb25uZWN0LmNvbmZpZyc7XG5pbXBvcnQgJy4vc2VydmljZS1jb25uZWN0LnR5cGluZ3MnO1xuXG5leHBvcnQgY29uc3Qgc2VydmljZUNvbm5lY3RSaWdodHNQbHVnaW4gPSBzZXJ2aWNlQ29ubmVjdFBsdWdpbkZhY3Rvcnk8R2V0U2VydmljZUNvbm5lY3RSaWdodHNSZXNwb25zZUR0bz4oe1xuICBlbmRwb2ludDogW1NlcnZpY2VDb25uZWN0RW5kcG9pbnRzLnVzZXJSaWdodHNdLFxuICBwYXJzZVJlc3BvbnNlOiAocmVzKSA9PiAoeyByaWdodHM6IHJlcz8ucmlnaHRzID8/IFtdIH0pLFxuICBkZWZhdWx0VmFsdWU6IHsgcmlnaHRzOiBbXSB9LFxuICAvLyAgc2V0dXA6ICgpID0+IGluamVjdChBdXRoQ29uZmlnKS5zY29wZXM/LnB1c2goU2VydmljZUNvbm5lY3RTY29wZXMuUklHSFRTKTsgLy8gVE9ETzogZW5hYmxlIHNjb3BlIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBDU0kgdGVhbVxufSk7XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const ServiceConnnectEnvironments = {
|
|
2
2
|
dev: 'https://api.test.connect.draeger.com',
|
|
3
|
-
stage: 'https://api.
|
|
3
|
+
stage: 'https://api.staging.connect.draeger.com',
|
|
4
4
|
prod: 'https://api.connect.draeger.com',
|
|
5
5
|
};
|
|
6
6
|
export const ServiceConnectScopes = {
|
|
@@ -11,4 +11,4 @@ export const ServiceConnectScopes = {
|
|
|
11
11
|
export const ServiceConnectEndpoints = {
|
|
12
12
|
userRights: '/users/me/rights',
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2F1dGgvcGx1Z2lucy9zZXJ2aWNlLWNvbm5lY3Qvc3JjL2xpYi9zZXJ2aWNlLWNvbm5lY3QuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFvQztJQUMxRSxHQUFHLEVBQUUsc0NBQXNDO0lBQzNDLEtBQUssRUFBRSx5Q0FBeUM7SUFDaEQsSUFBSSxFQUFFLGlDQUFpQztDQUN4QyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsSUFBSSxFQUFFLE1BQU07SUFDWiw4RUFBOEU7SUFDOUUsdUZBQXVGO0NBQ3hGLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxVQUFVLEVBQUUsa0JBQWtCO0NBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoRW52aXJvbm1lbnQgfSBmcm9tICdAb2R4L2F1dGgnO1xuXG5leHBvcnQgdHlwZSBTZXJ2aWNlQ29ubmVjdEVudmlyb25tZW50ID0geyBjdXN0b206IHN0cmluZyB9O1xuZXhwb3J0IGNvbnN0IFNlcnZpY2VDb25ubmVjdEVudmlyb25tZW50czogUmVjb3JkPEF1dGhFbnZpcm9ubWVudCwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnaHR0cHM6Ly9hcGkudGVzdC5jb25uZWN0LmRyYWVnZXIuY29tJyxcbiAgc3RhZ2U6ICdodHRwczovL2FwaS5zdGFnaW5nLmNvbm5lY3QuZHJhZWdlci5jb20nLFxuICBwcm9kOiAnaHR0cHM6Ly9hcGkuY29ubmVjdC5kcmFlZ2VyLmNvbScsXG59O1xuZXhwb3J0IGNvbnN0IFNlcnZpY2VDb25uZWN0U2NvcGVzID0ge1xuICBCQVNFOiAnZGNpZCcsXG4gIC8vIFJJR0hUUzogJ2RjaWQtcmlnaHRzJywgLy8gVE9ETzogZW5hYmxlIHNjb3BlIHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBDU0kgdGVhbVxuICAvLyBJTlNUSVRVVElPTjogJ2RjaWQtaW5zdGl1dGlvbicsIC8vIFRPRE86IGVuYWJsZSBzY29wZSB3aGVuIHN1cHBvcnRlZCBieSB0aGUgQ1NJIHRlYW1cbn07XG5leHBvcnQgY29uc3QgU2VydmljZUNvbm5lY3RFbmRwb2ludHMgPSB7XG4gIHVzZXJSaWdodHM6ICcvdXNlcnMvbWUvcmlnaHRzJyxcbn07XG4iXX0=
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { isString, buildUrl } from '@odx/angular/utils';
|
|
2
|
+
import { __awaiter } from 'tslib';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
3
4
|
import { inject, Directive, Input } from '@angular/core';
|
|
4
5
|
import * as i1 from '@odx/auth';
|
|
5
|
-
import {
|
|
6
|
-
import { __awaiter } from 'tslib';
|
|
6
|
+
import { injectAuthConfig, AuthHttpCache, AuthDirective, authGuard } from '@odx/auth';
|
|
7
7
|
import { defer } from 'rxjs';
|
|
8
8
|
|
|
9
9
|
const ServiceConnnectEnvironments = {
|
|
10
10
|
dev: 'https://api.test.connect.draeger.com',
|
|
11
|
-
stage: 'https://api.
|
|
11
|
+
stage: 'https://api.staging.connect.draeger.com',
|
|
12
12
|
prod: 'https://api.connect.draeger.com',
|
|
13
13
|
};
|
|
14
14
|
const ServiceConnectScopes = {
|
|
@@ -35,6 +35,31 @@ function hasRolesOrRightsHandler(rolesOrRights) {
|
|
|
35
35
|
return (claims) => { var _a; return hasRolesOrRights((_a = claims === null || claims === void 0 ? void 0 : claims.rights) !== null && _a !== void 0 ? _a : [], rolesOrRights); };
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
function serviceConnectPluginFactory(options) {
|
|
39
|
+
return (pluginOptions) => () => {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
const { environment } = injectAuthConfig();
|
|
42
|
+
const httpCache = inject(AuthHttpCache);
|
|
43
|
+
(_a = options.setup) === null || _a === void 0 ? void 0 : _a.call(options);
|
|
44
|
+
const url = buildServiceConnectUrl((_b = pluginOptions === null || pluginOptions === void 0 ? void 0 : pluginOptions.environment) !== null && _b !== void 0 ? _b : environment, ...options.endpoint);
|
|
45
|
+
const plugin = (authService) => defer(() => __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
var _c;
|
|
47
|
+
const request = new Request(url);
|
|
48
|
+
const token = authService.getAccessToken();
|
|
49
|
+
let result = null;
|
|
50
|
+
if (token) {
|
|
51
|
+
request.headers.set('Authorization', `Bearer ${token}`);
|
|
52
|
+
result = yield httpCache.request(request).then((res) => options.parseResponse(res));
|
|
53
|
+
}
|
|
54
|
+
else if (!authService.isAuthenticated()) {
|
|
55
|
+
yield httpCache.delete(request);
|
|
56
|
+
}
|
|
57
|
+
return (_c = result !== null && result !== void 0 ? result : options.defaultValue) !== null && _c !== void 0 ? _c : {};
|
|
58
|
+
}));
|
|
59
|
+
return plugin;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
38
63
|
class ServiceConnectRightsDirective {
|
|
39
64
|
constructor() {
|
|
40
65
|
this.authDirective = inject(AuthDirective, { host: true });
|
|
@@ -67,33 +92,16 @@ function serviceConnectRightsGuard(rolesOrRights, redirectTo) {
|
|
|
67
92
|
return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo);
|
|
68
93
|
}
|
|
69
94
|
|
|
70
|
-
const serviceConnectRightsPlugin = (
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const plugin = (authService) => defer(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
77
|
-
const request = new Request(url);
|
|
78
|
-
const token = authService.getAccessToken();
|
|
79
|
-
let result = null;
|
|
80
|
-
if (token) {
|
|
81
|
-
request.headers.set('Authorization', `Bearer ${token}`);
|
|
82
|
-
result = yield httpCache.request(request).then((res) => { var _a; return ({ rights: (_a = res === null || res === void 0 ? void 0 : res.rights) !== null && _a !== void 0 ? _a : [] }); });
|
|
83
|
-
}
|
|
84
|
-
else if (!authService.isAuthenticated()) {
|
|
85
|
-
yield httpCache.delete(request);
|
|
86
|
-
}
|
|
87
|
-
return result !== null && result !== void 0 ? result : { rights: [] };
|
|
88
|
-
}));
|
|
89
|
-
// inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
90
|
-
return plugin;
|
|
91
|
-
};
|
|
92
|
-
};
|
|
95
|
+
const serviceConnectRightsPlugin = serviceConnectPluginFactory({
|
|
96
|
+
endpoint: [ServiceConnectEndpoints.userRights],
|
|
97
|
+
parseResponse: (res) => { var _a; return ({ rights: (_a = res === null || res === void 0 ? void 0 : res.rights) !== null && _a !== void 0 ? _a : [] }); },
|
|
98
|
+
defaultValue: { rights: [] },
|
|
99
|
+
// setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
100
|
+
});
|
|
93
101
|
|
|
94
102
|
/**
|
|
95
103
|
* Generated bundle index. Do not edit.
|
|
96
104
|
*/
|
|
97
105
|
|
|
98
|
-
export { ServiceConnectEndpoints, ServiceConnectRightsDirective, ServiceConnectScopes, ServiceConnnectEnvironments, buildServiceConnectUrl, hasRolesOrRights, hasRolesOrRightsHandler, serviceConnectRightsGuard, serviceConnectRightsPlugin };
|
|
106
|
+
export { ServiceConnectEndpoints, ServiceConnectRightsDirective, ServiceConnectScopes, ServiceConnnectEnvironments, buildServiceConnectUrl, hasRolesOrRights, hasRolesOrRightsHandler, serviceConnectPluginFactory, serviceConnectRightsGuard, serviceConnectRightsPlugin };
|
|
99
107
|
//# sourceMappingURL=odx-auth-plugins-service-connect.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../packages/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../packages/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n dev: 'https://api.test.connect.draeger.com',\n stage: 'https://api.stage.connect.draeger.com',\n prod: 'https://api.connect.draeger.com',\n};\nexport const ServiceConnectScopes = {\n BASE: 'dcid',\n // RIGHTS: 'dcid-rights', // TODO: enable scope when supported by the CSI team\n // INSTITUTION: 'dcid-instiution', // TODO: enable scope when supported by the CSI team\n};\nexport const ServiceConnectEndpoints = {\n userRights: '/users/me/rights',\n};\n","import { buildUrl, isString } from '@odx/angular/utils';\nimport { AuthEnvironment } from '@odx/auth';\nimport { ServiceConnectEnvironment, ServiceConnnectEnvironments } from '../service-connect.config';\n\nexport function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string {\n if (isString(environment)) {\n return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);\n }\n return buildUrl(environment.custom, ...endpoints);\n}\n","import '../service-connect.typings';\n\nexport type Right = string | number;\nexport type Role = Right[];\nexport type RolesOrRights = Array<Role | Right>;\n\nexport function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean {\n return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));\n}\n","import { AuthorizedHandler } from '@odx/auth';\nimport { hasRolesOrRights, RolesOrRights } from './has-roles-or-rights';\n\nexport function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler {\n return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AuthDirective } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuthServiceConnectRights]',\n hostDirectives: [\n {\n directive: AuthDirective,\n inputs: ['odxAuthElse:odxAuthServiceConnectRightsElse'],\n },\n ],\n})\nexport class ServiceConnectRightsDirective {\n private readonly authDirective = inject(AuthDirective, { host: true });\n\n @Input('odxAuthServiceConnectRights')\n public set rolesOrRights(value: RolesOrRights | null | undefined) {\n this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);\n }\n}\n","import { CanActivateFn } from '@angular/router';\nimport { authGuard } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[]): CanActivateFn {\n return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo);\n}\n","import { inject } from '@angular/core';\nimport { AuthHttpCache, AuthPlugin, AuthPluginFactory, injectAuthConfig } from '@odx/auth';\nimport { defer } from 'rxjs';\nimport { GetServiceConnectRightsResponseDto } from './dtos';\nimport { buildServiceConnectUrl } from './helpers';\nimport { ServiceConnectEndpoints, ServiceConnectEnvironment } from './service-connect.config';\nimport './service-connect.typings';\n\nexport interface ServiceConnectRightsPluginOptions {\n environment?: ServiceConnectEnvironment;\n}\n\nexport const serviceConnectRightsPlugin = (options?: ServiceConnectRightsPluginOptions): AuthPluginFactory => {\n return () => {\n const { environment } = injectAuthConfig();\n const httpCache = inject(AuthHttpCache);\n const url = buildServiceConnectUrl(options?.environment ?? environment, ServiceConnectEndpoints.userRights);\n\n const plugin: AuthPlugin = (authService) =>\n defer(async () => {\n const request = new Request(url);\n const token = authService.getAccessToken();\n let result = null;\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`);\n\n result = await httpCache.request<GetServiceConnectRightsResponseDto>(request).then((res) => ({ rights: res?.rights ?? [] }));\n } else if (!authService.isAuthenticated()) {\n await httpCache.delete(request);\n }\n\n return result ?? { rights: [] };\n });\n // inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team\n\n return plugin;\n };\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../packages/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/service-connect-plugin-factory.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../packages/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n dev: 'https://api.test.connect.draeger.com',\n stage: 'https://api.staging.connect.draeger.com',\n prod: 'https://api.connect.draeger.com',\n};\nexport const ServiceConnectScopes = {\n BASE: 'dcid',\n // RIGHTS: 'dcid-rights', // TODO: enable scope when supported by the CSI team\n // INSTITUTION: 'dcid-instiution', // TODO: enable scope when supported by the CSI team\n};\nexport const ServiceConnectEndpoints = {\n userRights: '/users/me/rights',\n};\n","import { buildUrl, isString } from '@odx/angular/utils';\nimport { AuthEnvironment } from '@odx/auth';\nimport { ServiceConnectEnvironment, ServiceConnnectEnvironments } from '../service-connect.config';\n\nexport function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string {\n if (isString(environment)) {\n return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);\n }\n return buildUrl(environment.custom, ...endpoints);\n}\n","export type Right = string | number;\nexport type Role = Right[];\nexport type RolesOrRights = Array<Role | Right>;\n\nexport function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean {\n return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));\n}\n","import { AuthorizedHandler } from '@odx/auth';\nimport { hasRolesOrRights, RolesOrRights } from './has-roles-or-rights';\n\nexport function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler {\n return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);\n}\n","import { inject } from '@angular/core';\nimport { AuthHttpCache, AuthPlugin, AuthPluginFactory, injectAuthConfig } from '@odx/auth';\nimport { defer } from 'rxjs';\nimport { ServiceConnectEnvironment } from '../service-connect.config';\nimport { buildServiceConnectUrl } from './build-service-connect-url';\n\nexport interface ServiceConnectPluginOptions {\n environment?: ServiceConnectEnvironment;\n}\n\nexport interface ServiceConnectPluginFactoryOptions<Dto> {\n endpoint: string[];\n parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;\n defaultValue?: Partial<OdxAuth.AuthPluginResult>;\n setup?: () => void;\n}\n\nexport function serviceConnectPluginFactory<Dto = unknown>(\n options: ServiceConnectPluginFactoryOptions<Dto>,\n): (pluginOptions?: ServiceConnectPluginOptions) => AuthPluginFactory {\n return (pluginOptions) => () => {\n const { environment } = injectAuthConfig();\n const httpCache = inject(AuthHttpCache);\n options.setup?.();\n const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);\n\n const plugin: AuthPlugin = (authService) =>\n defer(async () => {\n const request = new Request(url);\n const token = authService.getAccessToken();\n let result = null;\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`);\n\n result = await httpCache.request<Dto>(request).then((res) => options.parseResponse(res));\n } else if (!authService.isAuthenticated()) {\n await httpCache.delete(request);\n }\n\n return result ?? options.defaultValue ?? {};\n });\n\n return plugin;\n };\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AuthDirective } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuthServiceConnectRights]',\n hostDirectives: [\n {\n directive: AuthDirective,\n inputs: ['odxAuthElse:odxAuthServiceConnectRightsElse'],\n },\n ],\n})\nexport class ServiceConnectRightsDirective {\n private readonly authDirective = inject(AuthDirective, { host: true });\n\n @Input('odxAuthServiceConnectRights')\n public set rolesOrRights(value: RolesOrRights | null | undefined) {\n this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);\n }\n}\n","import { CanActivateFn } from '@angular/router';\nimport { authGuard } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[]): CanActivateFn {\n return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo);\n}\n","import { GetServiceConnectRightsResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\nimport './service-connect.typings';\n\nexport const serviceConnectRightsPlugin = serviceConnectPluginFactory<GetServiceConnectRightsResponseDto>({\n endpoint: [ServiceConnectEndpoints.userRights],\n parseResponse: (res) => ({ rights: res?.rights ?? [] }),\n defaultValue: { rights: [] },\n // setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2015/odx-auth.mjs
CHANGED
|
@@ -122,7 +122,7 @@ class AuthHttpCache {
|
|
|
122
122
|
catch (_a) {
|
|
123
123
|
// ignore request errors
|
|
124
124
|
}
|
|
125
|
-
return cache.match(request
|
|
125
|
+
return cache.match(request).then((res) => { var _a; return (_a = res === null || res === void 0 ? void 0 : res.json()) !== null && _a !== void 0 ? _a : null; });
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -540,9 +540,32 @@ function provideAuth(config) {
|
|
|
540
540
|
]);
|
|
541
541
|
}
|
|
542
542
|
|
|
543
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
544
|
+
function unauthGuard(authorizedHandler, redirectTo) {
|
|
545
|
+
return (_) => {
|
|
546
|
+
const authService = inject(AuthService);
|
|
547
|
+
const router = inject(Router, { optional: true });
|
|
548
|
+
return authService.isAuthenticated$.pipe(map((isAuthenticated) => {
|
|
549
|
+
if (isAuthenticated && authorizedHandler) {
|
|
550
|
+
return !authorizedHandler(authService.getIdentityClaims(), authService, router);
|
|
551
|
+
}
|
|
552
|
+
return !isAuthenticated;
|
|
553
|
+
}), tap((isUnauthorized) => {
|
|
554
|
+
if (isUnauthorized || !router)
|
|
555
|
+
return;
|
|
556
|
+
if (isString(redirectTo)) {
|
|
557
|
+
router.navigateByUrl(redirectTo);
|
|
558
|
+
}
|
|
559
|
+
else if (Array.isArray(redirectTo)) {
|
|
560
|
+
router.navigate(redirectTo);
|
|
561
|
+
}
|
|
562
|
+
}), take(1));
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
|
|
543
566
|
/**
|
|
544
567
|
* Generated bundle index. Do not edit.
|
|
545
568
|
*/
|
|
546
569
|
|
|
547
|
-
export { AuthActionDirective, AuthComponent, AuthConfig, AuthDefaultConfig, AuthDirective, AuthHttpCache, AuthModule, AuthPluginManager, AuthService, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, ODX_AUTH_CORE_PLUGINS, ODX_AUTH_HTTP_CACHE_STORAGE, ODX_AUTH_PLUGINS, SignInDirective, SignOutDirective, authGuard, configureInterceptor, coreIdentityPlugin, createInitials, initalizeAuthConfig, initializeAuthErrorHandler, injectAuthConfig, provideAuth, provideAuthConfig, resolveEmail, resolveUsername };
|
|
570
|
+
export { AuthActionDirective, AuthComponent, AuthConfig, AuthDefaultConfig, AuthDirective, AuthHttpCache, AuthModule, AuthPluginManager, AuthService, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, ODX_AUTH_CORE_PLUGINS, ODX_AUTH_HTTP_CACHE_STORAGE, ODX_AUTH_PLUGINS, SignInDirective, SignOutDirective, authGuard, configureInterceptor, coreIdentityPlugin, createInitials, initalizeAuthConfig, initializeAuthErrorHandler, injectAuthConfig, provideAuth, provideAuthConfig, resolveEmail, resolveUsername, unauthGuard };
|
|
548
571
|
//# sourceMappingURL=odx-auth.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-auth.mjs","sources":["../../../../packages/auth/src/lib/helpers/create-inititals.ts","../../../../packages/auth/src/lib/helpers/resolve-email.ts","../../../../packages/auth/src/lib/helpers/resolve-username.ts","../../../../packages/auth/src/lib/auth.config.ts","../../../../packages/auth/src/lib/models/auth-http-cache.ts","../../../../packages/auth/src/lib/models/auth-plugin-manager.ts","../../../../packages/auth/src/lib/auth.service.ts","../../../../packages/auth/src/lib/directives/auth-action.directive.ts","../../../../packages/auth/src/lib/directives/sign-in.directive.ts","../../../../packages/auth/src/lib/directives/sign-out.directive.ts","../../../../packages/auth/src/lib/auth.component.ts","../../../../packages/auth/src/lib/auth.component.html","../../../../packages/auth/src/lib/auth.directive.ts","../../../../packages/auth/src/lib/auth.guard.ts","../../../../packages/auth/src/lib/auth.module.ts","../../../../packages/auth/src/lib/plugins/core-identity.plugin.ts","../../../../packages/auth/src/lib/auth.providers.ts","../../../../packages/auth/src/odx-auth.ts"],"sourcesContent":["export function createInitials(value?: string | null): string {\n if (!value) return '';\n const parts = value.trim().split(' ');\n\n return parts.reduce((initials, curr, index) => {\n if (index === 0 || index === parts.length - 1) {\n initials += curr[0].toUpperCase();\n }\n return initials;\n }, '');\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveEmail(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['email'])) {\n return claims['email'];\n }\n if (isString(claims['email_address'])) {\n return claims['email_address'];\n }\n if (Array.isArray(claims['emails']) && isString(claims['emails'][0])) {\n return claims['emails'][0];\n }\n return '';\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveUsername(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['firstname']) && isString(claims['lastname'])) {\n return `${claims['firstname']} ${claims['lastname']}`;\n }\n if (isString(claims['displayname'])) {\n return claims['displayname'];\n }\n if (isString(claims['name'])) {\n return claims['name'];\n }\n return '';\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';\nimport { createInitials, resolveEmail, resolveUsername } from './helpers';\n\nimport { AuthEnvironment, AuthPlugin, AuthPluginFactory } from './models';\n\nexport const DEFAULT_AUTH_SCOPES = ['openid', 'profile', 'email', 'offline_access'];\nexport const DEFAULT_ISSUERS: Record<AuthEnvironment, string> = {\n dev: 'https://dev.login.draeger.com/oauth2/default',\n stage: 'https://test.login.draeger.com/oauth2/default',\n prod: 'https://login.draeger.com/oauth2/default',\n};\nexport const ODX_AUTH_CORE_PLUGINS = new InjectionToken<AuthPluginFactory[]>('@odx/auth::CorePlugins', {\n providedIn: 'root',\n factory: () => [],\n});\nexport const ODX_AUTH_PLUGINS = new InjectionToken<AuthPlugin[]>('@odx/auth::Plugins', {\n providedIn: 'root',\n factory: () => {\n const { plugins } = injectAuthConfig();\n const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);\n\n return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());\n },\n});\n\nexport type AuthErrorHandlerFn = (error: OAuthErrorEvent) => void;\nexport type ResolveUsernameFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type ResolveEmailFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type CreateInitialsFn = (value: string) => string;\n\nexport interface AuthConfig {\n environment: AuthEnvironment;\n clientId?: string;\n issuer?: string;\n redirectPath: string;\n allowedUrls: Array<string | RegExp>;\n timeoutFactor: number;\n maxOfflineTime: number;\n loadUserProfile: boolean;\n postLogoutRedirectUrl?: string;\n scopes?: string[];\n discoveryUrl?: string;\n errorHandler: AuthErrorHandlerFn;\n createInitials: CreateInitialsFn;\n resolveEmail: ResolveEmailFn;\n resolveUsername: ResolveUsernameFn;\n storage?: OAuthStorage;\n plugins: AuthPluginFactory[];\n showRedirectOverlay: boolean;\n}\n\nexport const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {\n environment: 'prod',\n redirectPath: 'login/callback',\n allowedUrls: [],\n timeoutFactor: 0.75,\n maxOfflineTime: 24 * 60 * 60, // 1 day\n loadUserProfile: false,\n errorHandler: (error) => {\n throw error;\n },\n createInitials,\n resolveEmail,\n resolveUsername,\n showRedirectOverlay: false,\n plugins: [],\n} as AuthConfig);\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\n\nexport const ODX_AUTH_HTTP_CACHE_STORAGE = new InjectionToken<CacheStorage>('@odx/auth::AuthHttpCacheStorage', {\n providedIn: 'root',\n factory: () => inject(WindowRef).nativeWindow.caches,\n});\n\n@Injectable({ providedIn: 'root' })\nexport class AuthHttpCache {\n private static readonly CACHE_KEY = '@odx/auth/http-cache';\n private readonly cacheStorage = inject(ODX_AUTH_HTTP_CACHE_STORAGE);\n\n public async delete(request: RequestInfo | URL): Promise<boolean> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n\n return cache.delete(request);\n }\n\n public async request<T>(request: RequestInfo | URL): Promise<T | null> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n try {\n await cache.add(request);\n } catch {\n // ignore request errors\n }\n\n return cache.match(request, { ignoreVary: true, ignoreSearch: false }).then((res) => res?.json() ?? null);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { deepmerge } from 'deepmerge-ts';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, Observable, of, share, switchMap, take, tap } from 'rxjs';\nimport { ODX_AUTH_PLUGINS } from '../auth.config';\nimport { AuthService } from '../auth.service';\n\nexport type AuthPlugin = (authService: AuthService) => Observable<Partial<OdxAuth.AuthPluginResult>>;\nexport type AuthPluginFactory = () => AuthPlugin;\n\n@Injectable({ providedIn: 'root' })\nexport class AuthPluginManager {\n private readonly plugins = inject(ODX_AUTH_PLUGINS);\n private readonly result$$ = new BehaviorSubject<OdxAuth.AuthPluginResult | null>(null);\n\n public readonly pluginsReady$ = this.result$$.pipe(filter(Boolean), map(Boolean), distinctUntilChanged(), share());\n public readonly pluginsLoading$ = this.result$$.pipe(\n map((result) => !result),\n distinctUntilChanged(),\n share(),\n );\n\n public runPlugins(authService: AuthService): Observable<OdxAuth.AuthPluginResult> {\n if (this.plugins.length < 1) {\n return of({} as OdxAuth.AuthPluginResult);\n }\n return authService.isInitialized$.pipe(\n switchMap(() => combineLatest(this.plugins.map((plugin) => plugin(authService)))),\n map((results) => deepmerge(...results) as OdxAuth.AuthPluginResult),\n tap((result) => this.result$$.next(result)),\n take(1),\n );\n }\n\n public getResult(): OdxAuth.AuthPluginResult {\n return this.result$$.getValue() ?? ({} as OdxAuth.AuthPluginResult);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { AuthConfig, OAuthErrorEvent, OAuthService, TokenResponse } from 'angular-oauth2-oidc';\nimport { deepmerge } from 'deepmerge-ts';\nimport jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, fromEvent, map, merge, share, shareReplay, startWith, switchMap } from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthorizedHandler, AuthPluginManager } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly authConfig = injectAuthConfig();\n private readonly authPluginManager = inject(AuthPluginManager);\n private readonly oauthService = inject(OAuthService);\n private readonly router = inject(Router);\n private readonly windowRef = inject(WindowRef);\n\n private readonly isInitialized$$ = new BehaviorSubject(false);\n private readonly onAccessTokenUpdate$ = fromEvent<StorageEvent>(this.windowRef.nativeWindow, 'storage').pipe(\n filter(({ key }) => key === 'access_token' || key === null),\n startWith(null),\n share(),\n );\n private readonly onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);\n\n public readonly isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());\n public readonly isAuthenticated$ = this.isInitialized$.pipe(\n switchMap(() => this.authPluginManager.pluginsReady$),\n switchMap(() => this.onAuthStateChange$),\n map(() => this.isAuthenticated()),\n shareReplay({ refCount: true }),\n );\n public readonly identityClaims$ = this.isAuthenticated$.pipe(\n map(() => this.getIdentityClaims()),\n shareReplay({ refCount: true }),\n );\n public readonly errors$ = this.oauthService.events.pipe(\n filter((event): event is OAuthErrorEvent => event instanceof OAuthErrorEvent),\n share(),\n );\n public readonly isRedirecting$ = fromEvents(this.windowRef.nativeWindow, 'beforeunload').pipe(map(Boolean), distinctUntilChanged(), share());\n public readonly isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());\n\n constructor() {\n this.windowRef.isOnline$.subscribe((isOnline) => {\n if (isOnline) {\n this.oauthService.setupAutomaticSilentRefresh();\n } else {\n this.oauthService.stopAutomaticRefresh();\n }\n });\n this.authPluginManager.runPlugins(this).subscribe();\n }\n\n public async initialize(config: AuthConfig): Promise<void> {\n this.oauthService.configure(config);\n try {\n await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);\n await this.oauthService.tryLoginCodeFlow();\n if (this.getRefreshToken() && !this.isAuthenticated()) {\n await this.oauthService.refreshToken();\n }\n this.isInitialized$$.next(true);\n if (this.authConfig.loadUserProfile && this.oauthService.hasValidAccessToken()) {\n await this.loadUserProfile();\n }\n } catch (error) {\n if (error instanceof HttpErrorResponse) {\n this.isInitialized$$.next(true);\n } else if (error instanceof OAuthErrorEvent) {\n if (error.type === 'token_refresh_error') {\n this.signIn(this.windowRef.location.pathname);\n }\n this.isInitialized$$.next(true);\n } else {\n throw error;\n }\n }\n if (this.oauthService.hasValidAccessToken()) {\n await this.routeToRequestedUrl();\n }\n }\n\n public getIssuer(): URL {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new URL(this.oauthService.issuer!);\n }\n\n public signIn(url?: string): void {\n this.oauthService.initCodeFlow(url);\n }\n\n public signOut(): void {\n this.oauthService.logOut(!this.getAccessToken());\n }\n\n public async loadUserProfile(): Promise<void> {\n await this.oauthService.loadUserProfile();\n }\n\n public async refreshTokens(): Promise<TokenResponse> {\n return this.oauthService.refreshToken();\n }\n\n public getAccessToken(): string | null {\n return this.oauthService.getAccessToken() ?? null;\n }\n\n public getAccessTokenPayload(): (OdxAuth.AccessTokenPayload & Required<JwtPayload>) | null {\n const token = this.getAccessToken();\n\n return token ? jwtDecode(token) : null;\n }\n\n public getRefreshToken(): string | null {\n return this.oauthService.getRefreshToken() ?? null;\n }\n\n public getIdToken(): string | null {\n return this.oauthService.getIdToken() ?? null;\n }\n\n public getIdentityClaims(): OdxAuth.IdentiyClaims | null {\n if (!this.getIdToken()) return null;\n return deepmerge(this.oauthService.getIdentityClaims(), this.authPluginManager.getResult()) as OdxAuth.IdentiyClaims;\n }\n\n public getRawIdentityClaims(): OdxAuth.RawIdentityClaims | null {\n if (!this.getIdToken()) return null;\n return this.oauthService.getIdentityClaims();\n }\n\n public isAuthenticated(): boolean {\n if (this.windowRef.isOnline()) {\n return this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken();\n }\n return this.hasValidOfflineToken();\n }\n\n public isAuthorized(authorizedHandler?: AuthorizedHandler | null): boolean {\n return this.isAuthenticated() && (authorizedHandler?.(this.getIdentityClaims(), this) ?? true);\n }\n\n private async routeToRequestedUrl(): Promise<void> {\n if (!this.oauthService.state) return;\n await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));\n }\n\n private hasValidOfflineToken(): boolean {\n const issuedAt = this.getIdentityClaims()?.iat ?? 0;\n\n return Date.now() - issuedAt * 1000 <= this.authConfig.maxOfflineTime * 1000;\n }\n}\n","import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from '../auth.service';\n\n@Directive()\nexport abstract class AuthActionDirective implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly loadingSpinnerDirective = inject(LoadingSpinnerDirective, { self: true });\n protected readonly authService = inject(AuthService);\n\n public ngAfterViewInit(): void {\n this.loadingSpinnerDirective.autoColor = true;\n this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n this.loadingSpinnerDirective.isLoading = true;\n });\n }\n\n protected abstract handleClick(): void;\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignIn]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignInDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignIn')\n public afterSignIn = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signIn();\n this.afterSignIn.next();\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignOut]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignOutDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignOut')\n public afterSignOut = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signOut();\n this.afterSignOut.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { AreaHeaderModule } from '@odx/angular/components/area-header';\nimport { DropdownModule, DropdownOptions } from '@odx/angular/components/dropdown';\nimport { HeaderModule } from '@odx/angular/components/header';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { Position } from '@odx/angular/utils';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { SignInDirective, SignOutDirective } from './directives';\n\n@Component({\n standalone: true,\n selector: 'odx-auth',\n imports: [CoreModule, AreaHeaderModule, DropdownModule, HeaderModule, LogoDirective, SignInDirective, SignOutDirective, LoadingSpinnerModule],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AuthComponent {\n protected readonly authConfig = injectAuthConfig();\n protected readonly authService = inject(AuthService);\n protected readonly dropdownOptions = {\n position: Position.BOTTOM_END,\n enableFallback: false,\n containerClass: 'odx-auth-user-profile',\n } as Partial<DropdownOptions>;\n\n @Input()\n public signInButtonText = 'Sign in';\n\n @Input()\n public signOutButtonText = 'Sign out';\n}\n","<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ signOutButtonText }}\n <odx-icon name=\"arrow-right\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ signInButtonText }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n <ng-template [ngIf]=\"authConfig.showRedirectOverlay\">\n <div class=\"odx-auth-overlay\" [odxLoadingSpinner]=\"true\" *ngIf=\"authService.isLoading$ | async\"></div>\n </ng-template>\n</odx-action-group>\n","import { NgIf, NgIfContext } from '@angular/common';\nimport { AfterViewInit, Directive, inject, Input, TemplateRef } from '@angular/core';\nimport { isString, untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuth]',\n hostDirectives: [NgIf],\n})\nexport class AuthDirective implements AfterViewInit {\n private readonly authService = inject(AuthService);\n private readonly ngIfDirective = inject(NgIf, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n @Input('odxAuth')\n public authorizationHandler?: AuthorizedHandler | null | string = null;\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('odxAuthElse')\n public set elseTemplate(value: TemplateRef<NgIfContext<unknown>>) {\n this.ngIfDirective.ngIfElse = value;\n }\n\n public ngAfterViewInit(): void {\n this.authService.identityClaims$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;\n this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function authGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string): CanActivateFn {\n return (_, state) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n map((isAuthenticated) => {\n if (!isAuthenticated) {\n authService.signIn(state.url);\n\n return false;\n }\n return authorizedHandler?.(authService.getIdentityClaims(), authService, router) ?? isAuthenticated;\n }),\n tap((isAuthorized) => {\n if (isAuthorized || !router) return;\n if (isString(redirectTo)) {\n router.navigateByUrl(redirectTo);\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","import { NgModule } from '@angular/core';\nimport { AuthComponent } from './auth.component';\nimport { AuthDirective } from './auth.directive';\nimport { SignInDirective, SignOutDirective } from './directives';\n\nconst modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];\n\n@NgModule({\n imports: [...modules],\n exports: [...modules],\n})\nexport class AuthModule {}\n","import { of } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n email: string;\n initials: string;\n username: string;\n }\n }\n}\n\nexport const coreIdentityPlugin: AuthPluginFactory = () => {\n const { resolveEmail, resolveUsername, createInitials } = injectAuthConfig();\n\n return (authService) => {\n const claims = authService.getRawIdentityClaims();\n if (!claims) return of({});\n const username = resolveUsername(claims);\n\n return of({ email: resolveEmail(claims), username, initials: createInitials(username) });\n };\n};\n","import { APP_INITIALIZER, EnvironmentInjector, EnvironmentProviders, ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { buildUrl, ConfigDependencies, ConfigProvider, isString } from '@odx/angular/utils';\nimport { OAuthModuleConfig, OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';\nimport { tap } from 'rxjs';\nimport { AuthConfig, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, injectAuthConfig, ODX_AUTH_CORE_PLUGINS, provideAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { coreIdentityPlugin } from './plugins';\n\nexport function configureInterceptor(): OAuthModuleConfig {\n const { allowedUrls } = injectAuthConfig();\n return {\n resourceServer: {\n customUrlValidation: (url) => allowedUrls.some((allowedUrl) => (isString(allowedUrl) ? url.startsWith(allowedUrl) : !!url.match(allowedUrl))),\n sendAccessToken: true,\n },\n };\n}\n\nexport function initializeAuthErrorHandler(): void {\n const authService = inject(AuthService);\n const injector = inject(EnvironmentInjector);\n const { errorHandler } = injectAuthConfig();\n\n authService.errors$.pipe(tap((error) => injector.runInContext(() => errorHandler(error)))).subscribe();\n}\n\nexport function initalizeAuthConfig(): () => Promise<void> {\n const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl } = injectAuthConfig();\n const authService = inject(AuthService);\n const origin = inject(WindowRef).getOrigin();\n const scope = Array.from(new Set(DEFAULT_AUTH_SCOPES.concat(scopes ?? []))).join(' ');\n\n return () =>\n authService.initialize({\n clientId,\n issuer: issuer ?? DEFAULT_ISSUERS[environment],\n scope,\n redirectUri: buildUrl(origin, redirectPath),\n postLogoutRedirectUri: postLogoutRedirectUrl,\n preserveRequestedRoute: true,\n strictDiscoveryDocumentValidation: !discoveryUrl,\n responseType: 'code',\n showDebugInformation: environment === 'dev',\n timeoutFactor,\n });\n}\n\nexport function provideAuth<D extends ConfigDependencies>(config: ConfigProvider<Partial<AuthConfig>, D>): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAuthConfig(config),\n provideOAuthClient(),\n {\n provide: OAuthModuleConfig,\n useFactory: configureInterceptor,\n },\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: initializeAuthErrorHandler,\n multi: true,\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initalizeAuthConfig,\n multi: true,\n },\n {\n provide: OAuthStorage,\n useFactory: () => inject(AuthConfig).storage ?? inject(WindowRef).nativeWindow.localStorage,\n },\n {\n provide: ODX_AUTH_CORE_PLUGINS,\n useValue: [coreIdentityPlugin],\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i9"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-auth.mjs","sources":["../../../../packages/auth/src/lib/helpers/create-inititals.ts","../../../../packages/auth/src/lib/helpers/resolve-email.ts","../../../../packages/auth/src/lib/helpers/resolve-username.ts","../../../../packages/auth/src/lib/auth.config.ts","../../../../packages/auth/src/lib/models/auth-http-cache.ts","../../../../packages/auth/src/lib/models/auth-plugin-manager.ts","../../../../packages/auth/src/lib/auth.service.ts","../../../../packages/auth/src/lib/directives/auth-action.directive.ts","../../../../packages/auth/src/lib/directives/sign-in.directive.ts","../../../../packages/auth/src/lib/directives/sign-out.directive.ts","../../../../packages/auth/src/lib/auth.component.ts","../../../../packages/auth/src/lib/auth.component.html","../../../../packages/auth/src/lib/auth.directive.ts","../../../../packages/auth/src/lib/auth.guard.ts","../../../../packages/auth/src/lib/auth.module.ts","../../../../packages/auth/src/lib/plugins/core-identity.plugin.ts","../../../../packages/auth/src/lib/auth.providers.ts","../../../../packages/auth/src/lib/unauth.guard.ts","../../../../packages/auth/src/odx-auth.ts"],"sourcesContent":["export function createInitials(value?: string | null): string {\n if (!value) return '';\n const parts = value.trim().split(' ');\n\n return parts.reduce((initials, curr, index) => {\n if (index === 0 || index === parts.length - 1) {\n initials += curr[0].toUpperCase();\n }\n return initials;\n }, '');\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveEmail(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['email'])) {\n return claims['email'];\n }\n if (isString(claims['email_address'])) {\n return claims['email_address'];\n }\n if (Array.isArray(claims['emails']) && isString(claims['emails'][0])) {\n return claims['emails'][0];\n }\n return '';\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveUsername(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['firstname']) && isString(claims['lastname'])) {\n return `${claims['firstname']} ${claims['lastname']}`;\n }\n if (isString(claims['displayname'])) {\n return claims['displayname'];\n }\n if (isString(claims['name'])) {\n return claims['name'];\n }\n return '';\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';\nimport { createInitials, resolveEmail, resolveUsername } from './helpers';\n\nimport { AuthEnvironment, AuthPlugin, AuthPluginFactory } from './models';\n\nexport const DEFAULT_AUTH_SCOPES = ['openid', 'profile', 'email', 'offline_access'];\nexport const DEFAULT_ISSUERS: Record<AuthEnvironment, string> = {\n dev: 'https://dev.login.draeger.com/oauth2/default',\n stage: 'https://test.login.draeger.com/oauth2/default',\n prod: 'https://login.draeger.com/oauth2/default',\n};\nexport const ODX_AUTH_CORE_PLUGINS = new InjectionToken<AuthPluginFactory[]>('@odx/auth::CorePlugins', {\n providedIn: 'root',\n factory: () => [],\n});\nexport const ODX_AUTH_PLUGINS = new InjectionToken<AuthPlugin[]>('@odx/auth::Plugins', {\n providedIn: 'root',\n factory: () => {\n const { plugins } = injectAuthConfig();\n const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);\n\n return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());\n },\n});\n\nexport type AuthErrorHandlerFn = (error: OAuthErrorEvent) => void;\nexport type ResolveUsernameFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type ResolveEmailFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type CreateInitialsFn = (value: string) => string;\n\nexport interface AuthConfig {\n environment: AuthEnvironment;\n clientId?: string;\n issuer?: string;\n redirectPath: string;\n allowedUrls: Array<string | RegExp>;\n timeoutFactor: number;\n maxOfflineTime: number;\n loadUserProfile: boolean;\n postLogoutRedirectUrl?: string;\n scopes?: string[];\n discoveryUrl?: string;\n errorHandler: AuthErrorHandlerFn;\n createInitials: CreateInitialsFn;\n resolveEmail: ResolveEmailFn;\n resolveUsername: ResolveUsernameFn;\n storage?: OAuthStorage;\n plugins: AuthPluginFactory[];\n showRedirectOverlay: boolean;\n}\n\nexport const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {\n environment: 'prod',\n redirectPath: 'login/callback',\n allowedUrls: [],\n timeoutFactor: 0.75,\n maxOfflineTime: 24 * 60 * 60, // 1 day\n loadUserProfile: false,\n errorHandler: (error) => {\n throw error;\n },\n createInitials,\n resolveEmail,\n resolveUsername,\n showRedirectOverlay: false,\n plugins: [],\n} as AuthConfig);\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\n\nexport const ODX_AUTH_HTTP_CACHE_STORAGE = new InjectionToken<CacheStorage>('@odx/auth::AuthHttpCacheStorage', {\n providedIn: 'root',\n factory: () => inject(WindowRef).nativeWindow.caches,\n});\n\n@Injectable({ providedIn: 'root' })\nexport class AuthHttpCache {\n private static readonly CACHE_KEY = '@odx/auth/http-cache';\n private readonly cacheStorage = inject(ODX_AUTH_HTTP_CACHE_STORAGE);\n\n public async delete(request: RequestInfo | URL): Promise<boolean> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n\n return cache.delete(request);\n }\n\n public async request<T>(request: RequestInfo | URL): Promise<T | null> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n try {\n await cache.add(request);\n } catch {\n // ignore request errors\n }\n\n return cache.match(request).then((res) => res?.json() ?? null);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { deepmerge } from 'deepmerge-ts';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, Observable, of, share, switchMap, take, tap } from 'rxjs';\nimport { ODX_AUTH_PLUGINS } from '../auth.config';\nimport { AuthService } from '../auth.service';\n\nexport type AuthPlugin = (authService: AuthService) => Observable<Partial<OdxAuth.AuthPluginResult>>;\nexport type AuthPluginFactory = () => AuthPlugin;\n\n@Injectable({ providedIn: 'root' })\nexport class AuthPluginManager {\n private readonly plugins = inject(ODX_AUTH_PLUGINS);\n private readonly result$$ = new BehaviorSubject<OdxAuth.AuthPluginResult | null>(null);\n\n public readonly pluginsReady$ = this.result$$.pipe(filter(Boolean), map(Boolean), distinctUntilChanged(), share());\n public readonly pluginsLoading$ = this.result$$.pipe(\n map((result) => !result),\n distinctUntilChanged(),\n share(),\n );\n\n public runPlugins(authService: AuthService): Observable<OdxAuth.AuthPluginResult> {\n if (this.plugins.length < 1) {\n return of({} as OdxAuth.AuthPluginResult);\n }\n return authService.isInitialized$.pipe(\n switchMap(() => combineLatest(this.plugins.map((plugin) => plugin(authService)))),\n map((results) => deepmerge(...results) as OdxAuth.AuthPluginResult),\n tap((result) => this.result$$.next(result)),\n take(1),\n );\n }\n\n public getResult(): OdxAuth.AuthPluginResult {\n return this.result$$.getValue() ?? ({} as OdxAuth.AuthPluginResult);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { AuthConfig, OAuthErrorEvent, OAuthService, TokenResponse } from 'angular-oauth2-oidc';\nimport { deepmerge } from 'deepmerge-ts';\nimport jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, fromEvent, map, merge, share, shareReplay, startWith, switchMap } from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthorizedHandler, AuthPluginManager } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly authConfig = injectAuthConfig();\n private readonly authPluginManager = inject(AuthPluginManager);\n private readonly oauthService = inject(OAuthService);\n private readonly router = inject(Router);\n private readonly windowRef = inject(WindowRef);\n\n private readonly isInitialized$$ = new BehaviorSubject(false);\n private readonly onAccessTokenUpdate$ = fromEvent<StorageEvent>(this.windowRef.nativeWindow, 'storage').pipe(\n filter(({ key }) => key === 'access_token' || key === null),\n startWith(null),\n share(),\n );\n private readonly onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);\n\n public readonly isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());\n public readonly isAuthenticated$ = this.isInitialized$.pipe(\n switchMap(() => this.authPluginManager.pluginsReady$),\n switchMap(() => this.onAuthStateChange$),\n map(() => this.isAuthenticated()),\n shareReplay({ refCount: true }),\n );\n public readonly identityClaims$ = this.isAuthenticated$.pipe(\n map(() => this.getIdentityClaims()),\n shareReplay({ refCount: true }),\n );\n public readonly errors$ = this.oauthService.events.pipe(\n filter((event): event is OAuthErrorEvent => event instanceof OAuthErrorEvent),\n share(),\n );\n public readonly isRedirecting$ = fromEvents(this.windowRef.nativeWindow, 'beforeunload').pipe(map(Boolean), distinctUntilChanged(), share());\n public readonly isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());\n\n constructor() {\n this.windowRef.isOnline$.subscribe((isOnline) => {\n if (isOnline) {\n this.oauthService.setupAutomaticSilentRefresh();\n } else {\n this.oauthService.stopAutomaticRefresh();\n }\n });\n this.authPluginManager.runPlugins(this).subscribe();\n }\n\n public async initialize(config: AuthConfig): Promise<void> {\n this.oauthService.configure(config);\n try {\n await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);\n await this.oauthService.tryLoginCodeFlow();\n if (this.getRefreshToken() && !this.isAuthenticated()) {\n await this.oauthService.refreshToken();\n }\n this.isInitialized$$.next(true);\n if (this.authConfig.loadUserProfile && this.oauthService.hasValidAccessToken()) {\n await this.loadUserProfile();\n }\n } catch (error) {\n if (error instanceof HttpErrorResponse) {\n this.isInitialized$$.next(true);\n } else if (error instanceof OAuthErrorEvent) {\n if (error.type === 'token_refresh_error') {\n this.signIn(this.windowRef.location.pathname);\n }\n this.isInitialized$$.next(true);\n } else {\n throw error;\n }\n }\n if (this.oauthService.hasValidAccessToken()) {\n await this.routeToRequestedUrl();\n }\n }\n\n public getIssuer(): URL {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new URL(this.oauthService.issuer!);\n }\n\n public signIn(url?: string): void {\n this.oauthService.initCodeFlow(url);\n }\n\n public signOut(): void {\n this.oauthService.logOut(!this.getAccessToken());\n }\n\n public async loadUserProfile(): Promise<void> {\n await this.oauthService.loadUserProfile();\n }\n\n public async refreshTokens(): Promise<TokenResponse> {\n return this.oauthService.refreshToken();\n }\n\n public getAccessToken(): string | null {\n return this.oauthService.getAccessToken() ?? null;\n }\n\n public getAccessTokenPayload(): (OdxAuth.AccessTokenPayload & Required<JwtPayload>) | null {\n const token = this.getAccessToken();\n\n return token ? jwtDecode(token) : null;\n }\n\n public getRefreshToken(): string | null {\n return this.oauthService.getRefreshToken() ?? null;\n }\n\n public getIdToken(): string | null {\n return this.oauthService.getIdToken() ?? null;\n }\n\n public getIdentityClaims(): OdxAuth.IdentiyClaims | null {\n if (!this.getIdToken()) return null;\n return deepmerge(this.oauthService.getIdentityClaims(), this.authPluginManager.getResult()) as OdxAuth.IdentiyClaims;\n }\n\n public getRawIdentityClaims(): OdxAuth.RawIdentityClaims | null {\n if (!this.getIdToken()) return null;\n return this.oauthService.getIdentityClaims();\n }\n\n public isAuthenticated(): boolean {\n if (this.windowRef.isOnline()) {\n return this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken();\n }\n return this.hasValidOfflineToken();\n }\n\n public isAuthorized(authorizedHandler?: AuthorizedHandler | null): boolean {\n return this.isAuthenticated() && (authorizedHandler?.(this.getIdentityClaims(), this) ?? true);\n }\n\n private async routeToRequestedUrl(): Promise<void> {\n if (!this.oauthService.state) return;\n await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));\n }\n\n private hasValidOfflineToken(): boolean {\n const issuedAt = this.getIdentityClaims()?.iat ?? 0;\n\n return Date.now() - issuedAt * 1000 <= this.authConfig.maxOfflineTime * 1000;\n }\n}\n","import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from '../auth.service';\n\n@Directive()\nexport abstract class AuthActionDirective implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly loadingSpinnerDirective = inject(LoadingSpinnerDirective, { self: true });\n protected readonly authService = inject(AuthService);\n\n public ngAfterViewInit(): void {\n this.loadingSpinnerDirective.autoColor = true;\n this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n this.loadingSpinnerDirective.isLoading = true;\n });\n }\n\n protected abstract handleClick(): void;\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignIn]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignInDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignIn')\n public afterSignIn = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signIn();\n this.afterSignIn.next();\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignOut]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignOutDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignOut')\n public afterSignOut = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signOut();\n this.afterSignOut.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { AreaHeaderModule } from '@odx/angular/components/area-header';\nimport { DropdownModule, DropdownOptions } from '@odx/angular/components/dropdown';\nimport { HeaderModule } from '@odx/angular/components/header';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { Position } from '@odx/angular/utils';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { SignInDirective, SignOutDirective } from './directives';\n\n@Component({\n standalone: true,\n selector: 'odx-auth',\n imports: [CoreModule, AreaHeaderModule, DropdownModule, HeaderModule, LogoDirective, SignInDirective, SignOutDirective, LoadingSpinnerModule],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AuthComponent {\n protected readonly authConfig = injectAuthConfig();\n protected readonly authService = inject(AuthService);\n protected readonly dropdownOptions = {\n position: Position.BOTTOM_END,\n enableFallback: false,\n containerClass: 'odx-auth-user-profile',\n } as Partial<DropdownOptions>;\n\n @Input()\n public signInButtonText = 'Sign in';\n\n @Input()\n public signOutButtonText = 'Sign out';\n}\n","<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ signOutButtonText }}\n <odx-icon name=\"arrow-right\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ signInButtonText }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n <ng-template [ngIf]=\"authConfig.showRedirectOverlay\">\n <div class=\"odx-auth-overlay\" [odxLoadingSpinner]=\"true\" *ngIf=\"authService.isLoading$ | async\"></div>\n </ng-template>\n</odx-action-group>\n","import { NgIf, NgIfContext } from '@angular/common';\nimport { AfterViewInit, Directive, inject, Input, TemplateRef } from '@angular/core';\nimport { isString, untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuth]',\n hostDirectives: [NgIf],\n})\nexport class AuthDirective implements AfterViewInit {\n private readonly authService = inject(AuthService);\n private readonly ngIfDirective = inject(NgIf, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n @Input('odxAuth')\n public authorizationHandler?: AuthorizedHandler | null | string = null;\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('odxAuthElse')\n public set elseTemplate(value: TemplateRef<NgIfContext<unknown>>) {\n this.ngIfDirective.ngIfElse = value;\n }\n\n public ngAfterViewInit(): void {\n this.authService.identityClaims$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;\n this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function authGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string): CanActivateFn {\n return (_, state) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n map((isAuthenticated) => {\n if (!isAuthenticated) {\n authService.signIn(state.url);\n\n return false;\n }\n return authorizedHandler?.(authService.getIdentityClaims(), authService, router) ?? isAuthenticated;\n }),\n tap((isAuthorized) => {\n if (isAuthorized || !router) return;\n if (isString(redirectTo)) {\n router.navigateByUrl(redirectTo);\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","import { NgModule } from '@angular/core';\nimport { AuthComponent } from './auth.component';\nimport { AuthDirective } from './auth.directive';\nimport { SignInDirective, SignOutDirective } from './directives';\n\nconst modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];\n\n@NgModule({\n imports: [...modules],\n exports: [...modules],\n})\nexport class AuthModule {}\n","import { of } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n email: string;\n initials: string;\n username: string;\n }\n }\n}\n\nexport const coreIdentityPlugin: AuthPluginFactory = () => {\n const { resolveEmail, resolveUsername, createInitials } = injectAuthConfig();\n\n return (authService) => {\n const claims = authService.getRawIdentityClaims();\n if (!claims) return of({});\n const username = resolveUsername(claims);\n\n return of({ email: resolveEmail(claims), username, initials: createInitials(username) });\n };\n};\n","import { APP_INITIALIZER, EnvironmentInjector, EnvironmentProviders, ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { buildUrl, ConfigDependencies, ConfigProvider, isString } from '@odx/angular/utils';\nimport { OAuthModuleConfig, OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';\nimport { tap } from 'rxjs';\nimport { AuthConfig, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, injectAuthConfig, ODX_AUTH_CORE_PLUGINS, provideAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { coreIdentityPlugin } from './plugins';\n\nexport function configureInterceptor(): OAuthModuleConfig {\n const { allowedUrls } = injectAuthConfig();\n return {\n resourceServer: {\n customUrlValidation: (url) => allowedUrls.some((allowedUrl) => (isString(allowedUrl) ? url.startsWith(allowedUrl) : !!url.match(allowedUrl))),\n sendAccessToken: true,\n },\n };\n}\n\nexport function initializeAuthErrorHandler(): void {\n const authService = inject(AuthService);\n const injector = inject(EnvironmentInjector);\n const { errorHandler } = injectAuthConfig();\n\n authService.errors$.pipe(tap((error) => injector.runInContext(() => errorHandler(error)))).subscribe();\n}\n\nexport function initalizeAuthConfig(): () => Promise<void> {\n const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl } = injectAuthConfig();\n const authService = inject(AuthService);\n const origin = inject(WindowRef).getOrigin();\n const scope = Array.from(new Set(DEFAULT_AUTH_SCOPES.concat(scopes ?? []))).join(' ');\n\n return () =>\n authService.initialize({\n clientId,\n issuer: issuer ?? DEFAULT_ISSUERS[environment],\n scope,\n redirectUri: buildUrl(origin, redirectPath),\n postLogoutRedirectUri: postLogoutRedirectUrl,\n preserveRequestedRoute: true,\n strictDiscoveryDocumentValidation: !discoveryUrl,\n responseType: 'code',\n showDebugInformation: environment === 'dev',\n timeoutFactor,\n });\n}\n\nexport function provideAuth<D extends ConfigDependencies>(config: ConfigProvider<Partial<AuthConfig>, D>): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAuthConfig(config),\n provideOAuthClient(),\n {\n provide: OAuthModuleConfig,\n useFactory: configureInterceptor,\n },\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: initializeAuthErrorHandler,\n multi: true,\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initalizeAuthConfig,\n multi: true,\n },\n {\n provide: OAuthStorage,\n useFactory: () => inject(AuthConfig).storage ?? inject(WindowRef).nativeWindow.localStorage,\n },\n {\n provide: ODX_AUTH_CORE_PLUGINS,\n useValue: [coreIdentityPlugin],\n },\n ]);\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function unauthGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string): CanActivateFn {\n return (_) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n map((isAuthenticated) => {\n if (isAuthenticated && authorizedHandler) {\n return !authorizedHandler(authService.getIdentityClaims(), authService, router);\n }\n return !isAuthenticated;\n }),\n tap((isUnauthorized) => {\n if (isUnauthorized || !router) return;\n if (isString(redirectTo)) {\n router.navigateByUrl(redirectTo);\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i9"],"mappings":"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"}
|
|
@@ -2,12 +2,12 @@ import { isString, buildUrl } from '@odx/angular/utils';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, Directive, Input } from '@angular/core';
|
|
4
4
|
import * as i1 from '@odx/auth';
|
|
5
|
-
import {
|
|
5
|
+
import { injectAuthConfig, AuthHttpCache, AuthDirective, authGuard } from '@odx/auth';
|
|
6
6
|
import { defer } from 'rxjs';
|
|
7
7
|
|
|
8
8
|
const ServiceConnnectEnvironments = {
|
|
9
9
|
dev: 'https://api.test.connect.draeger.com',
|
|
10
|
-
stage: 'https://api.
|
|
10
|
+
stage: 'https://api.staging.connect.draeger.com',
|
|
11
11
|
prod: 'https://api.connect.draeger.com',
|
|
12
12
|
};
|
|
13
13
|
const ServiceConnectScopes = {
|
|
@@ -34,6 +34,29 @@ function hasRolesOrRightsHandler(rolesOrRights) {
|
|
|
34
34
|
return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
function serviceConnectPluginFactory(options) {
|
|
38
|
+
return (pluginOptions) => () => {
|
|
39
|
+
const { environment } = injectAuthConfig();
|
|
40
|
+
const httpCache = inject(AuthHttpCache);
|
|
41
|
+
options.setup?.();
|
|
42
|
+
const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);
|
|
43
|
+
const plugin = (authService) => defer(async () => {
|
|
44
|
+
const request = new Request(url);
|
|
45
|
+
const token = authService.getAccessToken();
|
|
46
|
+
let result = null;
|
|
47
|
+
if (token) {
|
|
48
|
+
request.headers.set('Authorization', `Bearer ${token}`);
|
|
49
|
+
result = await httpCache.request(request).then((res) => options.parseResponse(res));
|
|
50
|
+
}
|
|
51
|
+
else if (!authService.isAuthenticated()) {
|
|
52
|
+
await httpCache.delete(request);
|
|
53
|
+
}
|
|
54
|
+
return result ?? options.defaultValue ?? {};
|
|
55
|
+
});
|
|
56
|
+
return plugin;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
37
60
|
class ServiceConnectRightsDirective {
|
|
38
61
|
constructor() {
|
|
39
62
|
this.authDirective = inject(AuthDirective, { host: true });
|
|
@@ -66,32 +89,16 @@ function serviceConnectRightsGuard(rolesOrRights, redirectTo) {
|
|
|
66
89
|
return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo);
|
|
67
90
|
}
|
|
68
91
|
|
|
69
|
-
const serviceConnectRightsPlugin = (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const request = new Request(url);
|
|
76
|
-
const token = authService.getAccessToken();
|
|
77
|
-
let result = null;
|
|
78
|
-
if (token) {
|
|
79
|
-
request.headers.set('Authorization', `Bearer ${token}`);
|
|
80
|
-
result = await httpCache.request(request).then((res) => ({ rights: res?.rights ?? [] }));
|
|
81
|
-
}
|
|
82
|
-
else if (!authService.isAuthenticated()) {
|
|
83
|
-
await httpCache.delete(request);
|
|
84
|
-
}
|
|
85
|
-
return result ?? { rights: [] };
|
|
86
|
-
});
|
|
87
|
-
// inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
88
|
-
return plugin;
|
|
89
|
-
};
|
|
90
|
-
};
|
|
92
|
+
const serviceConnectRightsPlugin = serviceConnectPluginFactory({
|
|
93
|
+
endpoint: [ServiceConnectEndpoints.userRights],
|
|
94
|
+
parseResponse: (res) => ({ rights: res?.rights ?? [] }),
|
|
95
|
+
defaultValue: { rights: [] },
|
|
96
|
+
// setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team
|
|
97
|
+
});
|
|
91
98
|
|
|
92
99
|
/**
|
|
93
100
|
* Generated bundle index. Do not edit.
|
|
94
101
|
*/
|
|
95
102
|
|
|
96
|
-
export { ServiceConnectEndpoints, ServiceConnectRightsDirective, ServiceConnectScopes, ServiceConnnectEnvironments, buildServiceConnectUrl, hasRolesOrRights, hasRolesOrRightsHandler, serviceConnectRightsGuard, serviceConnectRightsPlugin };
|
|
103
|
+
export { ServiceConnectEndpoints, ServiceConnectRightsDirective, ServiceConnectScopes, ServiceConnnectEnvironments, buildServiceConnectUrl, hasRolesOrRights, hasRolesOrRightsHandler, serviceConnectPluginFactory, serviceConnectRightsGuard, serviceConnectRightsPlugin };
|
|
97
104
|
//# sourceMappingURL=odx-auth-plugins-service-connect.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../packages/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../packages/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n dev: 'https://api.test.connect.draeger.com',\n stage: 'https://api.
|
|
1
|
+
{"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../packages/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../packages/auth/plugins/service-connect/src/lib/helpers/service-connect-plugin-factory.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../packages/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../packages/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n dev: 'https://api.test.connect.draeger.com',\n stage: 'https://api.staging.connect.draeger.com',\n prod: 'https://api.connect.draeger.com',\n};\nexport const ServiceConnectScopes = {\n BASE: 'dcid',\n // RIGHTS: 'dcid-rights', // TODO: enable scope when supported by the CSI team\n // INSTITUTION: 'dcid-instiution', // TODO: enable scope when supported by the CSI team\n};\nexport const ServiceConnectEndpoints = {\n userRights: '/users/me/rights',\n};\n","import { buildUrl, isString } from '@odx/angular/utils';\nimport { AuthEnvironment } from '@odx/auth';\nimport { ServiceConnectEnvironment, ServiceConnnectEnvironments } from '../service-connect.config';\n\nexport function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string {\n if (isString(environment)) {\n return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);\n }\n return buildUrl(environment.custom, ...endpoints);\n}\n","export type Right = string | number;\nexport type Role = Right[];\nexport type RolesOrRights = Array<Role | Right>;\n\nexport function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean {\n return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));\n}\n","import { AuthorizedHandler } from '@odx/auth';\nimport { hasRolesOrRights, RolesOrRights } from './has-roles-or-rights';\n\nexport function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler {\n return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);\n}\n","import { inject } from '@angular/core';\nimport { AuthHttpCache, AuthPlugin, AuthPluginFactory, injectAuthConfig } from '@odx/auth';\nimport { defer } from 'rxjs';\nimport { ServiceConnectEnvironment } from '../service-connect.config';\nimport { buildServiceConnectUrl } from './build-service-connect-url';\n\nexport interface ServiceConnectPluginOptions {\n environment?: ServiceConnectEnvironment;\n}\n\nexport interface ServiceConnectPluginFactoryOptions<Dto> {\n endpoint: string[];\n parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;\n defaultValue?: Partial<OdxAuth.AuthPluginResult>;\n setup?: () => void;\n}\n\nexport function serviceConnectPluginFactory<Dto = unknown>(\n options: ServiceConnectPluginFactoryOptions<Dto>,\n): (pluginOptions?: ServiceConnectPluginOptions) => AuthPluginFactory {\n return (pluginOptions) => () => {\n const { environment } = injectAuthConfig();\n const httpCache = inject(AuthHttpCache);\n options.setup?.();\n const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);\n\n const plugin: AuthPlugin = (authService) =>\n defer(async () => {\n const request = new Request(url);\n const token = authService.getAccessToken();\n let result = null;\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`);\n\n result = await httpCache.request<Dto>(request).then((res) => options.parseResponse(res));\n } else if (!authService.isAuthenticated()) {\n await httpCache.delete(request);\n }\n\n return result ?? options.defaultValue ?? {};\n });\n\n return plugin;\n };\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AuthDirective } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuthServiceConnectRights]',\n hostDirectives: [\n {\n directive: AuthDirective,\n inputs: ['odxAuthElse:odxAuthServiceConnectRightsElse'],\n },\n ],\n})\nexport class ServiceConnectRightsDirective {\n private readonly authDirective = inject(AuthDirective, { host: true });\n\n @Input('odxAuthServiceConnectRights')\n public set rolesOrRights(value: RolesOrRights | null | undefined) {\n this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);\n }\n}\n","import { CanActivateFn } from '@angular/router';\nimport { authGuard } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[]): CanActivateFn {\n return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo);\n}\n","import { GetServiceConnectRightsResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\nimport './service-connect.typings';\n\nexport const serviceConnectRightsPlugin = serviceConnectPluginFactory<GetServiceConnectRightsResponseDto>({\n endpoint: [ServiceConnectEndpoints.userRights],\n parseResponse: (res) => ({ rights: res?.rights ?? [] }),\n defaultValue: { rights: [] },\n // setup: () => inject(AuthConfig).scopes?.push(ServiceConnectScopes.RIGHTS); // TODO: enable scope when supported by the CSI team\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2020/odx-auth.mjs
CHANGED
|
@@ -118,7 +118,7 @@ class AuthHttpCache {
|
|
|
118
118
|
catch {
|
|
119
119
|
// ignore request errors
|
|
120
120
|
}
|
|
121
|
-
return cache.match(request
|
|
121
|
+
return cache.match(request).then((res) => res?.json() ?? null);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
AuthHttpCache.CACHE_KEY = '@odx/auth/http-cache';
|
|
@@ -520,9 +520,32 @@ function provideAuth(config) {
|
|
|
520
520
|
]);
|
|
521
521
|
}
|
|
522
522
|
|
|
523
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
524
|
+
function unauthGuard(authorizedHandler, redirectTo) {
|
|
525
|
+
return (_) => {
|
|
526
|
+
const authService = inject(AuthService);
|
|
527
|
+
const router = inject(Router, { optional: true });
|
|
528
|
+
return authService.isAuthenticated$.pipe(map((isAuthenticated) => {
|
|
529
|
+
if (isAuthenticated && authorizedHandler) {
|
|
530
|
+
return !authorizedHandler(authService.getIdentityClaims(), authService, router);
|
|
531
|
+
}
|
|
532
|
+
return !isAuthenticated;
|
|
533
|
+
}), tap((isUnauthorized) => {
|
|
534
|
+
if (isUnauthorized || !router)
|
|
535
|
+
return;
|
|
536
|
+
if (isString(redirectTo)) {
|
|
537
|
+
router.navigateByUrl(redirectTo);
|
|
538
|
+
}
|
|
539
|
+
else if (Array.isArray(redirectTo)) {
|
|
540
|
+
router.navigate(redirectTo);
|
|
541
|
+
}
|
|
542
|
+
}), take(1));
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
|
|
523
546
|
/**
|
|
524
547
|
* Generated bundle index. Do not edit.
|
|
525
548
|
*/
|
|
526
549
|
|
|
527
|
-
export { AuthActionDirective, AuthComponent, AuthConfig, AuthDefaultConfig, AuthDirective, AuthHttpCache, AuthModule, AuthPluginManager, AuthService, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, ODX_AUTH_CORE_PLUGINS, ODX_AUTH_HTTP_CACHE_STORAGE, ODX_AUTH_PLUGINS, SignInDirective, SignOutDirective, authGuard, configureInterceptor, coreIdentityPlugin, createInitials, initalizeAuthConfig, initializeAuthErrorHandler, injectAuthConfig, provideAuth, provideAuthConfig, resolveEmail, resolveUsername };
|
|
550
|
+
export { AuthActionDirective, AuthComponent, AuthConfig, AuthDefaultConfig, AuthDirective, AuthHttpCache, AuthModule, AuthPluginManager, AuthService, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, ODX_AUTH_CORE_PLUGINS, ODX_AUTH_HTTP_CACHE_STORAGE, ODX_AUTH_PLUGINS, SignInDirective, SignOutDirective, authGuard, configureInterceptor, coreIdentityPlugin, createInitials, initalizeAuthConfig, initializeAuthErrorHandler, injectAuthConfig, provideAuth, provideAuthConfig, resolveEmail, resolveUsername, unauthGuard };
|
|
528
551
|
//# sourceMappingURL=odx-auth.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-auth.mjs","sources":["../../../../packages/auth/src/lib/helpers/create-inititals.ts","../../../../packages/auth/src/lib/helpers/resolve-email.ts","../../../../packages/auth/src/lib/helpers/resolve-username.ts","../../../../packages/auth/src/lib/auth.config.ts","../../../../packages/auth/src/lib/models/auth-http-cache.ts","../../../../packages/auth/src/lib/models/auth-plugin-manager.ts","../../../../packages/auth/src/lib/auth.service.ts","../../../../packages/auth/src/lib/directives/auth-action.directive.ts","../../../../packages/auth/src/lib/directives/sign-in.directive.ts","../../../../packages/auth/src/lib/directives/sign-out.directive.ts","../../../../packages/auth/src/lib/auth.component.ts","../../../../packages/auth/src/lib/auth.component.html","../../../../packages/auth/src/lib/auth.directive.ts","../../../../packages/auth/src/lib/auth.guard.ts","../../../../packages/auth/src/lib/auth.module.ts","../../../../packages/auth/src/lib/plugins/core-identity.plugin.ts","../../../../packages/auth/src/lib/auth.providers.ts","../../../../packages/auth/src/odx-auth.ts"],"sourcesContent":["export function createInitials(value?: string | null): string {\n if (!value) return '';\n const parts = value.trim().split(' ');\n\n return parts.reduce((initials, curr, index) => {\n if (index === 0 || index === parts.length - 1) {\n initials += curr[0].toUpperCase();\n }\n return initials;\n }, '');\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveEmail(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['email'])) {\n return claims['email'];\n }\n if (isString(claims['email_address'])) {\n return claims['email_address'];\n }\n if (Array.isArray(claims['emails']) && isString(claims['emails'][0])) {\n return claims['emails'][0];\n }\n return '';\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveUsername(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['firstname']) && isString(claims['lastname'])) {\n return `${claims['firstname']} ${claims['lastname']}`;\n }\n if (isString(claims['displayname'])) {\n return claims['displayname'];\n }\n if (isString(claims['name'])) {\n return claims['name'];\n }\n return '';\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';\nimport { createInitials, resolveEmail, resolveUsername } from './helpers';\n\nimport { AuthEnvironment, AuthPlugin, AuthPluginFactory } from './models';\n\nexport const DEFAULT_AUTH_SCOPES = ['openid', 'profile', 'email', 'offline_access'];\nexport const DEFAULT_ISSUERS: Record<AuthEnvironment, string> = {\n dev: 'https://dev.login.draeger.com/oauth2/default',\n stage: 'https://test.login.draeger.com/oauth2/default',\n prod: 'https://login.draeger.com/oauth2/default',\n};\nexport const ODX_AUTH_CORE_PLUGINS = new InjectionToken<AuthPluginFactory[]>('@odx/auth::CorePlugins', {\n providedIn: 'root',\n factory: () => [],\n});\nexport const ODX_AUTH_PLUGINS = new InjectionToken<AuthPlugin[]>('@odx/auth::Plugins', {\n providedIn: 'root',\n factory: () => {\n const { plugins } = injectAuthConfig();\n const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);\n\n return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());\n },\n});\n\nexport type AuthErrorHandlerFn = (error: OAuthErrorEvent) => void;\nexport type ResolveUsernameFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type ResolveEmailFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type CreateInitialsFn = (value: string) => string;\n\nexport interface AuthConfig {\n environment: AuthEnvironment;\n clientId?: string;\n issuer?: string;\n redirectPath: string;\n allowedUrls: Array<string | RegExp>;\n timeoutFactor: number;\n maxOfflineTime: number;\n loadUserProfile: boolean;\n postLogoutRedirectUrl?: string;\n scopes?: string[];\n discoveryUrl?: string;\n errorHandler: AuthErrorHandlerFn;\n createInitials: CreateInitialsFn;\n resolveEmail: ResolveEmailFn;\n resolveUsername: ResolveUsernameFn;\n storage?: OAuthStorage;\n plugins: AuthPluginFactory[];\n showRedirectOverlay: boolean;\n}\n\nexport const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {\n environment: 'prod',\n redirectPath: 'login/callback',\n allowedUrls: [],\n timeoutFactor: 0.75,\n maxOfflineTime: 24 * 60 * 60, // 1 day\n loadUserProfile: false,\n errorHandler: (error) => {\n throw error;\n },\n createInitials,\n resolveEmail,\n resolveUsername,\n showRedirectOverlay: false,\n plugins: [],\n} as AuthConfig);\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\n\nexport const ODX_AUTH_HTTP_CACHE_STORAGE = new InjectionToken<CacheStorage>('@odx/auth::AuthHttpCacheStorage', {\n providedIn: 'root',\n factory: () => inject(WindowRef).nativeWindow.caches,\n});\n\n@Injectable({ providedIn: 'root' })\nexport class AuthHttpCache {\n private static readonly CACHE_KEY = '@odx/auth/http-cache';\n private readonly cacheStorage = inject(ODX_AUTH_HTTP_CACHE_STORAGE);\n\n public async delete(request: RequestInfo | URL): Promise<boolean> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n\n return cache.delete(request);\n }\n\n public async request<T>(request: RequestInfo | URL): Promise<T | null> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n try {\n await cache.add(request);\n } catch {\n // ignore request errors\n }\n\n return cache.match(request, { ignoreVary: true, ignoreSearch: false }).then((res) => res?.json() ?? null);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { deepmerge } from 'deepmerge-ts';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, Observable, of, share, switchMap, take, tap } from 'rxjs';\nimport { ODX_AUTH_PLUGINS } from '../auth.config';\nimport { AuthService } from '../auth.service';\n\nexport type AuthPlugin = (authService: AuthService) => Observable<Partial<OdxAuth.AuthPluginResult>>;\nexport type AuthPluginFactory = () => AuthPlugin;\n\n@Injectable({ providedIn: 'root' })\nexport class AuthPluginManager {\n private readonly plugins = inject(ODX_AUTH_PLUGINS);\n private readonly result$$ = new BehaviorSubject<OdxAuth.AuthPluginResult | null>(null);\n\n public readonly pluginsReady$ = this.result$$.pipe(filter(Boolean), map(Boolean), distinctUntilChanged(), share());\n public readonly pluginsLoading$ = this.result$$.pipe(\n map((result) => !result),\n distinctUntilChanged(),\n share(),\n );\n\n public runPlugins(authService: AuthService): Observable<OdxAuth.AuthPluginResult> {\n if (this.plugins.length < 1) {\n return of({} as OdxAuth.AuthPluginResult);\n }\n return authService.isInitialized$.pipe(\n switchMap(() => combineLatest(this.plugins.map((plugin) => plugin(authService)))),\n map((results) => deepmerge(...results) as OdxAuth.AuthPluginResult),\n tap((result) => this.result$$.next(result)),\n take(1),\n );\n }\n\n public getResult(): OdxAuth.AuthPluginResult {\n return this.result$$.getValue() ?? ({} as OdxAuth.AuthPluginResult);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { AuthConfig, OAuthErrorEvent, OAuthService, TokenResponse } from 'angular-oauth2-oidc';\nimport { deepmerge } from 'deepmerge-ts';\nimport jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, fromEvent, map, merge, share, shareReplay, startWith, switchMap } from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthorizedHandler, AuthPluginManager } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly authConfig = injectAuthConfig();\n private readonly authPluginManager = inject(AuthPluginManager);\n private readonly oauthService = inject(OAuthService);\n private readonly router = inject(Router);\n private readonly windowRef = inject(WindowRef);\n\n private readonly isInitialized$$ = new BehaviorSubject(false);\n private readonly onAccessTokenUpdate$ = fromEvent<StorageEvent>(this.windowRef.nativeWindow, 'storage').pipe(\n filter(({ key }) => key === 'access_token' || key === null),\n startWith(null),\n share(),\n );\n private readonly onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);\n\n public readonly isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());\n public readonly isAuthenticated$ = this.isInitialized$.pipe(\n switchMap(() => this.authPluginManager.pluginsReady$),\n switchMap(() => this.onAuthStateChange$),\n map(() => this.isAuthenticated()),\n shareReplay({ refCount: true }),\n );\n public readonly identityClaims$ = this.isAuthenticated$.pipe(\n map(() => this.getIdentityClaims()),\n shareReplay({ refCount: true }),\n );\n public readonly errors$ = this.oauthService.events.pipe(\n filter((event): event is OAuthErrorEvent => event instanceof OAuthErrorEvent),\n share(),\n );\n public readonly isRedirecting$ = fromEvents(this.windowRef.nativeWindow, 'beforeunload').pipe(map(Boolean), distinctUntilChanged(), share());\n public readonly isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());\n\n constructor() {\n this.windowRef.isOnline$.subscribe((isOnline) => {\n if (isOnline) {\n this.oauthService.setupAutomaticSilentRefresh();\n } else {\n this.oauthService.stopAutomaticRefresh();\n }\n });\n this.authPluginManager.runPlugins(this).subscribe();\n }\n\n public async initialize(config: AuthConfig): Promise<void> {\n this.oauthService.configure(config);\n try {\n await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);\n await this.oauthService.tryLoginCodeFlow();\n if (this.getRefreshToken() && !this.isAuthenticated()) {\n await this.oauthService.refreshToken();\n }\n this.isInitialized$$.next(true);\n if (this.authConfig.loadUserProfile && this.oauthService.hasValidAccessToken()) {\n await this.loadUserProfile();\n }\n } catch (error) {\n if (error instanceof HttpErrorResponse) {\n this.isInitialized$$.next(true);\n } else if (error instanceof OAuthErrorEvent) {\n if (error.type === 'token_refresh_error') {\n this.signIn(this.windowRef.location.pathname);\n }\n this.isInitialized$$.next(true);\n } else {\n throw error;\n }\n }\n if (this.oauthService.hasValidAccessToken()) {\n await this.routeToRequestedUrl();\n }\n }\n\n public getIssuer(): URL {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new URL(this.oauthService.issuer!);\n }\n\n public signIn(url?: string): void {\n this.oauthService.initCodeFlow(url);\n }\n\n public signOut(): void {\n this.oauthService.logOut(!this.getAccessToken());\n }\n\n public async loadUserProfile(): Promise<void> {\n await this.oauthService.loadUserProfile();\n }\n\n public async refreshTokens(): Promise<TokenResponse> {\n return this.oauthService.refreshToken();\n }\n\n public getAccessToken(): string | null {\n return this.oauthService.getAccessToken() ?? null;\n }\n\n public getAccessTokenPayload(): (OdxAuth.AccessTokenPayload & Required<JwtPayload>) | null {\n const token = this.getAccessToken();\n\n return token ? jwtDecode(token) : null;\n }\n\n public getRefreshToken(): string | null {\n return this.oauthService.getRefreshToken() ?? null;\n }\n\n public getIdToken(): string | null {\n return this.oauthService.getIdToken() ?? null;\n }\n\n public getIdentityClaims(): OdxAuth.IdentiyClaims | null {\n if (!this.getIdToken()) return null;\n return deepmerge(this.oauthService.getIdentityClaims(), this.authPluginManager.getResult()) as OdxAuth.IdentiyClaims;\n }\n\n public getRawIdentityClaims(): OdxAuth.RawIdentityClaims | null {\n if (!this.getIdToken()) return null;\n return this.oauthService.getIdentityClaims();\n }\n\n public isAuthenticated(): boolean {\n if (this.windowRef.isOnline()) {\n return this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken();\n }\n return this.hasValidOfflineToken();\n }\n\n public isAuthorized(authorizedHandler?: AuthorizedHandler | null): boolean {\n return this.isAuthenticated() && (authorizedHandler?.(this.getIdentityClaims(), this) ?? true);\n }\n\n private async routeToRequestedUrl(): Promise<void> {\n if (!this.oauthService.state) return;\n await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));\n }\n\n private hasValidOfflineToken(): boolean {\n const issuedAt = this.getIdentityClaims()?.iat ?? 0;\n\n return Date.now() - issuedAt * 1000 <= this.authConfig.maxOfflineTime * 1000;\n }\n}\n","import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from '../auth.service';\n\n@Directive()\nexport abstract class AuthActionDirective implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly loadingSpinnerDirective = inject(LoadingSpinnerDirective, { self: true });\n protected readonly authService = inject(AuthService);\n\n public ngAfterViewInit(): void {\n this.loadingSpinnerDirective.autoColor = true;\n this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n this.loadingSpinnerDirective.isLoading = true;\n });\n }\n\n protected abstract handleClick(): void;\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignIn]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignInDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignIn')\n public afterSignIn = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signIn();\n this.afterSignIn.next();\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignOut]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignOutDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignOut')\n public afterSignOut = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signOut();\n this.afterSignOut.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { AreaHeaderModule } from '@odx/angular/components/area-header';\nimport { DropdownModule, DropdownOptions } from '@odx/angular/components/dropdown';\nimport { HeaderModule } from '@odx/angular/components/header';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { Position } from '@odx/angular/utils';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { SignInDirective, SignOutDirective } from './directives';\n\n@Component({\n standalone: true,\n selector: 'odx-auth',\n imports: [CoreModule, AreaHeaderModule, DropdownModule, HeaderModule, LogoDirective, SignInDirective, SignOutDirective, LoadingSpinnerModule],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AuthComponent {\n protected readonly authConfig = injectAuthConfig();\n protected readonly authService = inject(AuthService);\n protected readonly dropdownOptions = {\n position: Position.BOTTOM_END,\n enableFallback: false,\n containerClass: 'odx-auth-user-profile',\n } as Partial<DropdownOptions>;\n\n @Input()\n public signInButtonText = 'Sign in';\n\n @Input()\n public signOutButtonText = 'Sign out';\n}\n","<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ signOutButtonText }}\n <odx-icon name=\"arrow-right\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ signInButtonText }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n <ng-template [ngIf]=\"authConfig.showRedirectOverlay\">\n <div class=\"odx-auth-overlay\" [odxLoadingSpinner]=\"true\" *ngIf=\"authService.isLoading$ | async\"></div>\n </ng-template>\n</odx-action-group>\n","import { NgIf, NgIfContext } from '@angular/common';\nimport { AfterViewInit, Directive, inject, Input, TemplateRef } from '@angular/core';\nimport { isString, untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuth]',\n hostDirectives: [NgIf],\n})\nexport class AuthDirective implements AfterViewInit {\n private readonly authService = inject(AuthService);\n private readonly ngIfDirective = inject(NgIf, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n @Input('odxAuth')\n public authorizationHandler?: AuthorizedHandler | null | string = null;\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('odxAuthElse')\n public set elseTemplate(value: TemplateRef<NgIfContext<unknown>>) {\n this.ngIfDirective.ngIfElse = value;\n }\n\n public ngAfterViewInit(): void {\n this.authService.identityClaims$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;\n this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function authGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string): CanActivateFn {\n return (_, state) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n map((isAuthenticated) => {\n if (!isAuthenticated) {\n authService.signIn(state.url);\n\n return false;\n }\n return authorizedHandler?.(authService.getIdentityClaims(), authService, router) ?? isAuthenticated;\n }),\n tap((isAuthorized) => {\n if (isAuthorized || !router) return;\n if (isString(redirectTo)) {\n router.navigateByUrl(redirectTo);\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","import { NgModule } from '@angular/core';\nimport { AuthComponent } from './auth.component';\nimport { AuthDirective } from './auth.directive';\nimport { SignInDirective, SignOutDirective } from './directives';\n\nconst modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];\n\n@NgModule({\n imports: [...modules],\n exports: [...modules],\n})\nexport class AuthModule {}\n","import { of } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n email: string;\n initials: string;\n username: string;\n }\n }\n}\n\nexport const coreIdentityPlugin: AuthPluginFactory = () => {\n const { resolveEmail, resolveUsername, createInitials } = injectAuthConfig();\n\n return (authService) => {\n const claims = authService.getRawIdentityClaims();\n if (!claims) return of({});\n const username = resolveUsername(claims);\n\n return of({ email: resolveEmail(claims), username, initials: createInitials(username) });\n };\n};\n","import { APP_INITIALIZER, EnvironmentInjector, EnvironmentProviders, ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { buildUrl, ConfigDependencies, ConfigProvider, isString } from '@odx/angular/utils';\nimport { OAuthModuleConfig, OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';\nimport { tap } from 'rxjs';\nimport { AuthConfig, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, injectAuthConfig, ODX_AUTH_CORE_PLUGINS, provideAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { coreIdentityPlugin } from './plugins';\n\nexport function configureInterceptor(): OAuthModuleConfig {\n const { allowedUrls } = injectAuthConfig();\n return {\n resourceServer: {\n customUrlValidation: (url) => allowedUrls.some((allowedUrl) => (isString(allowedUrl) ? url.startsWith(allowedUrl) : !!url.match(allowedUrl))),\n sendAccessToken: true,\n },\n };\n}\n\nexport function initializeAuthErrorHandler(): void {\n const authService = inject(AuthService);\n const injector = inject(EnvironmentInjector);\n const { errorHandler } = injectAuthConfig();\n\n authService.errors$.pipe(tap((error) => injector.runInContext(() => errorHandler(error)))).subscribe();\n}\n\nexport function initalizeAuthConfig(): () => Promise<void> {\n const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl } = injectAuthConfig();\n const authService = inject(AuthService);\n const origin = inject(WindowRef).getOrigin();\n const scope = Array.from(new Set(DEFAULT_AUTH_SCOPES.concat(scopes ?? []))).join(' ');\n\n return () =>\n authService.initialize({\n clientId,\n issuer: issuer ?? DEFAULT_ISSUERS[environment],\n scope,\n redirectUri: buildUrl(origin, redirectPath),\n postLogoutRedirectUri: postLogoutRedirectUrl,\n preserveRequestedRoute: true,\n strictDiscoveryDocumentValidation: !discoveryUrl,\n responseType: 'code',\n showDebugInformation: environment === 'dev',\n timeoutFactor,\n });\n}\n\nexport function provideAuth<D extends ConfigDependencies>(config: ConfigProvider<Partial<AuthConfig>, D>): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAuthConfig(config),\n provideOAuthClient(),\n {\n provide: OAuthModuleConfig,\n useFactory: configureInterceptor,\n },\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: initializeAuthErrorHandler,\n multi: true,\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initalizeAuthConfig,\n multi: true,\n },\n {\n provide: OAuthStorage,\n useFactory: () => inject(AuthConfig).storage ?? inject(WindowRef).nativeWindow.localStorage,\n },\n {\n provide: ODX_AUTH_CORE_PLUGINS,\n useValue: [coreIdentityPlugin],\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i9"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-auth.mjs","sources":["../../../../packages/auth/src/lib/helpers/create-inititals.ts","../../../../packages/auth/src/lib/helpers/resolve-email.ts","../../../../packages/auth/src/lib/helpers/resolve-username.ts","../../../../packages/auth/src/lib/auth.config.ts","../../../../packages/auth/src/lib/models/auth-http-cache.ts","../../../../packages/auth/src/lib/models/auth-plugin-manager.ts","../../../../packages/auth/src/lib/auth.service.ts","../../../../packages/auth/src/lib/directives/auth-action.directive.ts","../../../../packages/auth/src/lib/directives/sign-in.directive.ts","../../../../packages/auth/src/lib/directives/sign-out.directive.ts","../../../../packages/auth/src/lib/auth.component.ts","../../../../packages/auth/src/lib/auth.component.html","../../../../packages/auth/src/lib/auth.directive.ts","../../../../packages/auth/src/lib/auth.guard.ts","../../../../packages/auth/src/lib/auth.module.ts","../../../../packages/auth/src/lib/plugins/core-identity.plugin.ts","../../../../packages/auth/src/lib/auth.providers.ts","../../../../packages/auth/src/lib/unauth.guard.ts","../../../../packages/auth/src/odx-auth.ts"],"sourcesContent":["export function createInitials(value?: string | null): string {\n if (!value) return '';\n const parts = value.trim().split(' ');\n\n return parts.reduce((initials, curr, index) => {\n if (index === 0 || index === parts.length - 1) {\n initials += curr[0].toUpperCase();\n }\n return initials;\n }, '');\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveEmail(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['email'])) {\n return claims['email'];\n }\n if (isString(claims['email_address'])) {\n return claims['email_address'];\n }\n if (Array.isArray(claims['emails']) && isString(claims['emails'][0])) {\n return claims['emails'][0];\n }\n return '';\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveUsername(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['firstname']) && isString(claims['lastname'])) {\n return `${claims['firstname']} ${claims['lastname']}`;\n }\n if (isString(claims['displayname'])) {\n return claims['displayname'];\n }\n if (isString(claims['name'])) {\n return claims['name'];\n }\n return '';\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';\nimport { createInitials, resolveEmail, resolveUsername } from './helpers';\n\nimport { AuthEnvironment, AuthPlugin, AuthPluginFactory } from './models';\n\nexport const DEFAULT_AUTH_SCOPES = ['openid', 'profile', 'email', 'offline_access'];\nexport const DEFAULT_ISSUERS: Record<AuthEnvironment, string> = {\n dev: 'https://dev.login.draeger.com/oauth2/default',\n stage: 'https://test.login.draeger.com/oauth2/default',\n prod: 'https://login.draeger.com/oauth2/default',\n};\nexport const ODX_AUTH_CORE_PLUGINS = new InjectionToken<AuthPluginFactory[]>('@odx/auth::CorePlugins', {\n providedIn: 'root',\n factory: () => [],\n});\nexport const ODX_AUTH_PLUGINS = new InjectionToken<AuthPlugin[]>('@odx/auth::Plugins', {\n providedIn: 'root',\n factory: () => {\n const { plugins } = injectAuthConfig();\n const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);\n\n return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());\n },\n});\n\nexport type AuthErrorHandlerFn = (error: OAuthErrorEvent) => void;\nexport type ResolveUsernameFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type ResolveEmailFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type CreateInitialsFn = (value: string) => string;\n\nexport interface AuthConfig {\n environment: AuthEnvironment;\n clientId?: string;\n issuer?: string;\n redirectPath: string;\n allowedUrls: Array<string | RegExp>;\n timeoutFactor: number;\n maxOfflineTime: number;\n loadUserProfile: boolean;\n postLogoutRedirectUrl?: string;\n scopes?: string[];\n discoveryUrl?: string;\n errorHandler: AuthErrorHandlerFn;\n createInitials: CreateInitialsFn;\n resolveEmail: ResolveEmailFn;\n resolveUsername: ResolveUsernameFn;\n storage?: OAuthStorage;\n plugins: AuthPluginFactory[];\n showRedirectOverlay: boolean;\n}\n\nexport const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {\n environment: 'prod',\n redirectPath: 'login/callback',\n allowedUrls: [],\n timeoutFactor: 0.75,\n maxOfflineTime: 24 * 60 * 60, // 1 day\n loadUserProfile: false,\n errorHandler: (error) => {\n throw error;\n },\n createInitials,\n resolveEmail,\n resolveUsername,\n showRedirectOverlay: false,\n plugins: [],\n} as AuthConfig);\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\n\nexport const ODX_AUTH_HTTP_CACHE_STORAGE = new InjectionToken<CacheStorage>('@odx/auth::AuthHttpCacheStorage', {\n providedIn: 'root',\n factory: () => inject(WindowRef).nativeWindow.caches,\n});\n\n@Injectable({ providedIn: 'root' })\nexport class AuthHttpCache {\n private static readonly CACHE_KEY = '@odx/auth/http-cache';\n private readonly cacheStorage = inject(ODX_AUTH_HTTP_CACHE_STORAGE);\n\n public async delete(request: RequestInfo | URL): Promise<boolean> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n\n return cache.delete(request);\n }\n\n public async request<T>(request: RequestInfo | URL): Promise<T | null> {\n const cache = await this.cacheStorage.open(AuthHttpCache.CACHE_KEY);\n try {\n await cache.add(request);\n } catch {\n // ignore request errors\n }\n\n return cache.match(request).then((res) => res?.json() ?? null);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { deepmerge } from 'deepmerge-ts';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, Observable, of, share, switchMap, take, tap } from 'rxjs';\nimport { ODX_AUTH_PLUGINS } from '../auth.config';\nimport { AuthService } from '../auth.service';\n\nexport type AuthPlugin = (authService: AuthService) => Observable<Partial<OdxAuth.AuthPluginResult>>;\nexport type AuthPluginFactory = () => AuthPlugin;\n\n@Injectable({ providedIn: 'root' })\nexport class AuthPluginManager {\n private readonly plugins = inject(ODX_AUTH_PLUGINS);\n private readonly result$$ = new BehaviorSubject<OdxAuth.AuthPluginResult | null>(null);\n\n public readonly pluginsReady$ = this.result$$.pipe(filter(Boolean), map(Boolean), distinctUntilChanged(), share());\n public readonly pluginsLoading$ = this.result$$.pipe(\n map((result) => !result),\n distinctUntilChanged(),\n share(),\n );\n\n public runPlugins(authService: AuthService): Observable<OdxAuth.AuthPluginResult> {\n if (this.plugins.length < 1) {\n return of({} as OdxAuth.AuthPluginResult);\n }\n return authService.isInitialized$.pipe(\n switchMap(() => combineLatest(this.plugins.map((plugin) => plugin(authService)))),\n map((results) => deepmerge(...results) as OdxAuth.AuthPluginResult),\n tap((result) => this.result$$.next(result)),\n take(1),\n );\n }\n\n public getResult(): OdxAuth.AuthPluginResult {\n return this.result$$.getValue() ?? ({} as OdxAuth.AuthPluginResult);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { AuthConfig, OAuthErrorEvent, OAuthService, TokenResponse } from 'angular-oauth2-oidc';\nimport { deepmerge } from 'deepmerge-ts';\nimport jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, fromEvent, map, merge, share, shareReplay, startWith, switchMap } from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthorizedHandler, AuthPluginManager } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly authConfig = injectAuthConfig();\n private readonly authPluginManager = inject(AuthPluginManager);\n private readonly oauthService = inject(OAuthService);\n private readonly router = inject(Router);\n private readonly windowRef = inject(WindowRef);\n\n private readonly isInitialized$$ = new BehaviorSubject(false);\n private readonly onAccessTokenUpdate$ = fromEvent<StorageEvent>(this.windowRef.nativeWindow, 'storage').pipe(\n filter(({ key }) => key === 'access_token' || key === null),\n startWith(null),\n share(),\n );\n private readonly onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);\n\n public readonly isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());\n public readonly isAuthenticated$ = this.isInitialized$.pipe(\n switchMap(() => this.authPluginManager.pluginsReady$),\n switchMap(() => this.onAuthStateChange$),\n map(() => this.isAuthenticated()),\n shareReplay({ refCount: true }),\n );\n public readonly identityClaims$ = this.isAuthenticated$.pipe(\n map(() => this.getIdentityClaims()),\n shareReplay({ refCount: true }),\n );\n public readonly errors$ = this.oauthService.events.pipe(\n filter((event): event is OAuthErrorEvent => event instanceof OAuthErrorEvent),\n share(),\n );\n public readonly isRedirecting$ = fromEvents(this.windowRef.nativeWindow, 'beforeunload').pipe(map(Boolean), distinctUntilChanged(), share());\n public readonly isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());\n\n constructor() {\n this.windowRef.isOnline$.subscribe((isOnline) => {\n if (isOnline) {\n this.oauthService.setupAutomaticSilentRefresh();\n } else {\n this.oauthService.stopAutomaticRefresh();\n }\n });\n this.authPluginManager.runPlugins(this).subscribe();\n }\n\n public async initialize(config: AuthConfig): Promise<void> {\n this.oauthService.configure(config);\n try {\n await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);\n await this.oauthService.tryLoginCodeFlow();\n if (this.getRefreshToken() && !this.isAuthenticated()) {\n await this.oauthService.refreshToken();\n }\n this.isInitialized$$.next(true);\n if (this.authConfig.loadUserProfile && this.oauthService.hasValidAccessToken()) {\n await this.loadUserProfile();\n }\n } catch (error) {\n if (error instanceof HttpErrorResponse) {\n this.isInitialized$$.next(true);\n } else if (error instanceof OAuthErrorEvent) {\n if (error.type === 'token_refresh_error') {\n this.signIn(this.windowRef.location.pathname);\n }\n this.isInitialized$$.next(true);\n } else {\n throw error;\n }\n }\n if (this.oauthService.hasValidAccessToken()) {\n await this.routeToRequestedUrl();\n }\n }\n\n public getIssuer(): URL {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new URL(this.oauthService.issuer!);\n }\n\n public signIn(url?: string): void {\n this.oauthService.initCodeFlow(url);\n }\n\n public signOut(): void {\n this.oauthService.logOut(!this.getAccessToken());\n }\n\n public async loadUserProfile(): Promise<void> {\n await this.oauthService.loadUserProfile();\n }\n\n public async refreshTokens(): Promise<TokenResponse> {\n return this.oauthService.refreshToken();\n }\n\n public getAccessToken(): string | null {\n return this.oauthService.getAccessToken() ?? null;\n }\n\n public getAccessTokenPayload(): (OdxAuth.AccessTokenPayload & Required<JwtPayload>) | null {\n const token = this.getAccessToken();\n\n return token ? jwtDecode(token) : null;\n }\n\n public getRefreshToken(): string | null {\n return this.oauthService.getRefreshToken() ?? null;\n }\n\n public getIdToken(): string | null {\n return this.oauthService.getIdToken() ?? null;\n }\n\n public getIdentityClaims(): OdxAuth.IdentiyClaims | null {\n if (!this.getIdToken()) return null;\n return deepmerge(this.oauthService.getIdentityClaims(), this.authPluginManager.getResult()) as OdxAuth.IdentiyClaims;\n }\n\n public getRawIdentityClaims(): OdxAuth.RawIdentityClaims | null {\n if (!this.getIdToken()) return null;\n return this.oauthService.getIdentityClaims();\n }\n\n public isAuthenticated(): boolean {\n if (this.windowRef.isOnline()) {\n return this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken();\n }\n return this.hasValidOfflineToken();\n }\n\n public isAuthorized(authorizedHandler?: AuthorizedHandler | null): boolean {\n return this.isAuthenticated() && (authorizedHandler?.(this.getIdentityClaims(), this) ?? true);\n }\n\n private async routeToRequestedUrl(): Promise<void> {\n if (!this.oauthService.state) return;\n await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));\n }\n\n private hasValidOfflineToken(): boolean {\n const issuedAt = this.getIdentityClaims()?.iat ?? 0;\n\n return Date.now() - issuedAt * 1000 <= this.authConfig.maxOfflineTime * 1000;\n }\n}\n","import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from '../auth.service';\n\n@Directive()\nexport abstract class AuthActionDirective implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly loadingSpinnerDirective = inject(LoadingSpinnerDirective, { self: true });\n protected readonly authService = inject(AuthService);\n\n public ngAfterViewInit(): void {\n this.loadingSpinnerDirective.autoColor = true;\n this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n this.loadingSpinnerDirective.isLoading = true;\n });\n }\n\n protected abstract handleClick(): void;\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignIn]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignInDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignIn')\n public afterSignIn = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signIn();\n this.afterSignIn.next();\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignOut]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignOutDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignOut')\n public afterSignOut = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signOut();\n this.afterSignOut.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { AreaHeaderModule } from '@odx/angular/components/area-header';\nimport { DropdownModule, DropdownOptions } from '@odx/angular/components/dropdown';\nimport { HeaderModule } from '@odx/angular/components/header';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { Position } from '@odx/angular/utils';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { SignInDirective, SignOutDirective } from './directives';\n\n@Component({\n standalone: true,\n selector: 'odx-auth',\n imports: [CoreModule, AreaHeaderModule, DropdownModule, HeaderModule, LogoDirective, SignInDirective, SignOutDirective, LoadingSpinnerModule],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AuthComponent {\n protected readonly authConfig = injectAuthConfig();\n protected readonly authService = inject(AuthService);\n protected readonly dropdownOptions = {\n position: Position.BOTTOM_END,\n enableFallback: false,\n containerClass: 'odx-auth-user-profile',\n } as Partial<DropdownOptions>;\n\n @Input()\n public signInButtonText = 'Sign in';\n\n @Input()\n public signOutButtonText = 'Sign out';\n}\n","<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ signOutButtonText }}\n <odx-icon name=\"arrow-right\" alignRight></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ signInButtonText }}\n </button>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-template>\n <ng-template [ngIf]=\"authConfig.showRedirectOverlay\">\n <div class=\"odx-auth-overlay\" [odxLoadingSpinner]=\"true\" *ngIf=\"authService.isLoading$ | async\"></div>\n </ng-template>\n</odx-action-group>\n","import { NgIf, NgIfContext } from '@angular/common';\nimport { AfterViewInit, Directive, inject, Input, TemplateRef } from '@angular/core';\nimport { isString, untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuth]',\n hostDirectives: [NgIf],\n})\nexport class AuthDirective implements AfterViewInit {\n private readonly authService = inject(AuthService);\n private readonly ngIfDirective = inject(NgIf, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n @Input('odxAuth')\n public authorizationHandler?: AuthorizedHandler | null | string = null;\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('odxAuthElse')\n public set elseTemplate(value: TemplateRef<NgIfContext<unknown>>) {\n this.ngIfDirective.ngIfElse = value;\n }\n\n public ngAfterViewInit(): void {\n this.authService.identityClaims$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;\n this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function authGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string): CanActivateFn {\n return (_, state) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n map((isAuthenticated) => {\n if (!isAuthenticated) {\n authService.signIn(state.url);\n\n return false;\n }\n return authorizedHandler?.(authService.getIdentityClaims(), authService, router) ?? isAuthenticated;\n }),\n tap((isAuthorized) => {\n if (isAuthorized || !router) return;\n if (isString(redirectTo)) {\n router.navigateByUrl(redirectTo);\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","import { NgModule } from '@angular/core';\nimport { AuthComponent } from './auth.component';\nimport { AuthDirective } from './auth.directive';\nimport { SignInDirective, SignOutDirective } from './directives';\n\nconst modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];\n\n@NgModule({\n imports: [...modules],\n exports: [...modules],\n})\nexport class AuthModule {}\n","import { of } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n email: string;\n initials: string;\n username: string;\n }\n }\n}\n\nexport const coreIdentityPlugin: AuthPluginFactory = () => {\n const { resolveEmail, resolveUsername, createInitials } = injectAuthConfig();\n\n return (authService) => {\n const claims = authService.getRawIdentityClaims();\n if (!claims) return of({});\n const username = resolveUsername(claims);\n\n return of({ email: resolveEmail(claims), username, initials: createInitials(username) });\n };\n};\n","import { APP_INITIALIZER, EnvironmentInjector, EnvironmentProviders, ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { buildUrl, ConfigDependencies, ConfigProvider, isString } from '@odx/angular/utils';\nimport { OAuthModuleConfig, OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';\nimport { tap } from 'rxjs';\nimport { AuthConfig, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, injectAuthConfig, ODX_AUTH_CORE_PLUGINS, provideAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\nimport { coreIdentityPlugin } from './plugins';\n\nexport function configureInterceptor(): OAuthModuleConfig {\n const { allowedUrls } = injectAuthConfig();\n return {\n resourceServer: {\n customUrlValidation: (url) => allowedUrls.some((allowedUrl) => (isString(allowedUrl) ? url.startsWith(allowedUrl) : !!url.match(allowedUrl))),\n sendAccessToken: true,\n },\n };\n}\n\nexport function initializeAuthErrorHandler(): void {\n const authService = inject(AuthService);\n const injector = inject(EnvironmentInjector);\n const { errorHandler } = injectAuthConfig();\n\n authService.errors$.pipe(tap((error) => injector.runInContext(() => errorHandler(error)))).subscribe();\n}\n\nexport function initalizeAuthConfig(): () => Promise<void> {\n const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl } = injectAuthConfig();\n const authService = inject(AuthService);\n const origin = inject(WindowRef).getOrigin();\n const scope = Array.from(new Set(DEFAULT_AUTH_SCOPES.concat(scopes ?? []))).join(' ');\n\n return () =>\n authService.initialize({\n clientId,\n issuer: issuer ?? DEFAULT_ISSUERS[environment],\n scope,\n redirectUri: buildUrl(origin, redirectPath),\n postLogoutRedirectUri: postLogoutRedirectUrl,\n preserveRequestedRoute: true,\n strictDiscoveryDocumentValidation: !discoveryUrl,\n responseType: 'code',\n showDebugInformation: environment === 'dev',\n timeoutFactor,\n });\n}\n\nexport function provideAuth<D extends ConfigDependencies>(config: ConfigProvider<Partial<AuthConfig>, D>): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAuthConfig(config),\n provideOAuthClient(),\n {\n provide: OAuthModuleConfig,\n useFactory: configureInterceptor,\n },\n {\n provide: ENVIRONMENT_INITIALIZER,\n useValue: initializeAuthErrorHandler,\n multi: true,\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initalizeAuthConfig,\n multi: true,\n },\n {\n provide: OAuthStorage,\n useFactory: () => inject(AuthConfig).storage ?? inject(WindowRef).nativeWindow.localStorage,\n },\n {\n provide: ODX_AUTH_CORE_PLUGINS,\n useValue: [coreIdentityPlugin],\n },\n ]);\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function unauthGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string): CanActivateFn {\n return (_) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n map((isAuthenticated) => {\n if (isAuthenticated && authorizedHandler) {\n return !authorizedHandler(authService.getIdentityClaims(), authService, router);\n }\n return !isAuthenticated;\n }),\n tap((isUnauthorized) => {\n if (isUnauthorized || !router) return;\n if (isString(redirectTo)) {\n router.navigateByUrl(redirectTo);\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i9"],"mappings":"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"}
|
package/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthPluginFactory } from '@odx/auth';
|
|
2
|
+
import { ServiceConnectEnvironment } from '../service-connect.config';
|
|
3
|
+
export interface ServiceConnectPluginOptions {
|
|
4
|
+
environment?: ServiceConnectEnvironment;
|
|
5
|
+
}
|
|
6
|
+
export interface ServiceConnectPluginFactoryOptions<Dto> {
|
|
7
|
+
endpoint: string[];
|
|
8
|
+
parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;
|
|
9
|
+
defaultValue?: Partial<OdxAuth.AuthPluginResult>;
|
|
10
|
+
setup?: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function serviceConnectPluginFactory<Dto = unknown>(options: ServiceConnectPluginFactoryOptions<Dto>): (pluginOptions?: ServiceConnectPluginOptions) => AuthPluginFactory;
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
import { AuthPluginFactory } from '@odx/auth';
|
|
2
|
-
import { ServiceConnectEnvironment } from './service-connect.config';
|
|
3
1
|
import './service-connect.typings';
|
|
4
|
-
export
|
|
5
|
-
environment?: ServiceConnectEnvironment;
|
|
6
|
-
}
|
|
7
|
-
export declare const serviceConnectRightsPlugin: (options?: ServiceConnectRightsPluginOptions) => AuthPluginFactory;
|
|
2
|
+
export declare const serviceConnectRightsPlugin: (pluginOptions?: import("./helpers").ServiceConnectPluginOptions | undefined) => import("dist/packages/auth").AuthPluginFactory;
|