@huntsman-cancer-institute/user 16.0.0 → 17.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.
@@ -1,34 +1,34 @@
1
- /**
2
- * An immutable representation of an HCI permission entity, which represents a fine grained authorization claim that can
3
- * define a {@link RoleEntity}.
4
- *
5
- * @since 1.0.0
6
- */
7
- export declare class PermissionEntity {
8
- private domain;
9
- private actions?;
10
- private instances?;
11
- constructor(domain: string, actions?: string[], instances?: string[]);
12
- /**
13
- * An accessor for the domain this permission is defined for (i.e. user, study, specimen, etc...).
14
- *
15
- * @returns {string} the domain of this permission
16
- * @constructor
17
- */
18
- get Domain(): string;
19
- /**
20
- * An accessor for the actions that this permission allows in the specified domain (i.e. create, read, activate, manage
21
- * etc...). If no actions are defined, this permission claims access to all actions of the specified domain.
22
- *
23
- * @returns {string[]} an array of actions for the specified domain
24
- * @constructor
25
- */
26
- get Actions(): string[];
27
- /**
28
- * An accessor for the instances that this permission is applicable to in the specified domain (i.e. joe, 1234, study-foo,
29
- * etc...). If no instances are defined, this permission claims applicability to all instances of the specified domain.
30
- * @returns {string[]}
31
- * @constructor
32
- */
33
- get Instances(): string[];
34
- }
1
+ /**
2
+ * An immutable representation of an HCI permission entity, which represents a fine grained authorization claim that can
3
+ * define a {@link RoleEntity}.
4
+ *
5
+ * @since 1.0.0
6
+ */
7
+ export declare class PermissionEntity {
8
+ private domain;
9
+ private actions?;
10
+ private instances?;
11
+ constructor(domain: string, actions?: string[], instances?: string[]);
12
+ /**
13
+ * An accessor for the domain this permission is defined for (i.e. user, study, specimen, etc...).
14
+ *
15
+ * @returns {string} the domain of this permission
16
+ * @constructor
17
+ */
18
+ get Domain(): string;
19
+ /**
20
+ * An accessor for the actions that this permission allows in the specified domain (i.e. create, read, activate, manage
21
+ * etc...). If no actions are defined, this permission claims access to all actions of the specified domain.
22
+ *
23
+ * @returns {string[]} an array of actions for the specified domain
24
+ * @constructor
25
+ */
26
+ get Actions(): string[];
27
+ /**
28
+ * An accessor for the instances that this permission is applicable to in the specified domain (i.e. joe, 1234, study-foo,
29
+ * etc...). If no instances are defined, this permission claims applicability to all instances of the specified domain.
30
+ * @returns {string[]}
31
+ * @constructor
32
+ */
33
+ get Instances(): string[];
34
+ }
@@ -1,25 +1,25 @@
1
- import { ViewContainerRef, TemplateRef } from "@angular/core";
2
- import { RoleCheckDirective } from "./role-check.directive";
3
- import { UserService } from "../user.service";
4
- import * as i0 from "@angular/core";
5
- /**
6
- * An extension of the {@link RoleCheckDirective} the only evaluates the role if is it not null or undefined.
7
- *
8
- * This directive requires the {@link UserService} as a provider.
9
- *
10
- * @since 1.0.0
11
- */
12
- export declare class RoleCheckUnlessNullDirective extends RoleCheckDirective {
13
- private _context;
14
- constructor(_viewContainer: ViewContainerRef, _templateRef: TemplateRef<Object>, _usrSvc: UserService);
15
- set hciHasRoleUnlessNull(roleName: string);
16
- private _updateView;
17
- static ɵfac: i0.ɵɵFactoryDeclaration<RoleCheckUnlessNullDirective, never>;
18
- static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckUnlessNullDirective, "[hciHasRoleUnlessNull]", never, { "hciHasRoleUnlessNull": { "alias": "hciHasRoleUnlessNull"; "required": false; }; }, {}, never, never, false, never>;
19
- }
20
- /**
21
- * I totally ripped off *ngIf source to get this to work correctly to prevent infinit loop rendering.
22
- */
23
- export declare class HciHasRoleUnlessNullContext {
24
- _condition: boolean;
25
- }
1
+ import { ViewContainerRef, TemplateRef } from "@angular/core";
2
+ import { RoleCheckDirective } from "./role-check.directive";
3
+ import { UserService } from "../user.service";
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * An extension of the {@link RoleCheckDirective} the only evaluates the role if is it not null or undefined.
7
+ *
8
+ * This directive requires the {@link UserService} as a provider.
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ export declare class RoleCheckUnlessNullDirective extends RoleCheckDirective {
13
+ private _context;
14
+ constructor(_viewContainer: ViewContainerRef, _templateRef: TemplateRef<Object>, _usrSvc: UserService);
15
+ set hciHasRoleUnlessNull(roleName: string);
16
+ private _updateView;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<RoleCheckUnlessNullDirective, never>;
18
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckUnlessNullDirective, "[hciHasRoleUnlessNull]", never, { "hciHasRoleUnlessNull": { "alias": "hciHasRoleUnlessNull"; "required": false; }; }, {}, never, never, false, never>;
19
+ }
20
+ /**
21
+ * I totally ripped off *ngIf source to get this to work correctly to prevent infinit loop rendering.
22
+ */
23
+ export declare class HciHasRoleUnlessNullContext {
24
+ _condition: boolean;
25
+ }
@@ -1,26 +1,26 @@
1
- import { TemplateRef, ViewContainerRef } from "@angular/core";
2
- import { UserService } from "../user.service";
3
- import * as i0 from "@angular/core";
4
- /**
5
- * A structural directive for adding and removing elements of the client application based on a users <em>role</em>
6
- * authorization claims.
7
- *
8
- * This directive requires the {@link UserService} as a provider.
9
- *
10
- * @since 1.0.0
11
- */
12
- export declare class RoleCheckDirective {
13
- protected _viewContainer: ViewContainerRef;
14
- protected _templateRef: TemplateRef<Object>;
15
- protected _usrSvc: UserService;
16
- protected _lastCheck: boolean;
17
- constructor(_viewContainer: ViewContainerRef, _templateRef: TemplateRef<Object>, _usrSvc: UserService);
18
- /**
19
- * Calculates the availability of a decorated element based on the authenticated users available roles.
20
- *
21
- * @param roleName for the role required to make the decorated element available
22
- */
23
- set hciHasRole(roleName: string);
24
- static ɵfac: i0.ɵɵFactoryDeclaration<RoleCheckDirective, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckDirective, "[hciHasRole]", never, { "hciHasRole": { "alias": "hciHasRole"; "required": false; }; }, {}, never, never, false, never>;
26
- }
1
+ import { TemplateRef, ViewContainerRef } from "@angular/core";
2
+ import { UserService } from "../user.service";
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * A structural directive for adding and removing elements of the client application based on a users <em>role</em>
6
+ * authorization claims.
7
+ *
8
+ * This directive requires the {@link UserService} as a provider.
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ export declare class RoleCheckDirective {
13
+ protected _viewContainer: ViewContainerRef;
14
+ protected _templateRef: TemplateRef<Object>;
15
+ protected _usrSvc: UserService;
16
+ protected _lastCheck: boolean;
17
+ constructor(_viewContainer: ViewContainerRef, _templateRef: TemplateRef<Object>, _usrSvc: UserService);
18
+ /**
19
+ * Calculates the availability of a decorated element based on the authenticated users available roles.
20
+ *
21
+ * @param roleName for the role required to make the decorated element available
22
+ */
23
+ set hciHasRole(roleName: string);
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<RoleCheckDirective, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RoleCheckDirective, "[hciHasRole]", never, { "hciHasRole": { "alias": "hciHasRole"; "required": false; }; }, {}, never, never, false, never>;
26
+ }
@@ -1,27 +1,27 @@
1
- import { PermissionEntity } from "./permission.entity";
2
- /**
3
- * An immutable representation of an HCI role entity, which represents an authorization claim associated with an authenticated
4
- * subject.
5
- *
6
- * @since 1.0.0
7
- */
8
- export declare class RoleEntity {
9
- private roleName;
10
- private permissions?;
11
- constructor(roleName: string, permissions?: PermissionEntity[]);
12
- /**
13
- * An accessor for the name of this role.
14
- *
15
- * @returns {string} the role name
16
- * @constructor
17
- */
18
- get RoleName(): string;
19
- /**
20
- * An accessor for a collection of {@link PermissionEntity} authorization claims that define this role. Permissions
21
- * provide a finer grained authorization claim description and are not required.
22
- *
23
- * @returns {PermissionEntity[]} a collection of permission entities
24
- * @constructor
25
- */
26
- get Permissions(): PermissionEntity[];
27
- }
1
+ import { PermissionEntity } from "./permission.entity";
2
+ /**
3
+ * An immutable representation of an HCI role entity, which represents an authorization claim associated with an authenticated
4
+ * subject.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ export declare class RoleEntity {
9
+ private roleName;
10
+ private permissions?;
11
+ constructor(roleName: string, permissions?: PermissionEntity[]);
12
+ /**
13
+ * An accessor for the name of this role.
14
+ *
15
+ * @returns {string} the role name
16
+ * @constructor
17
+ */
18
+ get RoleName(): string;
19
+ /**
20
+ * An accessor for a collection of {@link PermissionEntity} authorization claims that define this role. Permissions
21
+ * provide a finer grained authorization claim description and are not required.
22
+ *
23
+ * @returns {PermissionEntity[]} a collection of permission entities
24
+ * @constructor
25
+ */
26
+ get Permissions(): PermissionEntity[];
27
+ }
@@ -1,45 +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
- }
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
45
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3Blcm1pc3Npb24uZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQW9CLE1BQWMsRUFBVSxPQUFrQixFQUFVLFNBQW9CO1FBQXhFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVztJQUM1RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuLyoqXHJcbiAqIEFuIGltbXV0YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBIQ0kgcGVybWlzc2lvbiBlbnRpdHksIHdoaWNoIHJlcHJlc2VudHMgYSBmaW5lIGdyYWluZWQgYXV0aG9yaXphdGlvbiBjbGFpbSB0aGF0IGNhblxyXG4gKiBkZWZpbmUgYSB7QGxpbmsgUm9sZUVudGl0eX0uXHJcbiAqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25FbnRpdHkge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZG9tYWluOiBzdHJpbmcsIHByaXZhdGUgYWN0aW9ucz86IHN0cmluZ1tdLCBwcml2YXRlIGluc3RhbmNlcz86IHN0cmluZ1tdKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIGRvbWFpbiB0aGlzIHBlcm1pc3Npb24gaXMgZGVmaW5lZCBmb3IgKGkuZS4gdXNlciwgc3R1ZHksIHNwZWNpbWVuLCBldGMuLi4pLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIGRvbWFpbiBvZiB0aGlzIHBlcm1pc3Npb25cclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKi9cclxuICBnZXQgRG9tYWluKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kb21haW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIGFjdGlvbnMgdGhhdCB0aGlzIHBlcm1pc3Npb24gYWxsb3dzIGluIHRoZSBzcGVjaWZpZWQgZG9tYWluIChpLmUuIGNyZWF0ZSwgcmVhZCwgYWN0aXZhdGUsIG1hbmFnZVxyXG4gICAqIGV0Yy4uLikuIElmIG5vIGFjdGlvbnMgYXJlIGRlZmluZWQsIHRoaXMgcGVybWlzc2lvbiBjbGFpbXMgYWNjZXNzIHRvIGFsbCBhY3Rpb25zIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBhbiBhcnJheSBvZiBhY3Rpb25zIGZvciB0aGUgc3BlY2lmaWVkIGRvbWFpblxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBBY3Rpb25zKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NvciBmb3IgdGhlIGluc3RhbmNlcyB0aGF0IHRoaXMgcGVybWlzc2lvbiBpcyBhcHBsaWNhYmxlIHRvIGluIHRoZSBzcGVjaWZpZWQgZG9tYWluIChpLmUuIGpvZSwgMTIzNCwgc3R1ZHktZm9vLFxyXG4gICAqIGV0Yy4uLikuIElmIG5vIGluc3RhbmNlcyBhcmUgZGVmaW5lZCwgdGhpcyBwZXJtaXNzaW9uIGNsYWltcyBhcHBsaWNhYmlsaXR5IHRvIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHNwZWNpZmllZCBkb21haW4uXHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGdldCBJbnN0YW5jZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VzO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,62 +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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RoleCheckUnlessNullDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.UserService }], target: i0.ɵɵFactoryTarget.Directive }); }
44
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RoleCheckUnlessNullDirective, selector: "[hciHasRoleUnlessNull]", inputs: { hciHasRoleUnlessNull: "hciHasRoleUnlessNull" }, usesInheritance: true, ngImport: i0 }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jaGVjay11bmxlc3MtbnVsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2stdW5sZXNzLW51bGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTVDOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxrQkFBa0I7SUFJbEUsWUFDRSxjQUFnQyxFQUNoQyxZQUFpQyxFQUNqQyxPQUFvQjtRQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQU52QyxhQUFRLEdBQWdDLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQU9sRixDQUFDO0lBRUQsSUFDSSxvQkFBb0IsQ0FBQyxRQUFnQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsbURBQW1EO1lBQ25ELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNwQjtTQUNGO2FBQU07WUFDTCxxREFBcUQ7WUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxRTtJQUNILENBQUM7K0dBaENVLDRCQUE0QjttR0FBNUIsNEJBQTRCOzs0RkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNSLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ3BDOzJKQWFLLG9CQUFvQjtzQkFEdkIsS0FBSzs7QUF3QlI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMkJBQTJCO0lBQXhDO1FBQ1MsZUFBVSxHQUFZLEtBQUssQ0FBQztJQUNyQyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFZpZXdDb250YWluZXJSZWYsIFRlbXBsYXRlUmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1JvbGVDaGVja0RpcmVjdGl2ZX0gZnJvbSBcIi4vcm9sZS1jaGVjay5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXIuc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIEFuIGV4dGVuc2lvbiBvZiB0aGUge0BsaW5rIFJvbGVDaGVja0RpcmVjdGl2ZX0gdGhlIG9ubHkgZXZhbHVhdGVzIHRoZSByb2xlIGlmIGlzIGl0IG5vdCBudWxsIG9yIHVuZGVmaW5lZC5cclxuICpcclxuICogVGhpcyBkaXJlY3RpdmUgcmVxdWlyZXMgdGhlIHtAbGluayBVc2VyU2VydmljZX0gYXMgYSBwcm92aWRlci5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgc2VsZWN0b3I6IFwiW2hjaUhhc1JvbGVVbmxlc3NOdWxsXVwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb2xlQ2hlY2tVbmxlc3NOdWxsRGlyZWN0aXZlIGV4dGVuZHMgUm9sZUNoZWNrRGlyZWN0aXZlIHtcclxuXHJcbiAgcHJpdmF0ZSBfY29udGV4dDogSGNpSGFzUm9sZVVubGVzc051bGxDb250ZXh0ID0gbmV3IEhjaUhhc1JvbGVVbmxlc3NOdWxsQ29udGV4dCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIF92aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxPYmplY3Q+LFxyXG4gICAgX3VzclN2YzogVXNlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKF92aWV3Q29udGFpbmVyLCBfdGVtcGxhdGVSZWYsIF91c3JTdmMpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaGNpSGFzUm9sZVVubGVzc051bGwocm9sZU5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKCFyb2xlTmFtZSkge1xyXG4gICAgICAvLyBpZiB0aGUgcm9sZU5hbWUgaXMgdW5kZWZpbmVkIG9yIG51bGwgdGhlbiByZW5kZXJcclxuICAgICAgaWYgKHRoaXMuX2NvbnRleHQuX2NvbmRpdGlvbiAhPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQuX2NvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlldygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBvdGhlcndpc2UgZGVsZWdhdGUgdGhlIGNoZWNrIHRvIFJvbGVDaGVja0RpcmVjdGl2ZVxyXG4gICAgICB0aGlzLmhjaUhhc1JvbGUgPSByb2xlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVZpZXcoKSB7XHJcbiAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5fY29udGV4dC5fY29uZGl0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmLCB0aGlzLl9jb250ZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmLCB0aGlzLl9jb250ZXh0KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJIHRvdGFsbHkgcmlwcGVkIG9mZiAqbmdJZiBzb3VyY2UgdG8gZ2V0IHRoaXMgdG8gd29yayBjb3JyZWN0bHkgdG8gcHJldmVudCBpbmZpbml0IGxvb3AgcmVuZGVyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEhjaUhhc1JvbGVVbmxlc3NOdWxsQ29udGV4dCB7XHJcbiAgcHVibGljIF9jb25kaXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxufVxyXG4iXX0=
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RoleCheckUnlessNullDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.UserService }], target: i0.ɵɵFactoryTarget.Directive }); }
44
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: RoleCheckUnlessNullDirective, selector: "[hciHasRoleUnlessNull]", inputs: { hciHasRoleUnlessNull: "hciHasRoleUnlessNull" }, usesInheritance: true, ngImport: i0 }); }
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RoleCheckUnlessNullDirective, decorators: [{
47
+ type: Directive,
48
+ args: [{
49
+ selector: "[hciHasRoleUnlessNull]"
50
+ }]
51
+ }], ctorParameters: () => [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jaGVjay11bmxlc3MtbnVsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2stdW5sZXNzLW51bGwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRTVDOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxrQkFBa0I7SUFJbEUsWUFDRSxjQUFnQyxFQUNoQyxZQUFpQyxFQUNqQyxPQUFvQjtRQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQU52QyxhQUFRLEdBQWdDLElBQUksMkJBQTJCLEVBQUUsQ0FBQztJQU9sRixDQUFDO0lBRUQsSUFDSSxvQkFBb0IsQ0FBQyxRQUFnQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxtREFBbUQ7WUFDbkQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04scURBQXFEO1lBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQzs4R0FoQ1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEI7OzJGQUE1Qiw0QkFBNEI7a0JBSHhDLFNBQVM7bUJBQUM7b0JBQ1IsUUFBUSxFQUFFLHdCQUF3QjtpQkFDcEM7eUlBYUssb0JBQW9CO3NCQUR2QixLQUFLOztBQXdCUjs7R0FFRztBQUNILE1BQU0sT0FBTywyQkFBMkI7SUFBeEM7UUFDUyxlQUFVLEdBQVksS0FBSyxDQUFDO0lBQ3JDLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7Um9sZUNoZWNrRGlyZWN0aXZlfSBmcm9tIFwiLi9yb2xlLWNoZWNrLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlci5zZXJ2aWNlXCI7XHJcblxyXG4vKipcclxuICogQW4gZXh0ZW5zaW9uIG9mIHRoZSB7QGxpbmsgUm9sZUNoZWNrRGlyZWN0aXZlfSB0aGUgb25seSBldmFsdWF0ZXMgdGhlIHJvbGUgaWYgaXMgaXQgbm90IG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gKlxyXG4gKiBUaGlzIGRpcmVjdGl2ZSByZXF1aXJlcyB0aGUge0BsaW5rIFVzZXJTZXJ2aWNlfSBhcyBhIHByb3ZpZGVyLlxyXG4gKlxyXG4gKiBAc2luY2UgMS4wLjBcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICBzZWxlY3RvcjogXCJbaGNpSGFzUm9sZVVubGVzc051bGxdXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvbGVDaGVja1VubGVzc051bGxEaXJlY3RpdmUgZXh0ZW5kcyBSb2xlQ2hlY2tEaXJlY3RpdmUge1xyXG5cclxuICBwcml2YXRlIF9jb250ZXh0OiBIY2lIYXNSb2xlVW5sZXNzTnVsbENvbnRleHQgPSBuZXcgSGNpSGFzUm9sZVVubGVzc051bGxDb250ZXh0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgX3ZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBfdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPE9iamVjdD4sXHJcbiAgICBfdXNyU3ZjOiBVc2VyU2VydmljZSkge1xyXG4gICAgc3VwZXIoX3ZpZXdDb250YWluZXIsIF90ZW1wbGF0ZVJlZiwgX3VzclN2Yyk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBoY2lIYXNSb2xlVW5sZXNzTnVsbChyb2xlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXJvbGVOYW1lKSB7XHJcbiAgICAgIC8vIGlmIHRoZSByb2xlTmFtZSBpcyB1bmRlZmluZWQgb3IgbnVsbCB0aGVuIHJlbmRlclxyXG4gICAgICBpZiAodGhpcy5fY29udGV4dC5fY29uZGl0aW9uICE9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5fY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl91cGRhdGVWaWV3KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG90aGVyd2lzZSBkZWxlZ2F0ZSB0aGUgY2hlY2sgdG8gUm9sZUNoZWNrRGlyZWN0aXZlXHJcbiAgICAgIHRoaXMuaGNpSGFzUm9sZSA9IHJvbGVOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlVmlldygpIHtcclxuICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgIGlmICh0aGlzLl9jb250ZXh0Ll9jb25kaXRpb24pIHtcclxuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYsIHRoaXMuX2NvbnRleHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYsIHRoaXMuX2NvbnRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEkgdG90YWxseSByaXBwZWQgb2ZmICpuZ0lmIHNvdXJjZSB0byBnZXQgdGhpcyB0byB3b3JrIGNvcnJlY3RseSB0byBwcmV2ZW50IGluZmluaXQgbG9vcCByZW5kZXJpbmcuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSGNpSGFzUm9sZVVubGVzc051bGxDb250ZXh0IHtcclxuICBwdWJsaWMgX2NvbmRpdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG59XHJcbiJdfQ==
@@ -1,66 +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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RoleCheckDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.UserService }], target: i0.ɵɵFactoryTarget.Directive }); }
55
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RoleCheckDirective, selector: "[hciHasRole]", inputs: { hciHasRole: "hciHasRole" }, providers: [UserService], ngImport: i0 }); }
56
- }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jaGVjay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7OztBQUc1Qzs7Ozs7OztHQU9HO0FBS0gsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixZQUFzQixjQUFnQyxFQUNoQyxZQUFpQyxFQUNqQyxPQUFvQjtRQUZwQixtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFKaEMsZUFBVSxHQUFZLElBQUksQ0FBQztJQUtyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ0ksVUFBVSxDQUFDLFFBQWdCO1FBQzdCLElBQUksU0FBUyxFQUFFLElBQVMsT0FBTyxJQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDckQsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFvQixFQUFFLEVBQUU7WUFDckUsSUFBSSxLQUFjLENBQUM7WUFFbkIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDOUIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNmO1lBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDM0Q7aUJBQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM3QjtRQUNILENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1gsZ0hBQWdIO1lBQ2hILGtDQUFrQztZQUNsQyx1QkFBdUI7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQXhDVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw2RUFGbEIsQ0FBQyxXQUFXLENBQUM7OzRGQUViLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN6QjsySkFlSyxVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBpc0Rldk1vZGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlckVudGl0eX0gZnJvbSBcIi4uL3VzZXIuZW50aXR5XCI7XHJcblxyXG4vKipcclxuICogQSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBlbGVtZW50cyBvZiB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGJhc2VkIG9uIGEgdXNlcnMgPGVtPnJvbGU8L2VtPlxyXG4gKiBhdXRob3JpemF0aW9uIGNsYWltcy5cclxuICpcclxuICogVGhpcyBkaXJlY3RpdmUgcmVxdWlyZXMgdGhlIHtAbGluayBVc2VyU2VydmljZX0gYXMgYSBwcm92aWRlci5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbaGNpSGFzUm9sZV1cIixcclxuICBwcm92aWRlcnM6IFtVc2VyU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJvbGVDaGVja0RpcmVjdGl2ZSB7XHJcbiAgcHJvdGVjdGVkIF9sYXN0Q2hlY2s6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3ZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8T2JqZWN0PixcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzclN2YzogVXNlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGRlY29yYXRlZCBlbGVtZW50IGJhc2VkIG9uIHRoZSBhdXRoZW50aWNhdGVkIHVzZXJzIGF2YWlsYWJsZSByb2xlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb2xlTmFtZSBmb3IgdGhlIHJvbGUgcmVxdWlyZWQgdG8gbWFrZSB0aGUgZGVjb3JhdGVkIGVsZW1lbnQgYXZhaWxhYmxlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaGNpSGFzUm9sZShyb2xlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgPGFueT5jb25zb2xlICYmIDxhbnk+Y29uc29sZS5kZWJ1Zykge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiaGNpSGFzUm9sZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91c3JTdmMuZ2V0QXV0aGVudGljYXRlZFVzZXIoKS5zdWJzY3JpYmUoKGF1dGhVc2VyOiBVc2VyRW50aXR5KSA9PiB7XHJcbiAgICAgIGxldCBmb3VuZDogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlmIChhdXRoVXNlciAmJiBhdXRoVXNlci5Sb2xlcykge1xyXG4gICAgICAgIGZvdW5kID0gYXV0aFVzZXIuUm9sZXMuc29tZSgocm9sZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGUuUm9sZU5hbWUgPT09IHJvbGVOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmb3VuZCAmJiAodGhpcy5fbGFzdENoZWNrID09PSBudWxsIHx8ICF0aGlzLl9sYXN0Q2hlY2spKSB7XHJcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xyXG4gICAgICB9IGVsc2UgaWYgKCFmb3VuZCAmJiAodGhpcy5fbGFzdENoZWNrID09PSBudWxsIHx8IHRoaXMuX2xhc3RDaGVjaykpIHtcclxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAvLyBUT0RPOiBCSFkgKDA4LzE5LzE2KSAtIERldGVybWluZSByZXF1aXJlbWVudHMgYXJvdW5kIGVycm9ycyBhbmQgdGhlbiBSRU1PVkUgQ09OU09MRSBMT0dHSU5HLiBEaXNwbGF5IHRvIHVzZXIsXHJcbiAgICAgIC8vIGxvZyB0byBleHRlcm5hbCBzb3VyY2UsIGdvYmJsZT9cclxuICAgICAgLy8gR29iYmxlIHVwIHRoZSBlcnJvci5cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuIl19
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RoleCheckDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.UserService }], target: i0.ɵɵFactoryTarget.Directive }); }
55
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: RoleCheckDirective, selector: "[hciHasRole]", inputs: { hciHasRole: "hciHasRole" }, providers: [UserService], ngImport: i0 }); }
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RoleCheckDirective, decorators: [{
58
+ type: Directive,
59
+ args: [{
60
+ selector: "[hciHasRole]",
61
+ providers: [UserService]
62
+ }]
63
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i1.UserService }], propDecorators: { hciHasRole: [{
64
+ type: Input
65
+ }] } });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jaGVjay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91c2VyL3NyYy9hdXRob3JpemF0aW9uL3JvbGUtY2hlY2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7OztBQUc1Qzs7Ozs7OztHQU9HO0FBS0gsTUFBTSxPQUFPLGtCQUFrQjtJQUc3QixZQUFzQixjQUFnQyxFQUNoQyxZQUFpQyxFQUNqQyxPQUFvQjtRQUZwQixtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFKaEMsZUFBVSxHQUFZLElBQUksQ0FBQztJQUtyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ0ksVUFBVSxDQUFDLFFBQWdCO1FBQzdCLElBQUksU0FBUyxFQUFFLElBQVMsT0FBTyxJQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0RCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBb0IsRUFBRSxFQUFFO1lBQ3JFLElBQUksS0FBYyxDQUFDO1lBRW5CLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDaEIsQ0FBQztZQUVELElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1gsZ0hBQWdIO1lBQ2hILGtDQUFrQztZQUNsQyx1QkFBdUI7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXhDVSxrQkFBa0I7a0dBQWxCLGtCQUFrQiw2RUFGbEIsQ0FBQyxXQUFXLENBQUM7OzJGQUViLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO2lCQUN6Qjt5SUFlSyxVQUFVO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBpc0Rldk1vZGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tIFwiLi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VXNlckVudGl0eX0gZnJvbSBcIi4uL3VzZXIuZW50aXR5XCI7XHJcblxyXG4vKipcclxuICogQSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBlbGVtZW50cyBvZiB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGJhc2VkIG9uIGEgdXNlcnMgPGVtPnJvbGU8L2VtPlxyXG4gKiBhdXRob3JpemF0aW9uIGNsYWltcy5cclxuICpcclxuICogVGhpcyBkaXJlY3RpdmUgcmVxdWlyZXMgdGhlIHtAbGluayBVc2VyU2VydmljZX0gYXMgYSBwcm92aWRlci5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogXCJbaGNpSGFzUm9sZV1cIixcclxuICBwcm92aWRlcnM6IFtVc2VyU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJvbGVDaGVja0RpcmVjdGl2ZSB7XHJcbiAgcHJvdGVjdGVkIF9sYXN0Q2hlY2s6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3ZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8T2JqZWN0PixcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzclN2YzogVXNlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGRlY29yYXRlZCBlbGVtZW50IGJhc2VkIG9uIHRoZSBhdXRoZW50aWNhdGVkIHVzZXJzIGF2YWlsYWJsZSByb2xlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb2xlTmFtZSBmb3IgdGhlIHJvbGUgcmVxdWlyZWQgdG8gbWFrZSB0aGUgZGVjb3JhdGVkIGVsZW1lbnQgYXZhaWxhYmxlXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaGNpSGFzUm9sZShyb2xlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgPGFueT5jb25zb2xlICYmIDxhbnk+Y29uc29sZS5kZWJ1Zykge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiaGNpSGFzUm9sZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91c3JTdmMuZ2V0QXV0aGVudGljYXRlZFVzZXIoKS5zdWJzY3JpYmUoKGF1dGhVc2VyOiBVc2VyRW50aXR5KSA9PiB7XHJcbiAgICAgIGxldCBmb3VuZDogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlmIChhdXRoVXNlciAmJiBhdXRoVXNlci5Sb2xlcykge1xyXG4gICAgICAgIGZvdW5kID0gYXV0aFVzZXIuUm9sZXMuc29tZSgocm9sZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJvbGUuUm9sZU5hbWUgPT09IHJvbGVOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmb3VuZCAmJiAodGhpcy5fbGFzdENoZWNrID09PSBudWxsIHx8ICF0aGlzLl9sYXN0Q2hlY2spKSB7XHJcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xyXG4gICAgICB9IGVsc2UgaWYgKCFmb3VuZCAmJiAodGhpcy5fbGFzdENoZWNrID09PSBudWxsIHx8IHRoaXMuX2xhc3RDaGVjaykpIHtcclxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAvLyBUT0RPOiBCSFkgKDA4LzE5LzE2KSAtIERldGVybWluZSByZXF1aXJlbWVudHMgYXJvdW5kIGVycm9ycyBhbmQgdGhlbiBSRU1PVkUgQ09OU09MRSBMT0dHSU5HLiBEaXNwbGF5IHRvIHVzZXIsXHJcbiAgICAgIC8vIGxvZyB0byBleHRlcm5hbCBzb3VyY2UsIGdvYmJsZT9cclxuICAgICAgLy8gR29iYmxlIHVwIHRoZSBlcnJvci5cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuIl19