@huntsman-cancer-institute/user 17.11.7 → 17.13.0

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/index.mjs CHANGED
@@ -13,8 +13,8 @@ export { PermissionEntity } from "./authorization/permission.entity";
13
13
  /**
14
14
  * The opaque tokens for service configuration.
15
15
  */
16
- export { AUTHENTICATED_USER_ENDPOINT } from "./user.service";
16
+ export { AUTHENTICATED_USER_ENDPOINT, PERMISSIONS_USER_ENDPOINT } from "./user.service";
17
17
  export { UserService } from "./user.service";
18
18
  export { RoleCheckDirective } from "./authorization/role-check.directive";
19
19
  export { RoleCheckUnlessNullDirective } from "./authorization/role-check-unless-null.directive";
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ3RELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFBO0FBRWxFOztHQUVHO0FBQ0gsT0FBTyxFQUNMLDJCQUEyQixFQUM1QixNQUFNLGdCQUFnQixDQUFBO0FBRXZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUxQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQSBiYXJyZWwgZmlsZSBmb3IgdGhlIEhDSSBuZzIgdXNlciBwYWNrYWdlLlxyXG4gKlxyXG4gKiBAc2luY2UgMS4wLjBcclxuICovXHJcbmV4cG9ydCB7VXNlck1vZHVsZX0gZnJvbSBcIi4vdXNlci5tb2R1bGVcIlxyXG5leHBvcnQge1VzZXJFbnRpdHl9IGZyb20gXCIuL3VzZXIuZW50aXR5XCJcclxuZXhwb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUuZW50aXR5XCJcclxuZXhwb3J0IHtQZXJtaXNzaW9uRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3Blcm1pc3Npb24uZW50aXR5XCJcclxuXHJcbi8qKlxyXG4gKiBUaGUgb3BhcXVlIHRva2VucyBmb3Igc2VydmljZSBjb25maWd1cmF0aW9uLlxyXG4gKi9cclxuZXhwb3J0IHtcclxuICBBVVRIRU5USUNBVEVEX1VTRVJfRU5EUE9JTlRcclxufSBmcm9tIFwiLi91c2VyLnNlcnZpY2VcIlxyXG5cclxuZXhwb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vdXNlci5zZXJ2aWNlXCJcclxuXHJcbmV4cG9ydCB7Um9sZUNoZWNrRGlyZWN0aXZlfSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2suZGlyZWN0aXZlXCI7XHJcbmV4cG9ydCB7Um9sZUNoZWNrVW5sZXNzTnVsbERpcmVjdGl2ZX0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi9yb2xlLWNoZWNrLXVubGVzcy1udWxsLmRpcmVjdGl2ZVwiO1xyXG5cclxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ3RELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFBO0FBRWxFOztHQUVHO0FBQ0gsT0FBTyxFQUNOLDJCQUEyQixFQUFFLHlCQUF5QixFQUN0RCxNQUFNLGdCQUFnQixDQUFBO0FBRXZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUxQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQSBiYXJyZWwgZmlsZSBmb3IgdGhlIEhDSSBuZzIgdXNlciBwYWNrYWdlLlxyXG4gKlxyXG4gKiBAc2luY2UgMS4wLjBcclxuICovXHJcbmV4cG9ydCB7VXNlck1vZHVsZX0gZnJvbSBcIi4vdXNlci5tb2R1bGVcIlxyXG5leHBvcnQge1VzZXJFbnRpdHl9IGZyb20gXCIuL3VzZXIuZW50aXR5XCJcclxuZXhwb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUuZW50aXR5XCJcclxuZXhwb3J0IHtQZXJtaXNzaW9uRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3Blcm1pc3Npb24uZW50aXR5XCJcclxuXHJcbi8qKlxyXG4gKiBUaGUgb3BhcXVlIHRva2VucyBmb3Igc2VydmljZSBjb25maWd1cmF0aW9uLlxyXG4gKi9cclxuZXhwb3J0IHtcclxuIEFVVEhFTlRJQ0FURURfVVNFUl9FTkRQT0lOVCwgUEVSTUlTU0lPTlNfVVNFUl9FTkRQT0lOVFxyXG59IGZyb20gXCIuL3VzZXIuc2VydmljZVwiXHJcblxyXG5leHBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi91c2VyLnNlcnZpY2VcIlxyXG5cclxuZXhwb3J0IHtSb2xlQ2hlY2tEaXJlY3RpdmV9IGZyb20gXCIuL2F1dGhvcml6YXRpb24vcm9sZS1jaGVjay5kaXJlY3RpdmVcIjtcclxuZXhwb3J0IHtSb2xlQ2hlY2tVbmxlc3NOdWxsRGlyZWN0aXZlfSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2stdW5sZXNzLW51bGwuZGlyZWN0aXZlXCI7XHJcblxyXG4iXX0=
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
3
3
  */
4
- import { Injectable, InjectionToken, Inject, isDevMode } from "@angular/core";
4
+ import { Injectable, InjectionToken, Inject, isDevMode, Optional } from "@angular/core";
5
5
  import { HttpClient, HttpHeaders } from "@angular/common/http";
6
6
  import { of, throwError } from "rxjs";
7
7
  import { catchError, map } from "rxjs/operators";
@@ -11,6 +11,7 @@ import { PermissionEntity } from "./authorization/permission.entity";
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@angular/common/http";
13
13
  export let AUTHENTICATED_USER_ENDPOINT = new InjectionToken("authenticated_user_url");
14
+ export let PERMISSIONS_USER_ENDPOINT = new InjectionToken("permissions_user_url");
14
15
  /**
15
16
  * @since 1.0.0
16
17
  */
