@huntsman-cancer-institute/user 12.3.0 → 15.0.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/authorization/role-check-unless-null.directive.d.ts +1 -1
- package/authorization/role-check.directive.d.ts +1 -1
- package/esm2020/authorization/permission.entity.mjs +45 -0
- package/esm2020/authorization/role-check-unless-null.directive.mjs +62 -0
- package/esm2020/authorization/role-check.directive.mjs +66 -0
- package/{esm5/authorization/role.entity.js → esm2020/authorization/role.entity.mjs} +23 -33
- package/esm2020/huntsman-cancer-institute-user.mjs +5 -0
- package/esm2020/index.mjs +20 -0
- package/esm2020/user.entity.mjs +70 -0
- package/esm2020/user.module.mjs +53 -0
- package/esm2020/user.service.mjs +98 -0
- package/fesm2015/huntsman-cancer-institute-user.mjs +427 -0
- package/fesm2015/huntsman-cancer-institute-user.mjs.map +1 -0
- package/{fesm2015/huntsman-cancer-institute-user.js → fesm2020/huntsman-cancer-institute-user.mjs} +27 -23
- package/fesm2020/huntsman-cancer-institute-user.mjs.map +1 -0
- package/package.json +24 -16
- package/CHANGELOG.md +0 -4
- package/bundles/huntsman-cancer-institute-user.umd.js +0 -500
- package/bundles/huntsman-cancer-institute-user.umd.js.map +0 -1
- package/bundles/huntsman-cancer-institute-user.umd.min.js +0 -2
- package/bundles/huntsman-cancer-institute-user.umd.min.js.map +0 -1
- package/esm2015/authorization/permission.entity.js +0 -45
- package/esm2015/authorization/role-check-unless-null.directive.js +0 -62
- package/esm2015/authorization/role-check.directive.js +0 -66
- package/esm2015/authorization/role.entity.js +0 -32
- package/esm2015/huntsman-cancer-institute-user.js +0 -5
- package/esm2015/index.js +0 -20
- package/esm2015/user.entity.js +0 -70
- package/esm2015/user.module.js +0 -55
- package/esm2015/user.service.js +0 -98
- package/esm5/authorization/permission.entity.js +0 -59
- package/esm5/authorization/role-check-unless-null.directive.js +0 -87
- package/esm5/authorization/role-check.directive.js +0 -73
- package/esm5/huntsman-cancer-institute-user.js +0 -5
- package/esm5/index.js +0 -20
- package/esm5/user.entity.js +0 -96
- package/esm5/user.module.js +0 -59
- package/esm5/user.service.js +0 -101
- package/fesm2015/huntsman-cancer-institute-user.js.map +0 -1
- package/fesm5/huntsman-cancer-institute-user.js +0 -499
- package/fesm5/huntsman-cancer-institute-user.js.map +0 -1
- package/huntsman-cancer-institute-user.d.ts +0 -5
|
@@ -15,7 +15,7 @@ export declare class RoleCheckUnlessNullDirective extends RoleCheckDirective {
|
|
|
15
15
|
set hciHasRoleUnlessNull(roleName: string);
|
|
16
16
|
private _updateView;
|
|
17
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<RoleCheckUnlessNullDirective, never>;
|
|
18
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckUnlessNullDirective, "[hciHasRoleUnlessNull]", never, { "hciHasRoleUnlessNull": "hciHasRoleUnlessNull"; }, {}, never>;
|
|
18
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckUnlessNullDirective, "[hciHasRoleUnlessNull]", never, { "hciHasRoleUnlessNull": "hciHasRoleUnlessNull"; }, {}, never, never, false, never>;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* I totally ripped off *ngIf source to get this to work correctly to prevent infinit loop rendering.
|
|
@@ -22,5 +22,5 @@ export declare class RoleCheckDirective {
|
|
|
22
22
|
*/
|
|
23
23
|
set hciHasRole(roleName: string);
|
|
24
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<RoleCheckDirective, never>;
|
|
25
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckDirective, "[hciHasRole]", never, { "hciHasRole": "hciHasRole"; }, {}, never>;
|
|
25
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckDirective, "[hciHasRole]", never, { "hciHasRole": "hciHasRole"; }, {}, never, never, false, never>;
|
|
26
26
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* An immutable representation of an HCI permission entity, which represents a fine grained authorization claim that can
|
|
6
|
+
* define a {@link RoleEntity}.
|
|
7
|
+
*
|
|
8
|
+
* @since 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
export class PermissionEntity {
|
|
11
|
+
constructor(domain, actions, instances) {
|
|
12
|
+
this.domain = domain;
|
|
13
|
+
this.actions = actions;
|
|
14
|
+
this.instances = instances;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* An accessor for the domain this permission is defined for (i.e. user, study, specimen, etc...).
|
|
18
|
+
*
|
|
19
|
+
* @returns {string} the domain of this permission
|
|
20
|
+
* @constructor
|
|
21
|
+
*/
|
|
22
|
+
get Domain() {
|
|
23
|
+
return this.domain;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* An accessor for the actions that this permission allows in the specified domain (i.e. create, read, activate, manage
|
|
27
|
+
* etc...). If no actions are defined, this permission claims access to all actions of the specified domain.
|
|
28
|
+
*
|
|
29
|
+
* @returns {string[]} an array of actions for the specified domain
|
|
30
|
+
* @constructor
|
|
31
|
+
*/
|
|
32
|
+
get Actions() {
|
|
33
|
+
return this.actions;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* An accessor for the instances that this permission is applicable to in the specified domain (i.e. joe, 1234, study-foo,
|
|
37
|
+
* etc...). If no instances are defined, this permission claims applicability to all instances of the specified domain.
|
|
38
|
+
* @returns {string[]}
|
|
39
|
+
* @constructor
|
|
40
|
+
*/
|
|
41
|
+
get Instances() {
|
|
42
|
+
return this.instances;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3Blcm1pc3Npb24uZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQW9CLE1BQWMsRUFBVSxPQUFrQixFQUFVLFNBQW9CO1FBQXhFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVztJQUM1RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuLyoqXHJcbiAqIEFuIGltbXV0YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBIQ0kgcGVybWlzc2lvbiBlbnRpdHksIHdoaWNoIHJlcHJlc2VudHMgYSBmaW5lIGdyYWluZWQgYXV0aG9yaXphdGlvbiBjbGFpbSB0aGF0IGNhblxyXG4gKiBkZWZpbmUgYSB7QGxpbmsgUm9sZUVudGl0eX0uXHJcbiAqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25FbnRpdHkge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9tYWluOiBzdHJpbmcsIHByaXZhdGUgYWN0aW9ucz86IHN0cmluZ1tdLCBwcml2YXRlIGluc3RhbmNlcz86IHN0cmluZ1tdKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIGRvbWFpbiB0aGlzIHBlcm1pc3Npb24gaXMgZGVmaW5lZCBmb3IgKGkuZS4gdXNlciwgc3R1ZHksIHNwZWNpbWVuLCBldGMuLi4pLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIGRvbWFpbiBvZiB0aGlzIHBlcm1pc3Npb25cclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKi9cclxuICBnZXQgRG9tYWluKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kb21haW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIGFjdGlvbnMgdGhhdCB0aGlzIHBlcm1pc3Npb24gYWxsb3dzIGluIHRoZSBzcGVjaWZpZWQgZG9tYWluIChpLmUuIGNyZWF0ZSwgcmVhZCwgYWN0aXZhdGUsIG1hbmFnZVxyXG4gICAqIGV0Yy4uLikuIElmIG5vIGFjdGlvbnMgYXJlIGRlZmluZWQsIHRoaXMgcGVybWlzc2lvbiBjbGFpbXMgYWNjZXNzIHRvIGFsbCBhY3Rpb25zIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBhbiBhcnJheSBvZiBhY3Rpb25zIGZvciB0aGUgc3BlY2lmaWVkIGRvbWFpblxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBBY3Rpb25zKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIGluc3RhbmNlcyB0aGF0IHRoaXMgcGVybWlzc2lvbiBpcyBhcHBsaWNhYmxlIHRvIGluIHRoZSBzcGVjaWZpZWQgZG9tYWluIChpLmUuIGpvZSwgMTIzNCwgc3R1ZHktZm9vLFxyXG4gICAqIGV0Yy4uLikuIElmIG5vIGluc3RhbmNlcyBhcmUgZGVmaW5lZCwgdGhpcyBwZXJtaXNzaW9uIGNsYWltcyBhcHBsaWNhYmlsaXR5IHRvIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHNwZWNpZmllZCBkb21haW4uXHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBJbnN0YW5jZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VzO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
import { Directive, Input, ViewContainerRef, TemplateRef } from "@angular/core";
|
|
5
|
+
import { RoleCheckDirective } from "./role-check.directive";
|
|
6
|
+
import { UserService } from "../user.service";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../user.service";
|
|
9
|
+
/**
|
|
10
|
+
* An extension of the {@link RoleCheckDirective} the only evaluates the role if is it not null or undefined.
|
|
11
|
+
*
|
|
12
|
+
* This directive requires the {@link UserService} as a provider.
|
|
13
|
+
*
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export class RoleCheckUnlessNullDirective extends RoleCheckDirective {
|
|
17
|
+
constructor(_viewContainer, _templateRef, _usrSvc) {
|
|
18
|
+
super(_viewContainer, _templateRef, _usrSvc);
|
|
19
|
+
this._context = new HciHasRoleUnlessNullContext();
|
|
20
|
+
}
|
|
21
|
+
set hciHasRoleUnlessNull(roleName) {
|
|
22
|
+
if (!roleName) {
|
|
23
|
+
// if the roleName is undefined or null then render
|
|
24
|
+
if (this._context._condition !== true) {
|
|
25
|
+
this._context._condition = true;
|
|
26
|
+
this._updateView();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// otherwise delegate the check to RoleCheckDirective
|
|
31
|
+
this.hciHasRole = roleName;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
_updateView() {
|
|
35
|
+
this._viewContainer.clear();
|
|
36
|
+
if (this._context._condition) {
|
|
37
|
+
this._viewContainer.createEmbeddedView(this._templateRef, this._context);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this._viewContainer.createEmbeddedView(this._templateRef, this._context);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
RoleCheckUnlessNullDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RoleCheckUnlessNullDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.UserService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
45
|
+
RoleCheckUnlessNullDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: RoleCheckUnlessNullDirective, selector: "[hciHasRoleUnlessNull]", inputs: { hciHasRoleUnlessNull: "hciHasRoleUnlessNull" }, usesInheritance: true, ngImport: i0 });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RoleCheckUnlessNullDirective, decorators: [{
|
|
47
|
+
type: Directive,
|
|
48
|
+
args: [{
|
|
49
|
+
selector: "[hciHasRoleUnlessNull]"
|
|
50
|
+
}]
|
|
51
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i1.UserService }]; }, propDecorators: { hciHasRoleUnlessNull: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}] } });
|
|
54
|
+
/**
|
|
55
|
+
* I totally ripped off *ngIf source to get this to work correctly to prevent infinit loop rendering.
|
|
56
|
+
*/
|
|
57
|
+
export class HciHasRoleUnlessNullContext {
|
|
58
|
+
constructor() {
|
|
59
|
+
this._condition = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jaGVjay11bmxlc3MtbnVsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2stdW5sZXNzLW51bGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTVDOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxrQkFBa0I7SUFJbEUsWUFDRSxjQUFnQyxFQUNoQyxZQUFpQyxFQUNqQyxPQUFvQjtRQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQU52QyxhQUFRLEdBQWdDLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQU9sRixDQUFDO0lBRUQsSUFDSSxvQkFBb0IsQ0FBQyxRQUFnQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsbURBQW1EO1lBQ25ELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNwQjtTQUNGO2FBQU07WUFDTCxxREFBcUQ7WUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxRTtJQUNILENBQUM7OzBIQWhDVSw0QkFBNEI7OEdBQTVCLDRCQUE0Qjs0RkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNSLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ3BDOzJKQWFLLG9CQUFvQjtzQkFEdkIsS0FBSzs7QUF3QlI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBQXhDO1FBQ1MsZUFBVSxHQUFZLEtBQUssQ0FBQztJQUNyQyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFZpZXdDb250YWluZXJSZWYsIFRlbXBsYXRlUmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1JvbGVDaGVja0RpcmVjdGl2ZX0gZnJvbSBcIi4vcm9sZS1jaGVjay5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXIuc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIEFuIGV4dGVuc2lvbiBvZiB0aGUge0BsaW5rIFJvbGVDaGVja0RpcmVjdGl2ZX0gdGhlIG9ubHkgZXZhbHVhdGVzIHRoZSByb2xlIGlmIGlzIGl0IG5vdCBudWxsIG9yIHVuZGVmaW5lZC5cclxuICpcclxuICogVGhpcyBkaXJlY3RpdmUgcmVxdWlyZXMgdGhlIHtAbGluayBVc2VyU2VydmljZX0gYXMgYSBwcm92aWRlci5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgc2VsZWN0b3I6IFwiW2hjaUhhc1JvbGVVbmxlc3NOdWxsXVwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb2xlQ2hlY2tVbmxlc3NOdWxsRGlyZWN0aXZlIGV4dGVuZHMgUm9sZUNoZWNrRGlyZWN0aXZlIHtcclxuXHJcbiAgcHJpdmF0ZSBfY29udGV4dDogSGNpSGFzUm9sZVVubGVzc051bGxDb250ZXh0ID0gbmV3IEhjaUhhc1JvbGVVbmxlc3NOdWxsQ29udGV4dCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIF92aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxPYmplY3Q+LFxyXG4gICAgX3VzclN2YzogVXNlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKF92aWV3Q29udGFpbmVyLCBfdGVtcGxhdGVSZWYsIF91c3JTdmMpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaGNpSGFzUm9sZVVubGVzc051bGwocm9sZU5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKCFyb2xlTmFtZSkge1xyXG4gICAgICAvLyBpZiB0aGUgcm9sZU5hbWUgaXMgdW5kZWZpbmVkIG9yIG51bGwgdGhlbiByZW5kZXJcclxuICAgICAgaWYgKHRoaXMuX2NvbnRleHQuX2NvbmRpdGlvbiAhPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQuX2NvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlldygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBvdGhlcndpc2UgZGVsZWdhdGUgdGhlIGNoZWNrIHRvIFJvbGVDaGVja0RpcmVjdGl2ZVxyXG4gICAgICB0aGlzLmhjaUhhc1JvbGUgPSByb2xlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVZpZXcoKSB7XHJcbiAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5fY29udGV4dC5fY29uZGl0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmLCB0aGlzLl9jb250ZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmLCB0aGlzLl9jb250ZXh0KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJIHRvdGFsbHkgcmlwcGVkIG9mZiAqbmdJZiBzb3VyY2UgdG8gZ2V0IHRoaXMgdG8gd29yayBjb3JyZWN0bHkgdG8gcHJldmVudCBpbmZpbml0IGxvb3AgcmVuZGVyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEhjaUhhc1JvbGVVbmxlc3NOdWxsQ29udGV4dCB7XHJcbiAgcHVibGljIF9jb25kaXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
import { Directive, Input, TemplateRef, ViewContainerRef, isDevMode } from "@angular/core";
|
|
5
|
+
import { UserService } from "../user.service";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../user.service";
|
|
8
|
+
/**
|
|
9
|
+
* A structural directive for adding and removing elements of the client application based on a users <em>role</em>
|
|
10
|
+
* authorization claims.
|
|
11
|
+
*
|
|
12
|
+
* This directive requires the {@link UserService} as a provider.
|
|
13
|
+
*
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export class RoleCheckDirective {
|
|
17
|
+
constructor(_viewContainer, _templateRef, _usrSvc) {
|
|
18
|
+
this._viewContainer = _viewContainer;
|
|
19
|
+
this._templateRef = _templateRef;
|
|
20
|
+
this._usrSvc = _usrSvc;
|
|
21
|
+
this._lastCheck = null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Calculates the availability of a decorated element based on the authenticated users available roles.
|
|
25
|
+
*
|
|
26
|
+
* @param roleName for the role required to make the decorated element available
|
|
27
|
+
*/
|
|
28
|
+
set hciHasRole(roleName) {
|
|
29
|
+
if (isDevMode() && console && console.debug) {
|
|
30
|
+
console.debug("hciHasRole");
|
|
31
|
+
}
|
|
32
|
+
this._usrSvc.getAuthenticatedUser().subscribe((authUser) => {
|
|
33
|
+
let found;
|
|
34
|
+
if (authUser && authUser.Roles) {
|
|
35
|
+
found = authUser.Roles.some((role) => {
|
|
36
|
+
return role.RoleName === roleName;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
found = false;
|
|
41
|
+
}
|
|
42
|
+
if (found && (this._lastCheck === null || !this._lastCheck)) {
|
|
43
|
+
this._viewContainer.createEmbeddedView(this._templateRef);
|
|
44
|
+
}
|
|
45
|
+
else if (!found && (this._lastCheck === null || this._lastCheck)) {
|
|
46
|
+
this._viewContainer.clear();
|
|
47
|
+
}
|
|
48
|
+
}, (error) => {
|
|
49
|
+
// TODO: BHY (08/19/16) - Determine requirements around errors and then REMOVE CONSOLE LOGGING. Display to user,
|
|
50
|
+
// log to external source, gobble?
|
|
51
|
+
// Gobble up the error.
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
RoleCheckDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RoleCheckDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.UserService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
56
|
+
RoleCheckDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: RoleCheckDirective, selector: "[hciHasRole]", inputs: { hciHasRole: "hciHasRole" }, providers: [UserService], ngImport: i0 });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RoleCheckDirective, decorators: [{
|
|
58
|
+
type: Directive,
|
|
59
|
+
args: [{
|
|
60
|
+
selector: "[hciHasRole]",
|
|
61
|
+
providers: [UserService]
|
|
62
|
+
}]
|
|
63
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i1.UserService }]; }, propDecorators: { hciHasRole: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}] } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jaGVjay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7OztBQUc1Qzs7Ozs7OztHQU9HO0FBS0gsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixZQUFzQixjQUFnQyxFQUNoQyxZQUFpQyxFQUNqQyxPQUFvQjtRQUZwQixtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFKaEMsZUFBVSxHQUFZLElBQUksQ0FBQztJQUtyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ0ksVUFBVSxDQUFDLFFBQWdCO1FBQzdCLElBQUksU0FBUyxFQUFFLElBQVMsT0FBTyxJQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDckQsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFvQixFQUFFLEVBQUU7WUFDckUsSUFBSSxLQUFjLENBQUM7WUFFbkIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDOUIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNmO1lBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDM0Q7aUJBQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM3QjtRQUNILENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1gsZ0hBQWdIO1lBQ2hILGtDQUFrQztZQUNsQyx1QkFBdUI7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztnSEF4Q1Usa0JBQWtCO29HQUFsQixrQkFBa0IsNkVBRmxCLENBQUMsV0FBVyxDQUFDOzRGQUViLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN6QjsySkFlSyxVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBpc0Rldk1vZGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlckVudGl0eX0gZnJvbSBcIi4uL3VzZXIuZW50aXR5XCI7XHJcblxyXG4vKipcclxuICogQSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBlbGVtZW50cyBvZiB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGJhc2VkIG9uIGEgdXNlcnMgPGVtPnJvbGU8L2VtPlxyXG4gKiBhdXRob3JpemF0aW9uIGNsYWltcy5cclxuICpcclxuICogVGhpcyBkaXJlY3RpdmUgcmVxdWlyZXMgdGhlIHtAbGluayBVc2VyU2VydmljZX0gYXMgYSBwcm92aWRlci5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbaGNpSGFzUm9sZV1cIixcclxuICBwcm92aWRlcnM6IFtVc2VyU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJvbGVDaGVja0RpcmVjdGl2ZSB7XHJcbiAgcHJvdGVjdGVkIF9sYXN0Q2hlY2s6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3ZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8T2JqZWN0PixcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzclN2YzogVXNlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGRlY29yYXRlZCBlbGVtZW50IGJhc2VkIG9uIHRoZSBhdXRoZW50aWNhdGVkIHVzZXJzIGF2YWlsYWJsZSByb2xlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb2xlTmFtZSBmb3IgdGhlIHJvbGUgcmVxdWlyZWQgdG8gbWFrZSB0aGUgZGVjb3JhdGVkIGVsZW1lbnQgYXZhaWxhYmxlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaGNpSGFzUm9sZShyb2xlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgPGFueT5jb25zb2xlICYmIDxhbnk+Y29uc29sZS5kZWJ1Zykge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiaGNpSGFzUm9sZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91c3JTdmMuZ2V0QXV0aGVudGljYXRlZFVzZXIoKS5zdWJzY3JpYmUoKGF1dGhVc2VyOiBVc2VyRW50aXR5KSA9PiB7XHJcbiAgICAgIGxldCBmb3VuZDogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlmIChhdXRoVXNlciAmJiBhdXRoVXNlci5Sb2xlcykge1xyXG4gICAgICAgIGZvdW5kID0gYXV0aFVzZXIuUm9sZXMuc29tZSgocm9sZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGUuUm9sZU5hbWUgPT09IHJvbGVOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmb3VuZCAmJiAodGhpcy5fbGFzdENoZWNrID09PSBudWxsIHx8ICF0aGlzLl9sYXN0Q2hlY2spKSB7XHJcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xyXG4gICAgICB9IGVsc2UgaWYgKCFmb3VuZCAmJiAodGhpcy5fbGFzdENoZWNrID09PSBudWxsIHx8IHRoaXMuX2xhc3RDaGVjaykpIHtcclxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAvLyBUT0RPOiBCSFkgKDA4LzE5LzE2KSAtIERldGVybWluZSByZXF1aXJlbWVudHMgYXJvdW5kIGVycm9ycyBhbmQgdGhlbiBSRU1PVkUgQ09OU09MRSBMT0dHSU5HLiBEaXNwbGF5IHRvIHVzZXIsXHJcbiAgICAgIC8vIGxvZyB0byBleHRlcm5hbCBzb3VyY2UsIGdvYmJsZT9cclxuICAgICAgLy8gR29iYmxlIHVwIHRoZSBlcnJvci5cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuIl19
|
|
@@ -4,39 +4,29 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @since 1.0.0
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
export class RoleEntity {
|
|
8
|
+
constructor(roleName, permissions) {
|
|
9
9
|
this.roleName = roleName;
|
|
10
10
|
this.permissions = permissions;
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
get: function () {
|
|
34
|
-
return this.permissions;
|
|
35
|
-
},
|
|
36
|
-
enumerable: false,
|
|
37
|
-
configurable: true
|
|
38
|
-
});
|
|
39
|
-
return RoleEntity;
|
|
40
|
-
}());
|
|
41
|
-
export { RoleEntity };
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5lbnRpdHkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91c2VyLyIsInNvdXJjZXMiOlsiYXV0aG9yaXphdGlvbi9yb2xlLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQTs7Ozs7R0FLRztBQUNIO0lBQ0Usb0JBQXFCLFFBQWdCLEVBQVUsV0FBZ0M7UUFBMUQsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtJQUFHLENBQUM7SUFRbkYsc0JBQUksZ0NBQVE7UUFOWjs7Ozs7V0FLRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7OztPQUFBO0lBU0Qsc0JBQUksbUNBQVc7UUFQZjs7Ozs7O1dBTUc7YUFDSDtZQUNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDOzs7T0FBQTtJQUNILGlCQUFDO0FBQUQsQ0FBQyxBQXZCRCxJQXVCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7UGVybWlzc2lvbkVudGl0eX0gZnJvbSBcIi4vcGVybWlzc2lvbi5lbnRpdHlcIjtcclxuXHJcbi8qKlxyXG4gKiBBbiBpbW11dGFibGUgcmVwcmVzZW50YXRpb24gb2YgYW4gSENJIHJvbGUgZW50aXR5LCB3aGljaCByZXByZXNlbnRzIGFuIGF1dGhvcml6YXRpb24gY2xhaW0gYXNzb2NpYXRlZCB3aXRoIGFuIGF1dGhlbnRpY2F0ZWRcclxuICogc3ViamVjdC5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUm9sZUVudGl0eSB7XHJcbiAgY29uc3RydWN0b3IoIHByaXZhdGUgcm9sZU5hbWU6IHN0cmluZywgcHJpdmF0ZSBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25FbnRpdHlbXSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYWNjZXNzb3IgZm9yIHRoZSBuYW1lIG9mIHRoaXMgcm9sZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSByb2xlIG5hbWVcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKi9cclxuICBnZXQgUm9sZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJvbGVOYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYWNjZXNzb3IgZm9yIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgUGVybWlzc2lvbkVudGl0eX0gYXV0aG9yaXphdGlvbiBjbGFpbXMgdGhhdCBkZWZpbmUgdGhpcyByb2xlLiBQZXJtaXNzaW9uc1xyXG4gICAqIHByb3ZpZGUgYSBmaW5lciBncmFpbmVkIGF1dGhvcml6YXRpb24gY2xhaW0gZGVzY3JpcHRpb24gYW5kIGFyZSBub3QgcmVxdWlyZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UGVybWlzc2lvbkVudGl0eVtdfSBhIGNvbGxlY3Rpb24gb2YgcGVybWlzc2lvbiBlbnRpdGllc1xyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBQZXJtaXNzaW9ucygpOiBQZXJtaXNzaW9uRW50aXR5W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
12
|
+
/**
|
|
13
|
+
* An accessor for the name of this role.
|
|
14
|
+
*
|
|
15
|
+
* @returns {string} the role name
|
|
16
|
+
* @constructor
|
|
17
|
+
*/
|
|
18
|
+
get RoleName() {
|
|
19
|
+
return this.roleName;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* An accessor for a collection of {@link PermissionEntity} authorization claims that define this role. Permissions
|
|
23
|
+
* provide a finer grained authorization claim description and are not required.
|
|
24
|
+
*
|
|
25
|
+
* @returns {PermissionEntity[]} a collection of permission entities
|
|
26
|
+
* @constructor
|
|
27
|
+
*/
|
|
28
|
+
get Permissions() {
|
|
29
|
+
return this.permissions;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3JvbGUuZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDckIsWUFBcUIsUUFBZ0IsRUFBVSxXQUFnQztRQUExRCxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQXFCO0lBQUcsQ0FBQztJQUVuRjs7Ozs7T0FLRztJQUNILElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7UGVybWlzc2lvbkVudGl0eX0gZnJvbSBcIi4vcGVybWlzc2lvbi5lbnRpdHlcIjtcclxuXHJcbi8qKlxyXG4gKiBBbiBpbW11dGFibGUgcmVwcmVzZW50YXRpb24gb2YgYW4gSENJIHJvbGUgZW50aXR5LCB3aGljaCByZXByZXNlbnRzIGFuIGF1dGhvcml6YXRpb24gY2xhaW0gYXNzb2NpYXRlZCB3aXRoIGFuIGF1dGhlbnRpY2F0ZWRcclxuICogc3ViamVjdC5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUm9sZUVudGl0eSB7XHJcbiAgY29uc3RydWN0b3IoIHByaXZhdGUgcm9sZU5hbWU6IHN0cmluZywgcHJpdmF0ZSBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25FbnRpdHlbXSkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYWNjZXNzb3IgZm9yIHRoZSBuYW1lIG9mIHRoaXMgcm9sZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSByb2xlIG5hbWVcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKi9cclxuICBnZXQgUm9sZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJvbGVOYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYWNjZXNzb3IgZm9yIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgUGVybWlzc2lvbkVudGl0eX0gYXV0aG9yaXphdGlvbiBjbGFpbXMgdGhhdCBkZWZpbmUgdGhpcyByb2xlLiBQZXJtaXNzaW9uc1xyXG4gICAqIHByb3ZpZGUgYSBmaW5lciBncmFpbmVkIGF1dGhvcml6YXRpb24gY2xhaW0gZGVzY3JpcHRpb24gYW5kIGFyZSBub3QgcmVxdWlyZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UGVybWlzc2lvbkVudGl0eVtdfSBhIGNvbGxlY3Rpb24gb2YgcGVybWlzc2lvbiBlbnRpdGllc1xyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBQZXJtaXNzaW9ucygpOiBQZXJtaXNzaW9uRW50aXR5W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS11c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdXNlci9zcmMvaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS11c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* A barrel file for the HCI ng2 user package.
|
|
6
|
+
*
|
|
7
|
+
* @since 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
export { UserModule } from "./user.module";
|
|
10
|
+
export { UserEntity } from "./user.entity";
|
|
11
|
+
export { RoleEntity } from "./authorization/role.entity";
|
|
12
|
+
export { PermissionEntity } from "./authorization/permission.entity";
|
|
13
|
+
/**
|
|
14
|
+
* The opaque tokens for service configuration.
|
|
15
|
+
*/
|
|
16
|
+
export { AUTHENTICATED_USER_ENDPOINT } from "./user.service";
|
|
17
|
+
export { UserService } from "./user.service";
|
|
18
|
+
export { RoleCheckDirective } from "./authorization/role-check.directive";
|
|
19
|
+
export { RoleCheckUnlessNullDirective } from "./authorization/role-check-unless-null.directive";
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVIOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBQ3RELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFBO0FBRWxFOztHQUVHO0FBQ0gsT0FBTyxFQUNMLDJCQUEyQixFQUM1QixNQUFNLGdCQUFnQixDQUFBO0FBRXZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUxQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQSBiYXJyZWwgZmlsZSBmb3IgdGhlIEhDSSBuZzIgdXNlciBwYWNrYWdlLlxyXG4gKlxyXG4gKiBAc2luY2UgMS4wLjBcclxuICovXHJcbmV4cG9ydCB7VXNlck1vZHVsZX0gZnJvbSBcIi4vdXNlci5tb2R1bGVcIlxyXG5leHBvcnQge1VzZXJFbnRpdHl9IGZyb20gXCIuL3VzZXIuZW50aXR5XCJcclxuZXhwb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUuZW50aXR5XCJcclxuZXhwb3J0IHtQZXJtaXNzaW9uRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3Blcm1pc3Npb24uZW50aXR5XCJcclxuXHJcbi8qKlxyXG4gKiBUaGUgb3BhcXVlIHRva2VucyBmb3Igc2VydmljZSBjb25maWd1cmF0aW9uLlxyXG4gKi9cclxuZXhwb3J0IHtcclxuICBBVVRIRU5USUNBVEVEX1VTRVJfRU5EUE9JTlRcclxufSBmcm9tIFwiLi91c2VyLnNlcnZpY2VcIlxyXG5cclxuZXhwb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vdXNlci5zZXJ2aWNlXCJcclxuXHJcbmV4cG9ydCB7Um9sZUNoZWNrRGlyZWN0aXZlfSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2suZGlyZWN0aXZlXCI7XHJcbmV4cG9ydCB7Um9sZUNoZWNrVW5sZXNzTnVsbERpcmVjdGl2ZX0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi9yb2xlLWNoZWNrLXVubGVzcy1udWxsLmRpcmVjdGl2ZVwiO1xyXG5cclxuIl19
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An immutable representation of an HCI user entity.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
export class UserEntity {
|
|
7
|
+
constructor(id, username, roles, firstname, lastname, href) {
|
|
8
|
+
this.id = id;
|
|
9
|
+
this.username = username;
|
|
10
|
+
this.roles = roles;
|
|
11
|
+
this.firstname = firstname;
|
|
12
|
+
this.lastname = lastname;
|
|
13
|
+
this.href = href;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* An accessor for the users system id.
|
|
17
|
+
*
|
|
18
|
+
* @returns {string} the system id
|
|
19
|
+
* @constructor
|
|
20
|
+
*/
|
|
21
|
+
get Id() {
|
|
22
|
+
return this.id;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* An accessor for the users application identifier/username.
|
|
26
|
+
*
|
|
27
|
+
* @returns {string} the application id/username
|
|
28
|
+
* @constructor
|
|
29
|
+
*/
|
|
30
|
+
get Username() {
|
|
31
|
+
return this.username;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* An accessor for the users assigned role authorization claims.
|
|
35
|
+
*
|
|
36
|
+
* @returns {@code RoleEntity[]} the role authorization claims
|
|
37
|
+
* @constructor
|
|
38
|
+
*/
|
|
39
|
+
get Roles() {
|
|
40
|
+
return this.roles;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* An accessor for the users firstname.
|
|
44
|
+
*
|
|
45
|
+
* @return {string} the firstname
|
|
46
|
+
* @constructor
|
|
47
|
+
*/
|
|
48
|
+
get Firstname() {
|
|
49
|
+
return this.firstname;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A accessor for the users lastname.
|
|
53
|
+
*
|
|
54
|
+
* @return {string} the lastname
|
|
55
|
+
* @constructor
|
|
56
|
+
*/
|
|
57
|
+
get Lastname() {
|
|
58
|
+
return this.lastname;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A access for the users fully qualified href location on the system.
|
|
62
|
+
*
|
|
63
|
+
* @return {string} the href location
|
|
64
|
+
* @constructor
|
|
65
|
+
*/
|
|
66
|
+
get Href() {
|
|
67
|
+
return this.href;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy91c2VyLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDckIsWUFBb0IsRUFBVSxFQUNWLFFBQWdCLEVBQ2hCLEtBQW9CLEVBQ3BCLFNBQWtCLEVBQ2xCLFFBQWlCLEVBQ2pCLElBQWE7UUFMYixPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ1YsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixTQUFJLEdBQUosSUFBSSxDQUFTO0lBQ2pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7Um9sZUVudGl0eX0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi9yb2xlLmVudGl0eVwiO1xyXG5cclxuLyoqXHJcbiAqIEFuIGltbXV0YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBIQ0kgdXNlciBlbnRpdHkuXHJcbiAqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFVzZXJFbnRpdHkge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaWQ6IHN0cmluZyxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb2xlcz86IFJvbGVFbnRpdHlbXSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGZpcnN0bmFtZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICBwcml2YXRlIGxhc3RuYW1lPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgaHJlZj86IHN0cmluZykge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYWNjZXNzb3IgZm9yIHRoZSB1c2VycyBzeXN0ZW0gaWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgc3lzdGVtIGlkXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICovXHJcbiAgZ2V0IElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuIGFjY2Vzc29yIGZvciB0aGUgdXNlcnMgYXBwbGljYXRpb24gaWRlbnRpZmllci91c2VybmFtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhcHBsaWNhdGlvbiBpZC91c2VybmFtZVxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBVc2VybmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlcm5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIHVzZXJzIGFzc2lnbmVkIHJvbGUgYXV0aG9yaXphdGlvbiBjbGFpbXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QGNvZGUgUm9sZUVudGl0eVtdfSB0aGUgcm9sZSBhdXRob3JpemF0aW9uIGNsYWltc1xyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBSb2xlcygpOiBSb2xlRW50aXR5W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucm9sZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIHVzZXJzIGZpcnN0bmFtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGZpcnN0bmFtZVxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBGaXJzdG5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZpcnN0bmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgYWNjZXNzb3IgZm9yIHRoZSB1c2VycyBsYXN0bmFtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGxhc3RuYW1lXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICovXHJcbiAgZ2V0IExhc3RuYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0bmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgYWNjZXNzIGZvciB0aGUgdXNlcnMgZnVsbHkgcXVhbGlmaWVkIGhyZWYgbG9jYXRpb24gb24gdGhlIHN5c3RlbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGhyZWYgbG9jYXRpb25cclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKi9cclxuICBnZXQgSHJlZigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaHJlZjtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
import { NgModule } from "@angular/core";
|
|
5
|
+
import { CommonModule } from "@angular/common";
|
|
6
|
+
import { ReactiveFormsModule, FormsModule } from "@angular/forms";
|
|
7
|
+
import { UserService } from "./user.service";
|
|
8
|
+
import { RoleCheckDirective } from "./authorization/role-check.directive";
|
|
9
|
+
import { RoleCheckUnlessNullDirective } from "./authorization/role-check-unless-null.directive";
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
/**
|
|
12
|
+
* A feature module for user related services, directives, pipes, etc...
|
|
13
|
+
*
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export class UserModule {
|
|
17
|
+
static forRoot() {
|
|
18
|
+
return {
|
|
19
|
+
providers: [
|
|
20
|
+
UserService
|
|
21
|
+
],
|
|
22
|
+
ngModule: UserModule
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
UserModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
27
|
+
UserModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: UserModule, declarations: [RoleCheckDirective,
|
|
28
|
+
RoleCheckUnlessNullDirective], imports: [CommonModule,
|
|
29
|
+
ReactiveFormsModule,
|
|
30
|
+
FormsModule], exports: [RoleCheckDirective,
|
|
31
|
+
RoleCheckUnlessNullDirective] });
|
|
32
|
+
UserModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserModule, imports: [CommonModule,
|
|
33
|
+
ReactiveFormsModule,
|
|
34
|
+
FormsModule] });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserModule, decorators: [{
|
|
36
|
+
type: NgModule,
|
|
37
|
+
args: [{
|
|
38
|
+
imports: [
|
|
39
|
+
CommonModule,
|
|
40
|
+
ReactiveFormsModule,
|
|
41
|
+
FormsModule
|
|
42
|
+
],
|
|
43
|
+
declarations: [
|
|
44
|
+
RoleCheckDirective,
|
|
45
|
+
RoleCheckUnlessNullDirective
|
|
46
|
+
],
|
|
47
|
+
exports: [
|
|
48
|
+
RoleCheckDirective,
|
|
49
|
+
RoleCheckUnlessNullDirective
|
|
50
|
+
]
|
|
51
|
+
}]
|
|
52
|
+
}] });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy91c2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBc0IsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDOztBQUU5Rjs7OztHQUlHO0FBZ0JILE1BQU0sT0FBTyxVQUFVO0lBQ3JCLE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTztZQUNMLFNBQVMsRUFBRTtnQkFDVCxXQUFXO2FBQ1o7WUFDRCxRQUFRLEVBQUUsVUFBVTtTQUNyQixDQUFDO0lBQ0osQ0FBQzs7d0dBUlUsVUFBVTt5R0FBVixVQUFVLGlCQVJuQixrQkFBa0I7UUFDbEIsNEJBQTRCLGFBTjVCLFlBQVk7UUFDWixtQkFBbUI7UUFDbkIsV0FBVyxhQU9YLGtCQUFrQjtRQUNsQiw0QkFBNEI7eUdBR25CLFVBQVUsWUFibkIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixXQUFXOzRGQVdGLFVBQVU7a0JBZnRCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3FCQUNaO29CQUNELFlBQVksRUFBRTt3QkFDWixrQkFBa0I7d0JBQ2xCLDRCQUE0QjtxQkFDN0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGtCQUFrQjt3QkFDbEIsNEJBQTRCO3FCQUM3QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7TW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7UmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Um9sZUNoZWNrRGlyZWN0aXZlfSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2suZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7Um9sZUNoZWNrVW5sZXNzTnVsbERpcmVjdGl2ZX0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi9yb2xlLWNoZWNrLXVubGVzcy1udWxsLmRpcmVjdGl2ZVwiO1xyXG5cclxuLyoqXHJcbiAqIEEgZmVhdHVyZSBtb2R1bGUgZm9yIHVzZXIgcmVsYXRlZCBzZXJ2aWNlcywgZGlyZWN0aXZlcywgcGlwZXMsIGV0Yy4uLlxyXG4gKlxyXG4gKiBAc2luY2UgMS4wLjBcclxuICovXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFJvbGVDaGVja0RpcmVjdGl2ZSxcclxuICAgIFJvbGVDaGVja1VubGVzc051bGxEaXJlY3RpdmVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFJvbGVDaGVja0RpcmVjdGl2ZSxcclxuICAgIFJvbGVDaGVja1VubGVzc051bGxEaXJlY3RpdmVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFVzZXJNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIFVzZXJTZXJ2aWNlXHJcbiAgICAgIF0sXHJcbiAgICAgIG5nTW9kdWxlOiBVc2VyTW9kdWxlXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
import { Injectable, InjectionToken, Inject, isDevMode } from "@angular/core";
|
|
5
|
+
import { HttpClient, HttpHeaders } from "@angular/common/http";
|
|
6
|
+
import { Observable, of } from "rxjs";
|
|
7
|
+
import { catchError, map } from "rxjs/operators";
|
|
8
|
+
import { UserEntity } from "./user.entity";
|
|
9
|
+
import { RoleEntity } from "./authorization/role.entity";
|
|
10
|
+
import { PermissionEntity } from "./authorization/permission.entity";
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common/http";
|
|
13
|
+
export let AUTHENTICATED_USER_ENDPOINT = new InjectionToken("authenticated_user_url");
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export class UserService {
|
|
18
|
+
constructor(_http, _authenticationUserEndpoint) {
|
|
19
|
+
this._http = _http;
|
|
20
|
+
this._authenticationUserEndpoint = _authenticationUserEndpoint;
|
|
21
|
+
this._authenticatedUser = null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* An accessor for an {@code Observable<UserEntity>} reflecting the currently authenticated user. If no subject is
|
|
25
|
+
* available, the appropriate response status should be returned from the server to indicate that condition
|
|
26
|
+
* (i.e. 404 - Not Found).
|
|
27
|
+
*
|
|
28
|
+
* @returns {Observable<UserEntity>} the currently authenticated user representation
|
|
29
|
+
*/
|
|
30
|
+
getAuthenticatedUser() {
|
|
31
|
+
if (isDevMode() && console && console.debug) {
|
|
32
|
+
console.debug("getAuthenticatedUser");
|
|
33
|
+
}
|
|
34
|
+
if (!this._authenticatedUser) {
|
|
35
|
+
if (isDevMode() && console && console.debug) {
|
|
36
|
+
console.debug("_authenticationUserEndpoint: " + this._authenticationUserEndpoint);
|
|
37
|
+
}
|
|
38
|
+
return this._http.get(this._authenticationUserEndpoint, { observe: "response" }).pipe(map((resp) => {
|
|
39
|
+
if (resp.status === 200) {
|
|
40
|
+
this._authenticatedUser = this.buildUserEntity(resp.body);
|
|
41
|
+
return this._authenticatedUser;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new Error("Get authenticated user failed. " + resp.status + ": " + resp.statusText);
|
|
45
|
+
}
|
|
46
|
+
}), catchError(this.handleError));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return of(this._authenticatedUser);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
handleError(error) {
|
|
53
|
+
let errMsg = (error.message) ? error.message : UserService.GENERIC_ERR_MSG;
|
|
54
|
+
return Observable.throw(errMsg);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* TODO: Add in a deserializer into the entity.
|
|
58
|
+
*
|
|
59
|
+
* @param userJson
|
|
60
|
+
* @returns {UserEntity}
|
|
61
|
+
*/
|
|
62
|
+
buildUserEntity(userJson) {
|
|
63
|
+
let roles = [];
|
|
64
|
+
if (userJson.roles) {
|
|
65
|
+
userJson.roles.map((role) => {
|
|
66
|
+
let permissions;
|
|
67
|
+
if (role.permissions) {
|
|
68
|
+
/* TODO: JEH (10/27/16) - Revisit when we determine how permission are communicated to the client, if necessary */
|
|
69
|
+
permissions = role.permissions.map((permission) => {
|
|
70
|
+
return new PermissionEntity(permission.domain, permission.actions, permission.instances);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
roles.push(new RoleEntity(role.roleName, permissions));
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return new UserEntity(userJson.idUser, userJson.username, roles, userJson.firstname, userJson.lastname, userJson.href);
|
|
77
|
+
}
|
|
78
|
+
getPermissions(governorClass, governorId, governedClass) {
|
|
79
|
+
let headers = new HttpHeaders()
|
|
80
|
+
.set("SecurityGovernorClass", governorClass).set("SecurityGovernorId", String(governorId));
|
|
81
|
+
return this._http.get("/core/api/user/permissions/" + governedClass, { headers: headers });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The generic error message used when a server error is thrown without a status.
|
|
86
|
+
*
|
|
87
|
+
* @type {string}
|
|
88
|
+
*/
|
|
89
|
+
UserService.GENERIC_ERR_MSG = "Server error";
|
|
90
|
+
UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, deps: [{ token: i1.HttpClient }, { token: AUTHENTICATED_USER_ENDPOINT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
91
|
+
UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService });
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, decorators: [{
|
|
93
|
+
type: Injectable
|
|
94
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
95
|
+
type: Inject,
|
|
96
|
+
args: [AUTHENTICATED_USER_ENDPOINT]
|
|
97
|
+
}] }]; } });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdXNlci9zcmMvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUMsVUFBVSxFQUFnQixXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRSxPQUFPLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOzs7QUFFbkUsTUFBTSxDQUFDLElBQUksMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQVMsd0JBQXdCLENBQUMsQ0FBQztBQUU5Rjs7R0FFRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBVXRCLFlBQW9CLEtBQWlCLEVBQStDLDJCQUFtQztRQUFuRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQStDLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBUTtRQUYvRyx1QkFBa0IsR0FBZSxJQUFJLENBQUM7SUFFNEUsQ0FBQztJQUUzSDs7Ozs7O09BTUc7SUFDSSxvQkFBb0I7UUFDekIsSUFBSSxTQUFTLEVBQUUsSUFBUyxPQUFPLElBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLElBQUksU0FBUyxFQUFFLElBQVMsT0FBTyxJQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7YUFDbkY7WUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUF1QixFQUFFLEVBQUU7Z0JBQ3BILElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUMzRjtZQUNILENBQUMsQ0FBQyxFQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUNqQzthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQVU7UUFDNUIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFFM0UsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FBQyxRQUFhO1FBQ25DLElBQUksS0FBSyxHQUFpQixFQUFFLENBQUM7UUFDN0IsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQ2xCLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksV0FBK0IsQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNwQixrSEFBa0g7b0JBQ2xILFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO3dCQUNyRCxPQUFPLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDM0YsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFTSxjQUFjLENBQUMsYUFBcUIsRUFBRSxVQUFrQixFQUFFLGFBQXFCO1FBQ2xGLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFO2FBQzlCLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsR0FBRyxhQUFhLEVBQUUsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDOztBQTVFRDs7OztHQUlHO0FBQ1csMkJBQWUsR0FBVyxjQUFjLENBQUM7eUdBTjVDLFdBQVcsNENBVXlCLDJCQUEyQjs2R0FWL0QsV0FBVzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVOzswQkFXK0IsTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0luamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3QsIGlzRGV2TW9kZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2UsIEh0dHBIZWFkZXJzfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuXHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7VXNlckVudGl0eX0gZnJvbSBcIi4vdXNlci5lbnRpdHlcIjtcclxuaW1wb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiLi9hdXRob3JpemF0aW9uL3JvbGUuZW50aXR5XCI7XHJcbmltcG9ydCB7UGVybWlzc2lvbkVudGl0eX0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uLmVudGl0eVwiO1xyXG5cclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVEVEX1VTRVJfRU5EUE9JTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImF1dGhlbnRpY2F0ZWRfdXNlcl91cmxcIik7XHJcblxyXG4vKipcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSB1c2VkIHdoZW4gYSBzZXJ2ZXIgZXJyb3IgaXMgdGhyb3duIHdpdGhvdXQgYSBzdGF0dXMuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgR0VORVJJQ19FUlJfTVNHOiBzdHJpbmcgPSBcIlNlcnZlciBlcnJvclwiO1xyXG5cclxuICBwcml2YXRlIF9hdXRoZW50aWNhdGVkVXNlcjogVXNlckVudGl0eSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoQVVUSEVOVElDQVRFRF9VU0VSX0VORFBPSU5UKSBwcml2YXRlIF9hdXRoZW50aWNhdGlvblVzZXJFbmRwb2ludDogc3RyaW5nKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgYW4ge0Bjb2RlIE9ic2VydmFibGU8VXNlckVudGl0eT59IHJlZmxlY3RpbmcgdGhlIGN1cnJlbnRseSBhdXRoZW50aWNhdGVkIHVzZXIuIElmIG5vIHN1YmplY3QgaXNcclxuICAgKiBhdmFpbGFibGUsIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBzdGF0dXMgc2hvdWxkIGJlIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciB0byBpbmRpY2F0ZSB0aGF0IGNvbmRpdGlvblxyXG4gICAqIChpLmUuIDQwNCAtIE5vdCBGb3VuZCkuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxVc2VyRW50aXR5Pn0gdGhlIGN1cnJlbnRseSBhdXRoZW50aWNhdGVkIHVzZXIgcmVwcmVzZW50YXRpb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0QXV0aGVudGljYXRlZFVzZXIoKTogT2JzZXJ2YWJsZTxVc2VyRW50aXR5PiB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgPGFueT5jb25zb2xlICYmIDxhbnk+Y29uc29sZS5kZWJ1Zykge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiZ2V0QXV0aGVudGljYXRlZFVzZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9hdXRoZW50aWNhdGVkVXNlcikge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgPGFueT5jb25zb2xlICYmIDxhbnk+Y29uc29sZS5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJfYXV0aGVudGljYXRpb25Vc2VyRW5kcG9pbnQ6IFwiICsgdGhpcy5fYXV0aGVudGljYXRpb25Vc2VyRW5kcG9pbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQodGhpcy5fYXV0aGVudGljYXRpb25Vc2VyRW5kcG9pbnQsIHsgb2JzZXJ2ZTogXCJyZXNwb25zZVwiIH0pLnBpcGUobWFwKChyZXNwOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLl9hdXRoZW50aWNhdGVkVXNlciA9IHRoaXMuYnVpbGRVc2VyRW50aXR5KHJlc3AuYm9keSk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0aGVudGljYXRlZFVzZXI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdldCBhdXRoZW50aWNhdGVkIHVzZXIgZmFpbGVkLiBcIiArIHJlc3Auc3RhdHVzICsgXCI6IFwiICsgcmVzcC5zdGF0dXNUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMuX2F1dGhlbnRpY2F0ZWRVc2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgbGV0IGVyck1zZyA9IChlcnJvci5tZXNzYWdlKSA/IGVycm9yLm1lc3NhZ2UgOiBVc2VyU2VydmljZS5HRU5FUklDX0VSUl9NU0c7XHJcblxyXG4gICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyTXNnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRPRE86IEFkZCBpbiBhIGRlc2VyaWFsaXplciBpbnRvIHRoZSBlbnRpdHkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdXNlckpzb25cclxuICAgKiBAcmV0dXJucyB7VXNlckVudGl0eX1cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkVXNlckVudGl0eSh1c2VySnNvbjogYW55KTogVXNlckVudGl0eSB7XHJcbiAgICBsZXQgcm9sZXM6IFJvbGVFbnRpdHlbXSA9IFtdO1xyXG4gICAgaWYgKHVzZXJKc29uLnJvbGVzKSB7XHJcbiAgICAgIHVzZXJKc29uLnJvbGVzLm1hcCgocm9sZTogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uRW50aXR5W107XHJcbiAgICAgICAgaWYgKHJvbGUucGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgIC8qIFRPRE86IEpFSCAoMTAvMjcvMTYpIC0gUmV2aXNpdCB3aGVuIHdlIGRldGVybWluZSBob3cgcGVybWlzc2lvbiBhcmUgY29tbXVuaWNhdGVkIHRvIHRoZSBjbGllbnQsIGlmIG5lY2Vzc2FyeSAqL1xyXG4gICAgICAgICAgcGVybWlzc2lvbnMgPSByb2xlLnBlcm1pc3Npb25zLm1hcCgocGVybWlzc2lvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUGVybWlzc2lvbkVudGl0eShwZXJtaXNzaW9uLmRvbWFpbiwgcGVybWlzc2lvbi5hY3Rpb25zLCBwZXJtaXNzaW9uLmluc3RhbmNlcyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9sZXMucHVzaChuZXcgUm9sZUVudGl0eShyb2xlLnJvbGVOYW1lLCBwZXJtaXNzaW9ucykpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IFVzZXJFbnRpdHkodXNlckpzb24uaWRVc2VyLCB1c2VySnNvbi51c2VybmFtZSwgcm9sZXMsIHVzZXJKc29uLmZpcnN0bmFtZSwgdXNlckpzb24ubGFzdG5hbWUsIHVzZXJKc29uLmhyZWYpO1xyXG4gIH1cclxuICBcclxuICBwdWJsaWMgZ2V0UGVybWlzc2lvbnMoZ292ZXJub3JDbGFzczogc3RyaW5nLCBnb3Zlcm5vcklkOiBudW1iZXIsIGdvdmVybmVkQ2xhc3M6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiAge1xyXG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgIC5zZXQoXCJTZWN1cml0eUdvdmVybm9yQ2xhc3NcIiwgZ292ZXJub3JDbGFzcykuc2V0KFwiU2VjdXJpdHlHb3Zlcm5vcklkXCIsIFN0cmluZyhnb3Zlcm5vcklkKSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChcIi9jb3JlL2FwaS91c2VyL3Blcm1pc3Npb25zL1wiICsgZ292ZXJuZWRDbGFzcywge2hlYWRlcnM6IGhlYWRlcnN9KTtcclxuICB9XHJcbn1cclxuIl19
|