ngx-cho-common 0.0.2 → 0.0.4
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/esm2022/lib/security/cho-security.config.mjs +3 -0
- package/esm2022/lib/security/services/auth.service.mjs +13 -15
- package/esm2022/lib/services/feature.service.mjs +8 -7
- package/esm2022/ngx-cho-common.config.mjs +3 -0
- package/esm2022/public-api.mjs +3 -2
- package/fesm2022/ngx-cho-common.mjs +20 -21
- package/fesm2022/ngx-cho-common.mjs.map +1 -1
- package/lib/security/cho-security.config.d.ts +8 -0
- package/lib/security/services/auth.service.d.ts +6 -6
- package/lib/services/feature.service.d.ts +3 -2
- package/ngx-cho-common.config.d.ts +6 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/esm2022/lib/security/security-policies.mjs +0 -3
- package/lib/security/security-policies.d.ts +0 -3
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const CHO_SECURITY_CONFIG = new InjectionToken('ChoSecurityConfig');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvLXNlY3VyaXR5LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9saWIvc2VjdXJpdHkvY2hvLXNlY3VyaXR5LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUy9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFvQixtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyU2V0dGluZ3MgfSBmcm9tICdvaWRjLWNsaWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hvU2VjdXJpdHlDb25maWcge1xuICAgIHBvbGljaWVzOiBTZWN1cml0eVBvbGljeVtdO1xuICAgIHVzZXJNYW5hZ2VyU2V0dGluZ3M6IFVzZXJNYW5hZ2VyU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBjb25zdCBDSE9fU0VDVVJJVFlfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPENob1NlY3VyaXR5Q29uZmlnPignQ2hvU2VjdXJpdHlDb25maWcnKTtcbiJdfQ==
|
|
@@ -2,8 +2,9 @@ import { AuthUser } from '../models/auth-user.model';
|
|
|
2
2
|
import { AuthorizationContext } from '../models/authorization-context.model';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { Inject, Injectable } from '@angular/core';
|
|
5
|
-
import { SECURITY_POLICIES } from '../security-policies';
|
|
6
5
|
import { UserManager } from 'oidc-client';
|
|
6
|
+
import { CHO_SECURITY_CONFIG } from '../cho-security.config';
|
|
7
|
+
import { CHO_COMMON_CONFIG } from '../../../ngx-cho-common.config';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@angular/router";
|
|
9
10
|
import * as i2 from "../../services/session-storage.service";
|
|
@@ -27,17 +28,17 @@ import * as i3 from "ngx-spinner";
|
|
|
27
28
|
// };
|
|
28
29
|
// }
|
|
29
30
|
export class AuthService {
|
|
30
|
-
constructor(
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
33
|
-
this.userManagerSettings = userManagerSettings;
|
|
31
|
+
constructor(choCommonConfig, choSecurityConfig, router, sessionStorage, spinnerService) {
|
|
32
|
+
this.choCommonConfig = choCommonConfig;
|
|
33
|
+
this.choSecurityConfig = choSecurityConfig;
|
|
34
34
|
this.router = router;
|
|
35
35
|
this.sessionStorage = sessionStorage;
|
|
36
36
|
this.spinnerService = spinnerService;
|
|
37
37
|
this.returnUrlKey = 'AuthService.returnUrl';
|
|
38
|
-
this.userManager = new UserManager(this.userManagerSettings);
|
|
38
|
+
this.userManager = new UserManager(this.choSecurityConfig.userManagerSettings);
|
|
39
39
|
this._currentUser = AuthUser.anonymous;
|
|
40
40
|
this.userStream = new BehaviorSubject(AuthUser.anonymous);
|
|
41
|
+
this.webAppUrl = this.choCommonConfig.webAppUrl;
|
|
41
42
|
this.userManager.events.addSilentRenewError(err => {
|
|
42
43
|
console.error(err);
|
|
43
44
|
});
|
|
@@ -55,7 +56,7 @@ export class AuthService {
|
|
|
55
56
|
set currentUser(user) {
|
|
56
57
|
this._currentUser = user;
|
|
57
58
|
const authContext = new AuthorizationContext(user);
|
|
58
|
-
this.
|
|
59
|
+
this.choSecurityConfig.policies.forEach(p => p.evaluate(authContext));
|
|
59
60
|
this.userStream.next(user);
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
@@ -65,7 +66,7 @@ export class AuthService {
|
|
|
65
66
|
* @returns
|
|
66
67
|
*/
|
|
67
68
|
checkPolicy(name) {
|
|
68
|
-
return this.
|
|
69
|
+
return this.choSecurityConfig.policies.some(p => p.name === name && p.succeeded);
|
|
69
70
|
}
|
|
70
71
|
/**
|
|
71
72
|
* Completes the authentication process, redirecting to the return URL if specified
|
|
@@ -112,7 +113,7 @@ export class AuthService {
|
|
|
112
113
|
this.spinnerService.hide();
|
|
113
114
|
});
|
|
114
115
|
}
|
|
115
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token:
|
|
116
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token: CHO_COMMON_CONFIG }, { token: CHO_SECURITY_CONFIG }, { token: i1.Router }, { token: i2.SessionStorageService }, { token: i3.NgxSpinnerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
116
117
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
|
|
117
118
|
}
|
|
118
119
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, decorators: [{
|
|
@@ -120,12 +121,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
120
121
|
args: [{ providedIn: 'root' }]
|
|
121
122
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
122
123
|
type: Inject,
|
|
123
|
-
args: [
|
|
124
|
+
args: [CHO_COMMON_CONFIG]
|
|
124
125
|
}] }, { type: undefined, decorators: [{
|
|
125
126
|
type: Inject,
|
|
126
|
-
args: [
|
|
127
|
-
}] }, { type: undefined, decorators: [{
|
|
128
|
-
type: Inject,
|
|
129
|
-
args: ['userManagerSettings']
|
|
127
|
+
args: [CHO_SECURITY_CONFIG]
|
|
130
128
|
}] }, { type: i1.Router }, { type: i2.SessionStorageService }, { type: i3.NgxSpinnerService }] });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZWN1cml0eS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxhQUFhLENBQUM7Ozs7O0FBRy9ELHNEQUFzRDtBQUN0RCxlQUFlO0FBQ2YsaURBQWlEO0FBQ2pELGdEQUFnRDtBQUNoRCwrREFBK0Q7QUFDL0Qsd0RBQXdEO0FBQ3hELDJDQUEyQztBQUMzQyxrRUFBa0U7QUFDbEUsc0NBQXNDO0FBQ3RDLDhCQUE4QjtBQUM5QixzQ0FBc0M7QUFDdEMsNEVBQTRFO0FBQzVFLHdFQUF3RTtBQUN4RSw2RkFBNkY7QUFDN0Ysd0RBQXdEO0FBQ3hELHNEQUFzRDtBQUN0RCxTQUFTO0FBQ1QsSUFBSTtBQUdKLE1BQU0sT0FBTyxXQUFXO0lBT3BCLFlBRW9CLGdCQUFrQyxFQUNaLFNBQWlCLEVBQ1AsbUJBQXdDLEVBQ3ZFLE1BQWMsRUFDZCxjQUFxQyxFQUNyQyxjQUFpQztRQUxsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDdkUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FB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QUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQXpHUSxXQUFXLGtCQVFSLGlCQUFpQixhQUVqQixXQUFXLGFBQ1gscUJBQXFCO21IQVh4QixXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9hdXRob3JpemF0aW9uLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXNwaW5uZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNFQ1VSSVRZX1BPTElDSUVTIH0gZnJvbSAnLi4vc2VjdXJpdHktcG9saWNpZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlQb2xpY3kgfSBmcm9tICcuLi9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyLCBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnb2lkYy1jbGllbnQnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuXG4vLyBmdW5jdGlvbiBnZXRDbGllbnRTZXR0aW5ncygpOiBVc2VyTWFuYWdlclNldHRpbmdzIHtcbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAgICBhdXRob3JpdHk6IGVudmlyb25tZW50LmF1dGguYXV0aG9yaXR5LFxuLy8gICAgICAgICBjbGllbnRfaWQ6IGVudmlyb25tZW50LmF1dGguY2xpZW50SWQsXG4vLyAgICAgICAgIHJlZGlyZWN0X3VyaTogYCR7ZW52aXJvbm1lbnQud2ViQXBwfS9hdXRoLWNhbGxiYWNrYCxcbi8vICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpOiBlbnZpcm9ubWVudC53ZWJBcHAsXG4vLyAgICAgICAgIHJlc3BvbnNlX3R5cGU6ICdpZF90b2tlbiB0b2tlbicsXG4vLyAgICAgICAgIHNjb3BlOiBgb3BlbmlkIHByb2ZpbGUgJHtlbnZpcm9ubWVudC5hdXRoLnJlc291cmNlSWR9YCxcbi8vICAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHRydWUsXG4vLyAgICAgICAgIGxvYWRVc2VySW5mbzogdHJ1ZSxcbi8vICAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXc6IHRydWUsXG4vLyAgICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmk6IGAke2Vudmlyb25tZW50LndlYkFwcH0vc2lsZW50LXJlZnJlc2guaHRtbGAsXG4vLyAgICAgICAgIC8vZXh0cmFRdWVyeVBhcmFtczogeyByZXNvdXJjZTogZW52aXJvbm1lbnQuYXV0aC5yZXNvdXJjZUlkIH1cbi8vICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgc2lsZW50IHJlZnJlc2guICBEb24ndCBzZXQgdGhpcyBhbnkgbG93ZXIsIG90aGVyd2lzZVxuLy8gICAgICAgICAvLyB0aGUgdG9rZW4gYXV0aG9yaXR5IHdpbGwgbGlrZWx5IGJsb2NrIHlvdS5cbi8vICAgICAgICAgLy9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTogMzU0NVxuLy8gICAgIH07XG4vLyB9XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmV0dXJuVXJsS2V5ID0gJ0F1dGhTZXJ2aWNlLnJldHVyblVybCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcih0aGlzLnVzZXJNYW5hZ2VyU2V0dGluZ3MpO1xuXG4gICAgcHJpdmF0ZSBfY3VycmVudFVzZXIgPSBBdXRoVXNlci5hbm9ueW1vdXM7XG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXJTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhVc2VyPihBdXRoVXNlci5hbm9ueW1vdXMpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VDVVJJVFlfUE9MSUNJRVMpXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZWN1cml0eVBvbGljaWVzOiBTZWN1cml0eVBvbGljeVtdLFxuICAgICAgICBASW5qZWN0KCd3ZWJBcHBVcmwnKSBwcml2YXRlIHJlYWRvbmx5IHdlYkFwcFVybDogc3RyaW5nLFxuICAgICAgICBASW5qZWN0KCd1c2VyTWFuYWdlclNldHRpbmdzJykgcHJpdmF0ZSByZWFkb25seSB1c2VyTWFuYWdlclNldHRpbmdzOiBVc2VyTWFuYWdlclNldHRpbmdzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3Bpbm5lclNlcnZpY2U6IE5neFNwaW5uZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlck1hbmFnZXIuZXZlbnRzLmFkZFNpbGVudFJlbmV3RXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tJc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHVzZXIuXG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRVc2VyKCk6IEF1dGhVc2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVc2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldCBjdXJyZW50VXNlcih1c2VyOiBBdXRoVXNlcikge1xuICAgICAgICB0aGlzLl9jdXJyZW50VXNlciA9IHVzZXI7XG5cbiAgICAgICAgY29uc3QgYXV0aENvbnRleHQgPSBuZXcgQXV0aG9yaXphdGlvbkNvbnRleHQodXNlcik7XG4gICAgICAgIHRoaXMuc2VjdXJpdHlQb2xpY2llcy5mb3JFYWNoKHAgPT4gcC5ldmFsdWF0ZShhdXRoQ29udGV4dCkpO1xuXG4gICAgICAgIHRoaXMudXNlclN0cmVhbS5uZXh0KHVzZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGF0IHRoZSBzcGVjaWZpZWQgc2VjdXJpdHkgcG9saWN5IGlzIHNhdGlzZmllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBjaGVja1BvbGljeShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdXJpdHlQb2xpY2llcy5zb21lKHAgPT4gcC5uYW1lID09PSBuYW1lICYmIHAuc3VjY2VlZGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIHJlZGlyZWN0aW5nIHRvIHRoZSByZXR1cm4gVVJMIGlmIHNwZWNpZmllZFxuICAgICAqIGluIHRoZSBzdGFydCBhdXRoZW50aWNhdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2b2lkIHByb21pc2UuXG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGVBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrKCkpO1xuXG4gICAgICAgIGxldCByZXR1cm5VcmwgPVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtPHN0cmluZz4odGhpcy5yZXR1cm5VcmxLZXkpIHx8IHRoaXMud2ViQXBwVXJsO1xuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5yZXR1cm5VcmxLZXkpO1xuXG4gICAgICAgIGlmIChyZXR1cm5VcmwuZW5kc1dpdGgoJ2xvZ2luJykpIHtcbiAgICAgICAgICAgIHJldHVyblVybCA9IHRoaXMud2ViQXBwVXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZXR1cm5VcmwsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0lzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5nZXRVc2VyKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlci5pc0F1dGhlbnRpY2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2lnbnMgdGhlIGN1cnJlbnQgdXNlciBvdXQgb2YgdGhlIHN5dGVtLlxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25vdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0KCk7XG5cbiAgICAgICAgdGhpcy51c2VyTWFuYWdlci5yZW1vdmVVc2VyKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSBBdXRoVXNlci5hbm9ueW1vdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVnaW5zIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJldHVyblVybCBPcHRpb25hbC4gIERlc3RpbmF0aW9uIGFmdGVyIGF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqIEByZXR1cm5zIEEgdm9pZCBwcm9taXNlLlxuICAgICAqL1xuICAgIHN0YXJ0QXV0aGVudGljYXRpb24ocmV0dXJuVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChyZXR1cm5VcmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnJldHVyblVybEtleSwgcmV0dXJuVXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZWN1cml0eS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7QUFFcEYsc0RBQXNEO0FBQ3RELGVBQWU7QUFDZixpREFBaUQ7QUFDakQsZ0RBQWdEO0FBQ2hELCtEQUErRDtBQUMvRCx3REFBd0Q7QUFDeEQsMkNBQTJDO0FBQzNDLGtFQUFrRTtBQUNsRSxzQ0FBc0M7QUFDdEMsOEJBQThCO0FBQzlCLHNDQUFzQztBQUN0Qyw0RUFBNEU7QUFDNUUsd0VBQXdFO0FBQ3hFLDZGQUE2RjtBQUM3Rix3REFBd0Q7QUFDeEQsc0RBQXNEO0FBQ3RELFNBQVM7QUFDVCxJQUFJO0FBR0osTUFBTSxPQUFPLFdBQVc7SUFRcEIsWUFDZ0QsZUFBZ0MsRUFFNUQsaUJBQW9DLEVBQ25DLE1BQWMsRUFDZCxjQUFxQyxFQUNyQyxjQUFpQztRQUxOLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUU1RCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ25DLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxH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QUMxQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxTQUFrQjtRQUNsQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUzQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F4R1EsV0FBVyxrQkFTUixpQkFBaUIsYUFDakIsbUJBQW1CO21IQVZ0QixXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFVekIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUN4QixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9hdXRob3JpemF0aW9uLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXNwaW5uZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi4vbW9kZWxzL3NlY3VyaXR5LXBvbGljeS5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlciwgVXNlck1hbmFnZXJTZXR0aW5ncyB9IGZyb20gJ29pZGMtY2xpZW50JztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IENIT19TRUNVUklUWV9DT05GSUcsIENob1NlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi4vY2hvLXNlY3VyaXR5LmNvbmZpZyc7XG5pbXBvcnQgeyBDSE9fQ09NTU9OX0NPTkZJRywgQ2hvQ29tbW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbmd4LWNoby1jb21tb24uY29uZmlnJztcblxuLy8gZnVuY3Rpb24gZ2V0Q2xpZW50U2V0dGluZ3MoKTogVXNlck1hbmFnZXJTZXR0aW5ncyB7XG4vLyAgICAgcmV0dXJuIHtcbi8vICAgICAgICAgYXV0aG9yaXR5OiBlbnZpcm9ubWVudC5hdXRoLmF1dGhvcml0eSxcbi8vICAgICAgICAgY2xpZW50X2lkOiBlbnZpcm9ubWVudC5hdXRoLmNsaWVudElkLFxuLy8gICAgICAgICByZWRpcmVjdF91cmk6IGAke2Vudmlyb25tZW50LndlYkFwcH0vYXV0aC1jYWxsYmFja2AsXG4vLyAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTogZW52aXJvbm1lbnQud2ViQXBwLFxuLy8gICAgICAgICByZXNwb25zZV90eXBlOiAnaWRfdG9rZW4gdG9rZW4nLFxuLy8gICAgICAgICBzY29wZTogYG9wZW5pZCBwcm9maWxlICR7ZW52aXJvbm1lbnQuYXV0aC5yZXNvdXJjZUlkfWAsXG4vLyAgICAgICAgIGZpbHRlclByb3RvY29sQ2xhaW1zOiB0cnVlLFxuLy8gICAgICAgICBsb2FkVXNlckluZm86IHRydWUsXG4vLyAgICAgICAgIGF1dG9tYXRpY1NpbGVudFJlbmV3OiB0cnVlLFxuLy8gICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpOiBgJHtlbnZpcm9ubWVudC53ZWJBcHB9L3NpbGVudC1yZWZyZXNoLmh0bWxgLFxuLy8gICAgICAgICAvL2V4dHJhUXVlcnlQYXJhbXM6IHsgcmVzb3VyY2U6IGVudmlyb25tZW50LmF1dGgucmVzb3VyY2VJZCB9XG4vLyAgICAgICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHNpbGVudCByZWZyZXNoLiAgRG9uJ3Qgc2V0IHRoaXMgYW55IGxvd2VyLCBvdGhlcndpc2Vcbi8vICAgICAgICAgLy8gdGhlIHRva2VuIGF1dGhvcml0eSB3aWxsIGxpa2VseSBibG9jayB5b3UuXG4vLyAgICAgICAgIC8vYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU6IDM1NDVcbi8vICAgICB9O1xuLy8gfVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJldHVyblVybEtleSA9ICdBdXRoU2VydmljZS5yZXR1cm5VcmwnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1hbmFnZXIgPSBuZXcgVXNlck1hbmFnZXIodGhpcy5jaG9TZWN1cml0eUNvbmZpZy51c2VyTWFuYWdlclNldHRpbmdzKTtcblxuICAgIHByaXZhdGUgX2N1cnJlbnRVc2VyID0gQXV0aFVzZXIuYW5vbnltb3VzO1xuICAgIHB1YmxpYyByZWFkb25seSB1c2VyU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoVXNlcj4oQXV0aFVzZXIuYW5vbnltb3VzKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2ViQXBwVXJsID0gdGhpcy5jaG9Db21tb25Db25maWcud2ViQXBwVXJsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoQ0hPX0NPTU1PTl9DT05GSUcpIHByaXZhdGUgcmVhZG9ubHkgY2hvQ29tbW9uQ29uZmlnOiBDaG9Db21tb25Db25maWcsXG4gICAgICAgIEBJbmplY3QoQ0hPX1NFQ1VSSVRZX0NPTkZJRylcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGNob1NlY3VyaXR5Q29uZmlnOiBDaG9TZWN1cml0eUNvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnVzZXJNYW5hZ2VyLmV2ZW50cy5hZGRTaWxlbnRSZW5ld0Vycm9yKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrSXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCB1c2VyLlxuICAgICAqL1xuICAgIGdldCBjdXJyZW50VXNlcigpOiBBdXRoVXNlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXNlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjdXJyZW50IHVzZXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXQgY3VycmVudFVzZXIodXNlcjogQXV0aFVzZXIpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFVzZXIgPSB1c2VyO1xuXG4gICAgICAgIGNvbnN0IGF1dGhDb250ZXh0ID0gbmV3IEF1dGhvcml6YXRpb25Db250ZXh0KHVzZXIpO1xuICAgICAgICB0aGlzLmNob1NlY3VyaXR5Q29uZmlnLnBvbGljaWVzLmZvckVhY2gocCA9PiBwLmV2YWx1YXRlKGF1dGhDb250ZXh0KSk7XG5cbiAgICAgICAgdGhpcy51c2VyU3RyZWFtLm5leHQodXNlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoYXQgdGhlIHNwZWNpZmllZCBzZWN1cml0eSBwb2xpY3kgaXMgc2F0aXNmaWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGNoZWNrUG9saWN5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9TZWN1cml0eUNvbmZpZy5wb2xpY2llcy5zb21lKHAgPT4gcC5uYW1lID09PSBuYW1lICYmIHAuc3VjY2VlZGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIHJlZGlyZWN0aW5nIHRvIHRoZSByZXR1cm4gVVJMIGlmIHNwZWNpZmllZFxuICAgICAqIGluIHRoZSBzdGFydCBhdXRoZW50aWNhdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2b2lkIHByb21pc2UuXG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGVBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrKCkpO1xuXG4gICAgICAgIGxldCByZXR1cm5VcmwgPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW08c3RyaW5nPih0aGlzLnJldHVyblVybEtleSkgfHwgdGhpcy53ZWJBcHBVcmw7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnJldHVyblVybEtleSk7XG5cbiAgICAgICAgaWYgKHJldHVyblVybC5lbmRzV2l0aCgnbG9naW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuVXJsID0gdGhpcy53ZWJBcHBVcmw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJldHVyblVybCwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGNoZWNrSXNBdXRoZW50aWNhdGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gQXV0aFVzZXIuZnJvbShhd2FpdCB0aGlzLnVzZXJNYW5hZ2VyLmdldFVzZXIoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyLmlzQXV0aGVudGljYXRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaWducyB0aGUgY3VycmVudCB1c2VyIG91dCBvZiB0aGUgc3l0ZW0uXG4gICAgICovXG4gICAgYXN5bmMgc2lnbm91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3QoKTtcblxuICAgICAgICB0aGlzLnVzZXJNYW5hZ2VyLnJlbW92ZVVzZXIoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmFub255bW91cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCZWdpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmV0dXJuVXJsIE9wdGlvbmFsLiAgRGVzdGluYXRpb24gYWZ0ZXIgYXV0aGVudGljYXRpb24gaXMgY29tcGxldGUuXG4gICAgICogQHJldHVybnMgQSB2b2lkIHByb21pc2UuXG4gICAgICovXG4gICAgc3RhcnRBdXRoZW50aWNhdGlvbihyZXR1cm5Vcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHJldHVyblVybCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMucmV0dXJuVXJsS2V5LCByZXR1cm5VcmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { Inject, Injectable } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { CHO_COMMON_CONFIG } from '../../ngx-cho-common.config';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "./rest-client.service";
|
|
5
6
|
export class FeatureService {
|
|
6
|
-
constructor(
|
|
7
|
-
this.
|
|
7
|
+
constructor(choCommonConfig, restClient) {
|
|
8
|
+
this.choCommonConfig = choCommonConfig;
|
|
8
9
|
this.restClient = restClient;
|
|
9
10
|
this.featureStream = new BehaviorSubject([]);
|
|
10
11
|
this._enabledFeatures = [];
|
|
11
12
|
this._isInitialized = false;
|
|
12
|
-
this.routePrefix = `${this.webApiUrl}/common/features`;
|
|
13
|
+
this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;
|
|
13
14
|
this.checkEnabledFeatures();
|
|
14
15
|
}
|
|
15
16
|
/**
|
|
@@ -39,7 +40,7 @@ export class FeatureService {
|
|
|
39
40
|
* @returns
|
|
40
41
|
*/
|
|
41
42
|
async checkEnabledFeatures() {
|
|
42
|
-
if (
|
|
43
|
+
if (this.isInitialized) {
|
|
43
44
|
this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);
|
|
44
45
|
}
|
|
45
46
|
return this.enabledFeatures;
|
|
@@ -53,7 +54,7 @@ export class FeatureService {
|
|
|
53
54
|
checkFeatureIsEnabled(name) {
|
|
54
55
|
return this._enabledFeatures?.some(p => p === name);
|
|
55
56
|
}
|
|
56
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token:
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token: CHO_COMMON_CONFIG }, { token: i1.RestClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
58
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, providedIn: 'root' }); }
|
|
58
59
|
}
|
|
59
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, decorators: [{
|
|
@@ -61,6 +62,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
61
62
|
args: [{ providedIn: 'root' }]
|
|
62
63
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
63
64
|
type: Inject,
|
|
64
|
-
args: [
|
|
65
|
+
args: [CHO_COMMON_CONFIG]
|
|
65
66
|
}] }, { type: i1.RestClient }] });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9mZWF0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sNkJBQTZCLENBQUM7OztBQUdqRixNQUFNLE9BQU8sY0FBYztJQU92QixZQUN1QyxlQUFnQyxFQUNsRCxVQUFzQjtRQURKLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNsRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUjNCLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFMUQscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBTzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsa0JBQWtCLENBQUM7UUFDdkUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBWSxlQUFlLENBQUMsZUFBeUI7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUUzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQjtRQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxVQUFVLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBN0RRLGNBQWMsa0JBUVgsaUJBQWlCO21IQVJwQixjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVzdENsaWVudCB9IGZyb20gJy4vcmVzdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDSE9fQ09NTU9OX0NPTkZJRywgQ2hvQ29tbW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vbmd4LWNoby1jb21tb24uY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlU2VydmljZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IGZlYXR1cmVTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG5cbiAgICBwcml2YXRlIF9lbmFibGVkRmVhdHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVQcmVmaXg7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChDSE9fQ09NTU9OX0NPTkZJRykgcHJpdmF0ZSBjaG9Db21tb25Db25maWc6IENob0NvbW1vbkNvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZXN0Q2xpZW50OiBSZXN0Q2xpZW50XG4gICAgKSB7XG4gICAgICAgIHRoaXMucm91dGVQcmVmaXggPSBgJHt0aGlzLmNob0NvbW1vbkNvbmZpZy53ZWJBcGlVcmx9L2NvbW1vbi9mZWF0dXJlc2A7XG4gICAgICAgIHRoaXMuY2hlY2tFbmFibGVkRmVhdHVyZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlbmFibGVkIGZlYXR1cmVzLlxuICAgICAqL1xuICAgIGdldCBlbmFibGVkRmVhdHVyZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZEZlYXR1cmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVuYWJsZWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXQgZW5hYmxlZEZlYXR1cmVzKGVuYWJsZWRGZWF0dXJlczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZEZlYXR1cmVzID0gZW5hYmxlZEZlYXR1cmVzO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmZlYXR1cmVTdHJlYW0ubmV4dChlbmFibGVkRmVhdHVyZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciBmZWF0dXJlcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICAgKi9cbiAgICBnZXQgaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5pdGlhbGl6ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoYXQgdGhlIGVuYWJsZWQgZmVhdHVyZXMgYXJlIHNldCBhbmQgcmV0dXJucyB0aGUgbGlzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0VuYWJsZWRGZWF0dXJlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZEZlYXR1cmVzID0gYXdhaXQgdGhpcy5yZXN0Q2xpZW50LmdldChgJHt0aGlzLnJvdXRlUHJlZml4fS9lbmFibGVkYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkRmVhdHVyZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoYXQgdGhlIHNwZWNpZmllZCBmZWF0dXJlIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgY2hlY2tGZWF0dXJlSXNFbmFibGVkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZEZlYXR1cmVzPy5zb21lKHAgPT4gcCA9PT0gbmFtZSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const CHO_COMMON_CONFIG = new InjectionToken('ChoCommonConfig');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNoby1jb21tb24uY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL25neC1jaG8tY29tbW9uLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBDaG9Db21tb25Db25maWcge1xuICAgIHdlYkFwcFVybDogc3RyaW5nO1xuICAgIHdlYkFwaVVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQ0hPX0NPTU1PTl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q2hvQ29tbW9uQ29uZmlnPignQ2hvQ29tbW9uQ29uZmlnJyk7XG4iXX0=
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -6,10 +6,11 @@ export { AuthGuardService } from './lib/security/services/auth-guard.service';
|
|
|
6
6
|
export { AuthService } from './lib/security/services/auth.service';
|
|
7
7
|
export { AuthUser } from './lib/security/models/auth-user.model';
|
|
8
8
|
export { AuthorizationContext } from './lib/security/models/authorization-context.model';
|
|
9
|
-
export { SECURITY_POLICIES } from './lib/security/security-policies';
|
|
10
9
|
export { SecurityPolicy } from './lib/security/models/security-policy.model';
|
|
11
10
|
export { SigninComponent } from './lib/security/signin/signin.component';
|
|
12
11
|
export { SignoutComponent } from './lib/security/signout/signout.component';
|
|
12
|
+
export { CHO_COMMON_CONFIG } from './ngx-cho-common.config';
|
|
13
|
+
export { CHO_SECURITY_CONFIG } from './lib/security/cho-security.config';
|
|
13
14
|
export { SeverityLevel } from './lib/logging/models/severity-level.enum';
|
|
14
15
|
export { ConsoleLoggerSink } from './lib/logging/console-logger.sink';
|
|
15
16
|
export { Logger } from './lib/logging/logger.model';
|
|
@@ -29,4 +30,4 @@ export { RouteParamService } from './lib/services/route-param.service';
|
|
|
29
30
|
export { SessionStorageService } from './lib/services/session-storage.service';
|
|
30
31
|
export { UnsavedChangesGuard } from './lib/guards/unsaved-changes.guard';
|
|
31
32
|
export { Uuid } from './lib/models/uuid.model';
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQXFCLE1BQU0sb0NBQW9DLENBQUM7QUFHNUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUd6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1jaG8tY29tbW9uXG4gKi9cblxuZXhwb3J0IHsgQXV0aENhbGxiYWNrQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvYXV0aC1jYWxsYmFjay9hdXRoLWNhbGxiYWNrLmNvbXBvbmVudCc7XG5leHBvcnQgeyBBdXRoR3VhcmRTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvc2VydmljZXMvYXV0aC1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvbW9kZWxzL2F1dGgtdXNlci5tb2RlbCc7XG5leHBvcnQgeyBBdXRob3JpemF0aW9uQ29udGV4dCB9IGZyb20gJy4vbGliL3NlY3VyaXR5L21vZGVscy9hdXRob3JpemF0aW9uLWNvbnRleHQubW9kZWwnO1xuZXhwb3J0IHsgU2VjdXJpdHlQb2xpY3kgfSBmcm9tICcuL2xpYi9zZWN1cml0eS9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmV4cG9ydCB7IFNpZ25pbkNvbXBvbmVudCB9IGZyb20gJy4vbGliL3NlY3VyaXR5L3NpZ25pbi9zaWduaW4uY29tcG9uZW50JztcbmV4cG9ydCB7IFNpZ25vdXRDb21wb25lbnQgfSBmcm9tICcuL2xpYi9zZWN1cml0eS9zaWdub3V0L3NpZ25vdXQuY29tcG9uZW50JztcblxuZXhwb3J0IHsgQ0hPX0NPTU1PTl9DT05GSUcsIENob0NvbW1vbkNvbmZpZyB9IGZyb20gJy4vbmd4LWNoby1jb21tb24uY29uZmlnJztcbmV4cG9ydCB7IENIT19TRUNVUklUWV9DT05GSUcsIENob1NlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvY2hvLXNlY3VyaXR5LmNvbmZpZyc7XG5cbmV4cG9ydCB7IElDbGllbnRMb2dFbnRyeSB9IGZyb20gJy4vbGliL2xvZ2dpbmcvbW9kZWxzL2NsaWVudC1sb2ctZW50cnkuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFNldmVyaXR5TGV2ZWwgfSBmcm9tICcuL2xpYi9sb2dnaW5nL21vZGVscy9zZXZlcml0eS1sZXZlbC5lbnVtJztcbmV4cG9ydCB7IENvbnNvbGVMb2dnZXJTaW5rIH0gZnJvbSAnLi9saWIvbG9nZ2luZy9jb25zb2xlLWxvZ2dlci5zaW5rJztcbmV4cG9ydCB7IElMb2dnZXJTaW5rQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbGliL2xvZ2dpbmcvbG9nZ2VyLXNpbmstY29uZmlndXJhdGlvbi5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgSUxvZ2dlclNpbmsgfSBmcm9tICcuL2xpYi9sb2dnaW5nL2xvZ2dlci1zaW5rLmludGVyZmFjZSc7XG5leHBvcnQgeyBMb2dnZXIgfSBmcm9tICcuL2xpYi9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5leHBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9saWIvbG9nZ2luZy9sb2dnZXIuc2VydmljZSc7XG5leHBvcnQgeyBTZXJ2ZXJMb2dnZXJTaW5rIH0gZnJvbSAnLi9saWIvbG9nZ2luZy9zZXJ2ZXItbG9nZ2VyLnNpbmsnO1xuXG5leHBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2RhdGUuc2VydmljZSc7XG5leHBvcnQgeyBEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kb3dubG9hZC5zZXJ2aWNlJztcbmV4cG9ydCB7IEZlYXR1cmVHdWFyZFNlcnZpY2UgfSBmcm9tICcuL2xpYi9ndWFyZHMvZmVhdHVyZS1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCB7IEZlYXR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvZmVhdHVyZS5zZXJ2aWNlJztcbmV4cG9ydCB7IEludGVydmFsU2VydmljZSwgSW50ZXJ2YWxUaW1lciB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2ludGVydmFsLnNlcnZpY2UnO1xuZXhwb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tb2RhbC5zZXJ2aWNlJztcbmV4cG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCB7IE9iamVjdFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9vYmplY3Quc2VydmljZSc7XG5leHBvcnQgeyBSZXN0Q2xpZW50IH0gZnJvbSAnLi9saWIvc2VydmljZXMvcmVzdC1jbGllbnQuc2VydmljZSc7XG5leHBvcnQgeyBSb3V0ZVBhcmFtU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3JvdXRlLXBhcmFtLnNlcnZpY2UnO1xuZXhwb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuXG5leHBvcnQgeyBVbnNhdmVkQ2hhbmdlc0d1YXJkIH0gZnJvbSAnLi9saWIvZ3VhcmRzL3Vuc2F2ZWQtY2hhbmdlcy5ndWFyZCc7XG5cbmV4cG9ydCB7IElEZWFjdGl2YXRhYmxlIH0gZnJvbSAnLi9saWIvbW9kZWxzL2RlYWN0aXZhdGFibGUuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFV1aWQgfSBmcm9tICcuL2xpYi9tb2RlbHMvdXVpZC5tb2RlbCc7XG5cbmV4cG9ydCB7IE5hbWVWYWx1ZUl0ZW0gfSBmcm9tICcuL2xpYi90eXBlcy9uYW1lLXZhbHVlLWl0ZW0udHlwZSc7XG4iXX0=
|
|
@@ -104,7 +104,9 @@ class AuthorizationContext {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
const
|
|
107
|
+
const CHO_SECURITY_CONFIG = new InjectionToken('ChoSecurityConfig');
|
|
108
|
+
|
|
109
|
+
const CHO_COMMON_CONFIG = new InjectionToken('ChoCommonConfig');
|
|
108
110
|
|
|
109
111
|
class SessionStorageService {
|
|
110
112
|
checkIfKeyExists(key) {
|
|
@@ -152,17 +154,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
152
154
|
// };
|
|
153
155
|
// }
|
|
154
156
|
class AuthService {
|
|
155
|
-
constructor(
|
|
156
|
-
this.
|
|
157
|
-
this.
|
|
158
|
-
this.userManagerSettings = userManagerSettings;
|
|
157
|
+
constructor(choCommonConfig, choSecurityConfig, router, sessionStorage, spinnerService) {
|
|
158
|
+
this.choCommonConfig = choCommonConfig;
|
|
159
|
+
this.choSecurityConfig = choSecurityConfig;
|
|
159
160
|
this.router = router;
|
|
160
161
|
this.sessionStorage = sessionStorage;
|
|
161
162
|
this.spinnerService = spinnerService;
|
|
162
163
|
this.returnUrlKey = 'AuthService.returnUrl';
|
|
163
|
-
this.userManager = new UserManager(this.userManagerSettings);
|
|
164
|
+
this.userManager = new UserManager(this.choSecurityConfig.userManagerSettings);
|
|
164
165
|
this._currentUser = AuthUser.anonymous;
|
|
165
166
|
this.userStream = new BehaviorSubject(AuthUser.anonymous);
|
|
167
|
+
this.webAppUrl = this.choCommonConfig.webAppUrl;
|
|
166
168
|
this.userManager.events.addSilentRenewError(err => {
|
|
167
169
|
console.error(err);
|
|
168
170
|
});
|
|
@@ -180,7 +182,7 @@ class AuthService {
|
|
|
180
182
|
set currentUser(user) {
|
|
181
183
|
this._currentUser = user;
|
|
182
184
|
const authContext = new AuthorizationContext(user);
|
|
183
|
-
this.
|
|
185
|
+
this.choSecurityConfig.policies.forEach(p => p.evaluate(authContext));
|
|
184
186
|
this.userStream.next(user);
|
|
185
187
|
}
|
|
186
188
|
/**
|
|
@@ -190,7 +192,7 @@ class AuthService {
|
|
|
190
192
|
* @returns
|
|
191
193
|
*/
|
|
192
194
|
checkPolicy(name) {
|
|
193
|
-
return this.
|
|
195
|
+
return this.choSecurityConfig.policies.some(p => p.name === name && p.succeeded);
|
|
194
196
|
}
|
|
195
197
|
/**
|
|
196
198
|
* Completes the authentication process, redirecting to the return URL if specified
|
|
@@ -237,7 +239,7 @@ class AuthService {
|
|
|
237
239
|
this.spinnerService.hide();
|
|
238
240
|
});
|
|
239
241
|
}
|
|
240
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token:
|
|
242
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token: CHO_COMMON_CONFIG }, { token: CHO_SECURITY_CONFIG }, { token: i1.Router }, { token: SessionStorageService }, { token: i3.NgxSpinnerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
241
243
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
|
|
242
244
|
}
|
|
243
245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, decorators: [{
|
|
@@ -245,13 +247,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
245
247
|
args: [{ providedIn: 'root' }]
|
|
246
248
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
247
249
|
type: Inject,
|
|
248
|
-
args: [
|
|
249
|
-
}] }, { type: undefined, decorators: [{
|
|
250
|
-
type: Inject,
|
|
251
|
-
args: ['webAppUrl']
|
|
250
|
+
args: [CHO_COMMON_CONFIG]
|
|
252
251
|
}] }, { type: undefined, decorators: [{
|
|
253
252
|
type: Inject,
|
|
254
|
-
args: [
|
|
253
|
+
args: [CHO_SECURITY_CONFIG]
|
|
255
254
|
}] }, { type: i1.Router }, { type: SessionStorageService }, { type: i3.NgxSpinnerService }] });
|
|
256
255
|
|
|
257
256
|
class AuthCallbackComponent {
|
|
@@ -907,13 +906,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
907
906
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }] });
|
|
908
907
|
|
|
909
908
|
class FeatureService {
|
|
910
|
-
constructor(
|
|
911
|
-
this.
|
|
909
|
+
constructor(choCommonConfig, restClient) {
|
|
910
|
+
this.choCommonConfig = choCommonConfig;
|
|
912
911
|
this.restClient = restClient;
|
|
913
912
|
this.featureStream = new BehaviorSubject([]);
|
|
914
913
|
this._enabledFeatures = [];
|
|
915
914
|
this._isInitialized = false;
|
|
916
|
-
this.routePrefix = `${this.webApiUrl}/common/features`;
|
|
915
|
+
this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;
|
|
917
916
|
this.checkEnabledFeatures();
|
|
918
917
|
}
|
|
919
918
|
/**
|
|
@@ -943,7 +942,7 @@ class FeatureService {
|
|
|
943
942
|
* @returns
|
|
944
943
|
*/
|
|
945
944
|
async checkEnabledFeatures() {
|
|
946
|
-
if (
|
|
945
|
+
if (this.isInitialized) {
|
|
947
946
|
this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);
|
|
948
947
|
}
|
|
949
948
|
return this.enabledFeatures;
|
|
@@ -957,7 +956,7 @@ class FeatureService {
|
|
|
957
956
|
checkFeatureIsEnabled(name) {
|
|
958
957
|
return this._enabledFeatures?.some(p => p === name);
|
|
959
958
|
}
|
|
960
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token:
|
|
959
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token: CHO_COMMON_CONFIG }, { token: RestClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
961
960
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, providedIn: 'root' }); }
|
|
962
961
|
}
|
|
963
962
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, decorators: [{
|
|
@@ -965,7 +964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
965
964
|
args: [{ providedIn: 'root' }]
|
|
966
965
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
967
966
|
type: Inject,
|
|
968
|
-
args: [
|
|
967
|
+
args: [CHO_COMMON_CONFIG]
|
|
969
968
|
}] }, { type: RestClient }] });
|
|
970
969
|
|
|
971
970
|
// from https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page
|
|
@@ -1192,5 +1191,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1192
1191
|
* Generated bundle index. Do not edit.
|
|
1193
1192
|
*/
|
|
1194
1193
|
|
|
1195
|
-
export { AuthCallbackComponent, AuthGuardService, AuthService, AuthUser, AuthorizationContext, ConsoleLoggerSink, DateService, DownloadService, FeatureGuardService, FeatureService, IntervalService, IntervalTimer, LocalStorageService, Logger, LoggerService, ModalService, NavigationService, ObjectService, RestClient, RouteParamService,
|
|
1194
|
+
export { AuthCallbackComponent, AuthGuardService, AuthService, AuthUser, AuthorizationContext, CHO_COMMON_CONFIG, CHO_SECURITY_CONFIG, ConsoleLoggerSink, DateService, DownloadService, FeatureGuardService, FeatureService, IntervalService, IntervalTimer, LocalStorageService, Logger, LoggerService, ModalService, NavigationService, ObjectService, RestClient, RouteParamService, SecurityPolicy, ServerLoggerSink, SessionStorageService, SeverityLevel, SigninComponent, SignoutComponent, UnsavedChangesGuard, Uuid };
|
|
1196
1195
|
//# sourceMappingURL=ngx-cho-common.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-cho-common.mjs","sources":["../../../projects/ngx-cho-common/src/lib/security/models/auth-user.model.ts","../../../projects/ngx-cho-common/src/lib/security/models/authorization-context.model.ts","../../../projects/ngx-cho-common/src/lib/security/security-policies.ts","../../../projects/ngx-cho-common/src/lib/services/session-storage.service.ts","../../../projects/ngx-cho-common/src/lib/security/services/auth.service.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.html","../../../projects/ngx-cho-common/src/lib/security/services/auth-guard.service.ts","../../../projects/ngx-cho-common/src/lib/security/models/security-policy.model.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.html","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.ts","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.html","../../../projects/ngx-cho-common/src/lib/logging/models/severity-level.enum.ts","../../../projects/ngx-cho-common/src/lib/logging/console-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.model.ts","../../../projects/ngx-cho-common/src/lib/models/uuid.model.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.service.ts","../../../projects/ngx-cho-common/src/lib/services/rest-client.service.ts","../../../projects/ngx-cho-common/src/lib/services/interval.service.ts","../../../projects/ngx-cho-common/src/lib/logging/server-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/services/date.service.ts","../../../projects/ngx-cho-common/src/lib/services/download.service.ts","../../../projects/ngx-cho-common/src/lib/services/feature.service.ts","../../../projects/ngx-cho-common/src/lib/services/navigation.service.ts","../../../projects/ngx-cho-common/src/lib/guards/feature-guard.service.ts","../../../projects/ngx-cho-common/src/lib/services/local-storage.service.ts","../../../projects/ngx-cho-common/src/lib/services/modal.service.ts","../../../projects/ngx-cho-common/src/lib/services/object.service.ts","../../../projects/ngx-cho-common/src/lib/services/route-param.service.ts","../../../projects/ngx-cho-common/src/lib/guards/unsaved-changes.guard.ts","../../../projects/ngx-cho-common/src/public-api.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.ts"],"sourcesContent":["import { User as OidcUser } from 'oidc-client';\nimport { Indexable } from '../../types/indexable.type';\n\nexport class AuthUser {\n public static readonly anonymous = new AuthUser();\n\n public readonly isAuthenticated: boolean;\n public readonly authorizationHeader?: string;\n public readonly firstName?: string;\n public readonly lastName?: string;\n public readonly fullName?: string;\n public readonly name?: string;\n\n /**\n * Constructs a user object from a given oidc user object.\n *\n * @param oidcUser The oidc user object.\n */\n private constructor(private readonly oidcUser: OidcUser | null = null) {\n this.oidcUser = oidcUser;\n\n if (oidcUser == null) {\n this.isAuthenticated = false;\n } else {\n this.isAuthenticated = true;\n this.authorizationHeader = `${oidcUser.token_type} ${oidcUser.access_token}`;\n this.name = oidcUser.profile?.name;\n this.firstName = oidcUser.profile?.given_name;\n this.lastName = oidcUser.profile?.family_name;\n this.fullName = `${this.firstName} ${this.lastName}`;\n }\n }\n\n /**\n * Gets the raw claims associated with the user.\n */\n public get claims(): Indexable {\n return this.oidcUser?.profile || {};\n }\n\n /**\n * Determines whether the currently authenticated user is in any of an\n * array of roles.\n *\n * @param roles An array of required roles.\n * @returns True if the user has any of the required roles, false otherwise.\n */\n public hasAnyRole(...roles: string[]): boolean {\n const roleClaim = this.claims['role'];\n\n if (roleClaim == null) {\n return false;\n }\n\n const claimRoles = Array.isArray(roleClaim) ? roleClaim : [roleClaim];\n return roles.some(r => claimRoles.some(cr => r.toLowerCase() === cr.toLowerCase()));\n }\n\n /**\n * Determines whether the currently authenticated user has a claim,\n * and optionally, whether the claim has a specific value.\n *\n * @param claimType Claim type to match\n * @param claimValue Optional claim value to match\n *\n * @returns True if the user has the required claim, false otherwise.\n */\n public hasClaim(claimType: string, claimValue?: string): boolean {\n const value = this.claims[claimType];\n return !!value && (!claimValue || value === claimValue);\n }\n\n /**\n * Determines whether the currently authenticated user is a customer.\n */\n public get isCustomer(): boolean {\n return this.hasClaim('ch:customer');\n }\n\n /**\n * Determines whether the currently authenticated user is an employee.\n */\n public get isEmployee(): boolean {\n return this.hasAnyRole('ch:Employee');\n }\n\n /**\n * Creates a user object given an oidc user object.\n *\n * @param oidcUser The oidc user object.\n * @returns A user object for the given oidc user object. If no oidc\n * user object is specified or it has expired, returns the anonymous\n * user.\n */\n public static from(oidcUser: OidcUser | null): AuthUser {\n if (oidcUser === null || oidcUser.expired) {\n return AuthUser.anonymous;\n }\n\n return new AuthUser(oidcUser);\n }\n}\n","import { AuthUser } from './auth-user.model';\n\nexport class AuthorizationContext {\n constructor(public readonly user: AuthUser) {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { SecurityPolicy } from './models/security-policy.model';\n\nexport const SECURITY_POLICIES = new InjectionToken<SecurityPolicy[]>('');\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class SessionStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.sessionStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.sessionStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.sessionStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.sessionStorage.removeItem(key);\n }\n}\n","import { AuthUser } from '../models/auth-user.model';\nimport { AuthorizationContext } from '../models/authorization-context.model';\nimport { BehaviorSubject } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { Router } from '@angular/router';\nimport { SECURITY_POLICIES } from '../security-policies';\nimport { SecurityPolicy } from '../models/security-policy.model';\nimport { UserManager, UserManagerSettings } from 'oidc-client';\nimport { SessionStorageService } from '../../services/session-storage.service';\n\n// function getClientSettings(): UserManagerSettings {\n// return {\n// authority: environment.auth.authority,\n// client_id: environment.auth.clientId,\n// redirect_uri: `${environment.webApp}/auth-callback`,\n// post_logout_redirect_uri: environment.webApp,\n// response_type: 'id_token token',\n// scope: `openid profile ${environment.auth.resourceId}`,\n// filterProtocolClaims: true,\n// loadUserInfo: true,\n// automaticSilentRenew: true,\n// silent_redirect_uri: `${environment.webApp}/silent-refresh.html`,\n// //extraQueryParams: { resource: environment.auth.resourceId }\n// // This is useful for testing silent refresh. Don't set this any lower, otherwise\n// // the token authority will likely block you.\n// //accessTokenExpiringNotificationTime: 3545\n// };\n// }\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly returnUrlKey = 'AuthService.returnUrl';\n private readonly userManager = new UserManager(this.userManagerSettings);\n\n private _currentUser = AuthUser.anonymous;\n public readonly userStream = new BehaviorSubject<AuthUser>(AuthUser.anonymous);\n\n constructor(\n @Inject(SECURITY_POLICIES)\n public readonly securityPolicies: SecurityPolicy[],\n @Inject('webAppUrl') private readonly webAppUrl: string,\n @Inject('userManagerSettings') private readonly userManagerSettings: UserManagerSettings,\n private readonly router: Router,\n private readonly sessionStorage: SessionStorageService,\n private readonly spinnerService: NgxSpinnerService\n ) {\n this.userManager.events.addSilentRenewError(err => {\n console.error(err);\n });\n this.checkIsAuthenticated();\n }\n\n /**\n * Gets the current user.\n */\n get currentUser(): AuthUser {\n return this._currentUser;\n }\n\n /**\n * Sets the current user.\n */\n private set currentUser(user: AuthUser) {\n this._currentUser = user;\n\n const authContext = new AuthorizationContext(user);\n this.securityPolicies.forEach(p => p.evaluate(authContext));\n\n this.userStream.next(user);\n }\n\n /**\n * Checks that the specified security policy is satisfied.\n *\n * @param name\n * @returns\n */\n checkPolicy(name: string): boolean {\n return this.securityPolicies.some(p => p.name === name && p.succeeded);\n }\n\n /**\n * Completes the authentication process, redirecting to the return URL if specified\n * in the start authentication call.\n *\n * @returns A void promise.\n */\n async completeAuthentication(): Promise<void> {\n this.currentUser = AuthUser.from(await this.userManager.signinRedirectCallback());\n\n let returnUrl =\n this.sessionStorage.getItem<string>(this.returnUrlKey) || this.webAppUrl;\n this.sessionStorage.removeItem(this.returnUrlKey);\n\n if (returnUrl.endsWith('login')) {\n returnUrl = this.webAppUrl;\n }\n\n this.router.navigateByUrl(returnUrl, { replaceUrl: true });\n }\n\n /**\n * Determines whether the user is authenticated.\n */\n async checkIsAuthenticated(): Promise<boolean> {\n this.currentUser = AuthUser.from(await this.userManager.getUser());\n return this.currentUser.isAuthenticated;\n }\n\n /**\n * Signs the current user out of the sytem.\n */\n async signout(): Promise<void> {\n await this.userManager.signoutRedirect();\n\n this.userManager.removeUser();\n this.currentUser = AuthUser.anonymous;\n }\n\n /**\n * Begins the authentication process.\n *\n * @param returnUrl Optional. Destination after authentication is complete.\n * @returns A void promise.\n */\n startAuthentication(returnUrl?: string): Promise<void> {\n if (returnUrl) {\n this.sessionStorage.setItem(this.returnUrlKey, returnUrl);\n }\n\n this.spinnerService.show();\n\n return this.userManager.signinRedirect().then(() => {\n this.spinnerService.hide();\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-auth-callback',\n templateUrl: './auth-callback.component.html',\n})\nexport class AuthCallbackComponent implements OnInit {\n constructor(private authService: AuthService) {}\n\n ngOnInit(): Promise<void> {\n return this.authService.completeAuthentication();\n }\n}\n","","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { AuthService } from './auth.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthGuardService {\n constructor(\n private authService: AuthService,\n private toastr: ToastrService\n ) {}\n\n public async canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<boolean> {\n if (await this.authService.checkIsAuthenticated()) {\n const routePolicy = route.data['policy'] as string;\n\n if (!routePolicy) {\n return true;\n }\n\n if (!this.authService.checkPolicy(routePolicy)) {\n this.toastr.error(\n \"Oops! It doesn't look like you are authorized to access this page.\"\n );\n return false;\n }\n\n return true;\n }\n\n await this.authService.startAuthentication(state.url);\n return false;\n }\n}\n","import { AuthorizationContext } from './authorization-context.model';\n\nexport class SecurityPolicy {\n private _succeeded = false;\n\n constructor(\n public readonly name: string,\n private readonly requirement: (context: AuthorizationContext) => boolean\n ) {}\n\n public get succeeded(): boolean {\n return this._succeeded;\n }\n\n public evaluate(context: AuthorizationContext): boolean {\n this._succeeded = this.requirement(context);\n return this._succeeded;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signin',\n templateUrl: './signin.component.html',\n})\nexport class SigninComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.startAuthentication('/');\n }\n}\n","<section class=\"container-fluid\">\n <p>Redirecting to sign in page...</p>\n</section>\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signout',\n templateUrl: './signout.component.html',\n})\nexport class SignoutComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.signout();\n }\n}\n","<section class=\"container-fluid\">\n <p>Signing out...</p>\n</section>\n","export enum SeverityLevel {\n verbose = 0,\n information = 1,\n warning = 2,\n error = 3,\n critical = 4,\n}\n","import { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { ILoggerSink } from './logger-sink.interface';\n\nexport class ConsoleLoggerSink implements ILoggerSink {\n private consoleMethods = new Map<SeverityLevel, (message: unknown, ...args: unknown[]) => void>(\n [\n [SeverityLevel.verbose, console.log],\n [SeverityLevel.information, console.info || console.log],\n [SeverityLevel.warning, console.warn || console.log],\n [SeverityLevel.error, console.error || console.log],\n [SeverityLevel.critical, console.error || console.log],\n ]\n );\n\n constructor(public readonly name: string, public level: SeverityLevel) {}\n\n write(logEntry: IClientLogEntry): Promise<void> {\n const consoleMethod = this.consoleMethods.get(logEntry.severityLevel) || console.log;\n\n if (logEntry.stackTrace) {\n const error = new Error(logEntry.message);\n error.stack = logEntry.stackTrace;\n\n consoleMethod(error);\n } else {\n consoleMethod(logEntry.message);\n }\n\n return Promise.resolve();\n }\n}\n","export type OptionalLogParameters = {\n stackTrace?: string;\n data?: unknown;\n};\n\nexport abstract class Logger {\n abstract logError(message: string | Error, options?: OptionalLogParameters): void;\n abstract logInfo(message: string, options?: OptionalLogParameters): void;\n abstract logVerbose(message: string, options?: OptionalLogParameters): void;\n abstract logWarning(message: string, options?: OptionalLogParameters): void;\n}\n","export class Uuid {\n public static create(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n let index = 0;\n\n return (\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++])\n );\n }\n\n private static toHex(byte: number): string {\n return (0x100 | byte).toString(16).substr(1);\n }\n}\n","import { ActivatedRoute } from '@angular/router';\nimport { AuthService } from '../security/services/auth.service';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { ILoggerSinkConfiguration } from './logger-sink-configuration.interface';\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport { Logger, OptionalLogParameters } from './logger.model';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { Uuid } from '../models/uuid.model';\nimport { ZonedDateTime } from '@js-joda/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LoggerService implements Logger {\n static readonly overrideQueryStringRegex = /log\\.(\\w+)/;\n\n readonly sessionId = Uuid.create();\n readonly sinks = new Array<ILoggerSink>();\n\n minimumLevel = SeverityLevel.error;\n\n constructor(\n @Inject('loggerSinkConfiguration')\n private loggerSinkConfiguration: ILoggerSinkConfiguration[],\n private readonly activatedRoute: ActivatedRoute,\n private readonly authService: AuthService,\n private readonly injector: Injector\n ) {\n this.readConfiguration();\n\n this.activatedRoute.queryParams.subscribe(async params => {\n const isDebug = this.authService.checkPolicy('debug');\n\n if (isDebug) {\n let updated = false;\n\n for (const key of Object.keys(params)) {\n const match = key.match(LoggerService.overrideQueryStringRegex);\n\n if (match?.length === 2) {\n const [paramName, sinkName] = match;\n const sink = this.sinks.find(s => s.name === sinkName);\n\n if (!sink) {\n throw new Error(`Cannot find sink with name '${sinkName}'.`);\n }\n\n const value = params[paramName];\n let level: SeverityLevel;\n\n if (!value) {\n throw new Error(\n `Missing value for query string parameter '${paramName}'.`\n );\n } else if (!(level = parseInt(value))) {\n level =\n SeverityLevel[value.toLowerCase() as keyof typeof SeverityLevel];\n }\n\n sink.level = level;\n updated = true;\n\n console.log(`Logging sink '${sinkName}' set to '${value}'.`);\n }\n }\n\n if (updated) {\n this.refreshSinks();\n }\n }\n });\n }\n\n logError(message: string | Error, options?: OptionalLogParameters): void {\n if (typeof message === 'string') {\n this.logWrite(SeverityLevel.error, message, options);\n return;\n }\n\n const error = message as Error;\n this.logWrite(\n SeverityLevel.error,\n error.message,\n Object.assign({ stackTrace: error.stack }, options)\n );\n }\n\n logInfo(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.information, message, options);\n }\n\n logVerbose(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.verbose, message, options);\n }\n\n logWarning(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.warning, message, options);\n }\n\n private logWrite(level: SeverityLevel, message: string, options?: OptionalLogParameters): void {\n if (level < this.minimumLevel) {\n return;\n }\n\n const logEntry = {\n createdDateTime: ZonedDateTime.now().withFixedOffsetZone().toString(),\n sessionId: this.sessionId,\n severityLevel: level,\n message: message,\n stackTrace: options?.stackTrace,\n url: window.location.href,\n userAgent: navigator.userAgent,\n jsonData: options?.data ? JSON.stringify(options.data) : undefined,\n };\n\n for (const sink of this.sinks) {\n if (level >= sink.level) {\n try {\n sink.write(logEntry);\n } catch (error) {\n this.logError(`Error writing log entry to sink '${sink.name}'.`, {\n stackTrace: (error as Error).stack,\n data: { sink: sink.name },\n });\n }\n }\n }\n }\n\n private readConfiguration(): void {\n const sinkConfigs = this.loggerSinkConfiguration;\n\n if (sinkConfigs) {\n for (const sinkConfig of sinkConfigs) {\n this.requiredProperty(sinkConfig, 'name');\n this.requiredProperty(sinkConfig, 'type');\n this.requiredProperty(sinkConfig, 'level');\n\n const sink = new sinkConfig.type(\n sinkConfig.name,\n sinkConfig.level,\n sinkConfig.args,\n this,\n this.injector\n );\n\n this.sinks.push(sink);\n }\n\n this.refreshSinks();\n }\n }\n\n private refreshSinks(): void {\n this.minimumLevel = this.sinks.reduce(\n (l, s) => Math.min(l, s.level),\n SeverityLevel.critical\n );\n }\n\n private requiredProperty(obj: unknown, propertyName: string): void {\n if ((obj as never)[propertyName] == null) {\n throw new Error(\n `Missing required property '${propertyName}' in the logger section of environment.ts.`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { lastValueFrom, Observable, retry, RetryConfig, take } from 'rxjs';\n\ntype RequestParameters = {\n body?: unknown;\n queryParameters?: {};\n apiVersion?: {};\n headers?: {};\n cacheLifetimeSeconds?: number;\n retry?: RetryConfig;\n showSpinner?: {};\n};\n\ntype DeleteRequestParameters = Omit<RequestParameters, 'body' | 'cacheLifetimeSeconds'>;\ntype GetRequestParameters = Omit<RequestParameters, 'body'>;\n\n@Injectable({ providedIn: 'any' })\nexport class RestClient {\n private readonly defaultRetry = { count: 0, delay: 1000 };\n\n constructor(private readonly httpClient: HttpClient) {}\n\n /**\n * Sends a delete request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public delete(url: string, options?: DeleteRequestParameters): Promise<void> {\n return lastValueFrom(this.request('DELETE', url, options));\n }\n\n /**\n * Retrieves data from the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public get<T>(url: string, options?: GetRequestParameters): Promise<T> {\n return lastValueFrom(this.request('GET', url, options));\n }\n\n /**\n * Sends a patch request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public patch<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PATCH', url, options));\n }\n\n /**\n * Sends a post request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public post<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('POST', url, options));\n }\n\n /**\n * Sends a put request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public put<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PUT', url, options));\n }\n\n /**\n * Sends a request to the specified REST service\n *\n * @param method DELETE, GET, POST, PUT, or PATCH\n * @param url The service endpoint\n * @param options Additional options\n */\n public request<T>(\n method: 'DELETE',\n url: string,\n options?: DeleteRequestParameters\n ): Observable<T>;\n public request<T>(method: 'GET', url: string, options?: GetRequestParameters): Observable<T>;\n public request<T>(\n method: 'POST' | 'PUT' | 'PATCH',\n url: string,\n options?: RequestParameters\n ): Observable<T>;\n\n public request<T>(\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<T> {\n return this.httpClient\n .request<T>(method, url, {\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n *\n * @param url\n * @param options\n * @returns\n */\n public getResponse<T>(\n method: 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<HttpResponse<T>> {\n return this.httpClient\n .request<T>(method, url, {\n observe: 'response',\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n * Creates request headers based on the provided options.\n *\n * @param options\n * @returns\n */\n private createRequestHeaders(options?: RequestParameters): HttpHeaders {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const headers: any = Object.assign(\n {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n options?.headers\n );\n\n if (options?.apiVersion) {\n const versionString = `; version=${options.apiVersion}`;\n\n headers.Accept += versionString;\n headers['Content-Type'] += versionString;\n }\n\n if (options?.showSpinner === false) {\n headers['x-spinner'] = 'false';\n }\n\n if (options?.cacheLifetimeSeconds) {\n headers['x-cache-ttl'] = options?.cacheLifetimeSeconds;\n }\n\n return new HttpHeaders(headers);\n }\n\n /**\n * Converts one or more objects to an HttpParams object.\n *\n * @param sources The objects to convert\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private createRequestParams(...sources: any[]): HttpParams {\n let params = new HttpParams();\n\n for (const source of sources) {\n if (source == null) {\n continue;\n }\n\n for (const key of Object.keys(source)) {\n const value = source[key];\n\n if (value != null) {\n params = params.set(key, value.toString());\n }\n }\n }\n\n return params;\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport type IntervalOptions = {\n fireImmediately: FireImmediately;\n blurInterval?: number;\n hiddenInterval?: number;\n};\n\ntype Action = () => Promise<unknown>;\n\nexport enum FireImmediately {\n never,\n whenShown,\n whenFocused,\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IntervalService {\n static readonly defaultOptions: IntervalOptions = { fireImmediately: FireImmediately.never };\n\n create(\n action: Action,\n interval: number,\n options: IntervalOptions = IntervalService.defaultOptions\n ): IntervalTimer {\n const timer = new IntervalTimer(action, interval, options);\n timer.initialize();\n\n return timer;\n }\n}\n\nexport class IntervalTimer {\n $handle?: number;\n currentInterval = 0;\n isStopped = true;\n\n constructor(\n private readonly action: Action,\n private readonly interval: number,\n private readonly options: IntervalOptions\n ) {}\n\n initialize(): void {\n if (this.options.hiddenInterval != null) {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.onHidden();\n } else {\n this.onShown();\n }\n });\n }\n\n if (this.options.blurInterval != null) {\n window.addEventListener('blur', () => this.onBlur());\n window.addEventListener('focus', () => this.onFocus());\n }\n }\n\n start(): void {\n if (this.isStopped) {\n if (!document.hidden) {\n this.isStopped = false;\n this.onShown();\n } else {\n this.setInterval(this.interval);\n this.isStopped = false;\n }\n }\n }\n\n stop(): void {\n this.setInterval(0);\n this.isStopped = true;\n }\n\n private async callActionAndScheduleNext(nextInterval: number): Promise<void> {\n this.setInterval(0); // pause while the action runs\n await this.action();\n this.setInterval(nextInterval);\n }\n\n private onBlur(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.blurInterval);\n }\n\n private onFocus(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options?.fireImmediately === FireImmediately.whenFocused) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private onHidden(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.hiddenInterval);\n }\n\n private onShown(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options.fireImmediately === FireImmediately.whenShown) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private setInterval(interval?: number): void {\n if (this.$handle) {\n if (interval === this.currentInterval) {\n return;\n }\n\n window.clearTimeout(this.$handle);\n this.$handle = undefined;\n }\n\n if (!interval) {\n return;\n }\n\n this.$handle = window.setTimeout(() => this.callActionAndScheduleNext(interval), interval);\n this.currentInterval = interval;\n }\n}\n","import { Injector } from '@angular/core';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { Logger } from './logger.model';\nimport { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { RestClient } from '../services/rest-client.service';\nimport { IntervalTimer, IntervalService } from '../services/interval.service';\n\ntype ServerLoggerArguments = {\n headers?: Record<string, unknown>;\n url: string;\n};\n\nexport class ServerLoggerSink implements ILoggerSink {\n private readonly retryCount = 10;\n private readonly postFrequency = 15 * 1000 /*15 seconds*/;\n\n $interval: IntervalTimer;\n\n entryBuffer = new Array<IClientLogEntry>();\n errorCount = 0;\n\n constructor(\n public readonly name: string,\n public level: SeverityLevel,\n public readonly args: ServerLoggerArguments,\n private readonly logger: Logger,\n private readonly injector: Injector\n ) {\n if (!args?.url) {\n throw new Error(`Missing required argument 'url' for sink ${this.constructor.name}.`);\n }\n\n const intervalService = injector.get<IntervalService>(IntervalService);\n this.$interval = intervalService.create(() => this.flush(), this.postFrequency);\n\n this.$interval.start();\n }\n\n write(logEntry: IClientLogEntry): void {\n this.entryBuffer.push(logEntry);\n }\n\n private async flush(): Promise<void> {\n if (this.entryBuffer.length === 0) {\n return;\n }\n\n const mark = this.entryBuffer.length;\n\n try {\n await this.postLogEntries(this.entryBuffer);\n\n this.entryBuffer = this.entryBuffer.slice(mark);\n this.errorCount = 0;\n } catch (error) {\n this.logger.logError(error as Error);\n\n if (this.errorCount++ > this.retryCount) {\n this.$interval.stop();\n throw new Error(\n `Error posting log entries to server. Retried ${this.retryCount} times and giving up.`\n );\n }\n }\n }\n\n private postLogEntries(entries: IClientLogEntry[]): Promise<void> {\n const restClient = this.injector.get<RestClient>(RestClient);\n const restOptions = Object.assign({}, this.args, {\n body: entries,\n showSpinner: false,\n });\n\n return restClient.post(this.args.url, restOptions);\n }\n}\n","import { Injectable } from '@angular/core';\nimport moment from 'moment';\n\nimport { NameValueItem } from '../types/name-value-item.type';\n\n@Injectable({ providedIn: 'root' })\nexport class DateService {\n public getMonthItems(startMonth = 1, endMonth = 12): NameValueItem<number>[] {\n const items: NameValueItem<number>[] = [];\n const d = moment().startOf('year');\n let i = startMonth;\n\n while (i <= endMonth) {\n d.set('month', i - 1);\n items.push({ value: i, name: d.format('MMMM') });\n i++;\n }\n\n return items;\n }\n\n public getYearItems(startYear?: number, endYear?: number): NameValueItem<number>[] {\n startYear = startYear || moment().year();\n endYear = endYear || moment().year();\n\n const items: NameValueItem<number>[] = [];\n let i = startYear;\n\n while (i <= endYear) {\n items.push({ value: i, name: i.toString() });\n i++;\n }\n\n return items;\n }\n\n public toDateString(input: moment.MomentInput): string {\n return moment(input).format('yyyy-MM-DD');\n }\n\n public toISOString(input: moment.MomentInput): string {\n return moment(input).toISOString();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Observable, shareReplay } from 'rxjs';\nimport { saveAs } from 'file-saver';\n\n@Injectable({ providedIn: 'any' })\nexport class DownloadService {\n constructor(private httpClient: HttpClient) {}\n\n private octetStreamMime = 'application/octet-stream';\n\n public downloadFile(url: string, params?: HttpParams): Observable<HttpResponse<ArrayBuffer>> {\n const download$ = this.httpClient\n .get(url, {\n responseType: 'arraybuffer',\n observe: 'response',\n params: params,\n })\n .pipe(shareReplay());\n\n download$.subscribe(r => this.processDownload(r));\n\n return download$;\n }\n\n private processDownload(response: HttpResponse<ArrayBuffer>): void {\n const filename = this.getFileNameFromResponse(response);\n const contentType = response.headers.get('content-type') || this.octetStreamMime;\n\n if (response.body) {\n const blob = new Blob([response.body], { type: contentType });\n saveAs(blob, filename);\n }\n }\n\n private getFileNameFromResponse(response: HttpResponse<ArrayBuffer>): string {\n // attempt to get from response headers\n let fileName = response.headers.get('x-filename') || response.headers.get('filename');\n\n if (!fileName) {\n // attempt to get from content disposition\n const disposition = response.headers.get('content-disposition');\n\n if (disposition) {\n fileName = disposition.split(';')[1].split('=')[1].replace(/\"/g, '');\n }\n }\n\n return fileName || 'download.bin';\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { RestClient } from './rest-client.service';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureService {\n public readonly featureStream = new BehaviorSubject<string[]>([]);\n\n private _enabledFeatures: string[] = [];\n private _isInitialized = false;\n private readonly routePrefix;\n\n constructor(\n @Inject('webApiUrl') private webApiUrl: string,\n private readonly restClient: RestClient\n ) {\n this.routePrefix = `${this.webApiUrl}/common/features`;\n this.checkEnabledFeatures();\n }\n\n /**\n * Gets the enabled features.\n */\n get enabledFeatures(): string[] {\n return this._enabledFeatures;\n }\n\n /**\n * Sets the enabled features.\n */\n private set enabledFeatures(enabledFeatures: string[]) {\n this._enabledFeatures = enabledFeatures;\n this._isInitialized = true;\n\n this.featureStream.next(enabledFeatures);\n }\n\n /**\n * Gets whether features have been initialized\n */\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n /**\n * Checks that the enabled features are set and returns the list.\n *\n * @param name\n * @returns\n */\n async checkEnabledFeatures(): Promise<string[]> {\n if (!this._enabledFeatures) {\n this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);\n }\n\n return this.enabledFeatures;\n }\n\n /**\n * Checks that the specified feature is enabled.\n *\n * @param name\n * @returns\n */\n checkFeatureIsEnabled(name: string): boolean {\n return this._enabledFeatures?.some(p => p === name);\n }\n}\n","// from https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page\nimport { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { NavigationEnd, Params, Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n private history: string[] = [];\n\n constructor(private router: Router, private location: Location) {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n public goBack(): void {\n this.goBackOrDefault('/');\n }\n\n public goBackOrDefault(defaultUrl: string): void {\n if (this.history.length > 0) {\n this.history.pop();\n this.location.back();\n } else {\n this.router.navigateByUrl(defaultUrl);\n }\n }\n\n public setQueryParams(params: Params): void {\n this.router.navigate([], {\n queryParams: params,\n queryParamsHandling: 'merge',\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\nimport { ToastrService } from 'ngx-toastr';\nimport { FeatureService } from '../services/feature.service';\nimport { NavigationService } from '../services/navigation.service';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureGuardService {\n constructor(\n private readonly featureService: FeatureService,\n private readonly navigationService: NavigationService,\n private readonly toastr: ToastrService\n ) {}\n\n public async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const routeFeature = route.data['feature'] as string;\n\n if (!routeFeature) {\n return true;\n }\n\n await this.featureService.checkEnabledFeatures();\n\n if (!this.featureService.checkFeatureIsEnabled(routeFeature)) {\n this.toastr.error(\"Oops! It doesn't look like this feature has been enabled.\");\n\n this.navigationService.goBack();\n\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.localStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.localStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.localStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.localStorage.removeItem(key);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NgbModal, NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalService {\n constructor(private readonly ngbModal: NgbModal) {}\n\n public async showModal<T>(\n component: unknown,\n componentParameters?: unknown,\n modalOptions: NgbModalOptions = { backdrop: 'static' }\n ): Promise<{ result: T; componentInstance: unknown }> {\n const modal = this.ngbModal.open(component, modalOptions);\n const componentInstance = modal.componentInstance;\n\n Object.assign(componentInstance, componentParameters);\n\n let result: T;\n\n try {\n result = await modal.result;\n } catch (error) {\n result = null as unknown as T;\n if (error === undefined) {\n throw 'modal dismiss';\n }\n throw error;\n }\n\n return { result, componentInstance };\n }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ObjectService {\n public toValueObject(obj: object): object {\n const result = Object.getOwnPropertyNames(obj).reduce((p, key) => {\n if (obj[key]) {\n p[key] = obj[key];\n }\n return p;\n }, new Object());\n\n return result;\n }\n\n /**\n * Convert Object to HttpParams\n * @param {object} obj\n * @returns {HttpParams}\n * see: https://stackoverflow.com/questions/45210406/angular-4-3-httpclient-set-params\n */\n public toHttpParams(obj: object): HttpParams {\n const temp = Object.getOwnPropertyNames(obj).reduce(\n (p, key) => (obj[key] == null || obj[key].length === 0 ? p : p.set(key, obj[key])),\n new HttpParams()\n );\n\n return temp;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouteParamService {\n constructor(private readonly route: ActivatedRoute) {}\n\n public getParameterBoolean(params: Params, paramKey: string): boolean | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return !!value;\n }\n\n return null;\n }\n\n public getParameterNumber(params: Params, paramKey: string): number | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return parseInt(value);\n }\n\n return null;\n }\n\n public getParameterValue(params: Params, paramKey: string): string | null {\n const value = params[paramKey];\n return value || null;\n }\n\n public getQueryParameterBoolean(paramKey: string): boolean | null {\n return this.getParameterBoolean(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterNumber(paramKey: string): number | null {\n return this.getParameterNumber(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterValue(paramKey: string): string | null {\n return this.getParameterValue(this.route.snapshot.queryParams, paramKey);\n }\n\n public getRouteParameterBoolean(route: ActivatedRoute, paramKey: string): boolean | null {\n return this.getParameterBoolean(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterNumber(route: ActivatedRoute, paramKey: string): number | null {\n return this.getParameterNumber(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterValue(route: ActivatedRoute, paramKey: string): string | null {\n return this.getParameterValue(route.snapshot.params, paramKey);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { IDeactivatable } from '../models/deactivatable.interface';\n\n@Injectable()\nexport class UnsavedChangesGuard {\n component: IDeactivatable | undefined;\n route: ActivatedRouteSnapshot | undefined;\n\n canDeactivate(component: IDeactivatable): Observable<boolean> | Promise<boolean> | boolean {\n return component.onDeactivate ? component.onDeactivate() : true;\n }\n}\n","/*\n * Public API Surface of ngx-cho-common\n */\n\nexport { AuthCallbackComponent } from './lib/security/auth-callback/auth-callback.component';\nexport { AuthGuardService } from './lib/security/services/auth-guard.service';\nexport { AuthService } from './lib/security/services/auth.service';\nexport { AuthUser } from './lib/security/models/auth-user.model';\nexport { AuthorizationContext } from './lib/security/models/authorization-context.model';\nexport { SECURITY_POLICIES } from './lib/security/security-policies';\nexport { SecurityPolicy } from './lib/security/models/security-policy.model';\nexport { SigninComponent } from './lib/security/signin/signin.component';\nexport { SignoutComponent } from './lib/security/signout/signout.component';\n\nexport { IClientLogEntry } from './lib/logging/models/client-log-entry.interface';\nexport { SeverityLevel } from './lib/logging/models/severity-level.enum';\nexport { ConsoleLoggerSink } from './lib/logging/console-logger.sink';\nexport { ILoggerSinkConfiguration } from './lib/logging/logger-sink-configuration.interface';\nexport { ILoggerSink } from './lib/logging/logger-sink.interface';\nexport { Logger } from './lib/logging/logger.model';\nexport { LoggerService } from './lib/logging/logger.service';\nexport { ServerLoggerSink } from './lib/logging/server-logger.sink';\n\nexport { DateService } from './lib/services/date.service';\nexport { DownloadService } from './lib/services/download.service';\nexport { FeatureGuardService } from './lib/guards/feature-guard.service';\nexport { FeatureService } from './lib/services/feature.service';\nexport { IntervalService, IntervalTimer } from './lib/services/interval.service';\nexport { LocalStorageService } from './lib/services/local-storage.service';\nexport { ModalService } from './lib/services/modal.service';\nexport { NavigationService } from './lib/services/navigation.service';\nexport { ObjectService } from './lib/services/object.service';\nexport { RestClient } from './lib/services/rest-client.service';\nexport { RouteParamService } from './lib/services/route-param.service';\nexport { SessionStorageService } from './lib/services/session-storage.service';\n\nexport { UnsavedChangesGuard } from './lib/guards/unsaved-changes.guard';\n\nexport { IDeactivatable } from './lib/models/deactivatable.interface';\nexport { Uuid } from './lib/models/uuid.model';\n\nexport { NameValueItem } from './lib/types/name-value-item.type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SessionStorageService","i1.AuthService","i2.AuthService","i1","i1.RestClient","i2","i1.FeatureService","i2.NavigationService","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-cho-common.mjs","sources":["../../../projects/ngx-cho-common/src/lib/security/models/auth-user.model.ts","../../../projects/ngx-cho-common/src/lib/security/models/authorization-context.model.ts","../../../projects/ngx-cho-common/src/lib/security/cho-security.config.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.config.ts","../../../projects/ngx-cho-common/src/lib/services/session-storage.service.ts","../../../projects/ngx-cho-common/src/lib/security/services/auth.service.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.html","../../../projects/ngx-cho-common/src/lib/security/services/auth-guard.service.ts","../../../projects/ngx-cho-common/src/lib/security/models/security-policy.model.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.html","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.ts","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.html","../../../projects/ngx-cho-common/src/lib/logging/models/severity-level.enum.ts","../../../projects/ngx-cho-common/src/lib/logging/console-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.model.ts","../../../projects/ngx-cho-common/src/lib/models/uuid.model.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.service.ts","../../../projects/ngx-cho-common/src/lib/services/rest-client.service.ts","../../../projects/ngx-cho-common/src/lib/services/interval.service.ts","../../../projects/ngx-cho-common/src/lib/logging/server-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/services/date.service.ts","../../../projects/ngx-cho-common/src/lib/services/download.service.ts","../../../projects/ngx-cho-common/src/lib/services/feature.service.ts","../../../projects/ngx-cho-common/src/lib/services/navigation.service.ts","../../../projects/ngx-cho-common/src/lib/guards/feature-guard.service.ts","../../../projects/ngx-cho-common/src/lib/services/local-storage.service.ts","../../../projects/ngx-cho-common/src/lib/services/modal.service.ts","../../../projects/ngx-cho-common/src/lib/services/object.service.ts","../../../projects/ngx-cho-common/src/lib/services/route-param.service.ts","../../../projects/ngx-cho-common/src/lib/guards/unsaved-changes.guard.ts","../../../projects/ngx-cho-common/src/public-api.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.ts"],"sourcesContent":["import { User as OidcUser } from 'oidc-client';\nimport { Indexable } from '../../types/indexable.type';\n\nexport class AuthUser {\n public static readonly anonymous = new AuthUser();\n\n public readonly isAuthenticated: boolean;\n public readonly authorizationHeader?: string;\n public readonly firstName?: string;\n public readonly lastName?: string;\n public readonly fullName?: string;\n public readonly name?: string;\n\n /**\n * Constructs a user object from a given oidc user object.\n *\n * @param oidcUser The oidc user object.\n */\n private constructor(private readonly oidcUser: OidcUser | null = null) {\n this.oidcUser = oidcUser;\n\n if (oidcUser == null) {\n this.isAuthenticated = false;\n } else {\n this.isAuthenticated = true;\n this.authorizationHeader = `${oidcUser.token_type} ${oidcUser.access_token}`;\n this.name = oidcUser.profile?.name;\n this.firstName = oidcUser.profile?.given_name;\n this.lastName = oidcUser.profile?.family_name;\n this.fullName = `${this.firstName} ${this.lastName}`;\n }\n }\n\n /**\n * Gets the raw claims associated with the user.\n */\n public get claims(): Indexable {\n return this.oidcUser?.profile || {};\n }\n\n /**\n * Determines whether the currently authenticated user is in any of an\n * array of roles.\n *\n * @param roles An array of required roles.\n * @returns True if the user has any of the required roles, false otherwise.\n */\n public hasAnyRole(...roles: string[]): boolean {\n const roleClaim = this.claims['role'];\n\n if (roleClaim == null) {\n return false;\n }\n\n const claimRoles = Array.isArray(roleClaim) ? roleClaim : [roleClaim];\n return roles.some(r => claimRoles.some(cr => r.toLowerCase() === cr.toLowerCase()));\n }\n\n /**\n * Determines whether the currently authenticated user has a claim,\n * and optionally, whether the claim has a specific value.\n *\n * @param claimType Claim type to match\n * @param claimValue Optional claim value to match\n *\n * @returns True if the user has the required claim, false otherwise.\n */\n public hasClaim(claimType: string, claimValue?: string): boolean {\n const value = this.claims[claimType];\n return !!value && (!claimValue || value === claimValue);\n }\n\n /**\n * Determines whether the currently authenticated user is a customer.\n */\n public get isCustomer(): boolean {\n return this.hasClaim('ch:customer');\n }\n\n /**\n * Determines whether the currently authenticated user is an employee.\n */\n public get isEmployee(): boolean {\n return this.hasAnyRole('ch:Employee');\n }\n\n /**\n * Creates a user object given an oidc user object.\n *\n * @param oidcUser The oidc user object.\n * @returns A user object for the given oidc user object. If no oidc\n * user object is specified or it has expired, returns the anonymous\n * user.\n */\n public static from(oidcUser: OidcUser | null): AuthUser {\n if (oidcUser === null || oidcUser.expired) {\n return AuthUser.anonymous;\n }\n\n return new AuthUser(oidcUser);\n }\n}\n","import { AuthUser } from './auth-user.model';\n\nexport class AuthorizationContext {\n constructor(public readonly user: AuthUser) {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { SecurityPolicy } from './models/security-policy.model';\nimport { UserManagerSettings } from 'oidc-client';\n\nexport interface ChoSecurityConfig {\n policies: SecurityPolicy[];\n userManagerSettings: UserManagerSettings;\n}\n\nexport const CHO_SECURITY_CONFIG = new InjectionToken<ChoSecurityConfig>('ChoSecurityConfig');\n","import { InjectionToken } from '@angular/core';\n\nexport interface ChoCommonConfig {\n webAppUrl: string;\n webApiUrl: string;\n}\n\nexport const CHO_COMMON_CONFIG = new InjectionToken<ChoCommonConfig>('ChoCommonConfig');\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class SessionStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.sessionStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.sessionStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.sessionStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.sessionStorage.removeItem(key);\n }\n}\n","import { AuthUser } from '../models/auth-user.model';\nimport { AuthorizationContext } from '../models/authorization-context.model';\nimport { BehaviorSubject } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { Router } from '@angular/router';\nimport { SecurityPolicy } from '../models/security-policy.model';\nimport { UserManager, UserManagerSettings } from 'oidc-client';\nimport { SessionStorageService } from '../../services/session-storage.service';\nimport { CHO_SECURITY_CONFIG, ChoSecurityConfig } from '../cho-security.config';\nimport { CHO_COMMON_CONFIG, ChoCommonConfig } from '../../../ngx-cho-common.config';\n\n// function getClientSettings(): UserManagerSettings {\n// return {\n// authority: environment.auth.authority,\n// client_id: environment.auth.clientId,\n// redirect_uri: `${environment.webApp}/auth-callback`,\n// post_logout_redirect_uri: environment.webApp,\n// response_type: 'id_token token',\n// scope: `openid profile ${environment.auth.resourceId}`,\n// filterProtocolClaims: true,\n// loadUserInfo: true,\n// automaticSilentRenew: true,\n// silent_redirect_uri: `${environment.webApp}/silent-refresh.html`,\n// //extraQueryParams: { resource: environment.auth.resourceId }\n// // This is useful for testing silent refresh. Don't set this any lower, otherwise\n// // the token authority will likely block you.\n// //accessTokenExpiringNotificationTime: 3545\n// };\n// }\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly returnUrlKey = 'AuthService.returnUrl';\n private readonly userManager = new UserManager(this.choSecurityConfig.userManagerSettings);\n\n private _currentUser = AuthUser.anonymous;\n public readonly userStream = new BehaviorSubject<AuthUser>(AuthUser.anonymous);\n public readonly webAppUrl = this.choCommonConfig.webAppUrl;\n\n constructor(\n @Inject(CHO_COMMON_CONFIG) private readonly choCommonConfig: ChoCommonConfig,\n @Inject(CHO_SECURITY_CONFIG)\n public readonly choSecurityConfig: ChoSecurityConfig,\n private readonly router: Router,\n private readonly sessionStorage: SessionStorageService,\n private readonly spinnerService: NgxSpinnerService\n ) {\n this.userManager.events.addSilentRenewError(err => {\n console.error(err);\n });\n this.checkIsAuthenticated();\n }\n\n /**\n * Gets the current user.\n */\n get currentUser(): AuthUser {\n return this._currentUser;\n }\n\n /**\n * Sets the current user.\n */\n private set currentUser(user: AuthUser) {\n this._currentUser = user;\n\n const authContext = new AuthorizationContext(user);\n this.choSecurityConfig.policies.forEach(p => p.evaluate(authContext));\n\n this.userStream.next(user);\n }\n\n /**\n * Checks that the specified security policy is satisfied.\n *\n * @param name\n * @returns\n */\n checkPolicy(name: string): boolean {\n return this.choSecurityConfig.policies.some(p => p.name === name && p.succeeded);\n }\n\n /**\n * Completes the authentication process, redirecting to the return URL if specified\n * in the start authentication call.\n *\n * @returns A void promise.\n */\n async completeAuthentication(): Promise<void> {\n this.currentUser = AuthUser.from(await this.userManager.signinRedirectCallback());\n\n let returnUrl = this.sessionStorage.getItem<string>(this.returnUrlKey) || this.webAppUrl;\n this.sessionStorage.removeItem(this.returnUrlKey);\n\n if (returnUrl.endsWith('login')) {\n returnUrl = this.webAppUrl;\n }\n\n this.router.navigateByUrl(returnUrl, { replaceUrl: true });\n }\n\n /**\n * Determines whether the user is authenticated.\n */\n async checkIsAuthenticated(): Promise<boolean> {\n this.currentUser = AuthUser.from(await this.userManager.getUser());\n return this.currentUser.isAuthenticated;\n }\n\n /**\n * Signs the current user out of the sytem.\n */\n async signout(): Promise<void> {\n await this.userManager.signoutRedirect();\n\n this.userManager.removeUser();\n this.currentUser = AuthUser.anonymous;\n }\n\n /**\n * Begins the authentication process.\n *\n * @param returnUrl Optional. Destination after authentication is complete.\n * @returns A void promise.\n */\n startAuthentication(returnUrl?: string): Promise<void> {\n if (returnUrl) {\n this.sessionStorage.setItem(this.returnUrlKey, returnUrl);\n }\n\n this.spinnerService.show();\n\n return this.userManager.signinRedirect().then(() => {\n this.spinnerService.hide();\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-auth-callback',\n templateUrl: './auth-callback.component.html',\n})\nexport class AuthCallbackComponent implements OnInit {\n constructor(private authService: AuthService) {}\n\n ngOnInit(): Promise<void> {\n return this.authService.completeAuthentication();\n }\n}\n","","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { AuthService } from './auth.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthGuardService {\n constructor(\n private authService: AuthService,\n private toastr: ToastrService\n ) {}\n\n public async canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<boolean> {\n if (await this.authService.checkIsAuthenticated()) {\n const routePolicy = route.data['policy'] as string;\n\n if (!routePolicy) {\n return true;\n }\n\n if (!this.authService.checkPolicy(routePolicy)) {\n this.toastr.error(\n \"Oops! It doesn't look like you are authorized to access this page.\"\n );\n return false;\n }\n\n return true;\n }\n\n await this.authService.startAuthentication(state.url);\n return false;\n }\n}\n","import { AuthorizationContext } from './authorization-context.model';\n\nexport class SecurityPolicy {\n private _succeeded = false;\n\n constructor(\n public readonly name: string,\n private readonly requirement: (context: AuthorizationContext) => boolean\n ) {}\n\n public get succeeded(): boolean {\n return this._succeeded;\n }\n\n public evaluate(context: AuthorizationContext): boolean {\n this._succeeded = this.requirement(context);\n return this._succeeded;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signin',\n templateUrl: './signin.component.html',\n})\nexport class SigninComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.startAuthentication('/');\n }\n}\n","<section class=\"container-fluid\">\n <p>Redirecting to sign in page...</p>\n</section>\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signout',\n templateUrl: './signout.component.html',\n})\nexport class SignoutComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.signout();\n }\n}\n","<section class=\"container-fluid\">\n <p>Signing out...</p>\n</section>\n","export enum SeverityLevel {\n verbose = 0,\n information = 1,\n warning = 2,\n error = 3,\n critical = 4,\n}\n","import { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { ILoggerSink } from './logger-sink.interface';\n\nexport class ConsoleLoggerSink implements ILoggerSink {\n private consoleMethods = new Map<SeverityLevel, (message: unknown, ...args: unknown[]) => void>(\n [\n [SeverityLevel.verbose, console.log],\n [SeverityLevel.information, console.info || console.log],\n [SeverityLevel.warning, console.warn || console.log],\n [SeverityLevel.error, console.error || console.log],\n [SeverityLevel.critical, console.error || console.log],\n ]\n );\n\n constructor(public readonly name: string, public level: SeverityLevel) {}\n\n write(logEntry: IClientLogEntry): Promise<void> {\n const consoleMethod = this.consoleMethods.get(logEntry.severityLevel) || console.log;\n\n if (logEntry.stackTrace) {\n const error = new Error(logEntry.message);\n error.stack = logEntry.stackTrace;\n\n consoleMethod(error);\n } else {\n consoleMethod(logEntry.message);\n }\n\n return Promise.resolve();\n }\n}\n","export type OptionalLogParameters = {\n stackTrace?: string;\n data?: unknown;\n};\n\nexport abstract class Logger {\n abstract logError(message: string | Error, options?: OptionalLogParameters): void;\n abstract logInfo(message: string, options?: OptionalLogParameters): void;\n abstract logVerbose(message: string, options?: OptionalLogParameters): void;\n abstract logWarning(message: string, options?: OptionalLogParameters): void;\n}\n","export class Uuid {\n public static create(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n let index = 0;\n\n return (\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++])\n );\n }\n\n private static toHex(byte: number): string {\n return (0x100 | byte).toString(16).substr(1);\n }\n}\n","import { ActivatedRoute } from '@angular/router';\nimport { AuthService } from '../security/services/auth.service';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { ILoggerSinkConfiguration } from './logger-sink-configuration.interface';\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport { Logger, OptionalLogParameters } from './logger.model';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { Uuid } from '../models/uuid.model';\nimport { ZonedDateTime } from '@js-joda/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LoggerService implements Logger {\n static readonly overrideQueryStringRegex = /log\\.(\\w+)/;\n\n readonly sessionId = Uuid.create();\n readonly sinks = new Array<ILoggerSink>();\n\n minimumLevel = SeverityLevel.error;\n\n constructor(\n @Inject('loggerSinkConfiguration')\n private loggerSinkConfiguration: ILoggerSinkConfiguration[],\n private readonly activatedRoute: ActivatedRoute,\n private readonly authService: AuthService,\n private readonly injector: Injector\n ) {\n this.readConfiguration();\n\n this.activatedRoute.queryParams.subscribe(async params => {\n const isDebug = this.authService.checkPolicy('debug');\n\n if (isDebug) {\n let updated = false;\n\n for (const key of Object.keys(params)) {\n const match = key.match(LoggerService.overrideQueryStringRegex);\n\n if (match?.length === 2) {\n const [paramName, sinkName] = match;\n const sink = this.sinks.find(s => s.name === sinkName);\n\n if (!sink) {\n throw new Error(`Cannot find sink with name '${sinkName}'.`);\n }\n\n const value = params[paramName];\n let level: SeverityLevel;\n\n if (!value) {\n throw new Error(\n `Missing value for query string parameter '${paramName}'.`\n );\n } else if (!(level = parseInt(value))) {\n level =\n SeverityLevel[value.toLowerCase() as keyof typeof SeverityLevel];\n }\n\n sink.level = level;\n updated = true;\n\n console.log(`Logging sink '${sinkName}' set to '${value}'.`);\n }\n }\n\n if (updated) {\n this.refreshSinks();\n }\n }\n });\n }\n\n logError(message: string | Error, options?: OptionalLogParameters): void {\n if (typeof message === 'string') {\n this.logWrite(SeverityLevel.error, message, options);\n return;\n }\n\n const error = message as Error;\n this.logWrite(\n SeverityLevel.error,\n error.message,\n Object.assign({ stackTrace: error.stack }, options)\n );\n }\n\n logInfo(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.information, message, options);\n }\n\n logVerbose(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.verbose, message, options);\n }\n\n logWarning(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.warning, message, options);\n }\n\n private logWrite(level: SeverityLevel, message: string, options?: OptionalLogParameters): void {\n if (level < this.minimumLevel) {\n return;\n }\n\n const logEntry = {\n createdDateTime: ZonedDateTime.now().withFixedOffsetZone().toString(),\n sessionId: this.sessionId,\n severityLevel: level,\n message: message,\n stackTrace: options?.stackTrace,\n url: window.location.href,\n userAgent: navigator.userAgent,\n jsonData: options?.data ? JSON.stringify(options.data) : undefined,\n };\n\n for (const sink of this.sinks) {\n if (level >= sink.level) {\n try {\n sink.write(logEntry);\n } catch (error) {\n this.logError(`Error writing log entry to sink '${sink.name}'.`, {\n stackTrace: (error as Error).stack,\n data: { sink: sink.name },\n });\n }\n }\n }\n }\n\n private readConfiguration(): void {\n const sinkConfigs = this.loggerSinkConfiguration;\n\n if (sinkConfigs) {\n for (const sinkConfig of sinkConfigs) {\n this.requiredProperty(sinkConfig, 'name');\n this.requiredProperty(sinkConfig, 'type');\n this.requiredProperty(sinkConfig, 'level');\n\n const sink = new sinkConfig.type(\n sinkConfig.name,\n sinkConfig.level,\n sinkConfig.args,\n this,\n this.injector\n );\n\n this.sinks.push(sink);\n }\n\n this.refreshSinks();\n }\n }\n\n private refreshSinks(): void {\n this.minimumLevel = this.sinks.reduce(\n (l, s) => Math.min(l, s.level),\n SeverityLevel.critical\n );\n }\n\n private requiredProperty(obj: unknown, propertyName: string): void {\n if ((obj as never)[propertyName] == null) {\n throw new Error(\n `Missing required property '${propertyName}' in the logger section of environment.ts.`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { lastValueFrom, Observable, retry, RetryConfig, take } from 'rxjs';\n\ntype RequestParameters = {\n body?: unknown;\n queryParameters?: {};\n apiVersion?: {};\n headers?: {};\n cacheLifetimeSeconds?: number;\n retry?: RetryConfig;\n showSpinner?: {};\n};\n\ntype DeleteRequestParameters = Omit<RequestParameters, 'body' | 'cacheLifetimeSeconds'>;\ntype GetRequestParameters = Omit<RequestParameters, 'body'>;\n\n@Injectable({ providedIn: 'any' })\nexport class RestClient {\n private readonly defaultRetry = { count: 0, delay: 1000 };\n\n constructor(private readonly httpClient: HttpClient) {}\n\n /**\n * Sends a delete request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public delete(url: string, options?: DeleteRequestParameters): Promise<void> {\n return lastValueFrom(this.request('DELETE', url, options));\n }\n\n /**\n * Retrieves data from the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public get<T>(url: string, options?: GetRequestParameters): Promise<T> {\n return lastValueFrom(this.request('GET', url, options));\n }\n\n /**\n * Sends a patch request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public patch<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PATCH', url, options));\n }\n\n /**\n * Sends a post request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public post<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('POST', url, options));\n }\n\n /**\n * Sends a put request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public put<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PUT', url, options));\n }\n\n /**\n * Sends a request to the specified REST service\n *\n * @param method DELETE, GET, POST, PUT, or PATCH\n * @param url The service endpoint\n * @param options Additional options\n */\n public request<T>(\n method: 'DELETE',\n url: string,\n options?: DeleteRequestParameters\n ): Observable<T>;\n public request<T>(method: 'GET', url: string, options?: GetRequestParameters): Observable<T>;\n public request<T>(\n method: 'POST' | 'PUT' | 'PATCH',\n url: string,\n options?: RequestParameters\n ): Observable<T>;\n\n public request<T>(\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<T> {\n return this.httpClient\n .request<T>(method, url, {\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n *\n * @param url\n * @param options\n * @returns\n */\n public getResponse<T>(\n method: 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<HttpResponse<T>> {\n return this.httpClient\n .request<T>(method, url, {\n observe: 'response',\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n * Creates request headers based on the provided options.\n *\n * @param options\n * @returns\n */\n private createRequestHeaders(options?: RequestParameters): HttpHeaders {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const headers: any = Object.assign(\n {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n options?.headers\n );\n\n if (options?.apiVersion) {\n const versionString = `; version=${options.apiVersion}`;\n\n headers.Accept += versionString;\n headers['Content-Type'] += versionString;\n }\n\n if (options?.showSpinner === false) {\n headers['x-spinner'] = 'false';\n }\n\n if (options?.cacheLifetimeSeconds) {\n headers['x-cache-ttl'] = options?.cacheLifetimeSeconds;\n }\n\n return new HttpHeaders(headers);\n }\n\n /**\n * Converts one or more objects to an HttpParams object.\n *\n * @param sources The objects to convert\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private createRequestParams(...sources: any[]): HttpParams {\n let params = new HttpParams();\n\n for (const source of sources) {\n if (source == null) {\n continue;\n }\n\n for (const key of Object.keys(source)) {\n const value = source[key];\n\n if (value != null) {\n params = params.set(key, value.toString());\n }\n }\n }\n\n return params;\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport type IntervalOptions = {\n fireImmediately: FireImmediately;\n blurInterval?: number;\n hiddenInterval?: number;\n};\n\ntype Action = () => Promise<unknown>;\n\nexport enum FireImmediately {\n never,\n whenShown,\n whenFocused,\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IntervalService {\n static readonly defaultOptions: IntervalOptions = { fireImmediately: FireImmediately.never };\n\n create(\n action: Action,\n interval: number,\n options: IntervalOptions = IntervalService.defaultOptions\n ): IntervalTimer {\n const timer = new IntervalTimer(action, interval, options);\n timer.initialize();\n\n return timer;\n }\n}\n\nexport class IntervalTimer {\n $handle?: number;\n currentInterval = 0;\n isStopped = true;\n\n constructor(\n private readonly action: Action,\n private readonly interval: number,\n private readonly options: IntervalOptions\n ) {}\n\n initialize(): void {\n if (this.options.hiddenInterval != null) {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.onHidden();\n } else {\n this.onShown();\n }\n });\n }\n\n if (this.options.blurInterval != null) {\n window.addEventListener('blur', () => this.onBlur());\n window.addEventListener('focus', () => this.onFocus());\n }\n }\n\n start(): void {\n if (this.isStopped) {\n if (!document.hidden) {\n this.isStopped = false;\n this.onShown();\n } else {\n this.setInterval(this.interval);\n this.isStopped = false;\n }\n }\n }\n\n stop(): void {\n this.setInterval(0);\n this.isStopped = true;\n }\n\n private async callActionAndScheduleNext(nextInterval: number): Promise<void> {\n this.setInterval(0); // pause while the action runs\n await this.action();\n this.setInterval(nextInterval);\n }\n\n private onBlur(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.blurInterval);\n }\n\n private onFocus(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options?.fireImmediately === FireImmediately.whenFocused) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private onHidden(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.hiddenInterval);\n }\n\n private onShown(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options.fireImmediately === FireImmediately.whenShown) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private setInterval(interval?: number): void {\n if (this.$handle) {\n if (interval === this.currentInterval) {\n return;\n }\n\n window.clearTimeout(this.$handle);\n this.$handle = undefined;\n }\n\n if (!interval) {\n return;\n }\n\n this.$handle = window.setTimeout(() => this.callActionAndScheduleNext(interval), interval);\n this.currentInterval = interval;\n }\n}\n","import { Injector } from '@angular/core';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { Logger } from './logger.model';\nimport { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { RestClient } from '../services/rest-client.service';\nimport { IntervalTimer, IntervalService } from '../services/interval.service';\n\ntype ServerLoggerArguments = {\n headers?: Record<string, unknown>;\n url: string;\n};\n\nexport class ServerLoggerSink implements ILoggerSink {\n private readonly retryCount = 10;\n private readonly postFrequency = 15 * 1000 /*15 seconds*/;\n\n $interval: IntervalTimer;\n\n entryBuffer = new Array<IClientLogEntry>();\n errorCount = 0;\n\n constructor(\n public readonly name: string,\n public level: SeverityLevel,\n public readonly args: ServerLoggerArguments,\n private readonly logger: Logger,\n private readonly injector: Injector\n ) {\n if (!args?.url) {\n throw new Error(`Missing required argument 'url' for sink ${this.constructor.name}.`);\n }\n\n const intervalService = injector.get<IntervalService>(IntervalService);\n this.$interval = intervalService.create(() => this.flush(), this.postFrequency);\n\n this.$interval.start();\n }\n\n write(logEntry: IClientLogEntry): void {\n this.entryBuffer.push(logEntry);\n }\n\n private async flush(): Promise<void> {\n if (this.entryBuffer.length === 0) {\n return;\n }\n\n const mark = this.entryBuffer.length;\n\n try {\n await this.postLogEntries(this.entryBuffer);\n\n this.entryBuffer = this.entryBuffer.slice(mark);\n this.errorCount = 0;\n } catch (error) {\n this.logger.logError(error as Error);\n\n if (this.errorCount++ > this.retryCount) {\n this.$interval.stop();\n throw new Error(\n `Error posting log entries to server. Retried ${this.retryCount} times and giving up.`\n );\n }\n }\n }\n\n private postLogEntries(entries: IClientLogEntry[]): Promise<void> {\n const restClient = this.injector.get<RestClient>(RestClient);\n const restOptions = Object.assign({}, this.args, {\n body: entries,\n showSpinner: false,\n });\n\n return restClient.post(this.args.url, restOptions);\n }\n}\n","import { Injectable } from '@angular/core';\nimport moment from 'moment';\n\nimport { NameValueItem } from '../types/name-value-item.type';\n\n@Injectable({ providedIn: 'root' })\nexport class DateService {\n public getMonthItems(startMonth = 1, endMonth = 12): NameValueItem<number>[] {\n const items: NameValueItem<number>[] = [];\n const d = moment().startOf('year');\n let i = startMonth;\n\n while (i <= endMonth) {\n d.set('month', i - 1);\n items.push({ value: i, name: d.format('MMMM') });\n i++;\n }\n\n return items;\n }\n\n public getYearItems(startYear?: number, endYear?: number): NameValueItem<number>[] {\n startYear = startYear || moment().year();\n endYear = endYear || moment().year();\n\n const items: NameValueItem<number>[] = [];\n let i = startYear;\n\n while (i <= endYear) {\n items.push({ value: i, name: i.toString() });\n i++;\n }\n\n return items;\n }\n\n public toDateString(input: moment.MomentInput): string {\n return moment(input).format('yyyy-MM-DD');\n }\n\n public toISOString(input: moment.MomentInput): string {\n return moment(input).toISOString();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Observable, shareReplay } from 'rxjs';\nimport { saveAs } from 'file-saver';\n\n@Injectable({ providedIn: 'any' })\nexport class DownloadService {\n constructor(private httpClient: HttpClient) {}\n\n private octetStreamMime = 'application/octet-stream';\n\n public downloadFile(url: string, params?: HttpParams): Observable<HttpResponse<ArrayBuffer>> {\n const download$ = this.httpClient\n .get(url, {\n responseType: 'arraybuffer',\n observe: 'response',\n params: params,\n })\n .pipe(shareReplay());\n\n download$.subscribe(r => this.processDownload(r));\n\n return download$;\n }\n\n private processDownload(response: HttpResponse<ArrayBuffer>): void {\n const filename = this.getFileNameFromResponse(response);\n const contentType = response.headers.get('content-type') || this.octetStreamMime;\n\n if (response.body) {\n const blob = new Blob([response.body], { type: contentType });\n saveAs(blob, filename);\n }\n }\n\n private getFileNameFromResponse(response: HttpResponse<ArrayBuffer>): string {\n // attempt to get from response headers\n let fileName = response.headers.get('x-filename') || response.headers.get('filename');\n\n if (!fileName) {\n // attempt to get from content disposition\n const disposition = response.headers.get('content-disposition');\n\n if (disposition) {\n fileName = disposition.split(';')[1].split('=')[1].replace(/\"/g, '');\n }\n }\n\n return fileName || 'download.bin';\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { RestClient } from './rest-client.service';\nimport { CHO_COMMON_CONFIG, ChoCommonConfig } from '../../ngx-cho-common.config';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureService {\n public readonly featureStream = new BehaviorSubject<string[]>([]);\n\n private _enabledFeatures: string[] = [];\n private _isInitialized = false;\n private readonly routePrefix;\n\n constructor(\n @Inject(CHO_COMMON_CONFIG) private choCommonConfig: ChoCommonConfig,\n private readonly restClient: RestClient\n ) {\n this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;\n this.checkEnabledFeatures();\n }\n\n /**\n * Gets the enabled features.\n */\n get enabledFeatures(): string[] {\n return this._enabledFeatures;\n }\n\n /**\n * Sets the enabled features.\n */\n private set enabledFeatures(enabledFeatures: string[]) {\n this._enabledFeatures = enabledFeatures;\n this._isInitialized = true;\n\n this.featureStream.next(enabledFeatures);\n }\n\n /**\n * Gets whether features have been initialized\n */\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n /**\n * Checks that the enabled features are set and returns the list.\n *\n * @param name\n * @returns\n */\n async checkEnabledFeatures(): Promise<string[]> {\n if (this.isInitialized) {\n this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);\n }\n\n return this.enabledFeatures;\n }\n\n /**\n * Checks that the specified feature is enabled.\n *\n * @param name\n * @returns\n */\n checkFeatureIsEnabled(name: string): boolean {\n return this._enabledFeatures?.some(p => p === name);\n }\n}\n","// from https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page\nimport { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { NavigationEnd, Params, Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n private history: string[] = [];\n\n constructor(private router: Router, private location: Location) {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n public goBack(): void {\n this.goBackOrDefault('/');\n }\n\n public goBackOrDefault(defaultUrl: string): void {\n if (this.history.length > 0) {\n this.history.pop();\n this.location.back();\n } else {\n this.router.navigateByUrl(defaultUrl);\n }\n }\n\n public setQueryParams(params: Params): void {\n this.router.navigate([], {\n queryParams: params,\n queryParamsHandling: 'merge',\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\nimport { ToastrService } from 'ngx-toastr';\nimport { FeatureService } from '../services/feature.service';\nimport { NavigationService } from '../services/navigation.service';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureGuardService {\n constructor(\n private readonly featureService: FeatureService,\n private readonly navigationService: NavigationService,\n private readonly toastr: ToastrService\n ) {}\n\n public async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const routeFeature = route.data['feature'] as string;\n\n if (!routeFeature) {\n return true;\n }\n\n await this.featureService.checkEnabledFeatures();\n\n if (!this.featureService.checkFeatureIsEnabled(routeFeature)) {\n this.toastr.error(\"Oops! It doesn't look like this feature has been enabled.\");\n\n this.navigationService.goBack();\n\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.localStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.localStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.localStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.localStorage.removeItem(key);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NgbModal, NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalService {\n constructor(private readonly ngbModal: NgbModal) {}\n\n public async showModal<T>(\n component: unknown,\n componentParameters?: unknown,\n modalOptions: NgbModalOptions = { backdrop: 'static' }\n ): Promise<{ result: T; componentInstance: unknown }> {\n const modal = this.ngbModal.open(component, modalOptions);\n const componentInstance = modal.componentInstance;\n\n Object.assign(componentInstance, componentParameters);\n\n let result: T;\n\n try {\n result = await modal.result;\n } catch (error) {\n result = null as unknown as T;\n if (error === undefined) {\n throw 'modal dismiss';\n }\n throw error;\n }\n\n return { result, componentInstance };\n }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ObjectService {\n public toValueObject(obj: object): object {\n const result = Object.getOwnPropertyNames(obj).reduce((p, key) => {\n if (obj[key]) {\n p[key] = obj[key];\n }\n return p;\n }, new Object());\n\n return result;\n }\n\n /**\n * Convert Object to HttpParams\n * @param {object} obj\n * @returns {HttpParams}\n * see: https://stackoverflow.com/questions/45210406/angular-4-3-httpclient-set-params\n */\n public toHttpParams(obj: object): HttpParams {\n const temp = Object.getOwnPropertyNames(obj).reduce(\n (p, key) => (obj[key] == null || obj[key].length === 0 ? p : p.set(key, obj[key])),\n new HttpParams()\n );\n\n return temp;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouteParamService {\n constructor(private readonly route: ActivatedRoute) {}\n\n public getParameterBoolean(params: Params, paramKey: string): boolean | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return !!value;\n }\n\n return null;\n }\n\n public getParameterNumber(params: Params, paramKey: string): number | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return parseInt(value);\n }\n\n return null;\n }\n\n public getParameterValue(params: Params, paramKey: string): string | null {\n const value = params[paramKey];\n return value || null;\n }\n\n public getQueryParameterBoolean(paramKey: string): boolean | null {\n return this.getParameterBoolean(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterNumber(paramKey: string): number | null {\n return this.getParameterNumber(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterValue(paramKey: string): string | null {\n return this.getParameterValue(this.route.snapshot.queryParams, paramKey);\n }\n\n public getRouteParameterBoolean(route: ActivatedRoute, paramKey: string): boolean | null {\n return this.getParameterBoolean(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterNumber(route: ActivatedRoute, paramKey: string): number | null {\n return this.getParameterNumber(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterValue(route: ActivatedRoute, paramKey: string): string | null {\n return this.getParameterValue(route.snapshot.params, paramKey);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { IDeactivatable } from '../models/deactivatable.interface';\n\n@Injectable()\nexport class UnsavedChangesGuard {\n component: IDeactivatable | undefined;\n route: ActivatedRouteSnapshot | undefined;\n\n canDeactivate(component: IDeactivatable): Observable<boolean> | Promise<boolean> | boolean {\n return component.onDeactivate ? component.onDeactivate() : true;\n }\n}\n","/*\n * Public API Surface of ngx-cho-common\n */\n\nexport { AuthCallbackComponent } from './lib/security/auth-callback/auth-callback.component';\nexport { AuthGuardService } from './lib/security/services/auth-guard.service';\nexport { AuthService } from './lib/security/services/auth.service';\nexport { AuthUser } from './lib/security/models/auth-user.model';\nexport { AuthorizationContext } from './lib/security/models/authorization-context.model';\nexport { SecurityPolicy } from './lib/security/models/security-policy.model';\nexport { SigninComponent } from './lib/security/signin/signin.component';\nexport { SignoutComponent } from './lib/security/signout/signout.component';\n\nexport { CHO_COMMON_CONFIG, ChoCommonConfig } from './ngx-cho-common.config';\nexport { CHO_SECURITY_CONFIG, ChoSecurityConfig } from './lib/security/cho-security.config';\n\nexport { IClientLogEntry } from './lib/logging/models/client-log-entry.interface';\nexport { SeverityLevel } from './lib/logging/models/severity-level.enum';\nexport { ConsoleLoggerSink } from './lib/logging/console-logger.sink';\nexport { ILoggerSinkConfiguration } from './lib/logging/logger-sink-configuration.interface';\nexport { ILoggerSink } from './lib/logging/logger-sink.interface';\nexport { Logger } from './lib/logging/logger.model';\nexport { LoggerService } from './lib/logging/logger.service';\nexport { ServerLoggerSink } from './lib/logging/server-logger.sink';\n\nexport { DateService } from './lib/services/date.service';\nexport { DownloadService } from './lib/services/download.service';\nexport { FeatureGuardService } from './lib/guards/feature-guard.service';\nexport { FeatureService } from './lib/services/feature.service';\nexport { IntervalService, IntervalTimer } from './lib/services/interval.service';\nexport { LocalStorageService } from './lib/services/local-storage.service';\nexport { ModalService } from './lib/services/modal.service';\nexport { NavigationService } from './lib/services/navigation.service';\nexport { ObjectService } from './lib/services/object.service';\nexport { RestClient } from './lib/services/rest-client.service';\nexport { RouteParamService } from './lib/services/route-param.service';\nexport { SessionStorageService } from './lib/services/session-storage.service';\n\nexport { UnsavedChangesGuard } from './lib/guards/unsaved-changes.guard';\n\nexport { IDeactivatable } from './lib/models/deactivatable.interface';\nexport { Uuid } from './lib/models/uuid.model';\n\nexport { NameValueItem } from './lib/types/name-value-item.type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SessionStorageService","i1.AuthService","i2.AuthService","i1","i1.RestClient","i2","i1.FeatureService","i2.NavigationService","i3"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { SecurityPolicy } from './models/security-policy.model';
|
|
3
|
+
import { UserManagerSettings } from 'oidc-client';
|
|
4
|
+
export interface ChoSecurityConfig {
|
|
5
|
+
policies: SecurityPolicy[];
|
|
6
|
+
userManagerSettings: UserManagerSettings;
|
|
7
|
+
}
|
|
8
|
+
export declare const CHO_SECURITY_CONFIG: InjectionToken<ChoSecurityConfig>;
|
|
@@ -2,14 +2,13 @@ import { AuthUser } from '../models/auth-user.model';
|
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
3
|
import { NgxSpinnerService } from 'ngx-spinner';
|
|
4
4
|
import { Router } from '@angular/router';
|
|
5
|
-
import { SecurityPolicy } from '../models/security-policy.model';
|
|
6
|
-
import { UserManagerSettings } from 'oidc-client';
|
|
7
5
|
import { SessionStorageService } from '../../services/session-storage.service';
|
|
6
|
+
import { ChoSecurityConfig } from '../cho-security.config';
|
|
7
|
+
import { ChoCommonConfig } from '../../../ngx-cho-common.config';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export declare class AuthService {
|
|
10
|
-
readonly
|
|
11
|
-
|
|
12
|
-
private readonly userManagerSettings;
|
|
10
|
+
private readonly choCommonConfig;
|
|
11
|
+
readonly choSecurityConfig: ChoSecurityConfig;
|
|
13
12
|
private readonly router;
|
|
14
13
|
private readonly sessionStorage;
|
|
15
14
|
private readonly spinnerService;
|
|
@@ -17,7 +16,8 @@ export declare class AuthService {
|
|
|
17
16
|
private readonly userManager;
|
|
18
17
|
private _currentUser;
|
|
19
18
|
readonly userStream: BehaviorSubject<AuthUser>;
|
|
20
|
-
|
|
19
|
+
readonly webAppUrl: string;
|
|
20
|
+
constructor(choCommonConfig: ChoCommonConfig, choSecurityConfig: ChoSecurityConfig, router: Router, sessionStorage: SessionStorageService, spinnerService: NgxSpinnerService);
|
|
21
21
|
/**
|
|
22
22
|
* Gets the current user.
|
|
23
23
|
*/
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { BehaviorSubject } from 'rxjs';
|
|
2
2
|
import { RestClient } from './rest-client.service';
|
|
3
|
+
import { ChoCommonConfig } from '../../ngx-cho-common.config';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class FeatureService {
|
|
5
|
-
private
|
|
6
|
+
private choCommonConfig;
|
|
6
7
|
private readonly restClient;
|
|
7
8
|
readonly featureStream: BehaviorSubject<string[]>;
|
|
8
9
|
private _enabledFeatures;
|
|
9
10
|
private _isInitialized;
|
|
10
11
|
private readonly routePrefix;
|
|
11
|
-
constructor(
|
|
12
|
+
constructor(choCommonConfig: ChoCommonConfig, restClient: RestClient);
|
|
12
13
|
/**
|
|
13
14
|
* Gets the enabled features.
|
|
14
15
|
*/
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -3,10 +3,11 @@ export { AuthGuardService } from './lib/security/services/auth-guard.service';
|
|
|
3
3
|
export { AuthService } from './lib/security/services/auth.service';
|
|
4
4
|
export { AuthUser } from './lib/security/models/auth-user.model';
|
|
5
5
|
export { AuthorizationContext } from './lib/security/models/authorization-context.model';
|
|
6
|
-
export { SECURITY_POLICIES } from './lib/security/security-policies';
|
|
7
6
|
export { SecurityPolicy } from './lib/security/models/security-policy.model';
|
|
8
7
|
export { SigninComponent } from './lib/security/signin/signin.component';
|
|
9
8
|
export { SignoutComponent } from './lib/security/signout/signout.component';
|
|
9
|
+
export { CHO_COMMON_CONFIG, ChoCommonConfig } from './ngx-cho-common.config';
|
|
10
|
+
export { CHO_SECURITY_CONFIG, ChoSecurityConfig } from './lib/security/cho-security.config';
|
|
10
11
|
export { IClientLogEntry } from './lib/logging/models/client-log-entry.interface';
|
|
11
12
|
export { SeverityLevel } from './lib/logging/models/severity-level.enum';
|
|
12
13
|
export { ConsoleLoggerSink } from './lib/logging/console-logger.sink';
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
export const SECURITY_POLICIES = new InjectionToken('');
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktcG9saWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY2hvLWNvbW1vbi9zcmMvbGliL3NlY3VyaXR5L3NlY3VyaXR5LXBvbGljaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQW1CLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IFNFQ1VSSVRZX1BPTElDSUVTID0gbmV3IEluamVjdGlvblRva2VuPFNlY3VyaXR5UG9saWN5W10+KCcnKTtcbiJdfQ==
|