@@ -21,9 +22,10 @@ export class UserService {
21
22
  * @type {string}
22
23
  */
23
24
  static { this.GENERIC_ERR_MSG = "Server error"; }
24
- constructor(_http, _authenticationUserEndpoint) {
25
+ constructor(_http, _authenticationUserEndpoint, _permissionsUserEndpoint) {
25
26
  this._http = _http;
26
27
  this._authenticationUserEndpoint = _authenticationUserEndpoint;
28
+ this._permissionsUserEndpoint = _permissionsUserEndpoint;
27
29
  this._authenticatedUser = null;
28
30
  }
29
31
  /**
@@ -81,12 +83,19 @@ export class UserService {
81
83
  }
82
84
  return new UserEntity(userJson.idUser, userJson.username, roles, userJson.firstname, userJson.lastname, userJson.href);
83
85
  }
84
- getPermissions(governorClass, governorId, governedClass) {
86
+ getPermissions(governorClass, governorId, governedClass, permissionsUserEndpoint) {
87
+ // Keep the original default user end point url as "/core/api/user/permissions/" for the current usages in CORE app.
88
+ let permissionsUserUrl = this._permissionsUserEndpoint ? this._permissionsUserEndpoint
89
+ : permissionsUserEndpoint ? permissionsUserEndpoint : "/core/api/user/permissions/";
90
+ permissionsUserUrl = permissionsUserUrl.endsWith("/") ? permissionsUserUrl : permissionsUserUrl + "/";
91
+ if (isDevMode() && console && console.debug) {
92
+ console.debug("_permissionsUserEndpoint: " + permissionsUserUrl);
93
+ }
85
94
  let headers = new HttpHeaders()
86
95
  .set("SecurityGovernorClass", governorClass).set("SecurityGovernorId", String(governorId));
87
- return this._http.get("/core/api/user/permissions/" + governedClass, { headers: headers });
96
+ return this._http.get(permissionsUserUrl + governedClass, { headers: headers });
88
97
  }
89
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService, deps: [{ token: i1.HttpClient }, { token: AUTHENTICATED_USER_ENDPOINT }], target: i0.ɵɵFactoryTarget.Injectable }); }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService, deps: [{ token: i1.HttpClient }, { token: AUTHENTICATED_USER_ENDPOINT }, { token: PERMISSIONS_USER_ENDPOINT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
90
99
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService }); }
91
100
  }
92
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService, decorators: [{
@@ -94,5 +103,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
94
103
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
95
104
  type: Inject,
96
105
  args: [AUTHENTICATED_USER_ENDPOINT]
106
+ }] }, { type: undefined, decorators: [{
107
+ type: Optional
108
+ }, {
109
+ type: Inject,
110
+ args: [PERMISSIONS_USER_ENDPOINT]
97
111
  }] }] });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdXNlci9zcmMvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUMsVUFBVSxFQUFnQixXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRSxPQUFPLEVBQWEsRUFBRSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOzs7QUFFbkUsTUFBTSxDQUFDLElBQUksMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQVMsd0JBQXdCLENBQUMsQ0FBQztBQUU5Rjs7R0FFRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBQ3RCOzs7O09BSUc7YUFDVyxvQkFBZSxHQUFXLGNBQWMsQUFBekIsQ0FBMEI7SUFJdkQsWUFBb0IsS0FBaUIsRUFBK0MsMkJBQW1DO1FBQW5HLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBK0MsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFRO1FBRi9HLHVCQUFrQixHQUFlLElBQUksQ0FBQztJQUU0RSxDQUFDO0lBRTNIOzs7Ozs7T0FNRztJQUNJLG9CQUFvQjtRQUN6QixJQUFJLFNBQVMsRUFBRSxJQUFTLE9BQU8sSUFBUyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsSUFBSSxTQUFTLEVBQUUsSUFBUyxPQUFPLElBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0RCxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF1QixFQUFFLEVBQUU7Z0JBQ3BILElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM1RixDQUFDO1lBQ0gsQ0FBQyxDQUFDLEVBQ0EsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsS0FBVTtRQUM1QixJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUUzRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FBQyxRQUFhO1FBQ25DLElBQUksS0FBSyxHQUFpQixFQUFFLENBQUM7UUFDN0IsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxXQUErQixDQUFDO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDckIsa0hBQWtIO29CQUNsSCxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFlLEVBQUUsRUFBRTt3QkFDckQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzNGLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekgsQ0FBQztJQUVNLGNBQWMsQ0FBQyxhQUFxQixFQUFFLFVBQWtCLEVBQUUsYUFBcUI7UUFDbEYsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUU7YUFDOUIsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLDZCQUE2QixHQUFHLGFBQWEsRUFBRSxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7K0dBN0VVLFdBQVcsNENBVXlCLDJCQUEyQjttSEFWL0QsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVTs7MEJBVytCLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0LCBpc0Rldk1vZGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlLCBIdHRwSGVhZGVyc30gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG5pbXBvcnQge09ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5pbXBvcnQge1VzZXJFbnRpdHl9IGZyb20gXCIuL3VzZXIuZW50aXR5XCI7XHJcbmltcG9ydCB7Um9sZUVudGl0eX0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi9yb2xlLmVudGl0eVwiO1xyXG5pbXBvcnQge1Blcm1pc3Npb25FbnRpdHl9IGZyb20gXCIuL2F1dGhvcml6YXRpb24vcGVybWlzc2lvbi5lbnRpdHlcIjtcclxuXHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRFRF9VU0VSX0VORFBPSU5UID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXCJhdXRoZW50aWNhdGVkX3VzZXJfdXJsXCIpO1xyXG5cclxuLyoqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBnZW5lcmljIGVycm9yIG1lc3NhZ2UgdXNlZCB3aGVuIGEgc2VydmVyIGVycm9yIGlzIHRocm93biB3aXRob3V0IGEgc3RhdHVzLlxyXG4gICAqXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIEdFTkVSSUNfRVJSX01TRzogc3RyaW5nID0gXCJTZXJ2ZXIgZXJyb3JcIjtcclxuXHJcbiAgcHJpdmF0ZSBfYXV0aGVudGljYXRlZFVzZXI6IFVzZXJFbnRpdHkgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LCBASW5qZWN0KEFVVEhFTlRJQ0FURURfVVNFUl9FTkRQT0lOVCkgcHJpdmF0ZSBfYXV0aGVudGljYXRpb25Vc2VyRW5kcG9pbnQ6IHN0cmluZykge31cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYWNjZXNzb3IgZm9yIGFuIHtAY29kZSBPYnNlcnZhYmxlPFVzZXJFbnRpdHk+fSByZWZsZWN0aW5nIHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyLiBJZiBubyBzdWJqZWN0IGlzXHJcbiAgICogYXZhaWxhYmxlLCB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2Ugc3RhdHVzIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgdG8gaW5kaWNhdGUgdGhhdCBjb25kaXRpb25cclxuICAgKiAoaS5lLiA0MDQgLSBOb3QgRm91bmQpLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8VXNlckVudGl0eT59IHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyIHJlcHJlc2VudGF0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGdldEF1dGhlbnRpY2F0ZWRVc2VyKCk6IE9ic2VydmFibGU8VXNlckVudGl0eT4ge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIDxhbnk+Y29uc29sZSAmJiA8YW55PmNvbnNvbGUuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdldEF1dGhlbnRpY2F0ZWRVc2VyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fYXV0aGVudGljYXRlZFVzZXIpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIDxhbnk+Y29uc29sZSAmJiA8YW55PmNvbnNvbGUuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiX2F1dGhlbnRpY2F0aW9uVXNlckVuZHBvaW50OiBcIiArIHRoaXMuX2F1dGhlbnRpY2F0aW9uVXNlckVuZHBvaW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KHRoaXMuX2F1dGhlbnRpY2F0aW9uVXNlckVuZHBvaW50LCB7IG9ic2VydmU6IFwicmVzcG9uc2VcIiB9KS5waXBlKG1hcCgocmVzcDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICBpZiAocmVzcC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5fYXV0aGVudGljYXRlZFVzZXIgPSB0aGlzLmJ1aWxkVXNlckVudGl0eShyZXNwLmJvZHkpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0ZWRVc2VyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZXQgYXV0aGVudGljYXRlZCB1c2VyIGZhaWxlZC4gXCIgKyByZXNwLnN0YXR1cyArIFwiOiBcIiArIHJlc3Auc3RhdHVzVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZih0aGlzLl9hdXRoZW50aWNhdGVkVXNlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpIHtcclxuICAgIGxldCBlcnJNc2cgPSAoZXJyb3IubWVzc2FnZSkgPyBlcnJvci5tZXNzYWdlIDogVXNlclNlcnZpY2UuR0VORVJJQ19FUlJfTVNHO1xyXG4gICAgXHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyTXNnKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUT0RPOiBBZGQgaW4gYSBkZXNlcmlhbGl6ZXIgaW50byB0aGUgZW50aXR5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHVzZXJKc29uXHJcbiAgICogQHJldHVybnMge1VzZXJFbnRpdHl9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZFVzZXJFbnRpdHkodXNlckpzb246IGFueSk6IFVzZXJFbnRpdHkge1xyXG4gICAgbGV0IHJvbGVzOiBSb2xlRW50aXR5W10gPSBbXTtcclxuICAgIGlmICh1c2VySnNvbi5yb2xlcykge1xyXG4gICAgICB1c2VySnNvbi5yb2xlcy5tYXAoKHJvbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uczogUGVybWlzc2lvbkVudGl0eVtdO1xyXG4gICAgICAgIGlmIChyb2xlLnBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAvKiBUT0RPOiBKRUggKDEwLzI3LzE2KSAtIFJldmlzaXQgd2hlbiB3ZSBkZXRlcm1pbmUgaG93IHBlcm1pc3Npb24gYXJlIGNvbW11bmljYXRlZCB0byB0aGUgY2xpZW50LCBpZiBuZWNlc3NhcnkgKi9cclxuICAgICAgICAgIHBlcm1pc3Npb25zID0gcm9sZS5wZXJtaXNzaW9ucy5tYXAoKHBlcm1pc3Npb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBlcm1pc3Npb25FbnRpdHkocGVybWlzc2lvbi5kb21haW4sIHBlcm1pc3Npb24uYWN0aW9ucywgcGVybWlzc2lvbi5pbnN0YW5jZXMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvbGVzLnB1c2gobmV3IFJvbGVFbnRpdHkocm9sZS5yb2xlTmFtZSwgcGVybWlzc2lvbnMpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBVc2VyRW50aXR5KHVzZXJKc29uLmlkVXNlciwgdXNlckpzb24udXNlcm5hbWUsIHJvbGVzLCB1c2VySnNvbi5maXJzdG5hbWUsIHVzZXJKc29uLmxhc3RuYW1lLCB1c2VySnNvbi5ocmVmKTtcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIGdldFBlcm1pc3Npb25zKGdvdmVybm9yQ2xhc3M6IHN0cmluZywgZ292ZXJub3JJZDogbnVtYmVyLCBnb3Zlcm5lZENsYXNzOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gIHtcclxuICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAuc2V0KFwiU2VjdXJpdHlHb3Zlcm5vckNsYXNzXCIsIGdvdmVybm9yQ2xhc3MpLnNldChcIlNlY3VyaXR5R292ZXJub3JJZFwiLCBTdHJpbmcoZ292ZXJub3JJZCkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQoXCIvY29yZS9hcGkvdXNlci9wZXJtaXNzaW9ucy9cIiArIGdvdmVybmVkQ2xhc3MsIHtoZWFkZXJzOiBoZWFkZXJzfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdXNlci9zcmMvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFDLFVBQVUsRUFBZ0IsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFM0UsT0FBTyxFQUFhLEVBQUUsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBRW5FLE1BQU0sQ0FBQyxJQUFJLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFTLHdCQUF3QixDQUFDLENBQUM7QUFDOUYsTUFBTSxDQUFDLElBQUkseUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQVMsc0JBQXNCLENBQUMsQ0FBQztBQUUxRjs7R0FFRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBQ3RCOzs7O09BSUc7YUFDVyxvQkFBZSxHQUFXLGNBQWMsQUFBekIsQ0FBMEI7SUFJdkQsWUFBb0IsS0FBaUIsRUFDb0IsMkJBQW1DLEVBQ3pCLHdCQUFpQztRQUZoRixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ29CLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBUTtRQUN6Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQVM7UUFKNUYsdUJBQWtCLEdBQWUsSUFBSSxDQUFDO0lBSXlELENBQUM7SUFFeEc7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QUFDLGFBQXFCLEVBQUUsVUFBa0IsRUFBRSxhQUFxQixFQUFFLHVCQUFnQztRQUV0SCxvSEFBb0g7UUFDcEgsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0I7WUFDcEYsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7UUFFdEYsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO1FBRXRHLElBQUksU0FBUyxFQUFFLElBQVMsT0FBTyxJQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0RCxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixHQUFHLGtCQUFrQixDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFO2FBQzlCLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLEVBQUUsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDOytHQTFGVSxXQUFXLDRDQVdGLDJCQUEyQixhQUNmLHlCQUF5QjttSEFaOUMsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVTs7MEJBWUksTUFBTTsyQkFBQywyQkFBMkI7OzBCQUNsQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCwgaXNEZXZNb2RlLCBPcHRpb25hbH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2UsIEh0dHBIZWFkZXJzfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuXHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3J9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7VXNlckVudGl0eX0gZnJvbSBcIi4vdXNlci5lbnRpdHlcIjtcclxuaW1wb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUuZW50aXR5XCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbkVudGl0eX0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uLmVudGl0eVwiO1xyXG5cclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVEVEX1VTRVJfRU5EUE9JTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImF1dGhlbnRpY2F0ZWRfdXNlcl91cmxcIik7XHJcbmV4cG9ydCBsZXQgUEVSTUlTU0lPTlNfVVNFUl9FTkRQT0lOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwicGVybWlzc2lvbnNfdXNlcl91cmxcIik7XHJcblxyXG4vKipcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSB1c2VkIHdoZW4gYSBzZXJ2ZXIgZXJyb3IgaXMgdGhyb3duIHdpdGhvdXQgYSBzdGF0dXMuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgR0VORVJJQ19FUlJfTVNHOiBzdHJpbmcgPSBcIlNlcnZlciBlcnJvclwiO1xyXG5cclxuICBwcml2YXRlIF9hdXRoZW50aWNhdGVkVXNlcjogVXNlckVudGl0eSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgQEluamVjdChBVVRIRU5USUNBVEVEX1VTRVJfRU5EUE9JTlQpIHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uVXNlckVuZHBvaW50OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChQRVJNSVNTSU9OU19VU0VSX0VORFBPSU5UKSBwcml2YXRlIF9wZXJtaXNzaW9uc1VzZXJFbmRwb2ludD86IHN0cmluZykge31cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYWNjZXNzb3IgZm9yIGFuIHtAY29kZSBPYnNlcnZhYmxlPFVzZXJFbnRpdHk+fSByZWZsZWN0aW5nIHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyLiBJZiBubyBzdWJqZWN0IGlzXHJcbiAgICogYXZhaWxhYmxlLCB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2Ugc3RhdHVzIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgdG8gaW5kaWNhdGUgdGhhdCBjb25kaXRpb25cclxuICAgKiAoaS5lLiA0MDQgLSBOb3QgRm91bmQpLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8VXNlckVudGl0eT59IHRoZSBjdXJyZW50bHkgYXV0aGVudGljYXRlZCB1c2VyIHJlcHJlc2VudGF0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGdldEF1dGhlbnRpY2F0ZWRVc2VyKCk6IE9ic2VydmFibGU8VXNlckVudGl0eT4ge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIDxhbnk+Y29uc29sZSAmJiA8YW55PmNvbnNvbGUuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdldEF1dGhlbnRpY2F0ZWRVc2VyXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fYXV0aGVudGljYXRlZFVzZXIpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIDxhbnk+Y29uc29sZSAmJiA8YW55PmNvbnNvbGUuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiX2F1dGhlbnRpY2F0aW9uVXNlckVuZHBvaW50OiBcIiArIHRoaXMuX2F1dGhlbnRpY2F0aW9uVXNlckVuZHBvaW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KHRoaXMuX2F1dGhlbnRpY2F0aW9uVXNlckVuZHBvaW50LCB7IG9ic2VydmU6IFwicmVzcG9uc2VcIiB9KS5waXBlKG1hcCgocmVzcDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICBpZiAocmVzcC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5fYXV0aGVudGljYXRlZFVzZXIgPSB0aGlzLmJ1aWxkVXNlckVudGl0eShyZXNwLmJvZHkpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0ZWRVc2VyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZXQgYXV0aGVudGljYXRlZCB1c2VyIGZhaWxlZC4gXCIgKyByZXNwLnN0YXR1cyArIFwiOiBcIiArIHJlc3Auc3RhdHVzVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBvZih0aGlzLl9hdXRoZW50aWNhdGVkVXNlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpIHtcclxuICAgIGxldCBlcnJNc2cgPSAoZXJyb3IubWVzc2FnZSkgPyBlcnJvci5tZXNzYWdlIDogVXNlclNlcnZpY2UuR0VORVJJQ19FUlJfTVNHO1xyXG5cclxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJNc2cpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRPRE86IEFkZCBpbiBhIGRlc2VyaWFsaXplciBpbnRvIHRoZSBlbnRpdHkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdXNlckpzb25cclxuICAgKiBAcmV0dXJucyB7VXNlckVudGl0eX1cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkVXNlckVudGl0eSh1c2VySnNvbjogYW55KTogVXNlckVudGl0eSB7XHJcbiAgICBsZXQgcm9sZXM6IFJvbGVFbnRpdHlbXSA9IFtdO1xyXG4gICAgaWYgKHVzZXJKc29uLnJvbGVzKSB7XHJcbiAgICAgIHVzZXJKc29uLnJvbGVzLm1hcCgocm9sZTogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uRW50aXR5W107XHJcbiAgICAgICAgaWYgKHJvbGUucGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgIC8qIFRPRE86IEpFSCAoMTAvMjcvMTYpIC0gUmV2aXNpdCB3aGVuIHdlIGRldGVybWluZSBob3cgcGVybWlzc2lvbiBhcmUgY29tbXVuaWNhdGVkIHRvIHRoZSBjbGllbnQsIGlmIG5lY2Vzc2FyeSAqL1xyXG4gICAgICAgICAgcGVybWlzc2lvbnMgPSByb2xlLnBlcm1pc3Npb25zLm1hcCgocGVybWlzc2lvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUGVybWlzc2lvbkVudGl0eShwZXJtaXNzaW9uLmRvbWFpbiwgcGVybWlzc2lvbi5hY3Rpb25zLCBwZXJtaXNzaW9uLmluc3RhbmNlcyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9sZXMucHVzaChuZXcgUm9sZUVudGl0eShyb2xlLnJvbGVOYW1lLCBwZXJtaXNzaW9ucykpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFVzZXJFbnRpdHkodXNlckpzb24uaWRVc2VyLCB1c2VySnNvbi51c2VybmFtZSwgcm9sZXMsIHVzZXJKc29uLmZpcnN0bmFtZSwgdXNlckpzb24ubGFzdG5hbWUsIHVzZXJKc29uLmhyZWYpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBlcm1pc3Npb25zKGdvdmVybm9yQ2xhc3M6IHN0cmluZywgZ292ZXJub3JJZDogbnVtYmVyLCBnb3Zlcm5lZENsYXNzOiBzdHJpbmcsIHBlcm1pc3Npb25zVXNlckVuZHBvaW50Pzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ICB7XHJcblxyXG4gICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwgZGVmYXVsdCB1c2VyIGVuZCBwb2ludCB1cmwgYXMgXCIvY29yZS9hcGkvdXNlci9wZXJtaXNzaW9ucy9cIiBmb3IgdGhlIGN1cnJlbnQgdXNhZ2VzIGluIENPUkUgYXBwLlxyXG4gICAgbGV0IHBlcm1pc3Npb25zVXNlclVybCA9IHRoaXMuX3Blcm1pc3Npb25zVXNlckVuZHBvaW50ID8gdGhpcy5fcGVybWlzc2lvbnNVc2VyRW5kcG9pbnRcclxuICAgICAgOiBwZXJtaXNzaW9uc1VzZXJFbmRwb2ludCA/IHBlcm1pc3Npb25zVXNlckVuZHBvaW50IDogXCIvY29yZS9hcGkvdXNlci9wZXJtaXNzaW9ucy9cIjtcclxuXHJcbiAgICBwZXJtaXNzaW9uc1VzZXJVcmwgPSBwZXJtaXNzaW9uc1VzZXJVcmwuZW5kc1dpdGgoXCIvXCIpID8gcGVybWlzc2lvbnNVc2VyVXJsIDogcGVybWlzc2lvbnNVc2VyVXJsICsgXCIvXCI7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIDxhbnk+Y29uc29sZSAmJiA8YW55PmNvbnNvbGUuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIl9wZXJtaXNzaW9uc1VzZXJFbmRwb2ludDogXCIgKyBwZXJtaXNzaW9uc1VzZXJVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgIC5zZXQoXCJTZWN1cml0eUdvdmVybm9yQ2xhc3NcIiwgZ292ZXJub3JDbGFzcykuc2V0KFwiU2VjdXJpdHlHb3Zlcm5vcklkXCIsIFN0cmluZyhnb3Zlcm5vcklkKSk7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQocGVybWlzc2lvbnNVc2VyVXJsICsgZ292ZXJuZWRDbGFzcywge2hlYWRlcnM6IGhlYWRlcnN9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, isDevMode, Inject, Injectable, Input, Directive, NgModule } from '@angular/core';
2
+ import { InjectionToken, isDevMode, Inject, Optional, Injectable, Input, Directive, NgModule } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { ReactiveFormsModule, FormsModule } from '@angular/forms';
5
5
  import * as i1 from '@angular/common/http';
@@ -158,6 +158,7 @@ class PermissionEntity {
158
158
  * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
159
159
  */
160
160
  let AUTHENTICATED_USER_ENDPOINT = new InjectionToken("authenticated_user_url");
161
+ let PERMISSIONS_USER_ENDPOINT = new InjectionToken("permissions_user_url");
161
162
  /**
162
163
  * @since 1.0.0
163
164
  */
@@ -168,9 +169,10 @@ class UserService {
168
169
  * @type {string}
169
170
  */
170
171
  static { this.GENERIC_ERR_MSG = "Server error"; }
171
- constructor(_http, _authenticationUserEndpoint) {
172
+ constructor(_http, _authenticationUserEndpoint, _permissionsUserEndpoint) {
172
173
  this._http = _http;
173
174
  this._authenticationUserEndpoint = _authenticationUserEndpoint;
175
+ this._permissionsUserEndpoint = _permissionsUserEndpoint;
174
176
  this._authenticatedUser = null;
175
177
  }
176
178
  /**
@@ -228,12 +230,19 @@ class UserService {
228
230
  }
229
231
  return new UserEntity(userJson.idUser, userJson.username, roles, userJson.firstname, userJson.lastname, userJson.href);
230
232
  }
231
- getPermissions(governorClass, governorId, governedClass) {
233
+ getPermissions(governorClass, governorId, governedClass, permissionsUserEndpoint) {
234
+ // Keep the original default user end point url as "/core/api/user/permissions/" for the current usages in CORE app.
235
+ let permissionsUserUrl = this._permissionsUserEndpoint ? this._permissionsUserEndpoint
236
+ : permissionsUserEndpoint ? permissionsUserEndpoint : "/core/api/user/permissions/";
237
+ permissionsUserUrl = permissionsUserUrl.endsWith("/") ? permissionsUserUrl : permissionsUserUrl + "/";
238
+ if (isDevMode() && console && console.debug) {
239
+ console.debug("_permissionsUserEndpoint: " + permissionsUserUrl);
240
+ }
232
241
  let headers = new HttpHeaders()
233
242
  .set("SecurityGovernorClass", governorClass).set("SecurityGovernorId", String(governorId));
234
- return this._http.get("/core/api/user/permissions/" + governedClass, { headers: headers });
243
+ return this._http.get(permissionsUserUrl + governedClass, { headers: headers });
235
244
  }
236
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService, deps: [{ token: i1.HttpClient }, { token: AUTHENTICATED_USER_ENDPOINT }], target: i0.ɵɵFactoryTarget.Injectable }); }
245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService, deps: [{ token: i1.HttpClient }, { token: AUTHENTICATED_USER_ENDPOINT }, { token: PERMISSIONS_USER_ENDPOINT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
237
246
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService }); }
238
247
  }
239
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserService, decorators: [{
@@ -241,6 +250,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
241
250
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
242
251
  type: Inject,
243
252
  args: [AUTHENTICATED_USER_ENDPOINT]
253
+ }] }, { type: undefined, decorators: [{
254
+ type: Optional
255
+ }, {
256
+ type: Inject,
257
+ args: [PERMISSIONS_USER_ENDPOINT]
244
258
  }] }] });
245
259
 
246
260
  /*
@@ -421,5 +435,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
421
435
  * Generated bundle index. Do not edit.
422
436
  */
423
437
 
424
- export { AUTHENTICATED_USER_ENDPOINT, PermissionEntity, RoleCheckDirective, RoleCheckUnlessNullDirective, RoleEntity, UserEntity, UserModule, UserService };
438
+ export { AUTHENTICATED_USER_ENDPOINT, PERMISSIONS_USER_ENDPOINT, PermissionEntity, RoleCheckDirective, RoleCheckUnlessNullDirective, RoleEntity, UserEntity, UserModule, UserService };
425
439
  //# sourceMappingURL=huntsman-cancer-institute-user.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"huntsman-cancer-institute-user.mjs","sources":["../../../projects/user/src/user.entity.ts","../../../projects/user/src/authorization/role.entity.ts","../../../projects/user/src/authorization/permission.entity.ts","../../../projects/user/src/user.service.ts","../../../projects/user/src/authorization/role-check.directive.ts","../../../projects/user/src/authorization/role-check-unless-null.directive.ts","../../../projects/user/src/user.module.ts","../../../projects/user/src/index.ts","../../../projects/user/src/huntsman-cancer-institute-user.ts"],"sourcesContent":["/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {RoleEntity} from \"./authorization/role.entity\";\r\n\r\n/**\r\n * An immutable representation of an HCI user entity.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport class UserEntity {\r\n constructor(private id: string,\r\n private username: string,\r\n private roles?: RoleEntity[],\r\n private firstname?: string,\r\n private lastname?: string,\r\n private href?: string) {\r\n }\r\n\r\n /**\r\n * An accessor for the users system id.\r\n *\r\n * @returns {string} the system id\r\n * @constructor\r\n */\r\n get Id(): string {\r\n return this.id;\r\n }\r\n\r\n /**\r\n * An accessor for the users application identifier/username.\r\n *\r\n * @returns {string} the application id/username\r\n * @constructor\r\n */\r\n get Username(): string {\r\n return this.username;\r\n }\r\n\r\n /**\r\n * An accessor for the users assigned role authorization claims.\r\n *\r\n * @returns {@code RoleEntity[]} the role authorization claims\r\n * @constructor\r\n */\r\n get Roles(): RoleEntity[] {\r\n return this.roles;\r\n }\r\n\r\n /**\r\n * An accessor for the users firstname.\r\n *\r\n * @return {string} the firstname\r\n * @constructor\r\n */\r\n get Firstname(): string {\r\n return this.firstname;\r\n }\r\n\r\n /**\r\n * A accessor for the users lastname.\r\n *\r\n * @return {string} the lastname\r\n * @constructor\r\n */\r\n get Lastname(): string {\r\n return this.lastname;\r\n }\r\n\r\n /**\r\n * A access for the users fully qualified href location on the system.\r\n *\r\n * @return {string} the href location\r\n * @constructor\r\n */\r\n get Href(): string {\r\n return this.href;\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {PermissionEntity} from \"./permission.entity\";\r\n\r\n/**\r\n * An immutable representation of an HCI role entity, which represents an authorization claim associated with an authenticated\r\n * subject.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport class RoleEntity {\r\n constructor( private roleName: string, private permissions?: PermissionEntity[]) {}\r\n\r\n /**\r\n * An accessor for the name of this role.\r\n *\r\n * @returns {string} the role name\r\n * @constructor\r\n */\r\n get RoleName(): string {\r\n return this.roleName;\r\n }\r\n\r\n /**\r\n * An accessor for a collection of {@link PermissionEntity} authorization claims that define this role. Permissions\r\n * provide a finer grained authorization claim description and are not required.\r\n *\r\n * @returns {PermissionEntity[]} a collection of permission entities\r\n * @constructor\r\n */\r\n get Permissions(): PermissionEntity[] {\r\n return this.permissions;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * An immutable representation of an HCI permission entity, which represents a fine grained authorization claim that can\r\n * define a {@link RoleEntity}.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport class PermissionEntity {\r\n constructor(private domain: string, private actions?: string[], private instances?: string[]) {\r\n }\r\n\r\n /**\r\n * An accessor for the domain this permission is defined for (i.e. user, study, specimen, etc...).\r\n *\r\n * @returns {string} the domain of this permission\r\n * @constructor\r\n */\r\n get Domain(): string {\r\n return this.domain;\r\n }\r\n\r\n /**\r\n * An accessor for the actions that this permission allows in the specified domain (i.e. create, read, activate, manage\r\n * etc...). If no actions are defined, this permission claims access to all actions of the specified domain.\r\n *\r\n * @returns {string[]} an array of actions for the specified domain\r\n * @constructor\r\n */\r\n get Actions(): string[] {\r\n return this.actions;\r\n }\r\n\r\n /**\r\n * An accessor for the instances that this permission is applicable to in the specified domain (i.e. joe, 1234, study-foo,\r\n * etc...). If no instances are defined, this permission claims applicability to all instances of the specified domain.\r\n * @returns {string[]}\r\n * @constructor\r\n */\r\n get Instances(): string[] {\r\n return this.instances;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Injectable, InjectionToken, Inject, isDevMode} from \"@angular/core\";\r\nimport {HttpClient, HttpResponse, HttpHeaders} from \"@angular/common/http\";\r\n\r\nimport {Observable, of, throwError} from \"rxjs\";\r\nimport {catchError, map} from \"rxjs/operators\";\r\n\r\nimport {UserEntity} from \"./user.entity\";\r\nimport {RoleEntity} from \"./authorization/role.entity\";\r\nimport {PermissionEntity} from \"./authorization/permission.entity\";\r\n\r\nexport let AUTHENTICATED_USER_ENDPOINT = new InjectionToken<string>(\"authenticated_user_url\");\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Injectable()\r\nexport class UserService {\r\n /**\r\n * The generic error message used when a server error is thrown without a status.\r\n *\r\n * @type {string}\r\n */\r\n public static GENERIC_ERR_MSG: string = \"Server error\";\r\n\r\n private _authenticatedUser: UserEntity = null;\r\n\r\n constructor(private _http: HttpClient, @Inject(AUTHENTICATED_USER_ENDPOINT) private _authenticationUserEndpoint: string) {}\r\n\r\n /**\r\n * An accessor for an {@code Observable<UserEntity>} reflecting the currently authenticated user. If no subject is\r\n * available, the appropriate response status should be returned from the server to indicate that condition\r\n * (i.e. 404 - Not Found).\r\n *\r\n * @returns {Observable<UserEntity>} the currently authenticated user representation\r\n */\r\n public getAuthenticatedUser(): Observable<UserEntity> {\r\n if (isDevMode() && <any>console && <any>console.debug) {\r\n console.debug(\"getAuthenticatedUser\");\r\n }\r\n\r\n if (!this._authenticatedUser) {\r\n if (isDevMode() && <any>console && <any>console.debug) {\r\n console.debug(\"_authenticationUserEndpoint: \" + this._authenticationUserEndpoint);\r\n }\r\n\r\n return this._http.get(this._authenticationUserEndpoint, { observe: \"response\" }).pipe(map((resp: HttpResponse<any>) => {\r\n if (resp.status === 200) {\r\n this._authenticatedUser = this.buildUserEntity(resp.body);\r\n return this._authenticatedUser;\r\n } else {\r\n throw new Error(\"Get authenticated user failed. \" + resp.status + \": \" + resp.statusText);\r\n }\r\n }),\r\n catchError(this.handleError));\r\n } else {\r\n return of(this._authenticatedUser);\r\n }\r\n }\r\n\r\n private handleError(error: any) {\r\n let errMsg = (error.message) ? error.message : UserService.GENERIC_ERR_MSG;\r\n \r\n return throwError(() => new Error(errMsg));\r\n }\r\n\r\n /**\r\n * TODO: Add in a deserializer into the entity.\r\n *\r\n * @param userJson\r\n * @returns {UserEntity}\r\n */\r\n private buildUserEntity(userJson: any): UserEntity {\r\n let roles: RoleEntity[] = [];\r\n if (userJson.roles) {\r\n userJson.roles.map((role: any) => {\r\n let permissions: PermissionEntity[];\r\n if (role.permissions) {\r\n /* TODO: JEH (10/27/16) - Revisit when we determine how permission are communicated to the client, if necessary */\r\n permissions = role.permissions.map((permission: any) => {\r\n return new PermissionEntity(permission.domain, permission.actions, permission.instances);\r\n });\r\n }\r\n roles.push(new RoleEntity(role.roleName, permissions));\r\n });\r\n }\r\n\r\n return new UserEntity(userJson.idUser, userJson.username, roles, userJson.firstname, userJson.lastname, userJson.href);\r\n }\r\n \r\n public getPermissions(governorClass: string, governorId: number, governedClass: string): Observable<any> {\r\n let headers = new HttpHeaders()\r\n .set(\"SecurityGovernorClass\", governorClass).set(\"SecurityGovernorId\", String(governorId));\r\n return this._http.get(\"/core/api/user/permissions/\" + governedClass, {headers: headers});\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Directive, Input, TemplateRef, ViewContainerRef, isDevMode} from \"@angular/core\";\r\n\r\nimport {UserService} from \"../user.service\";\r\nimport {UserEntity} from \"../user.entity\";\r\n\r\n/**\r\n * A structural directive for adding and removing elements of the client application based on a users <em>role</em>\r\n * authorization claims.\r\n *\r\n * This directive requires the {@link UserService} as a provider.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Directive({\r\n selector: \"[hciHasRole]\",\r\n providers: [UserService]\r\n})\r\nexport class RoleCheckDirective {\r\n protected _lastCheck: boolean = null;\r\n\r\n constructor(protected _viewContainer: ViewContainerRef,\r\n protected _templateRef: TemplateRef<Object>,\r\n protected _usrSvc: UserService) {\r\n }\r\n\r\n /**\r\n * Calculates the availability of a decorated element based on the authenticated users available roles.\r\n *\r\n * @param roleName for the role required to make the decorated element available\r\n */\r\n @Input()\r\n set hciHasRole(roleName: string) {\r\n if (isDevMode() && <any>console && <any>console.debug) {\r\n console.debug(\"hciHasRole\");\r\n }\r\n\r\n this._usrSvc.getAuthenticatedUser().subscribe((authUser: UserEntity) => {\r\n let found: boolean;\r\n\r\n if (authUser && authUser.Roles) {\r\n found = authUser.Roles.some((role) => {\r\n return role.RoleName === roleName;\r\n });\r\n } else {\r\n found = false;\r\n }\r\n\r\n if (found && (this._lastCheck === null || !this._lastCheck)) {\r\n this._viewContainer.createEmbeddedView(this._templateRef);\r\n } else if (!found && (this._lastCheck === null || this._lastCheck)) {\r\n this._viewContainer.clear();\r\n }\r\n }, (error) => {\r\n // TODO: BHY (08/19/16) - Determine requirements around errors and then REMOVE CONSOLE LOGGING. Display to user,\r\n // log to external source, gobble?\r\n // Gobble up the error.\r\n });\r\n }\r\n}\r\n\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Directive, Input, ViewContainerRef, TemplateRef} from \"@angular/core\";\r\nimport {RoleCheckDirective} from \"./role-check.directive\";\r\nimport {UserService} from \"../user.service\";\r\n\r\n/**\r\n * An extension of the {@link RoleCheckDirective} the only evaluates the role if is it not null or undefined.\r\n *\r\n * This directive requires the {@link UserService} as a provider.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Directive({\r\n selector: \"[hciHasRoleUnlessNull]\"\r\n})\r\nexport class RoleCheckUnlessNullDirective extends RoleCheckDirective {\r\n\r\n private _context: HciHasRoleUnlessNullContext = new HciHasRoleUnlessNullContext();\r\n\r\n constructor(\r\n _viewContainer: ViewContainerRef,\r\n _templateRef: TemplateRef<Object>,\r\n _usrSvc: UserService) {\r\n super(_viewContainer, _templateRef, _usrSvc);\r\n }\r\n\r\n @Input()\r\n set hciHasRoleUnlessNull(roleName: string) {\r\n if (!roleName) {\r\n // if the roleName is undefined or null then render\r\n if (this._context._condition !== true) {\r\n this._context._condition = true;\r\n this._updateView();\r\n }\r\n } else {\r\n // otherwise delegate the check to RoleCheckDirective\r\n this.hciHasRole = roleName;\r\n }\r\n }\r\n\r\n private _updateView() {\r\n this._viewContainer.clear();\r\n if (this._context._condition) {\r\n this._viewContainer.createEmbeddedView(this._templateRef, this._context);\r\n } else {\r\n this._viewContainer.createEmbeddedView(this._templateRef, this._context);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * I totally ripped off *ngIf source to get this to work correctly to prevent infinit loop rendering.\r\n */\r\nexport class HciHasRoleUnlessNullContext {\r\n public _condition: boolean = false;\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {ReactiveFormsModule, FormsModule} from \"@angular/forms\";\r\n\r\nimport {UserService} from \"./user.service\";\r\nimport {RoleCheckDirective} from \"./authorization/role-check.directive\";\r\nimport {RoleCheckUnlessNullDirective} from \"./authorization/role-check-unless-null.directive\";\r\n\r\n/**\r\n * A feature module for user related services, directives, pipes, etc...\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n declarations: [\r\n RoleCheckDirective,\r\n RoleCheckUnlessNullDirective\r\n ],\r\n exports: [\r\n RoleCheckDirective,\r\n RoleCheckUnlessNullDirective\r\n ]\r\n})\r\nexport class UserModule {\r\n static forRoot(): ModuleWithProviders<UserModule> {\r\n return {\r\n providers: [\r\n UserService\r\n ],\r\n ngModule: UserModule\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n\r\n/**\r\n * A barrel file for the HCI ng2 user package.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport {UserModule} from \"./user.module\"\r\nexport {UserEntity} from \"./user.entity\"\r\nexport {RoleEntity} from \"./authorization/role.entity\"\r\nexport {PermissionEntity} from \"./authorization/permission.entity\"\r\n\r\n/**\r\n * The opaque tokens for service configuration.\r\n */\r\nexport {\r\n AUTHENTICATED_USER_ENDPOINT\r\n} from \"./user.service\"\r\n\r\nexport {UserService} from \"./user.service\"\r\n\r\nexport {RoleCheckDirective} from \"./authorization/role-check.directive\";\r\nexport {RoleCheckUnlessNullDirective} from \"./authorization/role-check-unless-null.directive\";\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.UserService"],"mappings":"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"}
1
+ {"version":3,"file":"huntsman-cancer-institute-user.mjs","sources":["../../../projects/user/src/user.entity.ts","../../../projects/user/src/authorization/role.entity.ts","../../../projects/user/src/authorization/permission.entity.ts","../../../projects/user/src/user.service.ts","../../../projects/user/src/authorization/role-check.directive.ts","../../../projects/user/src/authorization/role-check-unless-null.directive.ts","../../../projects/user/src/user.module.ts","../../../projects/user/src/index.ts","../../../projects/user/src/huntsman-cancer-institute-user.ts"],"sourcesContent":["/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {RoleEntity} from \"./authorization/role.entity\";\r\n\r\n/**\r\n * An immutable representation of an HCI user entity.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport class UserEntity {\r\n constructor(private id: string,\r\n private username: string,\r\n private roles?: RoleEntity[],\r\n private firstname?: string,\r\n private lastname?: string,\r\n private href?: string) {\r\n }\r\n\r\n /**\r\n * An accessor for the users system id.\r\n *\r\n * @returns {string} the system id\r\n * @constructor\r\n */\r\n get Id(): string {\r\n return this.id;\r\n }\r\n\r\n /**\r\n * An accessor for the users application identifier/username.\r\n *\r\n * @returns {string} the application id/username\r\n * @constructor\r\n */\r\n get Username(): string {\r\n return this.username;\r\n }\r\n\r\n /**\r\n * An accessor for the users assigned role authorization claims.\r\n *\r\n * @returns {@code RoleEntity[]} the role authorization claims\r\n * @constructor\r\n */\r\n get Roles(): RoleEntity[] {\r\n return this.roles;\r\n }\r\n\r\n /**\r\n * An accessor for the users firstname.\r\n *\r\n * @return {string} the firstname\r\n * @constructor\r\n */\r\n get Firstname(): string {\r\n return this.firstname;\r\n }\r\n\r\n /**\r\n * A accessor for the users lastname.\r\n *\r\n * @return {string} the lastname\r\n * @constructor\r\n */\r\n get Lastname(): string {\r\n return this.lastname;\r\n }\r\n\r\n /**\r\n * A access for the users fully qualified href location on the system.\r\n *\r\n * @return {string} the href location\r\n * @constructor\r\n */\r\n get Href(): string {\r\n return this.href;\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {PermissionEntity} from \"./permission.entity\";\r\n\r\n/**\r\n * An immutable representation of an HCI role entity, which represents an authorization claim associated with an authenticated\r\n * subject.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport class RoleEntity {\r\n constructor( private roleName: string, private permissions?: PermissionEntity[]) {}\r\n\r\n /**\r\n * An accessor for the name of this role.\r\n *\r\n * @returns {string} the role name\r\n * @constructor\r\n */\r\n get RoleName(): string {\r\n return this.roleName;\r\n }\r\n\r\n /**\r\n * An accessor for a collection of {@link PermissionEntity} authorization claims that define this role. Permissions\r\n * provide a finer grained authorization claim description and are not required.\r\n *\r\n * @returns {PermissionEntity[]} a collection of permission entities\r\n * @constructor\r\n */\r\n get Permissions(): PermissionEntity[] {\r\n return this.permissions;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n/**\r\n * An immutable representation of an HCI permission entity, which represents a fine grained authorization claim that can\r\n * define a {@link RoleEntity}.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport class PermissionEntity {\r\n constructor(private domain: string, private actions?: string[], private instances?: string[]) {\r\n }\r\n\r\n /**\r\n * An accessor for the domain this permission is defined for (i.e. user, study, specimen, etc...).\r\n *\r\n * @returns {string} the domain of this permission\r\n * @constructor\r\n */\r\n get Domain(): string {\r\n return this.domain;\r\n }\r\n\r\n /**\r\n * An accessor for the actions that this permission allows in the specified domain (i.e. create, read, activate, manage\r\n * etc...). If no actions are defined, this permission claims access to all actions of the specified domain.\r\n *\r\n * @returns {string[]} an array of actions for the specified domain\r\n * @constructor\r\n */\r\n get Actions(): string[] {\r\n return this.actions;\r\n }\r\n\r\n /**\r\n * An accessor for the instances that this permission is applicable to in the specified domain (i.e. joe, 1234, study-foo,\r\n * etc...). If no instances are defined, this permission claims applicability to all instances of the specified domain.\r\n * @returns {string[]}\r\n * @constructor\r\n */\r\n get Instances(): string[] {\r\n return this.instances;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Injectable, InjectionToken, Inject, isDevMode, Optional} from \"@angular/core\";\r\nimport {HttpClient, HttpResponse, HttpHeaders} from \"@angular/common/http\";\r\n\r\nimport {Observable, of, throwError} from \"rxjs\";\r\nimport {catchError, map} from \"rxjs/operators\";\r\n\r\nimport {UserEntity} from \"./user.entity\";\r\nimport {RoleEntity} from \"./authorization/role.entity\";\r\nimport {PermissionEntity} from \"./authorization/permission.entity\";\r\n\r\nexport let AUTHENTICATED_USER_ENDPOINT = new InjectionToken<string>(\"authenticated_user_url\");\r\nexport let PERMISSIONS_USER_ENDPOINT = new InjectionToken<string>(\"permissions_user_url\");\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Injectable()\r\nexport class UserService {\r\n /**\r\n * The generic error message used when a server error is thrown without a status.\r\n *\r\n * @type {string}\r\n */\r\n public static GENERIC_ERR_MSG: string = \"Server error\";\r\n\r\n private _authenticatedUser: UserEntity = null;\r\n\r\n constructor(private _http: HttpClient,\r\n @Inject(AUTHENTICATED_USER_ENDPOINT) private _authenticationUserEndpoint: string,\r\n @Optional() @Inject(PERMISSIONS_USER_ENDPOINT) private _permissionsUserEndpoint?: string) {}\r\n\r\n /**\r\n * An accessor for an {@code Observable<UserEntity>} reflecting the currently authenticated user. If no subject is\r\n * available, the appropriate response status should be returned from the server to indicate that condition\r\n * (i.e. 404 - Not Found).\r\n *\r\n * @returns {Observable<UserEntity>} the currently authenticated user representation\r\n */\r\n public getAuthenticatedUser(): Observable<UserEntity> {\r\n if (isDevMode() && <any>console && <any>console.debug) {\r\n console.debug(\"getAuthenticatedUser\");\r\n }\r\n\r\n if (!this._authenticatedUser) {\r\n if (isDevMode() && <any>console && <any>console.debug) {\r\n console.debug(\"_authenticationUserEndpoint: \" + this._authenticationUserEndpoint);\r\n }\r\n\r\n return this._http.get(this._authenticationUserEndpoint, { observe: \"response\" }).pipe(map((resp: HttpResponse<any>) => {\r\n if (resp.status === 200) {\r\n this._authenticatedUser = this.buildUserEntity(resp.body);\r\n return this._authenticatedUser;\r\n } else {\r\n throw new Error(\"Get authenticated user failed. \" + resp.status + \": \" + resp.statusText);\r\n }\r\n }),\r\n catchError(this.handleError));\r\n } else {\r\n return of(this._authenticatedUser);\r\n }\r\n }\r\n\r\n private handleError(error: any) {\r\n let errMsg = (error.message) ? error.message : UserService.GENERIC_ERR_MSG;\r\n\r\n return throwError(() => new Error(errMsg));\r\n }\r\n\r\n /**\r\n * TODO: Add in a deserializer into the entity.\r\n *\r\n * @param userJson\r\n * @returns {UserEntity}\r\n */\r\n private buildUserEntity(userJson: any): UserEntity {\r\n let roles: RoleEntity[] = [];\r\n if (userJson.roles) {\r\n userJson.roles.map((role: any) => {\r\n let permissions: PermissionEntity[];\r\n if (role.permissions) {\r\n /* TODO: JEH (10/27/16) - Revisit when we determine how permission are communicated to the client, if necessary */\r\n permissions = role.permissions.map((permission: any) => {\r\n return new PermissionEntity(permission.domain, permission.actions, permission.instances);\r\n });\r\n }\r\n roles.push(new RoleEntity(role.roleName, permissions));\r\n });\r\n }\r\n\r\n return new UserEntity(userJson.idUser, userJson.username, roles, userJson.firstname, userJson.lastname, userJson.href);\r\n }\r\n\r\n public getPermissions(governorClass: string, governorId: number, governedClass: string, permissionsUserEndpoint?: string): Observable<any> {\r\n\r\n // Keep the original default user end point url as \"/core/api/user/permissions/\" for the current usages in CORE app.\r\n let permissionsUserUrl = this._permissionsUserEndpoint ? this._permissionsUserEndpoint\r\n : permissionsUserEndpoint ? permissionsUserEndpoint : \"/core/api/user/permissions/\";\r\n\r\n permissionsUserUrl = permissionsUserUrl.endsWith(\"/\") ? permissionsUserUrl : permissionsUserUrl + \"/\";\r\n\r\n if (isDevMode() && <any>console && <any>console.debug) {\r\n console.debug(\"_permissionsUserEndpoint: \" + permissionsUserUrl);\r\n }\r\n\r\n let headers = new HttpHeaders()\r\n .set(\"SecurityGovernorClass\", governorClass).set(\"SecurityGovernorId\", String(governorId));\r\n return this._http.get(permissionsUserUrl + governedClass, {headers: headers});\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Directive, Input, TemplateRef, ViewContainerRef, isDevMode} from \"@angular/core\";\r\n\r\nimport {UserService} from \"../user.service\";\r\nimport {UserEntity} from \"../user.entity\";\r\n\r\n/**\r\n * A structural directive for adding and removing elements of the client application based on a users <em>role</em>\r\n * authorization claims.\r\n *\r\n * This directive requires the {@link UserService} as a provider.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Directive({\r\n selector: \"[hciHasRole]\",\r\n providers: [UserService]\r\n})\r\nexport class RoleCheckDirective {\r\n protected _lastCheck: boolean = null;\r\n\r\n constructor(protected _viewContainer: ViewContainerRef,\r\n protected _templateRef: TemplateRef<Object>,\r\n protected _usrSvc: UserService) {\r\n }\r\n\r\n /**\r\n * Calculates the availability of a decorated element based on the authenticated users available roles.\r\n *\r\n * @param roleName for the role required to make the decorated element available\r\n */\r\n @Input()\r\n set hciHasRole(roleName: string) {\r\n if (isDevMode() && <any>console && <any>console.debug) {\r\n console.debug(\"hciHasRole\");\r\n }\r\n\r\n this._usrSvc.getAuthenticatedUser().subscribe((authUser: UserEntity) => {\r\n let found: boolean;\r\n\r\n if (authUser && authUser.Roles) {\r\n found = authUser.Roles.some((role) => {\r\n return role.RoleName === roleName;\r\n });\r\n } else {\r\n found = false;\r\n }\r\n\r\n if (found && (this._lastCheck === null || !this._lastCheck)) {\r\n this._viewContainer.createEmbeddedView(this._templateRef);\r\n } else if (!found && (this._lastCheck === null || this._lastCheck)) {\r\n this._viewContainer.clear();\r\n }\r\n }, (error) => {\r\n // TODO: BHY (08/19/16) - Determine requirements around errors and then REMOVE CONSOLE LOGGING. Display to user,\r\n // log to external source, gobble?\r\n // Gobble up the error.\r\n });\r\n }\r\n}\r\n\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Directive, Input, ViewContainerRef, TemplateRef} from \"@angular/core\";\r\nimport {RoleCheckDirective} from \"./role-check.directive\";\r\nimport {UserService} from \"../user.service\";\r\n\r\n/**\r\n * An extension of the {@link RoleCheckDirective} the only evaluates the role if is it not null or undefined.\r\n *\r\n * This directive requires the {@link UserService} as a provider.\r\n *\r\n * @since 1.0.0\r\n */\r\n@Directive({\r\n selector: \"[hciHasRoleUnlessNull]\"\r\n})\r\nexport class RoleCheckUnlessNullDirective extends RoleCheckDirective {\r\n\r\n private _context: HciHasRoleUnlessNullContext = new HciHasRoleUnlessNullContext();\r\n\r\n constructor(\r\n _viewContainer: ViewContainerRef,\r\n _templateRef: TemplateRef<Object>,\r\n _usrSvc: UserService) {\r\n super(_viewContainer, _templateRef, _usrSvc);\r\n }\r\n\r\n @Input()\r\n set hciHasRoleUnlessNull(roleName: string) {\r\n if (!roleName) {\r\n // if the roleName is undefined or null then render\r\n if (this._context._condition !== true) {\r\n this._context._condition = true;\r\n this._updateView();\r\n }\r\n } else {\r\n // otherwise delegate the check to RoleCheckDirective\r\n this.hciHasRole = roleName;\r\n }\r\n }\r\n\r\n private _updateView() {\r\n this._viewContainer.clear();\r\n if (this._context._condition) {\r\n this._viewContainer.createEmbeddedView(this._templateRef, this._context);\r\n } else {\r\n this._viewContainer.createEmbeddedView(this._templateRef, this._context);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * I totally ripped off *ngIf source to get this to work correctly to prevent infinit loop rendering.\r\n */\r\nexport class HciHasRoleUnlessNullContext {\r\n public _condition: boolean = false;\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {ReactiveFormsModule, FormsModule} from \"@angular/forms\";\r\n\r\nimport {UserService} from \"./user.service\";\r\nimport {RoleCheckDirective} from \"./authorization/role-check.directive\";\r\nimport {RoleCheckUnlessNullDirective} from \"./authorization/role-check-unless-null.directive\";\r\n\r\n/**\r\n * A feature module for user related services, directives, pipes, etc...\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ],\r\n declarations: [\r\n RoleCheckDirective,\r\n RoleCheckUnlessNullDirective\r\n ],\r\n exports: [\r\n RoleCheckDirective,\r\n RoleCheckUnlessNullDirective\r\n ]\r\n})\r\nexport class UserModule {\r\n static forRoot(): ModuleWithProviders<UserModule> {\r\n return {\r\n providers: [\r\n UserService\r\n ],\r\n ngModule: UserModule\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\n\r\n/**\r\n * A barrel file for the HCI ng2 user package.\r\n *\r\n * @since 1.0.0\r\n */\r\nexport {UserModule} from \"./user.module\"\r\nexport {UserEntity} from \"./user.entity\"\r\nexport {RoleEntity} from \"./authorization/role.entity\"\r\nexport {PermissionEntity} from \"./authorization/permission.entity\"\r\n\r\n/**\r\n * The opaque tokens for service configuration.\r\n */\r\nexport {\r\n AUTHENTICATED_USER_ENDPOINT, PERMISSIONS_USER_ENDPOINT\r\n} from \"./user.service\"\r\n\r\nexport {UserService} from \"./user.service\"\r\n\r\nexport {RoleCheckDirective} from \"./authorization/role-check.directive\";\r\nexport {RoleCheckUnlessNullDirective} from \"./authorization/role-check-unless-null.directive\";\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.UserService"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -10,7 +10,7 @@ export { PermissionEntity } from "./authorization/permission.entity";
10
10
  /**
11
11
  * The opaque tokens for service configuration.
12
12
  */
13
- export { AUTHENTICATED_USER_ENDPOINT } from "./user.service";
13
+ export { AUTHENTICATED_USER_ENDPOINT, PERMISSIONS_USER_ENDPOINT } from "./user.service";
14
14
  export { UserService } from "./user.service";
15
15
  export { RoleCheckDirective } from "./authorization/role-check.directive";
16
16
  export { RoleCheckUnlessNullDirective } from "./authorization/role-check-unless-null.directive";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huntsman-cancer-institute/user",
3
- "version": "17.11.7",
3
+ "version": "17.13.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git@gitlab.com:huntsman-cancer-institute/risr/ng/hci-ng-lib.git"
package/user.service.d.ts CHANGED
@@ -4,12 +4,14 @@ import { Observable } from "rxjs";
4
4
  import { UserEntity } from "./user.entity";
5
5
  import * as i0 from "@angular/core";
6
6
  export declare let AUTHENTICATED_USER_ENDPOINT: InjectionToken<string>;
7
+ export declare let PERMISSIONS_USER_ENDPOINT: InjectionToken<string>;
7
8
  /**
8
9
  * @since 1.0.0
9
10
  */
10
11
  export declare class UserService {
11
12
  private _http;
12
13
  private _authenticationUserEndpoint;
14
+ private _permissionsUserEndpoint?;
13
15
  /**
14
16
  * The generic error message used when a server error is thrown without a status.
15
17
  *
@@ -17,7 +19,7 @@ export declare class UserService {
17
19
  */
18
20
  static GENERIC_ERR_MSG: string;
19
21
  private _authenticatedUser;
20
- constructor(_http: HttpClient, _authenticationUserEndpoint: string);
22
+ constructor(_http: HttpClient, _authenticationUserEndpoint: string, _permissionsUserEndpoint?: string);
21
23
  /**
22
24
  * An accessor for an {@code Observable<UserEntity>} reflecting the currently authenticated user. If no subject is
23
25
  * available, the appropriate response status should be returned from the server to indicate that condition
@@ -34,7 +36,7 @@ export declare class UserService {
34
36
  * @returns {UserEntity}
35
37
  */
36
38
  private buildUserEntity;
37
- getPermissions(governorClass: string, governorId: number, governedClass: string): Observable<any>;
38
- static ɵfac: i0.ɵɵFactoryDeclaration<UserService, never>;
39
+ getPermissions(governorClass: string, governorId: number, governedClass: string, permissionsUserEndpoint?: string): Observable<any>;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<UserService, [null, null, { optional: true; }]>;
39
41
  static ɵprov: i0.ɵɵInjectableDeclaration<UserService>;
40
42
  }