@huntsman-cancer-institute/authentication 17.9.2 → 17.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/authentication.component.mjs +4 -4
- package/esm2022/authentication.module.mjs +5 -5
- package/esm2022/authentication.provider.mjs +4 -4
- package/esm2022/authentication.service.mjs +4 -4
- package/esm2022/authorization.interceptor.mjs +4 -4
- package/esm2022/directlogin.component.mjs +4 -4
- package/esm2022/timeout-notification.component.mjs +4 -4
- package/fesm2022/huntsman-cancer-institute-authentication.mjs +24 -24
- package/fesm2022/huntsman-cancer-institute-authentication.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -95,8 +95,8 @@ export class AuthenticationComponent {
|
|
|
95
95
|
this.beginAuthenticationProcess();
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
99
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
98
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationComponent, deps: [{ token: i1.AuthenticationService }, { token: i2.DomSanitizer }, { token: i3.Router }, { token: i4.Location }, { token: i0.Renderer2 }, { token: AUTHENTICATION_ROUTE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuthenticationComponent, selector: "authentication-iframe", host: { classAttribute: "outlet-row" }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true, static: true }], ngImport: i0, template: `
|
|
100
100
|
<div class="container">
|
|
101
101
|
<iframe #iframe class="frame" [src]="url" (load)="handleChanges()"></iframe>
|
|
102
102
|
<div *ngIf="_errorMsg" class="alert-box">
|
|
@@ -108,7 +108,7 @@ export class AuthenticationComponent {
|
|
|
108
108
|
</div>
|
|
109
109
|
`, isInline: true, styles: [":host{background-color:#fff}.container{max-width:100%;margin-top:60px;padding-top:15px}.frame{width:100%;height:100%;border:0px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
110
110
|
}
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationComponent, decorators: [{
|
|
112
112
|
type: Component,
|
|
113
113
|
args: [{ selector: "authentication-iframe", template: `
|
|
114
114
|
<div class="container">
|
|
@@ -128,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
128
128
|
type: ViewChild,
|
|
129
129
|
args: ["iframe", { static: true }]
|
|
130
130
|
}] } });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL2F1dGhlbnRpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxRQUFRLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsUUFBUSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBbUNyRixNQUFNLE9BQU8sdUJBQXVCO0lBVWxDLFlBQW9CLHFCQUE0QyxFQUM1QyxZQUEyQixFQUMzQixNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsUUFBbUIsRUFDVyxtQkFBMkI7UUFMekQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ1csd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFRO0lBQzdFLENBQUM7SUFFRCxRQUFRO1FBQ047Ozs7O1dBS0c7UUFDSCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FB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SixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUUvRCxJQUFJLGFBQWEsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVEOzs7OztZQUtJO1FBQ0osSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQ2pHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0F6R1UsdUJBQXVCLDBKQWVkLG9CQUFvQjtrR0FmN0IsdUJBQXVCLHFOQS9CeEI7Ozs7Ozs7Ozs7S0FVUDs7MkZBcUJRLHVCQUF1QjtrQkFqQ25DLFNBQVM7K0JBQ0UsdUJBQXVCLFlBQ3ZCOzs7Ozs7Ozs7O0tBVVAsUUFtQkcsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDOzswQkFpQmQsTUFBTTsyQkFBQyxvQkFBb0I7eUNBVkgsTUFBTTtzQkFBMUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSW5qZWN0LCBSZW5kZXJlcjJ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7TG9jYXRpb24sIFBvcFN0YXRlRXZlbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcblxyXG5pbXBvcnQge2ludGVydmFsLCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHtBdXRoZW50aWNhdGlvblNlcnZpY2UsIEFVVEhFTlRJQ0FUSU9OX1JPVVRFfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhdXRoZW50aWNhdGlvbi1pZnJhbWVcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgICA8aWZyYW1lICNpZnJhbWUgY2xhc3M9XCJmcmFtZVwiIFtzcmNdPVwidXJsXCIgKGxvYWQpPVwiaGFuZGxlQ2hhbmdlcygpXCI+PC9pZnJhbWU+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJfZXJyb3JNc2dcIiBjbGFzcz1cImFsZXJ0LWJveFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5cclxuICAgICAgICAgIDxoNSBjbGFzcz1cImFsZXJ0LWhlYWRpbmdcIj5BdXRoZW50aWNhdGlvbiBGYWlsZWQ8L2g1PlxyXG4gICAgICAgICAgPHNwYW4gaWQ9XCJoY2ktbG9naW4tZXJyb3JcIiBjbGFzcz1cImFsZXJ0LXRleHRcIj57e19lcnJvck1zZ319PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgICBcclxuICAgIDpob3N0IHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5jb250YWluZXIge1xyXG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1hcmdpbi10b3A6IDYwcHg7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mcmFtZSB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIGJvcmRlcjogMHB4O1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIGhvc3Q6IHtjbGFzczogXCJvdXRsZXQtcm93XCJ9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbkNvbXBvbmVudCB7XHJcblxyXG4gIHB1YmxpYyB1cmw7XHJcbiAgcHVibGljIF9lcnJvck1zZzogc3RyaW5nO1xyXG5cclxuICBAVmlld0NoaWxkKFwiaWZyYW1lXCIsIHtzdGF0aWM6IHRydWV9KSBpZnJhbWUgOiBFbGVtZW50UmVmO1xyXG5cclxuICBwcml2YXRlIHJlc2V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBwb3BzdGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZG9tU2FuaXRpemVyIDogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoQVVUSEVOVElDQVRJT05fUk9VVEUpIHByaXZhdGUgYXV0aGVudGljYXRpb25Sb3V0ZTogc3RyaW5nKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8qXHJcbiAgICAgKiBGaXggYmFjayBidWdcclxuICAgICAqIElzc3VlIGlzIHRoYXQgdGhlIGJyb3dzZXIgd2lsbCBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyByb3V0ZS4gSWYgaXQncyBndWFyZGVkLCB0aGUgcm91dGUgZ3VhcmQgd2lsbCBqdXN0IGxvYWQgdGhlIGxvZ2luIGFnYWluXHJcbiAgICAgKiBFdmVudHVhbGx5IHRoZSBicm93c2VyIGdldHMgdG8gdGhlIC9hdXRoZW50aWNhdGUgcm91dGUgYW5kIGdvaW5nIGJhY2sgZnJvbSB0aGVyZSBsb2FkcyB0aGUgaWZyYW1lIGhpc3RvcnkgYW5kIFNoaWJib2xldGggZGlzcGxheXNcclxuICAgICAqIGFuIGVycm9yIHJlbGF0aW5nIHRvIG5hdmlnYXRpbmcgYmFjay5cclxuICAgICAqL1xyXG4gICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5sb2NhdGlvbi5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5hdXRoZW50aWNhdGlvblJvdXRlKSk7XHJcblxyXG4gICAgdGhpcy5wb3BzdGF0ZVN1YnNjcmlwdGlvbiA9IDxTdWJzY3JpcHRpb24+IHRoaXMubG9jYXRpb24uc3Vic2NyaWJlKCh2YWx1ZTogUG9wU3RhdGVFdmVudCkgPT4ge1xyXG4gICAgICAvL1RoaXMgaXMgZ29pbmcgdG8gcHJldmVudCBiYWNrIGZyb20gd29ya2luZyBmcm9tIHRoZSBsb2dpbiBjb21wb25lbnRcclxuICAgICAgaGlzdG9yeS5nbygxKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYmVnaW5BdXRoZW50aWNhdGlvblByb2Nlc3MoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmlmcmFtZS5uYXRpdmVFbGVtZW50LmNvbnRlbnREb2N1bWVudC5ib2R5O1xyXG4gICAgICBpZiAoZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwicHJlXCIpKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcInByZVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fZXJyb3JNc2cgPSBudWxsO1xyXG4gICAgICB2YXIganNvblRleHQgPSBlbGVtZW50LmlubmVyVGV4dDtcclxuXHJcbiAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShqc29uVGV4dCk7XHJcbiAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLnN0b3JlVG9rZW4oanNvbi5hdXRoX3Rva2VuKTtcclxuICAgICAgdmFyIGF1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5wcm9jZWVkSWZBdXRoZW50aWNhdGVkKCk7XHJcblxyXG4gICAgICBpZiAoIWF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICB0aGlzLnJlc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBpZiAodGhpcy5pZnJhbWUubmF0aXZlRWxlbWVudC5jb250ZW50RG9jdW1lbnQudGl0bGUudG9VcHBlckNhc2UoKSA9PT0gXCJFUlJPUlwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MLnRvVXBwZXJDYXNlKCkgPT09IFwiRk9SQklEREVOXCIpIHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yTXNnID0gXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBsb2cgaW50byB0aGlzIGFwcGxpY2F0aW9uXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yTXNnID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vQSBiaXQgb2YgYSB3b3JrYXJvdW5kIGZvciBhIFdpbGRGbHkgaXNzdWUuIFN1Y2Nlc3Mgb24gUGFjNGogYXV0aGVudGljYXRpb24sIGJ1dCBmYWlsdXJlIG9uIERCIGxvYWQgb2YgdXNlciBwdXQgdGhpbmdzIGluIGEgd2VpcmQgc3RhdGUuIEp1c3QgbG9nb3V0LCBhbmQgcmVkbyB0aGUgbG9naW4uXHJcbiAgICAgICAgdGhpcy5jbGVhckxvZ2luQW5kUmV0cnkoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFmdGVyIHRoZSBpZnJhbWUgbG9hZHMsIG1ha2UgdGhlIGJhY2tncm91bmQgdHJhbnNwYXJlbnQgc28gd2UgdXNlIHRoZSBpbXBsZW1lbnRhdGlvbidzIGJhY2tncm91bmQgYW5kIG5vdCB0aGUgc3NvIGJhY2tncm91bmQuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmJvZHksIFwiYmFja2dyb3VuZC1jb2xvclwiLCBcInRyYW5zcGFyZW50XCIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJlc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnBvcHN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyTG9naW5BbmRSZXRyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmNsZWFyTG9naW4oKS5zdWJzY3JpYmUoXHJcbiAgICAgICgpID0+IHsgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpOyB9LFxyXG4gICAgICAoZXJyb3IpID0+IHsgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpOyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIHZhciB0b2tlbkVuZHBvaW50ID0gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UudG9rZW5Mb2NhdGlvbigpO1xyXG4gICAgXHJcbiAgICBpZiAodG9rZW5FbmRwb2ludCAhPT0gXCJcIikge1xyXG4gICAgICB0aGlzLnVybCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0b2tlbkVuZHBvaW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSB1c2VyIGRvZXNuJ3QgY29tcGxldGUgYXV0aGVudGljYXRpb24gYmVmb3JlIHRoZSBJZFAgc2Vzc2lvbiB0aW1lcyBvdXQsIHRoYXQgd2lsbCBiZSBhIHByb2JsZW0gd2hlbiB0aGV5IGV2ZW50dWFsbHlcclxuICAgICAqIGF0dGFtcHQgdG8gbG9nIGluLiBJdCBpcyBsaWtlbHkgdGhhdCB1c2VycyB3aWxsIGRvIHRoaXMgb2Z0ZW4gd2hlbiB0aGV5IGxvZyBvdXQgb3IgYXJlIHRpbWVkIG91dCBpbiB0aGUgZXZlbmluZywgbGVhdmVcclxuICAgICAqIHRoZWlyIGJyb3dzZXIgb3BlbiwgdGhlbiBhdHRlbXB0IHRvIGxvZyBiYWNrIGluIGluIHRoZSBtb3JuaW5nLiBJbiBvcmRlciB0byB3b3JrIGFyb3VuZCB0aGlzLCB0aGlzIGNvbXBvbmVudCB3aWxsIHJlLXJlcXVlc3RcclxuICAgICAqIHRoZSB0b2tlbiBwcmlvciB0byBJZFAgdGltZW91dCwgd2hpY2ggd2lsbCByZXNldCB0aGUgIHByb2Nlc3MuIFRoaXMgd2lsbCBoYXBwZW4gMSBtaW51dGUgYmVmb3JlIGlkcEluYWN0aXZpdHlNaW51dGVzXHJcbiAgICAgKiovXHJcbiAgICB0aGlzLnJlc2V0U3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwoKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmlkcEluYWN0aXZpdHlNaW51dGVzIC0gMSkgKiA2MCAqIDEwMDApXHJcbiAgICAgIC5waXBlKGZpcnN0KCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL2F1dGhlbnRpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxRQUFRLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsUUFBUSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBbUNyRixNQUFNLE9BQU8sdUJBQXVCO0lBVWxDLFlBQW9CLHFCQUE0QyxFQUM1QyxZQUEyQixFQUMzQixNQUFjLEVBQ2QsUUFBa0IsRUFDbEIsUUFBbUIsRUFDVyxtQkFBMkI7UUFMekQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ1csd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFRO0lBQzdFLENBQUM7SUFFRCxRQUFRO1FBQ047Ozs7O1dBS0c7UUFDSCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FB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SixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUUvRCxJQUFJLGFBQWEsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUVEOzs7OztZQUtJO1FBQ0osSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQ2pHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F6R1UsdUJBQXVCLDBKQWVkLG9CQUFvQjttR0FmN0IsdUJBQXVCLHFOQS9CeEI7Ozs7Ozs7Ozs7S0FVUDs7NEZBcUJRLHVCQUF1QjtrQkFqQ25DLFNBQVM7K0JBQ0UsdUJBQXVCLFlBQ3ZCOzs7Ozs7Ozs7O0tBVVAsUUFtQkcsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFDOzswQkFpQmQsTUFBTTsyQkFBQyxvQkFBb0I7eUNBVkgsTUFBTTtzQkFBMUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSW5qZWN0LCBSZW5kZXJlcjJ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7TG9jYXRpb24sIFBvcFN0YXRlRXZlbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcblxyXG5pbXBvcnQge2ludGVydmFsLCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHtBdXRoZW50aWNhdGlvblNlcnZpY2UsIEFVVEhFTlRJQ0FUSU9OX1JPVVRFfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhdXRoZW50aWNhdGlvbi1pZnJhbWVcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgICA8aWZyYW1lICNpZnJhbWUgY2xhc3M9XCJmcmFtZVwiIFtzcmNdPVwidXJsXCIgKGxvYWQpPVwiaGFuZGxlQ2hhbmdlcygpXCI+PC9pZnJhbWU+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJfZXJyb3JNc2dcIiBjbGFzcz1cImFsZXJ0LWJveFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5cclxuICAgICAgICAgIDxoNSBjbGFzcz1cImFsZXJ0LWhlYWRpbmdcIj5BdXRoZW50aWNhdGlvbiBGYWlsZWQ8L2g1PlxyXG4gICAgICAgICAgPHNwYW4gaWQ9XCJoY2ktbG9naW4tZXJyb3JcIiBjbGFzcz1cImFsZXJ0LXRleHRcIj57e19lcnJvck1zZ319PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgICBcclxuICAgIDpob3N0IHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5jb250YWluZXIge1xyXG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XHJcbiAgICAgIG1hcmdpbi10b3A6IDYwcHg7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5mcmFtZSB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIGJvcmRlcjogMHB4O1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIGhvc3Q6IHtjbGFzczogXCJvdXRsZXQtcm93XCJ9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvbkNvbXBvbmVudCB7XHJcblxyXG4gIHB1YmxpYyB1cmw7XHJcbiAgcHVibGljIF9lcnJvck1zZzogc3RyaW5nO1xyXG5cclxuICBAVmlld0NoaWxkKFwiaWZyYW1lXCIsIHtzdGF0aWM6IHRydWV9KSBpZnJhbWUgOiBFbGVtZW50UmVmO1xyXG5cclxuICBwcml2YXRlIHJlc2V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBwb3BzdGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZG9tU2FuaXRpemVyIDogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoQVVUSEVOVElDQVRJT05fUk9VVEUpIHByaXZhdGUgYXV0aGVudGljYXRpb25Sb3V0ZTogc3RyaW5nKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8qXHJcbiAgICAgKiBGaXggYmFjayBidWdcclxuICAgICAqIElzc3VlIGlzIHRoYXQgdGhlIGJyb3dzZXIgd2lsbCBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyByb3V0ZS4gSWYgaXQncyBndWFyZGVkLCB0aGUgcm91dGUgZ3VhcmQgd2lsbCBqdXN0IGxvYWQgdGhlIGxvZ2luIGFnYWluXHJcbiAgICAgKiBFdmVudHVhbGx5IHRoZSBicm93c2VyIGdldHMgdG8gdGhlIC9hdXRoZW50aWNhdGUgcm91dGUgYW5kIGdvaW5nIGJhY2sgZnJvbSB0aGVyZSBsb2FkcyB0aGUgaWZyYW1lIGhpc3RvcnkgYW5kIFNoaWJib2xldGggZGlzcGxheXNcclxuICAgICAqIGFuIGVycm9yIHJlbGF0aW5nIHRvIG5hdmlnYXRpbmcgYmFjay5cclxuICAgICAqL1xyXG4gICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5sb2NhdGlvbi5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5hdXRoZW50aWNhdGlvblJvdXRlKSk7XHJcblxyXG4gICAgdGhpcy5wb3BzdGF0ZVN1YnNjcmlwdGlvbiA9IDxTdWJzY3JpcHRpb24+IHRoaXMubG9jYXRpb24uc3Vic2NyaWJlKCh2YWx1ZTogUG9wU3RhdGVFdmVudCkgPT4ge1xyXG4gICAgICAvL1RoaXMgaXMgZ29pbmcgdG8gcHJldmVudCBiYWNrIGZyb20gd29ya2luZyBmcm9tIHRoZSBsb2dpbiBjb21wb25lbnRcclxuICAgICAgaGlzdG9yeS5nbygxKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYmVnaW5BdXRoZW50aWNhdGlvblByb2Nlc3MoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmlmcmFtZS5uYXRpdmVFbGVtZW50LmNvbnRlbnREb2N1bWVudC5ib2R5O1xyXG4gICAgICBpZiAoZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwicHJlXCIpKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcInByZVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fZXJyb3JNc2cgPSBudWxsO1xyXG4gICAgICB2YXIganNvblRleHQgPSBlbGVtZW50LmlubmVyVGV4dDtcclxuXHJcbiAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShqc29uVGV4dCk7XHJcbiAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLnN0b3JlVG9rZW4oanNvbi5hdXRoX3Rva2VuKTtcclxuICAgICAgdmFyIGF1dGhlbnRpY2F0ZWQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5wcm9jZWVkSWZBdXRoZW50aWNhdGVkKCk7XHJcblxyXG4gICAgICBpZiAoIWF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICB0aGlzLnJlc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBpZiAodGhpcy5pZnJhbWUubmF0aXZlRWxlbWVudC5jb250ZW50RG9jdW1lbnQudGl0bGUudG9VcHBlckNhc2UoKSA9PT0gXCJFUlJPUlwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MLnRvVXBwZXJDYXNlKCkgPT09IFwiRk9SQklEREVOXCIpIHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yTXNnID0gXCJZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBsb2cgaW50byB0aGlzIGFwcGxpY2F0aW9uXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yTXNnID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vQSBiaXQgb2YgYSB3b3JrYXJvdW5kIGZvciBhIFdpbGRGbHkgaXNzdWUuIFN1Y2Nlc3Mgb24gUGFjNGogYXV0aGVudGljYXRpb24sIGJ1dCBmYWlsdXJlIG9uIERCIGxvYWQgb2YgdXNlciBwdXQgdGhpbmdzIGluIGEgd2VpcmQgc3RhdGUuIEp1c3QgbG9nb3V0LCBhbmQgcmVkbyB0aGUgbG9naW4uXHJcbiAgICAgICAgdGhpcy5jbGVhckxvZ2luQW5kUmV0cnkoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFmdGVyIHRoZSBpZnJhbWUgbG9hZHMsIG1ha2UgdGhlIGJhY2tncm91bmQgdHJhbnNwYXJlbnQgc28gd2UgdXNlIHRoZSBpbXBsZW1lbnRhdGlvbidzIGJhY2tncm91bmQgYW5kIG5vdCB0aGUgc3NvIGJhY2tncm91bmQuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaWZyYW1lLm5hdGl2ZUVsZW1lbnQuY29udGVudERvY3VtZW50LmJvZHksIFwiYmFja2dyb3VuZC1jb2xvclwiLCBcInRyYW5zcGFyZW50XCIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJlc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnBvcHN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyTG9naW5BbmRSZXRyeSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmNsZWFyTG9naW4oKS5zdWJzY3JpYmUoXHJcbiAgICAgICgpID0+IHsgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpOyB9LFxyXG4gICAgICAoZXJyb3IpID0+IHsgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpOyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIHZhciB0b2tlbkVuZHBvaW50ID0gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UudG9rZW5Mb2NhdGlvbigpO1xyXG4gICAgXHJcbiAgICBpZiAodG9rZW5FbmRwb2ludCAhPT0gXCJcIikge1xyXG4gICAgICB0aGlzLnVybCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh0b2tlbkVuZHBvaW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSB1c2VyIGRvZXNuJ3QgY29tcGxldGUgYXV0aGVudGljYXRpb24gYmVmb3JlIHRoZSBJZFAgc2Vzc2lvbiB0aW1lcyBvdXQsIHRoYXQgd2lsbCBiZSBhIHByb2JsZW0gd2hlbiB0aGV5IGV2ZW50dWFsbHlcclxuICAgICAqIGF0dGFtcHQgdG8gbG9nIGluLiBJdCBpcyBsaWtlbHkgdGhhdCB1c2VycyB3aWxsIGRvIHRoaXMgb2Z0ZW4gd2hlbiB0aGV5IGxvZyBvdXQgb3IgYXJlIHRpbWVkIG91dCBpbiB0aGUgZXZlbmluZywgbGVhdmVcclxuICAgICAqIHRoZWlyIGJyb3dzZXIgb3BlbiwgdGhlbiBhdHRlbXB0IHRvIGxvZyBiYWNrIGluIGluIHRoZSBtb3JuaW5nLiBJbiBvcmRlciB0byB3b3JrIGFyb3VuZCB0aGlzLCB0aGlzIGNvbXBvbmVudCB3aWxsIHJlLXJlcXVlc3RcclxuICAgICAqIHRoZSB0b2tlbiBwcmlvciB0byBJZFAgdGltZW91dCwgd2hpY2ggd2lsbCByZXNldCB0aGUgIHByb2Nlc3MuIFRoaXMgd2lsbCBoYXBwZW4gMSBtaW51dGUgYmVmb3JlIGlkcEluYWN0aXZpdHlNaW51dGVzXHJcbiAgICAgKiovXHJcbiAgICB0aGlzLnJlc2V0U3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwoKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmlkcEluYWN0aXZpdHlNaW51dGVzIC0gMSkgKiA2MCAqIDEwMDApXHJcbiAgICAgIC5waXBlKGZpcnN0KCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5iZWdpbkF1dGhlbnRpY2F0aW9uUHJvY2VzcygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -52,8 +52,8 @@ export class AuthenticationModule {
|
|
|
52
52
|
ngModule: AuthenticationModule
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
56
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, deps: [{ token: i1.JwtModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
56
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, declarations: [AuthenticationComponent,
|
|
57
57
|
DirectLoginComponent,
|
|
58
58
|
TimeoutNotificationComponent], imports: [CommonModule,
|
|
59
59
|
HttpClientModule,
|
|
@@ -64,7 +64,7 @@ export class AuthenticationModule {
|
|
|
64
64
|
CoolStorageModule], exports: [AuthenticationComponent,
|
|
65
65
|
DirectLoginComponent,
|
|
66
66
|
TimeoutNotificationComponent] }); }
|
|
67
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
67
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, imports: [CommonModule,
|
|
68
68
|
HttpClientModule,
|
|
69
69
|
//JwtModule,
|
|
70
70
|
RouterModule,
|
|
@@ -72,7 +72,7 @@ export class AuthenticationModule {
|
|
|
72
72
|
ReactiveFormsModule,
|
|
73
73
|
CoolStorageModule] }); }
|
|
74
74
|
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, decorators: [{
|
|
76
76
|
type: NgModule,
|
|
77
77
|
args: [{
|
|
78
78
|
imports: [
|
|
@@ -100,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
100
100
|
}, {
|
|
101
101
|
type: SkipSelf
|
|
102
102
|
}] }] });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL2F1dGhlbnRpY2F0aW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBc0IsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFNUYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7OztBQUVqRTs7Ozs7R0FLRztBQXNCSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQW9DLFlBQXVCO1FBQ3pELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsU0FBUyxFQUFFO2dCQUNULHNCQUFzQjtnQkFDdEIsZ0JBQWdCO2dCQUNoQixxQkFBcUI7Z0JBQ3JCO29CQUNFLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLEtBQUssRUFBRSxJQUFJO2lCQUNaO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixLQUFLLEVBQUUsSUFBSTtpQkFDWjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsV0FBVztvQkFDcEIsUUFBUSxFQUFFLHNCQUFzQjtpQkFDakM7YUFDRjtZQUNELFFBQVEsRUFBRSxvQkFBb0I7U0FDL0IsQ0FBQTtJQUNILENBQUM7K0dBN0JVLG9CQUFvQjtnSEFBcEIsb0JBQW9CLGlCQVY3Qix1QkFBdUI7WUFDdkIsb0JBQW9CO1lBQ3BCLDRCQUE0QixhQVg1QixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLFlBQVk7WUFDWixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixpQkFBaUIsYUFRakIsdUJBQXVCO1lBQ3ZCLG9CQUFvQjtZQUNwQiw0QkFBNEI7Z0hBR25CLG9CQUFvQixZQW5CN0IsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsaUJBQWlCOzs0RkFhUixvQkFBb0I7a0JBckJoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixpQkFBaUI7cUJBQ2xCO29CQUNELFlBQVksRUFBRTt3QkFDWix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3FCQUM3QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsdUJBQXVCO3dCQUN2QixvQkFBb0I7d0JBQ3BCLDRCQUE0QjtxQkFDN0I7aUJBQ0Y7OzBCQUVjLFFBQVE7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCwgU2tpcFNlbGZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7UmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0hUVFBfSU5URVJDRVBUT1JTLCBIdHRwQ2xpZW50TW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7Q29vbFN0b3JhZ2VNb2R1bGV9IGZyb20gXCJAYW5ndWxhci1jb29sL3N0b3JhZ2VcIjtcclxuaW1wb3J0IHtKV1RfT1BUSU9OUywgSnd0SGVscGVyU2VydmljZSwgSnd0SW50ZXJjZXB0b3IsIEp3dE1vZHVsZX0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xyXG5cclxuaW1wb3J0IHtBdXRoZW50aWNhdGlvblNlcnZpY2V9IGZyb20gXCIuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdXRoZW50aWNhdGlvbkNvbXBvbmVudH0gZnJvbSBcIi4vYXV0aGVudGljYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7RGlyZWN0TG9naW5Db21wb25lbnR9IGZyb20gXCIuL2RpcmVjdGxvZ2luLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1RpbWVvdXROb3RpZmljYXRpb25Db21wb25lbnR9IGZyb20gXCIuL3RpbWVvdXQtbm90aWZpY2F0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge0F1dGhvcml6YXRpb25JbnRlcmNlcHRvcn0gZnJvbSBcIi4vYXV0aG9yaXphdGlvbi5pbnRlcmNlcHRvclwiO1xyXG5pbXBvcnQge0F1dGhlbnRpY2F0aW9uUHJvdmlkZXJ9IGZyb20gXCIuL2F1dGhlbnRpY2F0aW9uLnByb3ZpZGVyXCI7XHJcblxyXG4vKipcclxuICogUHJvdmlkZSBhIHNpbmdsZSBhdXRoIHNlcnZpY2UgYW5kIGludGVyY2VwdG9yIGZvciB0aGUgaW1wbGVtZW50aW5nIGFwcGxpY2F0aW9uLiAgQWxzbyBwcm92aWRlIGV2ZXJ5dGhpbmdcclxuICogZnJvbSB0aGUgYW5ndWxhci1qd3QgbGlicmFyeS5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEh0dHBDbGllbnRNb2R1bGUsXHJcbiAgICAvL0p3dE1vZHVsZSxcclxuICAgIFJvdXRlck1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIENvb2xTdG9yYWdlTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIEF1dGhlbnRpY2F0aW9uQ29tcG9uZW50LFxyXG4gICAgRGlyZWN0TG9naW5Db21wb25lbnQsXHJcbiAgICBUaW1lb3V0Tm90aWZpY2F0aW9uQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBBdXRoZW50aWNhdGlvbkNvbXBvbmVudCxcclxuICAgIERpcmVjdExvZ2luQ29tcG9uZW50LFxyXG4gICAgVGltZW91dE5vdGlmaWNhdGlvbkNvbXBvbmVudFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uTW9kdWxlIHtcclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwYXJlbnRNb2R1bGU6IEp3dE1vZHVsZSkge1xyXG4gICAgaWYgKHBhcmVudE1vZHVsZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdXRoZW50aWNhdGlvbk1vZHVsZSBpcyBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QXV0aGVudGljYXRpb25Nb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIsXHJcbiAgICAgICAgSnd0SGVscGVyU2VydmljZSxcclxuICAgICAgICBBdXRoZW50aWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXHJcbiAgICAgICAgICB1c2VDbGFzczogQXV0aG9yaXphdGlvbkludGVyY2VwdG9yLFxyXG4gICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxyXG4gICAgICAgICAgdXNlQ2xhc3M6IEp3dEludGVyY2VwdG9yLFxyXG4gICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IEpXVF9PUFRJT05TLFxyXG4gICAgICAgICAgdXNlQ2xhc3M6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIG5nTW9kdWxlOiBBdXRoZW50aWNhdGlvbk1vZHVsZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -24,13 +24,13 @@ export class AuthenticationProvider {
|
|
|
24
24
|
get authToken() {
|
|
25
25
|
return this._localStorageService.getItem(this._authenticationTokenKey);
|
|
26
26
|
}
|
|
27
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
28
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationProvider, deps: [{ token: i1.CoolLocalStorage }, { token: AUTHENTICATION_TOKEN_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationProvider }); }
|
|
29
29
|
}
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationProvider, decorators: [{
|
|
31
31
|
type: Injectable
|
|
32
32
|
}], ctorParameters: () => [{ type: i1.CoolLocalStorage }, { type: undefined, decorators: [{
|
|
33
33
|
type: Inject,
|
|
34
34
|
args: [AUTHENTICATION_TOKEN_KEY]
|
|
35
35
|
}] }] });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hdXRoZW50aWNhdGlvbi9zcmMvYXV0aGVudGljYXRpb24ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBSTNFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7QUFFdkQsTUFBTSxDQUFDLElBQUksd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQVMsMEJBQTBCLENBQUMsQ0FBQztBQUc3RixNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLFlBQW9CLG9CQUFzQyxFQUNKLHVCQUErQjtRQURqRSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQWtCO1FBQ0osNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFRO1FBTjlFLHVCQUFrQixHQUFHO1lBQzFCLFdBQVc7WUFDWCxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztTQUM5QixDQUFDO1FBS0ssZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLENBQUMsQ0FBQTtJQUp1RixDQUFDO0lBTXpGLElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLHNCQUFzQixDQUFDLHVCQUErQjtRQUN4RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQWUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNqRixDQUFDOytHQXhCVSxzQkFBc0Isa0RBUWIsd0JBQXdCO21IQVJqQyxzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVU7OzBCQVNJLE1BQU07MkJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7Q29vbExvY2FsU3RvcmFnZX0gZnJvbSAnQGFuZ3VsYXItY29vbC9zdG9yYWdlJztcclxuXHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fVE9LRU5fS0VZID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXCJhdXRoZW50aWNhdGlvbl90b2tlbl9rZXlcIik7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGlvblByb3ZpZGVyIHtcclxuXHJcbiAgcHVibGljIHdoaXRlbGlzdGVkRG9tYWlucyA9IFtcclxuICAgIFwibG9jYWxob3N0XCIsXHJcbiAgICBuZXcgUmVnRXhwKFwiLipbLl11dGFoWy5dZWR1XCIpXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9jYWxTdG9yYWdlU2VydmljZTogQ29vbExvY2FsU3RvcmFnZSxcclxuICAgICAgICAgICAgICBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX1RPS0VOX0tFWSkgcHJpdmF0ZSBfYXV0aGVudGljYXRpb25Ub2tlbktleTogc3RyaW5nKSB7fVxyXG5cclxuICBwdWJsaWMgdG9rZW5HZXR0ZXIgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoVG9rZW47XHJcbiAgfVxyXG5cclxuICBnZXQgYXV0aGVudGljYXRpb25Ub2tlbktleSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uVG9rZW5LZXk7XHJcbiAgfVxyXG5cclxuICBzZXQgYXV0aGVudGljYXRpb25Ub2tlbktleShfYXV0aGVudGljYXRpb25Ub2tlbktleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvblRva2VuS2V5ID0gX2F1dGhlbnRpY2F0aW9uVG9rZW5LZXk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXV0aFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gPHN0cmluZz50aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0odGhpcy5fYXV0aGVudGljYXRpb25Ub2tlbktleSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -434,10 +434,10 @@ export class AuthenticationService {
|
|
|
434
434
|
let errMsg = (error.message) ? error.message : AuthenticationService.GENERIC_ERR_MSG;
|
|
435
435
|
return throwError(errMsg);
|
|
436
436
|
}
|
|
437
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
438
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
437
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationService, deps: [{ token: i1.HttpClient }, { token: i2.Router }, { token: i3.CoolLocalStorage }, { token: i4.JwtHelperService }, { token: i5.AuthenticationProvider }, { token: AUTHENTICATION_LOGOUT_PATH }, { token: AUTHENTICATION_TOKEN_ENDPOINT }, { token: AUTHENTICATION_LOGIN_PATH, optional: true }, { token: AUTHENTICATION_LOGOUT_CONFIRM_PATH, optional: true }, { token: AUTHENTICATION_ROUTE, optional: true }, { token: AUTHENTICATION_SERVER_URL, optional: true }, { token: AUTHENTICATION_DIRECT_ENDPOINT, optional: true }, { token: AUTHENTICATION_MAX_INACTIVITY_MINUTES, optional: true }, { token: AUTHENTICATION_USER_COUNTDOWN_SECONDS, optional: true }, { token: AUTHENTICATION_IDP_INACTIVITY_MINUTES, optional: true }, { token: AUTHENTICATION_USE_UI_EVENTS_FOR_ACTIVITY, optional: true }, { token: AUTHENTICATION_APP_KEEP_ALIVE_ENDPOINT, optional: true }, { token: LocationStrategy, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
438
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationService }); }
|
|
439
439
|
}
|
|
440
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
440
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationService, decorators: [{
|
|
441
441
|
type: Injectable
|
|
442
442
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.Router }, { type: i3.CoolLocalStorage }, { type: i4.JwtHelperService }, { type: i5.AuthenticationProvider }, { type: undefined, decorators: [{
|
|
443
443
|
type: Inject,
|
|
@@ -501,4 +501,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
501
501
|
type: Inject,
|
|
502
502
|
args: [LocationStrategy]
|
|
503
503
|
}] }] });
|
|
504
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2F1dGhlbnRpY2F0aW9uL3NyYy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUE0QixNQUFNLHNCQUFzQixDQUFDO0FBRXhGLE9BQU8sRUFBQyxRQUFRLEVBQWMsZUFBZSxFQUFnQixVQUFVLEVBQU0sU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxVQUFVLEVBQVMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBRXpEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsSUFBSSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FBUyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3BHLE1BQU0sQ0FBQyxJQUFJLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUFTLDJCQUEyQixDQUFDLENBQUM7QUFDL0YsTUFBTSxDQUFDLElBQUksMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQVMsNEJBQTRCLENBQUMsQ0FBQztBQUNqRyxNQUFNLENBQUMsSUFBSSxrQ0FBa0Ms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cUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQTBDSSxNQUFNOzJCQUFDLDBCQUEwQjs7MEJBQ2pDLE1BQU07MkJBQUMsNkJBQTZCOzswQkFDcEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUI7OzBCQUNsRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtDQUFrQzs7MEJBQy9DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9COzswQkFDdkMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUI7OzBCQUM1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDhCQUE4Qjs7MEJBQ2pELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUNBQXFDOzswQkFDeEQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQ0FBcUM7OzBCQUN4RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFDQUFxQzs7MEJBQ3hELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMseUNBQXlDOzswQkFDNUQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQ0FBc0M7OzBCQUN6RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCwgT3B0aW9uYWwsIGlzRGV2TW9kZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtMb2NhdGlvblN0cmF0ZWd5fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7Um91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuaW1wb3J0IHtpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IsIG9mLCBmcm9tRXZlbnR9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlyc3QsIG1hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7Snd0SGVscGVyU2VydmljZX0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xyXG5cclxuaW1wb3J0IHtBdXRoZW50aWNhdGlvblByb3ZpZGVyfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5wcm92aWRlclwiO1xyXG5pbXBvcnQgeyBDb29sTG9jYWxTdG9yYWdlIH0gZnJvbSBcIkBhbmd1bGFyLWNvb2wvc3RvcmFnZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSB0b2tlbiB1c2VkIGZvciBpbmplY3Rpb24gb2YgdGhlIHNlcnZlciBzaWRlIGVuZHBvaW50IGZvciB0aGUgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgc3ViamVjdC5cclxuICpcclxuICogQHR5cGUge0luamVjdGlvblRva2VufVxyXG4gKi9cclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9TRVJWRVJfVVJMID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXCJhdXRoZW50aWNhdGlvbl9zZXJ2ZXJfcmVzdF9hcGlcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fTE9HSU5fUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fbG9naW5fcGF0aFwiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9MT0dPVVRfUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fbG9nb3V0X3BhdGhcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fTE9HT1VUX0NPTkZJUk1fUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fbG9nb3V0X2NvbmZpcm1fcGF0aFwiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9ESVJFQ1RfRU5EUE9JTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImF1dGhlbnRpY2F0aW9uX2RpcmVjdF9lbmRwb2ludFwiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9UT0tFTl9FTkRQT0lOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fdG9rZW5fZW5kcG9pbnRcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fUk9VVEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImF1dGhlbnRpY2F0aW9uX3JvdXRlXCIpO1xyXG5leHBvcnQgbGV0IEFVVEhFTlRJQ0FUSU9OX01BWF9JTkFDVElWSVRZX01JTlVURVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPihcImF1dGhlbnRpY2F0aW9uX21heF9pbmFjdGl2aXR5XCIpO1xyXG5leHBvcnQgbGV0IEFVVEhFTlRJQ0FUSU9OX1VTRVJfQ09VTlRET1dOX1NFQ09ORFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPihcImF1dGhlbnRpY2F0aW9uX3VzZXJfY291bnRkb3duX3NlY29uZHNcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fSURQX0lOQUNUSVZJVFlfTUlOVVRFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxudW1iZXI+KFwiYXV0aGVudGljYXRpb25faWRwX2luYWN0aXZpdHlfbWludXRlc1wiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9VU0VfVUlfRVZFTlRTX0ZPUl9BQ1RJVklUWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPihcImF1dGhlbnRpY2F0aW9uX3VzZV91aV9ldmVudHNfZm9yX2FjdGl2aXR5XCIpO1xyXG5leHBvcnQgbGV0IEFVVEhFTlRJQ0FUSU9OX0FQUF9LRUVQX0FMSVZFX0VORFBPSU5UID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXCJhdXRoZW50aWNhdGlvbl9hcHBfa2VlcF9hbGl2ZV9lbmRwb2ludFwiKTtcclxuXHJcbi8qKlxyXG4gKiBAc2luY2UgMS4wLjBcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBnZW5lcmljIGVycm9yIG1lc3NhZ2UgdXNlZCB3aGVuIGEgc2VydmVyIGVycm9yIGlzIHRocm93biB3aXRob3V0IGEgc3RhdHVzLlxyXG4gICAqXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIEdFTkVSSUNfRVJSX01TRzogc3RyaW5nID0gXCJTZXJ2ZXIgZXJyb3JcIjtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ09OVEVOVF9UWVBFOiBzdHJpbmcgPSBcIkNvbnRlbnQtVHlwZVwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNFQ19HT1ZfQ0xBU1NfSEVBREVSOiBzdHJpbmcgPSBcIlNlY3VyaXR5R292ZXJub3JDbGFzc1wiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNFQ19HT1ZfSURfSEVBREVSOiBzdHJpbmcgPSBcIlNlY3VyaXR5R292ZXJub3JJZFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIERFSURFTlRfSEVBREVSOiBzdHJpbmcgPSBcIkRlaWRlbnRpZmllZENvbnRleHRcIjtcclxuICBwcml2YXRlIHN0YXRpYyBMSU1JVEVEX0hFQURFUjogc3RyaW5nID0gXCJMaW1pdGVkQ29udGV4dFwiO1xyXG5cclxuICBwdWJsaWMgdXNlckNvdW50ZG93blNlY29uZHM6IG51bWJlciA9IDYwO1xyXG4gIHB1YmxpYyBpZHBJbmFjdGl2aXR5TWludXRlczogbnVtYmVyID0gNTtcclxuXHJcbiAgcHVibGljIGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcclxuICBwdWJsaWMgc2VjdXJpdHlHb3Zlcm5vckNsYXNzOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlY3VyaXR5R292ZXJub3JJZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBsaW1pdGVkQ29udGV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkZWlkZW50aWZpZWRDb250ZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgbWF4Vmlld1Blcm1pc3Npb246IEJlaGF2aW9yU3ViamVjdDxcInZpZXdcIiB8IFwidmlld2lkZW50XCIgfCBcInZpZXdsaW1pdGVkXCI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcInZpZXdcIiB8IFwidmlld2lkZW50XCIgfCBcInZpZXdsaW1pdGVkXCI+KFwidmlld2lkZW50XCIpO1xyXG4gIHByaXZhdGUgX2lzQXV0aGVudGljYXRlZFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByaXZhdGUgX3VzZXJJc0Fib3V0VG9UaW1lT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIF9yZWRpcmVjdFVybDogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9sYXN0VXNlckludGVyYWN0aW9uOiBEYXRlO1xyXG4gIHByaXZhdGUgX21heEluYWN0aXZpdHlNaW51dGVzOiBudW1iZXIgPSAxMjA7XHJcbiAgcHJpdmF0ZSBfdWlFdmVudHM6IHN0cmluZ1tdID0gWydrZXlkb3duJywgJ2NsaWNrJywgJ3doZWVsJywgJ21vdXNlbW92ZSddO1xyXG5cclxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcclxuICBwcml2YXRlIGNvbnRleHRSb290OiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvY2FsU3RvcmFnZVNlcnZpY2U6IENvb2xMb2NhbFN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfand0SGVscGVyOiBKd3RIZWxwZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgYXV0aGVudGljYXRpb25Qcm92aWRlcjogQXV0aGVudGljYXRpb25Qcm92aWRlcixcclxuICAgICAgICAgICAgICBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0xPR09VVF9QQVRIKSBwcml2YXRlIF9sb2dvdXRQYXRoOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgQEluamVjdChBVVRIRU5USUNBVElPTl9UT0tFTl9FTkRQT0lOVCkgcHJpdmF0ZSBfdG9rZW5FbmRwb2ludDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fTE9HSU5fUEFUSCkgcHJpdmF0ZSBfbG9naW5QYXRoOiBzdHJpbmcsXHJcblx0XHQgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0xPR09VVF9DT05GSVJNX1BBVEgpIHByaXZhdGUgX2xvZ291dENvbmZpcm1QYXRoOiBzdHJpbmcsXHRcdFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fUk9VVEUpIHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uUm91dGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX1NFUlZFUl9VUkwpIHByaXZhdGUgX3NlcnZlclVybDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fRElSRUNUX0VORFBPSU5UKSBwcml2YXRlIF9kaXJlY3RFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fTUFYX0lOQUNUSVZJVFlfTUlOVVRFUykgcHJpdmF0ZSBfbWF4SW5hY3Rpdml0eTogbnVtYmVyLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fVVNFUl9DT1VOVERPV05fU0VDT05EUykgcHJpdmF0ZSBfdXNlckNvdW50ZG93blNlY29uZHM6IG51bWJlcixcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0lEUF9JTkFDVElWSVRZX01JTlVURVMpIHByaXZhdGUgX2lkcEluYWN0aXZpdHlNaW51dGVzOiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChBVVRIRU5USUNBVElPTl9VU0VfVUlfRVZFTlRTX0ZPUl9BQ1RJVklUWSkgcHJpdmF0ZSBfdXNlVUlFdmVudHNGb3JBY3Rpdml0eTogYm9vbGVhbixcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0FQUF9LRUVQX0FMSVZFX0VORFBPSU5UKSBwcml2YXRlIF9rZWVwQWxpdmVFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTG9jYXRpb25TdHJhdGVneSkgcHJpdmF0ZSBsb2NhdGlvblN0cmF0ZWd5OiBMb2NhdGlvblN0cmF0ZWd5KSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIndpbmRvdy5sb2NhdGlvbi5ocmVmOiBcIiArIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uKSB7XHJcbiAgICAgIGxldCBwYXJ0czogc3RyaW5nW10gPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIi9cIik7XHJcbiAgICAgIHRoaXMuYmFzZVVybCA9IHBhcnRzWzBdICsgXCIvL1wiICsgcGFydHNbMl07XHJcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Um9vdCA9IHBhcnRzWzNdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShcIm1heFZpZXdQZXJtaXNzaW9uXCIpKSB7XHJcbiAgICAgIHRoaXMubWF4Vmlld1Blcm1pc3Npb24ubmV4dCg8XCJ2aWV3XCIgfCBcInZpZXdpZGVudFwiIHwgXCJ2aWV3bGltaXRlZFwiPnRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShcIm1heFZpZXdQZXJtaXNzaW9uXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoX21heEluYWN0aXZpdHkpIHtcclxuICAgICAgdGhpcy5fbWF4SW5hY3Rpdml0eU1pbnV0ZXMgPSBfbWF4SW5hY3Rpdml0eTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoX3VzZXJDb3VudGRvd25TZWNvbmRzKSB7XHJcbiAgICAgIHRoaXMudXNlckNvdW50ZG93blNlY29uZHMgPSBfdXNlckNvdW50ZG93blNlY29uZHM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF9pZHBJbmFjdGl2aXR5TWludXRlcykge1xyXG4gICAgICB0aGlzLmlkcEluYWN0aXZpdHlNaW51dGVzID0gX2lkcEluYWN0aXZpdHlNaW51dGVzO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvL1N1YnNjcmliZSB0byBVSSBldmVudHMgZm9yIHVzZXIgYWN0aXZpdHlcclxuICAgIGlmIChfdXNlVUlFdmVudHNGb3JBY3Rpdml0eSkge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvVUlBY3Rpdml0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFzVmFsaWRDb25maWcoKTtcclxuICB9XHJcblxyXG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5iYXNlVXJsKSA/IHRoaXMuYmFzZVVybCA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0Um9vdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFJvb3Q7XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJzKHJlcTogSHR0cFJlcXVlc3Q8YW55Pik6IEh0dHBIZWFkZXJzIHtcclxuICAgIGxldCBoZWFkZXJzOiBIdHRwSGVhZGVycyA9IHJlcS5oZWFkZXJzO1xyXG5cclxuICAgIC8vRG9uJ3Qgc2V0IGNvbnRlbnQgdHlwZSBpZiBhbHJlYWR5IHNldFxyXG4gICAgaWYgKCFyZXEuaGVhZGVycy5nZXQoQXV0aGVudGljYXRpb25TZXJ2aWNlLkNPTlRFTlRfVFlQRSkpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5DT05URU5UX1RZUEUsIHRoaXMuY29udGVudFR5cGUudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhlYWRlcnMuZ2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0NMQVNTX0hFQURFUikgPT09IFwiXCIpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuZGVsZXRlKEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0NMQVNTX0hFQURFUik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VjdXJpdHlHb3Zlcm5vckNsYXNzICYmICFoZWFkZXJzLmdldChBdXRoZW50aWNhdGlvblNlcnZpY2UuU0VDX0dPVl9DTEFTU19IRUFERVIpKSB7XHJcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChBdXRoZW50aWNhdGlvblNlcnZpY2UuU0VDX0dPVl9DTEFTU19IRUFERVIsIHRoaXMuc2VjdXJpdHlHb3Zlcm5vckNsYXNzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGVhZGVycy5nZXQoQXV0aGVudGljYXRpb25TZXJ2aWNlLlNFQ19HT1ZfSURfSEVBREVSKSA9PT0gXCJcIikge1xyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5kZWxldGUoQXV0aGVudGljYXRpb25TZXJ2aWNlLlNFQ19HT1ZfSURfSEVBREVSKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWN1cml0eUdvdmVybm9ySWQgJiYgIWhlYWRlcnMuZ2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0lEX0hFQURFUikpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0lEX0hFQURFUiwgdGhpcy5zZWN1cml0eUdvdmVybm9ySWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5ERUlERU5UX0hFQURFUiwgdGhpcy5kZWlkZW50aWZpZWRDb250ZXh0LnRvU3RyaW5nKCkpO1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5MSU1JVEVEX0hFQURFUiwgdGhpcy5saW1pdGVkQ29udGV4dC50b1N0cmluZygpKTtcclxuXHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIGdldCBhdXRoZW50aWNhdGlvblRva2VuS2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyLmF1dGhlbnRpY2F0aW9uVG9rZW5LZXk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXV0aFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyLmF1dGhUb2tlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVVc2VyQWN0aXZpdHkoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9sYXN0VXNlckludGVyYWN0aW9uID0gbmV3IERhdGUoKTtcclxuICAgICAgdGhpcy5fdXNlcklzQWJvdXRUb1RpbWVPdXQubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIG11dGF0b3IgZm9yIGlkZW50aWZ5aW5nIHRoZSBjbGllbnRzIG9yaWdpbmFsIHJlcXVlc3QgbG9jYXRpb24uIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGluZmx1ZW5jZSB0aGUgZW5kIGxvY2F0aW9uXHJcbiAgICogbmF2aWdhdGVkIHRvIGJ5IHtAbGluayAjbmF2aWdhdGVUb1BhdGh9LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJlZGlyZWN0VXJsIGxvY2F0aW9uIG9mIHRoZSB1c2VycyByZXF1ZXN0IGJlZm9yZSBhdXRoZW50aWNhdGlvblxyXG4gICAqL1xyXG4gIHNldCByZWRpcmVjdFVybChyZWRpcmVjdFVybDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZWRpcmVjdFVybCA9IHJlZGlyZWN0VXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlZGlyZWN0VXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0VXJsO1xyXG4gIH1cclxuICBcclxuICBcclxuICBpc1JlZGlyZWN0QmFzZWRMb2dpbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9sb2dpblBhdGgpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICBpbml0aWF0ZUxvZ2luKCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdXRoZW50aWNhdGlvbiBTZXJ2aWNlOiBJbml0aWF0ZSBMb2dpblwiKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy9SZWRpcmVjdCBiYXNlZCBhdXRoZW50aWNhdGlvblxyXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmdldEJhc2VVcmwoKSArICh0aGlzLl9sb2dpblBhdGguc3RhcnRzV2l0aChcIi9cIik/XCJcIjpcIi9cIikgKyB0aGlzLl9sb2dpblBhdGg7XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0QWNjZXNzVG9rZW4oZnJvbVJvdXRlR3VhcmQ6IGJvb2xlYW4sIHJlZGlyZWN0T25TdWNjZXNzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXV0aGVudGljYXRpb24gU2VydmljZTogUmVxdWVzdCBBY2NlcyBUb2tlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9odHRwLmdldCh0aGlzLnRva2VuTG9jYXRpb24oKSwge3dpdGhDcmVkZW50aWFsczogdHJ1ZSwgcmVzcG9uc2VUeXBlOiBcImpzb25cIn0pXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVUb2tlbihyZXNwb25zZS5hdXRoX3Rva2VuKTtcclxuICAgICAgICAgIGlmIChyZWRpcmVjdE9uU3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByb2NlZWRJZkF1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgLy9Ob3QgbG9nZ2VkIGluIC0gc3RhcnQgYXV0aGVudGljYXRpb25cclxuICAgICAgICAgIGlmIChmcm9tUm91dGVHdWFyZCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYXRlTG9naW4oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vQmFja2dyb3VuZCB0b2tlbiByZXF1ZXN0IGZhaWxlZCAtIGxvZ291dCBhbmQgY2xlYXJcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXV0aGVudGljYXRpb24gU2VydmljZTogUmVxdWVzdCBBY2NlcyBUb2tlbiAtIExvZ291dFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuICBcclxuICBtYWtlS2VlcEFsaXZlUmVxdWVzdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2h0dHAuZ2V0KHRoaXMua2VlcEFsaXZlTG9jYXRpb24oKSwge3dpdGhDcmVkZW50aWFsczogdHJ1ZX0pLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmVyaWZpZXMgd2hldGhlciBvciBub3QgYSBjdXJyZW50IHVzZXIgc2Vzc2lvbiBleGlzdHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxib29sZWFuPn0gZXZhbHVhdGVzIHRvIHRydWUgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIGlzQXV0aGVudGljYXRlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl9pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNBYm91dFRvVGltZU91dCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGdldFRpbWVvdXRTdGFydCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24udmFsdWVPZigpICsgKCgodGhpcy5fbWF4SW5hY3Rpdml0eU1pbnV0ZXMgKiA2MCkgLSB0aGlzLnVzZXJDb3VudGRvd25TZWNvbmRzKSAqIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9rZW5Mb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZlclVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyVXJsICsgdGhpcy5fdG9rZW5FbmRwb2ludDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90b2tlbkVuZHBvaW50O1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBrZWVwQWxpdmVMb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZlclVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyVXJsICsgdGhpcy5fa2VlcEFsaXZlRW5kcG9pbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5fa2VlcEFsaXZlRW5kcG9pbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXJlY3RMb2dpbkxvY2F0aW9uKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5fc2VydmVyVXJsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXJVcmwgKyB0aGlzLl9kaXJlY3RFbmRwb2ludDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kaXJlY3RFbmRwb2ludDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ291dExvY2F0aW9uKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5fc2VydmVyVXJsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXJVcmwgKyB0aGlzLl9sb2dvdXRQYXRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvZ291dFBhdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2dvdXRDb25maXJtTG9jYXRpb24oKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl9zZXJ2ZXJVcmwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlclVybCArIHRoaXMuX2xvZ291dENvbmZpcm1QYXRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvZ291dENvbmZpcm1QYXRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0byBhdXRoZW50aWNhdGVkIHRoZSB1c2VyIHdpdGggdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzLiBGYWlsdXJlIHJlc3VsdHMgaW4gYW4gZXJyb3IgdGhhdCBkZXNjcmliZXMgdGhlXHJcbiAgICogc2VydmVyIHJlc3BvbnNlIChzdGF0dXMgYW5kIHN0YXR1cyBtZXNzYWdlKSBhbmQgc2hvdWxkIGJlIGFjdGlvbmFibGUgYnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB1c2VybmFtZSBvZiB0aGUgYXV0aGVudGljYXRpbmcgdXNlciB0byB2ZXJpZnlcclxuICAgKiBAcGFyYW0gcGFzc3dvcmQgb2YgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIgdG8gdmVyaWZ5XHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8Uj59IGRlc2NyaWJpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbG9naW4gYWN0aW9uLCB0cnVlIG9yIGFuIGVycm9yXHJcbiAgICovXHJcbiAgbG9naW4oX3VzZXJuYW1lOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLmRpcmVjdExvZ2luTG9jYXRpb24oKSxcclxuICAgICAge3VzZXJuYW1lOiBfdXNlcm5hbWUsIHBhc3N3b3JkOiBfcGFzc3dvcmR9LFxyXG4gICAgICB7b2JzZXJ2ZTogXCJyZXNwb25zZVwifVxyXG4gICAgKS5waXBlKG1hcCgocmVzcDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgaWYgKHJlc3Auc3RhdHVzID09PSAyMDEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFwiICsgcmVzcC5zdGF0dXMgKyBcIjogXCIgKyByZXNwLnN0YXR1c1RleHQpO1xyXG4gICAgICB9XHJcbiAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSkgYXMgT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICB9XHJcblxyXG5cclxuICBjbGVhckxvZ2luKHVzZVJlZGlyZWN0OiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgLy9Gcm9udC1lbmQgbG9nb3V0XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0odGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyLmF1dGhlbnRpY2F0aW9uVG9rZW5LZXkpO1xyXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbVRva2VuUmVmcmVzaCgpO1xyXG4gICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICB0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5uZXh0KGZhbHNlKTtcclxuICAgIH0gY2F0Y2ggKEVycm9yKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZVJlZGlyZWN0KSB7XHJcbiAgICAgIC8vUmVkaXJlY3QgYmFzZWQgbG9naW4vbG9nb3V0XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5nZXRCYXNlVXJsKCkgKyAodGhpcy5fbG9nb3V0UGF0aC5zdGFydHNXaXRoKFwiL1wiKT9cIlwiOlwiL1wiKSArIHRoaXMuX2xvZ291dFBhdGg7XHJcbiAgICAgIC8vTm90aGluZyB0byByZXR1cm4uIFRoaXMgaXMgZ29pbmcgdG8gbGVhdmUgdGhlIE5HIGFwcFxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvL0JhY2stZW5kIGxvZ291dFxyXG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChBdXRoZW50aWNhdGlvblNlcnZpY2UuQ09OVEVOVF9UWVBFLCBcInRleHQvcGxhaW5cIik7XHJcbiAgICAgIHJldHVybiA8T2JzZXJ2YWJsZTxzdHJpbmc+PnRoaXMuX2h0dHAuZ2V0KHRoaXMubG9nb3V0TG9jYXRpb24oKSwge2hlYWRlcnM6IGhlYWRlcnMsIHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCJ9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gc2lnbmFsIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGUgY3VycmVudCBzZXNzaW9uLiBJbnZva2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2xlYW4gdXAgYW55IHJlbGV2YW50IHN0YXRlXHJcbiAgICogcmVsYXRlZCB0byB0aGUgbGFzdCBhY3RpdmUgc2Vzc2lvbi5cclxuICAgKi9cclxuICBsb2dvdXQoa2VlcEN1cnJlbnRSb3V0ZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAvL0xvZ291dCBhbmQgbGVhdmUgTkcgYXBwXHJcbiAgICBpZiAodGhpcy5pc1JlZGlyZWN0QmFzZWRMb2dpbigpICYmICEgdGhpcy5fbG9nb3V0Q29uZmlybVBhdGgpIHtcclxuICAgICAgdGhpcy5jbGVhckxvZ2luKHRydWUpO1xyXG4gICAgfVxyXG4gICAgLy9Mb2dvdXQgd2l0aGluIE5HIGFwcCBhbmQgcmV0dXJuIHRvIHNhbWUgcm91dGUgYWZ0ZXIgbG9naW4gb3IgcmVkaXJlY3QgdG8gY29uZmlybSBzY3JlZW5cclxuICAgIGVsc2Uge1xyXG4gICAgICAvL1ByZXZlbnQgbG9nb3V0IGlmIGFscmVhZHkgb24gYXV0aGVudGljYXRpb24gcm91dGUuIERvaW5nIG90aGVyd2lzZSBzY3Jld3MgdXAgU0FNTFxyXG4gICAgICBpZiAoISB0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUgfHwgdGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCAhPT0gdGhpcy5fYXV0aGVudGljYXRpb25Sb3V0ZSkge1xyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0VXJsID0gKGtlZXBDdXJyZW50Um91dGUgJiYgdGhpcy5fcm91dGVyLnJvdXRlclN0YXRlICYmIHRoaXMuX3JvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCkgPyB0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsIDogXCJcIjtcclxuICBcclxuICAgICAgICBpZiAodGhpcy5fcmVkaXJlY3RVcmwuc3RhcnRzV2l0aChcIi9cIikpIHtcclxuICAgICAgICAgIHRoaXMuX3JlZGlyZWN0VXJsID0gdGhpcy5fcmVkaXJlY3RVcmwuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICB0aGlzLmNsZWFyTG9naW4oKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuX2xvZ291dENvbmZpcm1QYXRoKSB7XHJcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmdldEJhc2VVcmwoKSArICh0aGlzLl9sb2dvdXRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpP1wiXCI6XCIvXCIpICsgdGhpcy5fbG9nb3V0Q29uZmlybVBhdGg7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcbiAgICAgICAgICAgIFx0d2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy5fcmVkaXJlY3RVcmwpO1xyXG5cdFx0XHR9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHRoaXMuX3JlZGlyZWN0VXJsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9yZVRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCB2YWxpZCA9IHRoaXMudmFsaWRhdGVUb2tlbih0b2tlbik7XHJcblxyXG4gICAgLy8gdW5zdWJzY3JpYmUgZnJvbSByZWZlc2ggYmVmb3JlIHdlIGRlY2lkZSB3ZXRoZXIgdG8gcmVzdWJzY3JpYmVcclxuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tVG9rZW5SZWZyZXNoKCk7XHJcblxyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIuYXV0aGVudGljYXRpb25Ub2tlbktleSwgdG9rZW4pO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvVG9rZW5SZWZyZXNoKHRva2VuKTtcclxuXHJcbiAgICAgIC8vQ2hhbmdlIHRoZSBCZWhhdmlvclN1YmplY3QgaWYgdGhlIHVzZXIgd2FzIG5vdCBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQuXHJcbiAgICAgIC8vU2luY2Ugb3RoZXIgY29kZSBtYXkgYmUgc3Vic2NyaWJpbmcgdG8gdGhpcyBvYnNlcnZhYmxlLCB3ZSBkb24ndCB3YW50IHRvIGNhdXNlIG5ldyBldmVudHMgdG8gZmlyZSBpZiBqdXN0IHJlZnJlc2hpbmcgdGhlIEpXVC5cclxuICAgICAgaWYgKCEgdGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRlZFN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlci5hdXRoZW50aWNhdGlvblRva2VuS2V5KTtcclxuICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2NlZWRJZkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF1dGhlbnRpY2F0aW9uU2VydmljZS5wcm9jZWVkSWZBdXRoZW50aWNhdGVkOiBcIiArIHRoaXMuX3JlZGlyZWN0VXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC52YWx1ZSkge1xyXG4gICAgICAvL0xvZ2luIGNvdW50cyBhcyB1c2VyIGFjdGl2aXR5LCB0b29cclxuICAgICAgdGhpcy51cGRhdGVVc2VyQWN0aXZpdHkoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9yZWRpcmVjdFVybCAmJiB0aGlzLl9yZWRpcmVjdFVybCAmJiB0aGlzLl9yZWRpcmVjdFVybCAhPT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuX3JlZGlyZWN0VXJsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW1wiXCJdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVRva2VuKHRva2VuOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodG9rZW4gJiYgIXRoaXMuX2p3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpO1xyXG4gIH1cclxuICBcclxuICBzdWJzY3JpYmVUb1VJQWN0aXZpdHkoKXtcclxuICAgIHRoaXMuX3VpRXZlbnRzLmZvckVhY2goZXZlbnQgPT5cclxuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCBldmVudCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIC8vT25seSB1cGRhdGUgYWN0aXZpdHkgb24gVUkgZXZlbnQgaWYgbm90IGFscmVhZHkgYWJvdXQgdG8gdGltZSBvdXQuIENvdW50ZXIgaW50dWl0aXZlLCBidXQgaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBoYXZlIDYwIHNlY29uZCBjb3VudC1kb3duIGRpYWxvZyBvcGVuLlxyXG4gICAgICAgIGlmICh0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5nZXRWYWx1ZSgpICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJBY3Rpdml0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7ICAgIFxyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9Ub2tlblJlZnJlc2godG9rZW46IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IGV4cCA9IHRoaXMuX2p3dEhlbHBlci5nZXRUb2tlbkV4cGlyYXRpb25EYXRlKHRva2VuKTtcclxuXHJcbiAgICAvLyBVc2UgYSB0aW1lciB0byBwZXJpb2RpY2FsbHkgY2hlY2sgdGltZW91dHNcclxuICAgIHRoaXMuX3JlZnJlc2hTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgLy8gSWYgYSB0YWIgaXMgaW5hY3RpdmUgd2UgY2FuJ3Qga25vdyBpZiBvdXIgdGltZXIgaXMgYWNjdXJhdGVcclxuICAgICAgICAvLyBzbyB3aGVuIHRoZSBpbnRlcnZhbCBoaXRzIGNoZWNrIGFnYWluc3QgdGltZXN0YW1wc1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0LnZhbHVlICYmIERhdGUubm93KCkgPiB0aGlzLmdldFRpbWVvdXRTdGFydCgpKSB7XHJcbiAgICAgICAgICAvL0Rvbid0IHVwZGF0ZSB0aGUgc3ViamVjdCBtb3JlIHRoYW4gb25jZSEgRG9pbmcgc28gaW5pdGlhbGl6ZXMgbW9yZSB0aGFuIG9uZSBjb3VudGRvd24gdGltZXIhXHJcbiAgICAgICAgICBpZiAodGhpcy5fdXNlcklzQWJvdXRUb1RpbWVPdXQuZ2V0VmFsdWUoKSAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2hlY2sgZm9yIHJlZnJlc2ggdG9rZW5cclxuICAgICAgICBsZXQgbXNUb0V4cGlyeSA9IChleHAudmFsdWVPZigpIC0gbmV3IERhdGUoKS52YWx1ZU9mKCkpO1xyXG5cclxuICAgICAgICAvLyBSZWZyZXNoIDYwIHNlY29uZHMgYmVmb3JlIGV4cGlyeVxyXG4gICAgICAgIGlmIChtc1RvRXhwaXJ5IDw9IDYwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbklmVXNlcklzQWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlRnJvbVRva2VuUmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZWZyZXNoU3Vic2NyaXB0aW9uICYmICEgdGhpcy5fcmVmcmVzaFN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcclxuICAgICAgdGhpcy5fcmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Vmlld1Blcm1pc3Npb24oKTogXCJ2aWV3XCIgfCBcInZpZXdpZGVudFwiIHwgXCJ2aWV3bGltaXRlZFwiIHtcclxuICAgIHJldHVybiB0aGlzLm1heFZpZXdQZXJtaXNzaW9uLmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhWaWV3UGVybWlzc2lvblN1YmplY3QoKTogQmVoYXZpb3JTdWJqZWN0PFwidmlld1wiIHwgXCJ2aWV3aWRlbnRcIiB8IFwidmlld2xpbWl0ZWRcIj4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF4Vmlld1Blcm1pc3Npb247XHJcbiAgfVxyXG5cclxuICBzZXRNYXhWaWV3UGVybWlzc2lvbihtYXhWaWV3UGVybWlzc2lvbjogXCJ2aWV3XCIgfCBcInZpZXdpZGVudFwiIHwgXCJ2aWV3bGltaXRlZFwiKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oXCJtYXhWaWV3UGVybWlzc2lvblwiLCBtYXhWaWV3UGVybWlzc2lvbik7XHJcbiAgICB0aGlzLm1heFZpZXdQZXJtaXNzaW9uLm5leHQobWF4Vmlld1Blcm1pc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5JZlVzZXJJc0FjdGl2ZSgpOiB2b2lkIHtcclxuICAgIC8vT25seSByZWZyZXNoIGlmIHRoZSB1c2VyIGhhcyBiZWVuIGFjdGl2ZVxyXG4gICAgaWYgKHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24gJiYgKChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24udmFsdWVPZigpKSA8PSAodGhpcy5fbWF4SW5hY3Rpdml0eU1pbnV0ZXMgKiA2MCAqIDEwMDApKSkge1xyXG4gICAgICAvL1JlZnJlc2ggdGhlIEpXVFxyXG4gICAgICB0aGlzLnJlcXVlc3RBY2Nlc3NUb2tlbihmYWxzZSwgZmFsc2UpO1xyXG4gICAgICBcclxuICAgICAgLy9NaWdodCBhcyB3ZWxsIG1ha2UgYXBwbGljYXRpb24ga2VlcCBhbGl2ZSByZXF1ZXN0cyBhdCB0aGUgc2FtZSB0aW1lIGFzIHJlZnJlc2hpbmcgdG9rZW5zIC0gbW9yZSBlZmZpY2llbnQgJiBwcm9iYWJseSBuZWVkcyBzYW1lIGxvZ2ljXHJcbiAgICAgIGlmICh0aGlzLl9rZWVwQWxpdmVFbmRwb2ludCkge1xyXG4gICAgICAgIHRoaXMubWFrZUtlZXBBbGl2ZVJlcXVlc3QoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNWYWxpZENvbmZpZygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90b2tlbkVuZHBvaW50ID09IG51bGwgJiYgKHRoaXMuX3NlcnZlclVybCA9PT0gbnVsbCB8fCB0aGlzLl9sb2dvdXRQYXRoID09PSBudWxsKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCVUcgQUxFUlQhIEludmFsaWQgQXV0aGVudGljYXRpb25TZXJ2aWNlIGNvbmZpZ3VyYXRpb24uIE5vIHZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yIGF1dGhlbnRpY2F0aW9uIGVuZHBvaW50KHMpLlwiKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlID09PSBudWxsIHx8IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlci5hdXRoZW50aWNhdGlvblRva2VuS2V5ID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkJVRyBBTEVSVCEgSW52YWxpZCBBdXRoZW50aWNhdGlvblNlcnZpY2UgY29uZmlndXJhdGlvbi4gTm8gdmFsaWQgY29uZmlndXJhdGlvbiBmb3IgbG9jYWwgc3RvcmFnZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkgOiBPYnNlcnZhYmxlPG5ldmVyPiB7XHJcbiAgICBsZXQgZXJyTXNnID0gKGVycm9yLm1lc3NhZ2UpID8gZXJyb3IubWVzc2FnZSA6IEF1dGhlbnRpY2F0aW9uU2VydmljZS5HRU5FUklDX0VSUl9NU0c7XHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJNc2cpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
504
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2F1dGhlbnRpY2F0aW9uL3NyYy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUE0QixNQUFNLHNCQUFzQixDQUFDO0FBRXhGLE9BQU8sRUFBQyxRQUFRLEVBQWMsZUFBZSxFQUFnQixVQUFVLEVBQU0sU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxVQUFVLEVBQVMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBRXpEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsSUFBSSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FBUyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3BHLE1BQU0sQ0FBQyxJQUFJLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUFTLDJCQUEyQixDQUFDLENBQUM7QUFDL0YsTUFBTSxDQUFDLElBQUksMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQVMsNEJBQTRCLENBQUMsQ0FBQztBQUNqRyxNQUFNLENBQUMsSUFBSSxrQ0FBa0Ms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cUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQTBDSSxNQUFNOzJCQUFDLDBCQUEwQjs7MEJBQ2pDLE1BQU07MkJBQUMsNkJBQTZCOzswQkFDcEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUI7OzBCQUNsRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtDQUFrQzs7MEJBQy9DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9COzswQkFDdkMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUI7OzBCQUM1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDhCQUE4Qjs7MEJBQ2pELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUNBQXFDOzswQkFDeEQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQ0FBcUM7OzBCQUN4RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFDQUFxQzs7MEJBQ3hELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMseUNBQXlDOzswQkFDNUQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQ0FBc0M7OzBCQUN6RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCwgT3B0aW9uYWwsIGlzRGV2TW9kZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtMb2NhdGlvblN0cmF0ZWd5fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7Um91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuaW1wb3J0IHtpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IsIG9mLCBmcm9tRXZlbnR9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlyc3QsIG1hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7Snd0SGVscGVyU2VydmljZX0gZnJvbSBcIkBhdXRoMC9hbmd1bGFyLWp3dFwiO1xyXG5cclxuaW1wb3J0IHtBdXRoZW50aWNhdGlvblByb3ZpZGVyfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5wcm92aWRlclwiO1xyXG5pbXBvcnQgeyBDb29sTG9jYWxTdG9yYWdlIH0gZnJvbSBcIkBhbmd1bGFyLWNvb2wvc3RvcmFnZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSB0b2tlbiB1c2VkIGZvciBpbmplY3Rpb24gb2YgdGhlIHNlcnZlciBzaWRlIGVuZHBvaW50IGZvciB0aGUgY3VycmVudGx5IGF1dGhlbnRpY2F0ZWQgc3ViamVjdC5cclxuICpcclxuICogQHR5cGUge0luamVjdGlvblRva2VufVxyXG4gKi9cclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9TRVJWRVJfVVJMID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXCJhdXRoZW50aWNhdGlvbl9zZXJ2ZXJfcmVzdF9hcGlcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fTE9HSU5fUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fbG9naW5fcGF0aFwiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9MT0dPVVRfUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fbG9nb3V0X3BhdGhcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fTE9HT1VUX0NPTkZJUk1fUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fbG9nb3V0X2NvbmZpcm1fcGF0aFwiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9ESVJFQ1RfRU5EUE9JTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImF1dGhlbnRpY2F0aW9uX2RpcmVjdF9lbmRwb2ludFwiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9UT0tFTl9FTkRQT0lOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KFwiYXV0aGVudGljYXRpb25fdG9rZW5fZW5kcG9pbnRcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fUk9VVEUgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcImF1dGhlbnRpY2F0aW9uX3JvdXRlXCIpO1xyXG5leHBvcnQgbGV0IEFVVEhFTlRJQ0FUSU9OX01BWF9JTkFDVElWSVRZX01JTlVURVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPihcImF1dGhlbnRpY2F0aW9uX21heF9pbmFjdGl2aXR5XCIpO1xyXG5leHBvcnQgbGV0IEFVVEhFTlRJQ0FUSU9OX1VTRVJfQ09VTlRET1dOX1NFQ09ORFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPihcImF1dGhlbnRpY2F0aW9uX3VzZXJfY291bnRkb3duX3NlY29uZHNcIik7XHJcbmV4cG9ydCBsZXQgQVVUSEVOVElDQVRJT05fSURQX0lOQUNUSVZJVFlfTUlOVVRFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxudW1iZXI+KFwiYXV0aGVudGljYXRpb25faWRwX2luYWN0aXZpdHlfbWludXRlc1wiKTtcclxuZXhwb3J0IGxldCBBVVRIRU5USUNBVElPTl9VU0VfVUlfRVZFTlRTX0ZPUl9BQ1RJVklUWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPihcImF1dGhlbnRpY2F0aW9uX3VzZV91aV9ldmVudHNfZm9yX2FjdGl2aXR5XCIpO1xyXG5leHBvcnQgbGV0IEFVVEhFTlRJQ0FUSU9OX0FQUF9LRUVQX0FMSVZFX0VORFBPSU5UID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXCJhdXRoZW50aWNhdGlvbl9hcHBfa2VlcF9hbGl2ZV9lbmRwb2ludFwiKTtcclxuXHJcbi8qKlxyXG4gKiBAc2luY2UgMS4wLjBcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBnZW5lcmljIGVycm9yIG1lc3NhZ2UgdXNlZCB3aGVuIGEgc2VydmVyIGVycm9yIGlzIHRocm93biB3aXRob3V0IGEgc3RhdHVzLlxyXG4gICAqXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIEdFTkVSSUNfRVJSX01TRzogc3RyaW5nID0gXCJTZXJ2ZXIgZXJyb3JcIjtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgQ09OVEVOVF9UWVBFOiBzdHJpbmcgPSBcIkNvbnRlbnQtVHlwZVwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNFQ19HT1ZfQ0xBU1NfSEVBREVSOiBzdHJpbmcgPSBcIlNlY3VyaXR5R292ZXJub3JDbGFzc1wiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNFQ19HT1ZfSURfSEVBREVSOiBzdHJpbmcgPSBcIlNlY3VyaXR5R292ZXJub3JJZFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIERFSURFTlRfSEVBREVSOiBzdHJpbmcgPSBcIkRlaWRlbnRpZmllZENvbnRleHRcIjtcclxuICBwcml2YXRlIHN0YXRpYyBMSU1JVEVEX0hFQURFUjogc3RyaW5nID0gXCJMaW1pdGVkQ29udGV4dFwiO1xyXG5cclxuICBwdWJsaWMgdXNlckNvdW50ZG93blNlY29uZHM6IG51bWJlciA9IDYwO1xyXG4gIHB1YmxpYyBpZHBJbmFjdGl2aXR5TWludXRlczogbnVtYmVyID0gNTtcclxuXHJcbiAgcHVibGljIGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcclxuICBwdWJsaWMgc2VjdXJpdHlHb3Zlcm5vckNsYXNzOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlY3VyaXR5R292ZXJub3JJZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBsaW1pdGVkQ29udGV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkZWlkZW50aWZpZWRDb250ZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgbWF4Vmlld1Blcm1pc3Npb246IEJlaGF2aW9yU3ViamVjdDxcInZpZXdcIiB8IFwidmlld2lkZW50XCIgfCBcInZpZXdsaW1pdGVkXCI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcInZpZXdcIiB8IFwidmlld2lkZW50XCIgfCBcInZpZXdsaW1pdGVkXCI+KFwidmlld2lkZW50XCIpO1xyXG4gIHByaXZhdGUgX2lzQXV0aGVudGljYXRlZFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByaXZhdGUgX3VzZXJJc0Fib3V0VG9UaW1lT3V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIF9yZWRpcmVjdFVybDogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIF9sYXN0VXNlckludGVyYWN0aW9uOiBEYXRlO1xyXG4gIHByaXZhdGUgX21heEluYWN0aXZpdHlNaW51dGVzOiBudW1iZXIgPSAxMjA7XHJcbiAgcHJpdmF0ZSBfdWlFdmVudHM6IHN0cmluZ1tdID0gWydrZXlkb3duJywgJ2NsaWNrJywgJ3doZWVsJywgJ21vdXNlbW92ZSddO1xyXG5cclxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcclxuICBwcml2YXRlIGNvbnRleHRSb290OiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvY2FsU3RvcmFnZVNlcnZpY2U6IENvb2xMb2NhbFN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfand0SGVscGVyOiBKd3RIZWxwZXJTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgYXV0aGVudGljYXRpb25Qcm92aWRlcjogQXV0aGVudGljYXRpb25Qcm92aWRlcixcclxuICAgICAgICAgICAgICBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0xPR09VVF9QQVRIKSBwcml2YXRlIF9sb2dvdXRQYXRoOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgQEluamVjdChBVVRIRU5USUNBVElPTl9UT0tFTl9FTkRQT0lOVCkgcHJpdmF0ZSBfdG9rZW5FbmRwb2ludDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fTE9HSU5fUEFUSCkgcHJpdmF0ZSBfbG9naW5QYXRoOiBzdHJpbmcsXHJcblx0XHQgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0xPR09VVF9DT05GSVJNX1BBVEgpIHByaXZhdGUgX2xvZ291dENvbmZpcm1QYXRoOiBzdHJpbmcsXHRcdFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fUk9VVEUpIHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uUm91dGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX1NFUlZFUl9VUkwpIHByaXZhdGUgX3NlcnZlclVybDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fRElSRUNUX0VORFBPSU5UKSBwcml2YXRlIF9kaXJlY3RFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fTUFYX0lOQUNUSVZJVFlfTUlOVVRFUykgcHJpdmF0ZSBfbWF4SW5hY3Rpdml0eTogbnVtYmVyLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSEVOVElDQVRJT05fVVNFUl9DT1VOVERPV05fU0VDT05EUykgcHJpdmF0ZSBfdXNlckNvdW50ZG93blNlY29uZHM6IG51bWJlcixcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0lEUF9JTkFDVElWSVRZX01JTlVURVMpIHByaXZhdGUgX2lkcEluYWN0aXZpdHlNaW51dGVzOiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChBVVRIRU5USUNBVElPTl9VU0VfVUlfRVZFTlRTX0ZPUl9BQ1RJVklUWSkgcHJpdmF0ZSBfdXNlVUlFdmVudHNGb3JBY3Rpdml0eTogYm9vbGVhbixcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhFTlRJQ0FUSU9OX0FQUF9LRUVQX0FMSVZFX0VORFBPSU5UKSBwcml2YXRlIF9rZWVwQWxpdmVFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTG9jYXRpb25TdHJhdGVneSkgcHJpdmF0ZSBsb2NhdGlvblN0cmF0ZWd5OiBMb2NhdGlvblN0cmF0ZWd5KSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIndpbmRvdy5sb2NhdGlvbi5ocmVmOiBcIiArIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uKSB7XHJcbiAgICAgIGxldCBwYXJ0czogc3RyaW5nW10gPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIi9cIik7XHJcbiAgICAgIHRoaXMuYmFzZVVybCA9IHBhcnRzWzBdICsgXCIvL1wiICsgcGFydHNbMl07XHJcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Um9vdCA9IHBhcnRzWzNdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShcIm1heFZpZXdQZXJtaXNzaW9uXCIpKSB7XHJcbiAgICAgIHRoaXMubWF4Vmlld1Blcm1pc3Npb24ubmV4dCg8XCJ2aWV3XCIgfCBcInZpZXdpZGVudFwiIHwgXCJ2aWV3bGltaXRlZFwiPnRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShcIm1heFZpZXdQZXJtaXNzaW9uXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoX21heEluYWN0aXZpdHkpIHtcclxuICAgICAgdGhpcy5fbWF4SW5hY3Rpdml0eU1pbnV0ZXMgPSBfbWF4SW5hY3Rpdml0eTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoX3VzZXJDb3VudGRvd25TZWNvbmRzKSB7XHJcbiAgICAgIHRoaXMudXNlckNvdW50ZG93blNlY29uZHMgPSBfdXNlckNvdW50ZG93blNlY29uZHM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF9pZHBJbmFjdGl2aXR5TWludXRlcykge1xyXG4gICAgICB0aGlzLmlkcEluYWN0aXZpdHlNaW51dGVzID0gX2lkcEluYWN0aXZpdHlNaW51dGVzO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvL1N1YnNjcmliZSB0byBVSSBldmVudHMgZm9yIHVzZXIgYWN0aXZpdHlcclxuICAgIGlmIChfdXNlVUlFdmVudHNGb3JBY3Rpdml0eSkge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvVUlBY3Rpdml0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFzVmFsaWRDb25maWcoKTtcclxuICB9XHJcblxyXG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5iYXNlVXJsKSA/IHRoaXMuYmFzZVVybCA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0Um9vdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFJvb3Q7XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJzKHJlcTogSHR0cFJlcXVlc3Q8YW55Pik6IEh0dHBIZWFkZXJzIHtcclxuICAgIGxldCBoZWFkZXJzOiBIdHRwSGVhZGVycyA9IHJlcS5oZWFkZXJzO1xyXG5cclxuICAgIC8vRG9uJ3Qgc2V0IGNvbnRlbnQgdHlwZSBpZiBhbHJlYWR5IHNldFxyXG4gICAgaWYgKCFyZXEuaGVhZGVycy5nZXQoQXV0aGVudGljYXRpb25TZXJ2aWNlLkNPTlRFTlRfVFlQRSkpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5DT05URU5UX1RZUEUsIHRoaXMuY29udGVudFR5cGUudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhlYWRlcnMuZ2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0NMQVNTX0hFQURFUikgPT09IFwiXCIpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuZGVsZXRlKEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0NMQVNTX0hFQURFUik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VjdXJpdHlHb3Zlcm5vckNsYXNzICYmICFoZWFkZXJzLmdldChBdXRoZW50aWNhdGlvblNlcnZpY2UuU0VDX0dPVl9DTEFTU19IRUFERVIpKSB7XHJcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChBdXRoZW50aWNhdGlvblNlcnZpY2UuU0VDX0dPVl9DTEFTU19IRUFERVIsIHRoaXMuc2VjdXJpdHlHb3Zlcm5vckNsYXNzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGVhZGVycy5nZXQoQXV0aGVudGljYXRpb25TZXJ2aWNlLlNFQ19HT1ZfSURfSEVBREVSKSA9PT0gXCJcIikge1xyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5kZWxldGUoQXV0aGVudGljYXRpb25TZXJ2aWNlLlNFQ19HT1ZfSURfSEVBREVSKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWN1cml0eUdvdmVybm9ySWQgJiYgIWhlYWRlcnMuZ2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0lEX0hFQURFUikpIHtcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5TRUNfR09WX0lEX0hFQURFUiwgdGhpcy5zZWN1cml0eUdvdmVybm9ySWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5ERUlERU5UX0hFQURFUiwgdGhpcy5kZWlkZW50aWZpZWRDb250ZXh0LnRvU3RyaW5nKCkpO1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KEF1dGhlbnRpY2F0aW9uU2VydmljZS5MSU1JVEVEX0hFQURFUiwgdGhpcy5saW1pdGVkQ29udGV4dC50b1N0cmluZygpKTtcclxuXHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIGdldCBhdXRoZW50aWNhdGlvblRva2VuS2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyLmF1dGhlbnRpY2F0aW9uVG9rZW5LZXk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXV0aFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyLmF1dGhUb2tlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVVc2VyQWN0aXZpdHkoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC52YWx1ZSkge1xyXG4gICAgICB0aGlzLl9sYXN0VXNlckludGVyYWN0aW9uID0gbmV3IERhdGUoKTtcclxuICAgICAgdGhpcy5fdXNlcklzQWJvdXRUb1RpbWVPdXQubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIG11dGF0b3IgZm9yIGlkZW50aWZ5aW5nIHRoZSBjbGllbnRzIG9yaWdpbmFsIHJlcXVlc3QgbG9jYXRpb24uIFNldHRpbmcgdGhpcyB2YWx1ZSB3aWxsIGluZmx1ZW5jZSB0aGUgZW5kIGxvY2F0aW9uXHJcbiAgICogbmF2aWdhdGVkIHRvIGJ5IHtAbGluayAjbmF2aWdhdGVUb1BhdGh9LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJlZGlyZWN0VXJsIGxvY2F0aW9uIG9mIHRoZSB1c2VycyByZXF1ZXN0IGJlZm9yZSBhdXRoZW50aWNhdGlvblxyXG4gICAqL1xyXG4gIHNldCByZWRpcmVjdFVybChyZWRpcmVjdFVybDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yZWRpcmVjdFVybCA9IHJlZGlyZWN0VXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlZGlyZWN0VXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0VXJsO1xyXG4gIH1cclxuICBcclxuICBcclxuICBpc1JlZGlyZWN0QmFzZWRMb2dpbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9sb2dpblBhdGgpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBcclxuICBpbml0aWF0ZUxvZ2luKCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJBdXRoZW50aWNhdGlvbiBTZXJ2aWNlOiBJbml0aWF0ZSBMb2dpblwiKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy9SZWRpcmVjdCBiYXNlZCBhdXRoZW50aWNhdGlvblxyXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmdldEJhc2VVcmwoKSArICh0aGlzLl9sb2dpblBhdGguc3RhcnRzV2l0aChcIi9cIik/XCJcIjpcIi9cIikgKyB0aGlzLl9sb2dpblBhdGg7XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0QWNjZXNzVG9rZW4oZnJvbVJvdXRlR3VhcmQ6IGJvb2xlYW4sIHJlZGlyZWN0T25TdWNjZXNzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXV0aGVudGljYXRpb24gU2VydmljZTogUmVxdWVzdCBBY2NlcyBUb2tlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9odHRwLmdldCh0aGlzLnRva2VuTG9jYXRpb24oKSwge3dpdGhDcmVkZW50aWFsczogdHJ1ZSwgcmVzcG9uc2VUeXBlOiBcImpzb25cIn0pXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVUb2tlbihyZXNwb25zZS5hdXRoX3Rva2VuKTtcclxuICAgICAgICAgIGlmIChyZWRpcmVjdE9uU3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByb2NlZWRJZkF1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgLy9Ob3QgbG9nZ2VkIGluIC0gc3RhcnQgYXV0aGVudGljYXRpb25cclxuICAgICAgICAgIGlmIChmcm9tUm91dGVHdWFyZCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYXRlTG9naW4oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vQmFja2dyb3VuZCB0b2tlbiByZXF1ZXN0IGZhaWxlZCAtIGxvZ291dCBhbmQgY2xlYXJcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXV0aGVudGljYXRpb24gU2VydmljZTogUmVxdWVzdCBBY2NlcyBUb2tlbiAtIExvZ291dFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5sb2dvdXQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuICBcclxuICBtYWtlS2VlcEFsaXZlUmVxdWVzdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2h0dHAuZ2V0KHRoaXMua2VlcEFsaXZlTG9jYXRpb24oKSwge3dpdGhDcmVkZW50aWFsczogdHJ1ZX0pLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmVyaWZpZXMgd2hldGhlciBvciBub3QgYSBjdXJyZW50IHVzZXIgc2Vzc2lvbiBleGlzdHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxib29sZWFuPn0gZXZhbHVhdGVzIHRvIHRydWUgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIGlzQXV0aGVudGljYXRlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl9pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNBYm91dFRvVGltZU91dCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGdldFRpbWVvdXRTdGFydCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24udmFsdWVPZigpICsgKCgodGhpcy5fbWF4SW5hY3Rpdml0eU1pbnV0ZXMgKiA2MCkgLSB0aGlzLnVzZXJDb3VudGRvd25TZWNvbmRzKSAqIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9rZW5Mb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZlclVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyVXJsICsgdGhpcy5fdG9rZW5FbmRwb2ludDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90b2tlbkVuZHBvaW50O1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBrZWVwQWxpdmVMb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZlclVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyVXJsICsgdGhpcy5fa2VlcEFsaXZlRW5kcG9pbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5fa2VlcEFsaXZlRW5kcG9pbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXJlY3RMb2dpbkxvY2F0aW9uKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5fc2VydmVyVXJsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXJVcmwgKyB0aGlzLl9kaXJlY3RFbmRwb2ludDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kaXJlY3RFbmRwb2ludDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ291dExvY2F0aW9uKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5fc2VydmVyVXJsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXJVcmwgKyB0aGlzLl9sb2dvdXRQYXRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvZ291dFBhdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2dvdXRDb25maXJtTG9jYXRpb24oKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLl9zZXJ2ZXJVcmwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlclVybCArIHRoaXMuX2xvZ291dENvbmZpcm1QYXRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvZ291dENvbmZpcm1QYXRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0byBhdXRoZW50aWNhdGVkIHRoZSB1c2VyIHdpdGggdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzLiBGYWlsdXJlIHJlc3VsdHMgaW4gYW4gZXJyb3IgdGhhdCBkZXNjcmliZXMgdGhlXHJcbiAgICogc2VydmVyIHJlc3BvbnNlIChzdGF0dXMgYW5kIHN0YXR1cyBtZXNzYWdlKSBhbmQgc2hvdWxkIGJlIGFjdGlvbmFibGUgYnkgdGhlIGNsaWVudCBhcHBsaWNhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB1c2VybmFtZSBvZiB0aGUgYXV0aGVudGljYXRpbmcgdXNlciB0byB2ZXJpZnlcclxuICAgKiBAcGFyYW0gcGFzc3dvcmQgb2YgdGhlIGF1dGhlbnRpY2F0aW5nIHVzZXIgdG8gdmVyaWZ5XHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8Uj59IGRlc2NyaWJpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbG9naW4gYWN0aW9uLCB0cnVlIG9yIGFuIGVycm9yXHJcbiAgICovXHJcbiAgbG9naW4oX3VzZXJuYW1lOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLmRpcmVjdExvZ2luTG9jYXRpb24oKSxcclxuICAgICAge3VzZXJuYW1lOiBfdXNlcm5hbWUsIHBhc3N3b3JkOiBfcGFzc3dvcmR9LFxyXG4gICAgICB7b2JzZXJ2ZTogXCJyZXNwb25zZVwifVxyXG4gICAgKS5waXBlKG1hcCgocmVzcDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgaWYgKHJlc3Auc3RhdHVzID09PSAyMDEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFwiICsgcmVzcC5zdGF0dXMgKyBcIjogXCIgKyByZXNwLnN0YXR1c1RleHQpO1xyXG4gICAgICB9XHJcbiAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSkgYXMgT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICB9XHJcblxyXG5cclxuICBjbGVhckxvZ2luKHVzZVJlZGlyZWN0OiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgLy9Gcm9udC1lbmQgbG9nb3V0XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0odGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyLmF1dGhlbnRpY2F0aW9uVG9rZW5LZXkpO1xyXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbVRva2VuUmVmcmVzaCgpO1xyXG4gICAgICB0aGlzLl9pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgICB0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5uZXh0KGZhbHNlKTtcclxuICAgIH0gY2F0Y2ggKEVycm9yKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZVJlZGlyZWN0KSB7XHJcbiAgICAgIC8vUmVkaXJlY3QgYmFzZWQgbG9naW4vbG9nb3V0XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5nZXRCYXNlVXJsKCkgKyAodGhpcy5fbG9nb3V0UGF0aC5zdGFydHNXaXRoKFwiL1wiKT9cIlwiOlwiL1wiKSArIHRoaXMuX2xvZ291dFBhdGg7XHJcbiAgICAgIC8vTm90aGluZyB0byByZXR1cm4uIFRoaXMgaXMgZ29pbmcgdG8gbGVhdmUgdGhlIE5HIGFwcFxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvL0JhY2stZW5kIGxvZ291dFxyXG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChBdXRoZW50aWNhdGlvblNlcnZpY2UuQ09OVEVOVF9UWVBFLCBcInRleHQvcGxhaW5cIik7XHJcbiAgICAgIHJldHVybiA8T2JzZXJ2YWJsZTxzdHJpbmc+PnRoaXMuX2h0dHAuZ2V0KHRoaXMubG9nb3V0TG9jYXRpb24oKSwge2hlYWRlcnM6IGhlYWRlcnMsIHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCJ9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gc2lnbmFsIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGUgY3VycmVudCBzZXNzaW9uLiBJbnZva2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2xlYW4gdXAgYW55IHJlbGV2YW50IHN0YXRlXHJcbiAgICogcmVsYXRlZCB0byB0aGUgbGFzdCBhY3RpdmUgc2Vzc2lvbi5cclxuICAgKi9cclxuICBsb2dvdXQoa2VlcEN1cnJlbnRSb3V0ZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAvL0xvZ291dCBhbmQgbGVhdmUgTkcgYXBwXHJcbiAgICBpZiAodGhpcy5pc1JlZGlyZWN0QmFzZWRMb2dpbigpICYmICEgdGhpcy5fbG9nb3V0Q29uZmlybVBhdGgpIHtcclxuICAgICAgdGhpcy5jbGVhckxvZ2luKHRydWUpO1xyXG4gICAgfVxyXG4gICAgLy9Mb2dvdXQgd2l0aGluIE5HIGFwcCBhbmQgcmV0dXJuIHRvIHNhbWUgcm91dGUgYWZ0ZXIgbG9naW4gb3IgcmVkaXJlY3QgdG8gY29uZmlybSBzY3JlZW5cclxuICAgIGVsc2Uge1xyXG4gICAgICAvL1ByZXZlbnQgbG9nb3V0IGlmIGFscmVhZHkgb24gYXV0aGVudGljYXRpb24gcm91dGUuIERvaW5nIG90aGVyd2lzZSBzY3Jld3MgdXAgU0FNTFxyXG4gICAgICBpZiAoISB0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUgfHwgdGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCAhPT0gdGhpcy5fYXV0aGVudGljYXRpb25Sb3V0ZSkge1xyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0VXJsID0gKGtlZXBDdXJyZW50Um91dGUgJiYgdGhpcy5fcm91dGVyLnJvdXRlclN0YXRlICYmIHRoaXMuX3JvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCkgPyB0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsIDogXCJcIjtcclxuICBcclxuICAgICAgICBpZiAodGhpcy5fcmVkaXJlY3RVcmwuc3RhcnRzV2l0aChcIi9cIikpIHtcclxuICAgICAgICAgIHRoaXMuX3JlZGlyZWN0VXJsID0gdGhpcy5fcmVkaXJlY3RVcmwuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICB0aGlzLmNsZWFyTG9naW4oKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuX2xvZ291dENvbmZpcm1QYXRoKSB7XHJcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmdldEJhc2VVcmwoKSArICh0aGlzLl9sb2dvdXRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpP1wiXCI6XCIvXCIpICsgdGhpcy5fbG9nb3V0Q29uZmlybVBhdGg7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcbiAgICAgICAgICAgIFx0d2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy5fcmVkaXJlY3RVcmwpO1xyXG5cdFx0XHR9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHRoaXMuX3JlZGlyZWN0VXJsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9yZVRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCB2YWxpZCA9IHRoaXMudmFsaWRhdGVUb2tlbih0b2tlbik7XHJcblxyXG4gICAgLy8gdW5zdWJzY3JpYmUgZnJvbSByZWZlc2ggYmVmb3JlIHdlIGRlY2lkZSB3ZXRoZXIgdG8gcmVzdWJzY3JpYmVcclxuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tVG9rZW5SZWZyZXNoKCk7XHJcblxyXG4gICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSh0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIuYXV0aGVudGljYXRpb25Ub2tlbktleSwgdG9rZW4pO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvVG9rZW5SZWZyZXNoKHRva2VuKTtcclxuXHJcbiAgICAgIC8vQ2hhbmdlIHRoZSBCZWhhdmlvclN1YmplY3QgaWYgdGhlIHVzZXIgd2FzIG5vdCBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQuXHJcbiAgICAgIC8vU2luY2Ugb3RoZXIgY29kZSBtYXkgYmUgc3Vic2NyaWJpbmcgdG8gdGhpcyBvYnNlcnZhYmxlLCB3ZSBkb24ndCB3YW50IHRvIGNhdXNlIG5ldyBldmVudHMgdG8gZmlyZSBpZiBqdXN0IHJlZnJlc2hpbmcgdGhlIEpXVC5cclxuICAgICAgaWYgKCEgdGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2lzQXV0aGVudGljYXRlZFN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlci5hdXRoZW50aWNhdGlvblRva2VuS2V5KTtcclxuICAgICAgdGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2NlZWRJZkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF1dGhlbnRpY2F0aW9uU2VydmljZS5wcm9jZWVkSWZBdXRoZW50aWNhdGVkOiBcIiArIHRoaXMuX3JlZGlyZWN0VXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNBdXRoZW50aWNhdGVkU3ViamVjdC52YWx1ZSkge1xyXG4gICAgICAvL0xvZ2luIGNvdW50cyBhcyB1c2VyIGFjdGl2aXR5LCB0b29cclxuICAgICAgdGhpcy51cGRhdGVVc2VyQWN0aXZpdHkoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9yZWRpcmVjdFVybCAmJiB0aGlzLl9yZWRpcmVjdFVybCAmJiB0aGlzLl9yZWRpcmVjdFVybCAhPT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuX3JlZGlyZWN0VXJsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW1wiXCJdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVRva2VuKHRva2VuOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodG9rZW4gJiYgIXRoaXMuX2p3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbikpO1xyXG4gIH1cclxuICBcclxuICBzdWJzY3JpYmVUb1VJQWN0aXZpdHkoKXtcclxuICAgIHRoaXMuX3VpRXZlbnRzLmZvckVhY2goZXZlbnQgPT5cclxuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCBldmVudCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIC8vT25seSB1cGRhdGUgYWN0aXZpdHkgb24gVUkgZXZlbnQgaWYgbm90IGFscmVhZHkgYWJvdXQgdG8gdGltZSBvdXQuIENvdW50ZXIgaW50dWl0aXZlLCBidXQgaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBoYXZlIDYwIHNlY29uZCBjb3VudC1kb3duIGRpYWxvZyBvcGVuLlxyXG4gICAgICAgIGlmICh0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5nZXRWYWx1ZSgpICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJBY3Rpdml0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7ICAgIFxyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9Ub2tlblJlZnJlc2godG9rZW46IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IGV4cCA9IHRoaXMuX2p3dEhlbHBlci5nZXRUb2tlbkV4cGlyYXRpb25EYXRlKHRva2VuKTtcclxuXHJcbiAgICAvLyBVc2UgYSB0aW1lciB0byBwZXJpb2RpY2FsbHkgY2hlY2sgdGltZW91dHNcclxuICAgIHRoaXMuX3JlZnJlc2hTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgLy8gSWYgYSB0YWIgaXMgaW5hY3RpdmUgd2UgY2FuJ3Qga25vdyBpZiBvdXIgdGltZXIgaXMgYWNjdXJhdGVcclxuICAgICAgICAvLyBzbyB3aGVuIHRoZSBpbnRlcnZhbCBoaXRzIGNoZWNrIGFnYWluc3QgdGltZXN0YW1wc1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0LnZhbHVlICYmIERhdGUubm93KCkgPiB0aGlzLmdldFRpbWVvdXRTdGFydCgpKSB7XHJcbiAgICAgICAgICAvL0Rvbid0IHVwZGF0ZSB0aGUgc3ViamVjdCBtb3JlIHRoYW4gb25jZSEgRG9pbmcgc28gaW5pdGlhbGl6ZXMgbW9yZSB0aGFuIG9uZSBjb3VudGRvd24gdGltZXIhXHJcbiAgICAgICAgICBpZiAodGhpcy5fdXNlcklzQWJvdXRUb1RpbWVPdXQuZ2V0VmFsdWUoKSAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VySXNBYm91dFRvVGltZU91dC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2hlY2sgZm9yIHJlZnJlc2ggdG9rZW5cclxuICAgICAgICBsZXQgbXNUb0V4cGlyeSA9IChleHAudmFsdWVPZigpIC0gbmV3IERhdGUoKS52YWx1ZU9mKCkpO1xyXG5cclxuICAgICAgICAvLyBSZWZyZXNoIDYwIHNlY29uZHMgYmVmb3JlIGV4cGlyeVxyXG4gICAgICAgIGlmIChtc1RvRXhwaXJ5IDw9IDYwMDAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbklmVXNlcklzQWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlRnJvbVRva2VuUmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yZWZyZXNoU3Vic2NyaXB0aW9uICYmICEgdGhpcy5fcmVmcmVzaFN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcclxuICAgICAgdGhpcy5fcmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Vmlld1Blcm1pc3Npb24oKTogXCJ2aWV3XCIgfCBcInZpZXdpZGVudFwiIHwgXCJ2aWV3bGltaXRlZFwiIHtcclxuICAgIHJldHVybiB0aGlzLm1heFZpZXdQZXJtaXNzaW9uLmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhWaWV3UGVybWlzc2lvblN1YmplY3QoKTogQmVoYXZpb3JTdWJqZWN0PFwidmlld1wiIHwgXCJ2aWV3aWRlbnRcIiB8IFwidmlld2xpbWl0ZWRcIj4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF4Vmlld1Blcm1pc3Npb247XHJcbiAgfVxyXG5cclxuICBzZXRNYXhWaWV3UGVybWlzc2lvbihtYXhWaWV3UGVybWlzc2lvbjogXCJ2aWV3XCIgfCBcInZpZXdpZGVudFwiIHwgXCJ2aWV3bGltaXRlZFwiKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oXCJtYXhWaWV3UGVybWlzc2lvblwiLCBtYXhWaWV3UGVybWlzc2lvbik7XHJcbiAgICB0aGlzLm1heFZpZXdQZXJtaXNzaW9uLm5leHQobWF4Vmlld1Blcm1pc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5JZlVzZXJJc0FjdGl2ZSgpOiB2b2lkIHtcclxuICAgIC8vT25seSByZWZyZXNoIGlmIHRoZSB1c2VyIGhhcyBiZWVuIGFjdGl2ZVxyXG4gICAgaWYgKHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24gJiYgKChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMuX2xhc3RVc2VySW50ZXJhY3Rpb24udmFsdWVPZigpKSA8PSAodGhpcy5fbWF4SW5hY3Rpdml0eU1pbnV0ZXMgKiA2MCAqIDEwMDApKSkge1xyXG4gICAgICAvL1JlZnJlc2ggdGhlIEpXVFxyXG4gICAgICB0aGlzLnJlcXVlc3RBY2Nlc3NUb2tlbihmYWxzZSwgZmFsc2UpO1xyXG4gICAgICBcclxuICAgICAgLy9NaWdodCBhcyB3ZWxsIG1ha2UgYXBwbGljYXRpb24ga2VlcCBhbGl2ZSByZXF1ZXN0cyBhdCB0aGUgc2FtZSB0aW1lIGFzIHJlZnJlc2hpbmcgdG9rZW5zIC0gbW9yZSBlZmZpY2llbnQgJiBwcm9iYWJseSBuZWVkcyBzYW1lIGxvZ2ljXHJcbiAgICAgIGlmICh0aGlzLl9rZWVwQWxpdmVFbmRwb2ludCkge1xyXG4gICAgICAgIHRoaXMubWFrZUtlZXBBbGl2ZVJlcXVlc3QoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNWYWxpZENvbmZpZygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90b2tlbkVuZHBvaW50ID09IG51bGwgJiYgKHRoaXMuX3NlcnZlclVybCA9PT0gbnVsbCB8fCB0aGlzLl9sb2dvdXRQYXRoID09PSBudWxsKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCVUcgQUxFUlQhIEludmFsaWQgQXV0aGVudGljYXRpb25TZXJ2aWNlIGNvbmZpZ3VyYXRpb24uIE5vIHZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yIGF1dGhlbnRpY2F0aW9uIGVuZHBvaW50KHMpLlwiKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlID09PSBudWxsIHx8IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlci5hdXRoZW50aWNhdGlvblRva2VuS2V5ID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkJVRyBBTEVSVCEgSW52YWxpZCBBdXRoZW50aWNhdGlvblNlcnZpY2UgY29uZmlndXJhdGlvbi4gTm8gdmFsaWQgY29uZmlndXJhdGlvbiBmb3IgbG9jYWwgc3RvcmFnZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkgOiBPYnNlcnZhYmxlPG5ldmVyPiB7XHJcbiAgICBsZXQgZXJyTXNnID0gKGVycm9yLm1lc3NhZ2UpID8gZXJyb3IubWVzc2FnZSA6IEF1dGhlbnRpY2F0aW9uU2VydmljZS5HRU5FUklDX0VSUl9NU0c7XHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJNc2cpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -71,10 +71,10 @@ export class AuthorizationInterceptor {
|
|
|
71
71
|
}
|
|
72
72
|
}));
|
|
73
73
|
}
|
|
74
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
75
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
74
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthorizationInterceptor, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
75
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthorizationInterceptor }); }
|
|
76
76
|
}
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthorizationInterceptor, decorators: [{
|
|
78
78
|
type: Injectable
|
|
79
79
|
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2F1dGhlbnRpY2F0aW9uL3NyYy9hdXRob3JpemF0aW9uLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUc5RCxPQUFPLEVBQWEsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBRy9ELE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsWUFBb0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFFMUMsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxXQUFXLEdBQTBCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFbEYsbUZBQW1GO1FBQ25GLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUM1Qyw0SEFBNEg7WUFDNUgsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFnQixXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksR0FBRyxHQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsR0FBRyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDdkMsQ0FBQzthQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxHQUFHLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQWUsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN2QixHQUFHLEVBQUUsR0FBRztZQUNSLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQzVDLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRDs7OztlQUlHO1lBQ0gsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDbEMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtvQkFDdkQsSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDbEIsNkVBQTZFO3dCQUM3RSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN6QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ25DLENBQUM7eUJBQU0sQ0FBQzt3QkFDTiwwSkFBMEo7d0JBQzFKLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO2lCQUNJLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3ZDLCtDQUErQztZQUNqRCxDQUFDO2lCQUNJLENBQUM7Z0JBQ0osT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUErQixDQUFDO0lBQ3RDLENBQUM7K0dBdkVVLHdCQUF3QjttSEFBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3RvciwgaXNEZXZNb2RlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0h0dHBSZXF1ZXN0LCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50LCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG5pbXBvcnQge09ic2VydmFibGUsIHRocm93RXJyb3J9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7QXV0aGVudGljYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cclxuXHJcbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF1dGhvcml6YXRpb25JbnRlcmNlcHRvci5pbnRlcmNlcHRcIik7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGxldCBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoQXV0aGVudGljYXRpb25TZXJ2aWNlKTtcclxuICAgIFxyXG4gICAgLy9Eb24ndCB3YW50IHRvIGluY2x1ZGUgYmFja2dyb3VuZCB0b2tlbiByZWZyZXNoZXMgaW4gY29uc2lkZXJpbmcgdGhlIHVzZXIgJ2FjdGl2ZSdcclxuICAgIGlmIChyZXEudXJsICE9PSBhdXRoU2VydmljZS50b2tlbkxvY2F0aW9uKCkpIHtcclxuICAgICAgLy9VcGRhdGUgdXNlciBhY3Rpdml0eS4gRG9uZSBoZXJlIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIG1ldGhvZCB1c2luZyBhIHN1YnNjcmlwdGlvbiB0byBhIHN1YmplY3QgaW4gQXV0aGVudGljYXRpb25Qcm92aWRlclxyXG4gICAgICBhdXRoU2VydmljZS51cGRhdGVVc2VyQWN0aXZpdHkoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgbGV0IGhlYWRlcnM6IEh0dHBIZWFkZXJzID0gYXV0aFNlcnZpY2UuZ2V0SGVhZGVycyhyZXEpO1xyXG4gICAgbGV0IHVybDogc3RyaW5nID0gcmVxLnVybDtcclxuICAgIGlmICh1cmwuc3RhcnRzV2l0aChcIi9cIikpIHtcclxuICAgICAgdXJsID0gYXV0aFNlcnZpY2UuZ2V0QmFzZVVybCgpICsgdXJsO1xyXG4gICAgfSBlbHNlIGlmICghdXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XHJcbiAgICAgIGlmIChhdXRoU2VydmljZS5nZXRDb250ZXh0Um9vdCgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB1cmwgPSBhdXRoU2VydmljZS5nZXRCYXNlVXJsKCkgKyBcIi9cIiArIGF1dGhTZXJ2aWNlLmdldENvbnRleHRSb290KCkgKyBcIi9cIiArIHVybDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1cmwgPSBhdXRoU2VydmljZS5nZXRCYXNlVXJsKCkgKyBcIi9cIiArIHVybDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJhbXM6IEh0dHBQYXJhbXMgPSByZXEucGFyYW1zO1xyXG4gICAgaWYgKHVybC5pbmRleE9mKFwiL2NydWQvXCIpID4gMCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KFwibWF4Vmlld1Blcm1pc3Npb25cIiwgYXV0aFNlcnZpY2UuZ2V0TWF4Vmlld1Blcm1pc3Npb24oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcUNsb25lID0gcmVxLmNsb25lKHtcclxuICAgICAgdXJsOiB1cmwsXHJcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcclxuICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgcGFyYW1zOiBwYXJhbXNcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXFDbG9uZSlcclxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXphdGlvbkludGVyY2VwdG9yLmVycm9yXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhlIHRva2VuIGlzIG5vdCBhdXRoZW50aWNhdGVkIHdoaWNoIGFuZ3VsYXIgZG9lcyBub3Qga25vdyBhYm91dCwgdGhlbiBhIFJFU1QgcmVxdWVzdCB0byB0aGUgYmFja2VuZCB3aWxsXHJcbiAgICAgICAgICogcmV0dXJuIGEgNDAxLiAgVG8gZHVwbGljYXRlIHRoaXMsIG9wZW4gQ29yZSBpbiB0d28gdGFicy4gIEluIG9uZSB0YWIsIGxvZ291dCwgaW4gdGhlIG90aGVyLCBwZXJmb3JtIGEgcmVxdWVzdFxyXG4gICAgICAgICAqIHRoYXQgaGl0cyBhIHByb3RlY3RlZCByZXNvdXJjZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgIGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpLnBpcGUobWFwKChhdXRoZW50aWNhdGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgd2FzIHByZXZpb3VzbHkgYXV0aGVudGljYXRlZCwgdGhlbiBsb2dvdXQgd2hpY2ggd2lsbCByZWRpcmVjdC5cclxuICAgICAgICAgICAgICBhdXRoU2VydmljZS5sb2dvdXQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy9UaGlzIGhhcHBlbnMgZm9yIGxlZ2l0aW1hdGUgcmVhc29ucy4gQXR0ZW1wdGluZyB0byBnZXQgdGhlIEpXVCB3aGVuIG5vdCBhdXRoZW50aWNhdGVkIHJldHVybnMgdGhlIGxvZ2luIGZvcm0sIGZvciBleGFtcGxlLCB3aGljaCBORyB3aWxsIHNlZSBhcyBhbiBlcnJvclxyXG4gICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwMykge1xyXG4gICAgICAgICAgLy8gVE9ETzogVHJpZ2dlciBub3RpZmljYXRpb24gZm9yIHVuYXV0aG9yaXplZC5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSkgYXMgT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj47XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -36,8 +36,8 @@ export class DirectLoginComponent {
|
|
|
36
36
|
this._errorMsg = "Please check your username and password.";
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
40
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DirectLoginComponent, deps: [{ token: i1.AuthenticationService }, { token: i2.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DirectLoginComponent, selector: "hci-login-form", ngImport: i0, template: `
|
|
41
41
|
<div class="container">
|
|
42
42
|
<div class="login-box" id="hci-login-form-box">
|
|
43
43
|
<div class="login-heading" id="hci-login-form-heading">
|
|
@@ -64,7 +64,7 @@ export class DirectLoginComponent {
|
|
|
64
64
|
</div>
|
|
65
65
|
`, isInline: true, styles: [".container{max-width:400px;margin-top:20px;padding-top:15px}.login-box{border-radius:10px;box-shadow:0 0 2px #ccc;padding:15px}.login-box .login-heading h3{line-height:1.5;margin:0 0 10px}.login-box .form-control{padding:10px;border:1px solid #ccc}.login-box input[type=password]{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}.login-box input[type=text]{margin-bottom:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.login-box .alert-box{margin:10px 0 -5px}.login-box .alert-text{font-size:small}.login-box .btn-box{margin:10px 0 0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
66
66
|
}
|
|
67
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DirectLoginComponent, decorators: [{
|
|
68
68
|
type: Component,
|
|
69
69
|
args: [{ selector: "hci-login-form", template: `
|
|
70
70
|
<div class="container">
|
|
@@ -93,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
93
93
|
</div>
|
|
94
94
|
`, styles: [".container{max-width:400px;margin-top:20px;padding-top:15px}.login-box{border-radius:10px;box-shadow:0 0 2px #ccc;padding:15px}.login-box .login-heading h3{line-height:1.5;margin:0 0 10px}.login-box .form-control{padding:10px;border:1px solid #ccc}.login-box input[type=password]{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}.login-box input[type=text]{margin-bottom:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.login-box .alert-box{margin:10px 0 -5px}.login-box .alert-text{font-size:small}.login-box .btn-box{margin:10px 0 0}\n"] }]
|
|
95
95
|
}], ctorParameters: () => [{ type: i1.AuthenticationService }, { type: i2.UntypedFormBuilder }] });
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0bG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL2RpcmVjdGxvZ2luLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGtCQUFrQixFQUFvQixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUE4RWhGLE1BQU0sT0FBTyxvQkFBb0I7SUFJL0IsWUFBb0Isc0JBQTZDLEVBQVUsWUFBZ0M7UUFBdkYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtJQUFHLENBQUM7SUFFL0c7O09BRUc7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUN4QyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQzlGLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsMENBQTBDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQTdCVSxvQkFBb0I7bUdBQXBCLG9CQUFvQixzREExRXJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBeUJQOzs0RkFpRFEsb0JBQW9CO2tCQTVFaEMsU0FBUzsrQkFDRSxnQkFBZ0IsWUFDaEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F5QlAiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0F1dGhlbnRpY2F0aW9uU2VydmljZX0gZnJvbSBcIi4vYXV0aGVudGljYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1VudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yc30gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJoY2ktbG9naW4tZm9ybVwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1ib3hcIiBpZD1cImhjaS1sb2dpbi1mb3JtLWJveFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1oZWFkaW5nXCIgaWQ9XCJoY2ktbG9naW4tZm9ybS1oZWFkaW5nXCI+XHJcbiAgICAgICAgICA8aDM+U2lnbiBpbjwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiX2xvZ2luRm9ybVwiIChuZ1N1Ym1pdCk9XCJsb2dpbigpXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsPVwiZGlyZWN0LWxvZ2luLXVzZXJuYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcm5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwidXNlcm5hbWVcIiBuYW1lPVwidXNlcm5hbWVcIiBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lXCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgPGlucHV0IGFyaWEtbGFiZWw9XCJkaXJlY3QtbG9naW4tcGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJwYXNzd29yZFwiIG5hbWU9XCJwYXNzd29yZFwiIHR5cGU9XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJfZXJyb3JNc2dcIiBjbGFzcz1cImFsZXJ0LWJveFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImFsZXJ0LWhlYWRpbmdcIj5BdXRoZW50aWNhdGlvbiBGYWlsZWQ8L2g1PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJoY2ktbG9naW4tZXJyb3JcIiBjbGFzcz1cImFsZXJ0LXRleHRcIj57e19lcnJvck1zZ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tYm94XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGlkPVwiaGNpLWxvZ2luLWZvcm0tc3VibWl0LWJ1dHRvblwiIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiIV9sb2dpbkZvcm0udmFsaWRcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgLmNvbnRhaW5lciB7XHJcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgfVxyXG5cclxuICAgIC5sb2dpbi1ib3gge1xyXG4gICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICBib3gtc2hhZG93OiAwIDAgMnB4ICNjY2M7XHJcbiAgICAgIHBhZGRpbmc6IDE1cHg7XHJcbiAgICB9XHJcblxyXG4gICAgLmxvZ2luLWJveCAubG9naW4taGVhZGluZyBoMyB7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OjEuNTtcclxuICAgICAgbWFyZ2luOiAwIDAgMTBweFxyXG4gICAgfVxyXG5cclxuICAgIC5sb2dpbi1ib3ggLmZvcm0tY29udHJvbCB7XHJcbiAgICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcbiAgICB9XHJcblxyXG4gICAgLmxvZ2luLWJveCBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xyXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcclxuICAgIH1cclxuXHJcbiAgICAubG9naW4tYm94IGlucHV0W3R5cGU9XCJ0ZXh0XCJdIHtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDtcclxuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XHJcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLmxvZ2luLWJveCAuYWxlcnQtYm94IHtcclxuICAgICAgbWFyZ2luOiAxMHB4IDAgLTVweCAwXHJcbiAgICB9XHJcblxyXG4gICAgLmxvZ2luLWJveCAuYWxlcnQtdGV4dCB7XHJcbiAgICAgIGZvbnQtc2l6ZTogc21hbGw7XHJcbiAgICB9XHJcblxyXG4gICAgLmxvZ2luLWJveCAuYnRuLWJveCB7XHJcbiAgICAgIG1hcmdpbjogMTBweCAwIDBweCAwXHJcbiAgICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERpcmVjdExvZ2luQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwdWJsaWMgX2xvZ2luRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgX2Vycm9yTXNnOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLCBwcml2YXRlIF9mb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplcyB0aGUgYXV0aGVudGljYXRpb24gZm9ybS5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvZ2luRm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgdXNlcm5hbWU6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcGFzc3dvcmQ6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRvIHN1Ym1pdCB0aGUgbG9naW4gZm9ybSB0aGUgdGhlIHtAbGluayBVc2VyU2VydmljZX0uXHJcbiAgICovXHJcbiAgbG9naW4oKSB7XHJcbiAgICB0aGlzLl9hdXRoZW50aWNhdGlvblNlcnZpY2UubG9naW4odGhpcy5fbG9naW5Gb3JtLnZhbHVlLnVzZXJuYW1lLCB0aGlzLl9sb2dpbkZvcm0udmFsdWUucGFzc3dvcmQpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yTXNnID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uU2VydmljZS5yZXF1ZXN0QWNjZXNzVG9rZW4oZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLl9lcnJvck1zZyA9IFwiUGxlYXNlIGNoZWNrIHlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlwiO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -46,8 +46,8 @@ export class TimeoutNotificationComponent {
|
|
|
46
46
|
this.subscription.unsubscribe();
|
|
47
47
|
this.authenticationService.updateUserActivity();
|
|
48
48
|
}
|
|
49
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
50
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeoutNotificationComponent, deps: [{ token: i1.AuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TimeoutNotificationComponent, selector: "timeout-notification", ngImport: i0, template: `
|
|
51
51
|
<div class="flyout-max" [@openBacksplash]="openState">
|
|
52
52
|
<div class="modal-dialog" [@openModal]="openState" role="document">
|
|
53
53
|
<div class="modal-header">
|
|
@@ -95,7 +95,7 @@ export class TimeoutNotificationComponent {
|
|
|
95
95
|
])
|
|
96
96
|
] }); }
|
|
97
97
|
}
|
|
98
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeoutNotificationComponent, decorators: [{
|
|
99
99
|
type: Component,
|
|
100
100
|
args: [{ selector: "timeout-notification", template: `
|
|
101
101
|
<div class="flyout-max" [@openBacksplash]="openState">
|
|
@@ -145,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
145
145
|
])
|
|
146
146
|
], styles: [".flyout-max{position:fixed;z-index:9999;top:0;bottom:0;background-color:#0006;width:100vw}.modal-dialog{position:fixed;max-width:50vw;min-width:50vw;left:-50vw;top:25vw;margin:0;background-color:#fff;border:black 1px solid;border-left:none;border-radius:20px;pointer-events:all}.modal-body{width:100%;display:inline-block}.modal-body-left{display:inline-block;overflow-y:auto;overflow-x:hidden;min-height:300px;max-height:300px}.modal-body-right{width:70%;vertical-align:top;padding-left:15px;border-left:black 1px solid;margin-left:15px;display:inline-block;overflow-y:auto;min-height:300px;max-height:300px}\n"] }]
|
|
147
147
|
}], ctorParameters: () => [{ type: i1.AuthenticationService }] });
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC1ub3RpZmljYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL3RpbWVvdXQtbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQTJCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBOEcvRCxNQUFNLE9BQU8sNEJBQTRCO0lBTXZDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBSnpELGNBQVMsR0FBVyxRQUFRLENBQUM7UUFLbEMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBRXRFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBQzFCLDhEQUE4RDtnQkFDOUQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxZQUFZLENB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Q0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dDQUNoQixTQUFTLEVBQUUsTUFBTTs2QkFDbEIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsTUFBTTs2QkFDbEIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsU0FBUzs2QkFDckIsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzVDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzdDLENBQ0Y7d0JBQ0QsT0FBTyxDQUFDLFdBQVcsRUFDakI7NEJBQ0UsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0NBQ2hCLFNBQVMsRUFBRSxHQUFHO2dDQUNkLE1BQU0sRUFBRSxPQUFPOzZCQUNoQixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7Z0NBQ3BCLFNBQVMsRUFBRSxHQUFHO2dDQUNkLE1BQU0sRUFBRSxPQUFPOzZCQUNoQixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7Z0NBQ3BCLFNBQVMsRUFBRSxHQUFHO2dDQUNkLE1BQU0sRUFBRSxNQUFNOzZCQUNmLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM1QyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUM3QyxDQUNGO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuaW1wb3J0IHtDb21wb25lbnR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5cclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRpbWVyfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge21hcCwgdGFrZVdoaWxlfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7QXV0aGVudGljYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJ0aW1lb3V0LW5vdGlmaWNhdGlvblwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmx5b3V0LW1heFwiIFtAb3BlbkJhY2tzcGxhc2hdPVwib3BlblN0YXRlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiBbQG9wZW5Nb2RhbF09XCJvcGVuU3RhdGVcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPllvdXIgU2Vzc2lvbiBJcyBBYm91dCBUbyBFeHBpcmU8L2g0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICA8cD5Gb3IgeW91ciBzZWN1cml0eSwgeW91ciBzZXNzaW9uIGlzIGFib3V0IHRvIGF1dG9tYXRpY2FsbHkgdGltZSBvdXQgaW4gdGhlIG5leHQgPGI+e3tzZWNvbmRzIHwgYXN5bmN9fTwvYj4gc2Vjb25kcy4gV291bGQgeW91IGxpa2UgdG8gc3RheSBzaWduZWQgaW4/PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJ1cGRhdGVCdG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJjbGljaygpXCI+WWVzLCBLZWVwIG1lIHNpZ25lZCBpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKFwib3BlbkJhY2tzcGxhc2hcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiaW5cIiwgc3R5bGUoe1xyXG4gICAgICAgICAgXCJkaXNwbGF5XCI6IFwibm9uZVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwiaGlkZGVuXCIsIHN0eWxlKHtcclxuICAgICAgICAgIFwiZGlzcGxheVwiOiBcIm5vbmVcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBcImRpc3BsYXlcIjogXCJpbmhlcml0XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImhpZGRlbiA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgxMDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwib3BlbmVkID0+IGhpZGRlblwiLCBhbmltYXRlKDIwMCkpXHJcbiAgICAgIF1cclxuICAgICksXHJcbiAgICB0cmlnZ2VyKFwib3Blbk1vZGFsXCIsXHJcbiAgICAgIFtcclxuICAgICAgICBzdGF0ZShcImluXCIsIHN0eWxlKHtcclxuICAgICAgICAgIFwib3BhY2l0eVwiOiBcIjBcIixcclxuICAgICAgICAgIFwibGVmdFwiOiBcIi01MHZ3XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJoaWRkZW5cIiwgc3R5bGUoe1xyXG4gICAgICAgICAgXCJvcGFjaXR5XCI6IFwiMFwiLFxyXG4gICAgICAgICAgXCJsZWZ0XCI6IFwiLTUwdndcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBcIm9wYWNpdHlcIjogXCIxXCIsXHJcbiAgICAgICAgICBcImxlZnRcIjogXCIyNXZ3XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImhpZGRlbiA9PiBvcGVuZWRcIiwgYW5pbWF0ZSg1MDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwib3BlbmVkID0+IGhpZGRlblwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICAgIF1cclxuICAgIClcclxuICBdLFxyXG4gIHN0eWxlczogW2BcclxuXHJcbiAgICAuZmx5b3V0LW1heCB7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogOTk5OTtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICBib3R0b206IDA7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40KTtcclxuICAgICAgd2lkdGg6IDEwMHZ3O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAubW9kYWwtZGlhbG9nIHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICBtYXgtd2lkdGg6IDUwdnc7XHJcbiAgICAgIG1pbi13aWR0aDogNTB2dztcclxuICAgICAgbGVmdDogLTUwdnc7XHJcbiAgICAgIHRvcDogMjV2dztcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgICAgYm9yZGVyOiBibGFjayAxcHggc29saWQ7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xyXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMjBweDtcclxuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDIwcHg7XHJcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDIwcHg7XHJcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDIwcHg7XHJcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5tb2RhbC1ib2R5IHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIH1cclxuICAgIFxyXG4gICAgLm1vZGFsLWJvZHktbGVmdCB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgICBtaW4taGVpZ2h0OiAzMDBweDtcclxuICAgICAgbWF4LWhlaWdodDogMzAwcHg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5tb2RhbC1ib2R5LXJpZ2h0IHtcclxuICAgICAgd2lkdGg6IDcwJTtcclxuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xyXG4gICAgICBib3JkZXItbGVmdDogYmxhY2sgMXB4IHNvbGlkO1xyXG4gICAgICBtYXJnaW4tbGVmdDogMTVweDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICBtaW4taGVpZ2h0OiAzMDBweDtcclxuICAgICAgbWF4LWhlaWdodDogMzAwcHg7XHJcbiAgICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVvdXROb3RpZmljYXRpb25Db21wb25lbnQge1xyXG4gIHB1YmxpYyBzZWNvbmRzOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgcHVibGljIG9wZW5TdGF0ZTogc3RyaW5nID0gXCJoaWRkZW5cIjtcclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSkge1xyXG4gICAgYXV0aGVudGljYXRpb25TZXJ2aWNlLmlzQWJvdXRUb1RpbWVPdXQoKS5zdWJzY3JpYmUoKGlzQWJvdXRUb1RpbWVPdXQpID0+IHtcclxuXHJcbiAgICAgIGlmIChpc0Fib3V0VG9UaW1lT3V0KSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU3RhdGUgPSBcIm9wZW5lZFwiO1xyXG4gICAgICAgIHRoaXMuc3RhcnRDb3VudGRvd24oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wZW5TdGF0ZSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgLy9JZiBzb21ldGhpbmcgY2hhbmdlZCBtaWQtdGltZW91dCwgY2FuY2VsIHRoZSB0aW1lb3V0L2xvZ291dC5cclxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhdGhpcy5zdWJzY3JpcHRpb24uY2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGFydENvdW50ZG93bigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2Vjb25kcyA9IHRpbWVyKDAsIDEwMDApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlbGFwc2VkOiBudW1iZXIgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuZ2V0VGltZW91dFN0YXJ0KCkpIC8gMTAwMCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UudXNlckNvdW50ZG93blNlY29uZHMgLSBlbGFwc2VkO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFRoZSB0cnVlIGFyZ3VtZW50IGVtaXRzIHRoZSBmaW5hbCB2YWx1ZSB0aGF0IGNvbXBsZXRlZCB0aGUgb2JzZXJ2YWJsZVxyXG4gICAgICAgIHRha2VXaGlsZSgodmFsdWUpID0+IHZhbHVlID4gMCwgdHJ1ZSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNlY29uZHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgaWYgKHZhbHVlIDwgMSkge1xyXG4gICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5sb2dvdXQodHJ1ZSk7XHJcbiAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLnVwZGF0ZVVzZXJBY3Rpdml0eSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC1ub3RpZmljYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL3RpbWVvdXQtbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQTJCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBOEcvRCxNQUFNLE9BQU8sNEJBQTRCO0lBTXZDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBSnpELGNBQVMsR0FBVyxRQUFRLENBQUM7UUFLbEMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBRXRFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBQzFCLDhEQUE4RDtnQkFDOUQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxZQUFZLENB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Q0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dDQUNoQixTQUFTLEVBQUUsTUFBTTs2QkFDbEIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsTUFBTTs2QkFDbEIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsU0FBUzs2QkFDckIsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzVDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzdDLENBQ0Y7d0JBQ0QsT0FBTyxDQUFDLFdBQVcsRUFDakI7NEJBQ0UsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0NBQ2hCLFNBQVMsRUFBRSxHQUFHO2dDQUNkLE1BQU0sRUFBRSxPQUFPOzZCQUNoQixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7Z0NBQ3BCLFNBQVMsRUFBRSxHQUFHO2dDQUNkLE1BQU0sRUFBRSxPQUFPOzZCQUNoQixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7Z0NBQ3BCLFNBQVMsRUFBRSxHQUFHO2dDQUNkLE1BQU0sRUFBRSxNQUFNOzZCQUNmLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM1QyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUM3QyxDQUNGO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuaW1wb3J0IHtDb21wb25lbnR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5cclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHRpbWVyfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge21hcCwgdGFrZVdoaWxlfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7QXV0aGVudGljYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJ0aW1lb3V0LW5vdGlmaWNhdGlvblwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmx5b3V0LW1heFwiIFtAb3BlbkJhY2tzcGxhc2hdPVwib3BlblN0YXRlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiBbQG9wZW5Nb2RhbF09XCJvcGVuU3RhdGVcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPllvdXIgU2Vzc2lvbiBJcyBBYm91dCBUbyBFeHBpcmU8L2g0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICA8cD5Gb3IgeW91ciBzZWN1cml0eSwgeW91ciBzZXNzaW9uIGlzIGFib3V0IHRvIGF1dG9tYXRpY2FsbHkgdGltZSBvdXQgaW4gdGhlIG5leHQgPGI+e3tzZWNvbmRzIHwgYXN5bmN9fTwvYj4gc2Vjb25kcy4gV291bGQgeW91IGxpa2UgdG8gc3RheSBzaWduZWQgaW4/PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJ1cGRhdGVCdG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJjbGljaygpXCI+WWVzLCBLZWVwIG1lIHNpZ25lZCBpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKFwib3BlbkJhY2tzcGxhc2hcIixcclxuICAgICAgW1xyXG4gICAgICAgIHN0YXRlKFwiaW5cIiwgc3R5bGUoe1xyXG4gICAgICAgICAgXCJkaXNwbGF5XCI6IFwibm9uZVwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwiaGlkZGVuXCIsIHN0eWxlKHtcclxuICAgICAgICAgIFwiZGlzcGxheVwiOiBcIm5vbmVcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBcImRpc3BsYXlcIjogXCJpbmhlcml0XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImhpZGRlbiA9PiBvcGVuZWRcIiwgYW5pbWF0ZSgxMDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwib3BlbmVkID0+IGhpZGRlblwiLCBhbmltYXRlKDIwMCkpXHJcbiAgICAgIF1cclxuICAgICksXHJcbiAgICB0cmlnZ2VyKFwib3Blbk1vZGFsXCIsXHJcbiAgICAgIFtcclxuICAgICAgICBzdGF0ZShcImluXCIsIHN0eWxlKHtcclxuICAgICAgICAgIFwib3BhY2l0eVwiOiBcIjBcIixcclxuICAgICAgICAgIFwibGVmdFwiOiBcIi01MHZ3XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJoaWRkZW5cIiwgc3R5bGUoe1xyXG4gICAgICAgICAgXCJvcGFjaXR5XCI6IFwiMFwiLFxyXG4gICAgICAgICAgXCJsZWZ0XCI6IFwiLTUwdndcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICBzdGF0ZShcIm9wZW5lZFwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBcIm9wYWNpdHlcIjogXCIxXCIsXHJcbiAgICAgICAgICBcImxlZnRcIjogXCIyNXZ3XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcImhpZGRlbiA9PiBvcGVuZWRcIiwgYW5pbWF0ZSg1MDApKSxcclxuICAgICAgICB0cmFuc2l0aW9uKFwib3BlbmVkID0+IGhpZGRlblwiLCBhbmltYXRlKDMwMCkpXHJcbiAgICAgIF1cclxuICAgIClcclxuICBdLFxyXG4gIHN0eWxlczogW2BcclxuXHJcbiAgICAuZmx5b3V0LW1heCB7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgei1pbmRleDogOTk5OTtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICBib3R0b206IDA7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC40KTtcclxuICAgICAgd2lkdGg6IDEwMHZ3O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAubW9kYWwtZGlhbG9nIHtcclxuICAgICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgICBtYXgtd2lkdGg6IDUwdnc7XHJcbiAgICAgIG1pbi13aWR0aDogNTB2dztcclxuICAgICAgbGVmdDogLTUwdnc7XHJcbiAgICAgIHRvcDogMjV2dztcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgICAgYm9yZGVyOiBibGFjayAxcHggc29saWQ7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xyXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMjBweDtcclxuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDIwcHg7XHJcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDIwcHg7XHJcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDIwcHg7XHJcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5tb2RhbC1ib2R5IHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIH1cclxuICAgIFxyXG4gICAgLm1vZGFsLWJvZHktbGVmdCB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgICBtaW4taGVpZ2h0OiAzMDBweDtcclxuICAgICAgbWF4LWhlaWdodDogMzAwcHg7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5tb2RhbC1ib2R5LXJpZ2h0IHtcclxuICAgICAgd2lkdGg6IDcwJTtcclxuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xyXG4gICAgICBib3JkZXItbGVmdDogYmxhY2sgMXB4IHNvbGlkO1xyXG4gICAgICBtYXJnaW4tbGVmdDogMTVweDtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICBtaW4taGVpZ2h0OiAzMDBweDtcclxuICAgICAgbWF4LWhlaWdodDogMzAwcHg7XHJcbiAgICB9XHJcbiAgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWVvdXROb3RpZmljYXRpb25Db21wb25lbnQge1xyXG4gIHB1YmxpYyBzZWNvbmRzOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgcHVibGljIG9wZW5TdGF0ZTogc3RyaW5nID0gXCJoaWRkZW5cIjtcclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSkge1xyXG4gICAgYXV0aGVudGljYXRpb25TZXJ2aWNlLmlzQWJvdXRUb1RpbWVPdXQoKS5zdWJzY3JpYmUoKGlzQWJvdXRUb1RpbWVPdXQpID0+IHtcclxuXHJcbiAgICAgIGlmIChpc0Fib3V0VG9UaW1lT3V0KSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU3RhdGUgPSBcIm9wZW5lZFwiO1xyXG4gICAgICAgIHRoaXMuc3RhcnRDb3VudGRvd24oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wZW5TdGF0ZSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgLy9JZiBzb21ldGhpbmcgY2hhbmdlZCBtaWQtdGltZW91dCwgY2FuY2VsIHRoZSB0aW1lb3V0L2xvZ291dC5cclxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhdGhpcy5zdWJzY3JpcHRpb24uY2xvc2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGFydENvdW50ZG93bigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2Vjb25kcyA9IHRpbWVyKDAsIDEwMDApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlbGFwc2VkOiBudW1iZXIgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuZ2V0VGltZW91dFN0YXJ0KCkpIC8gMTAwMCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UudXNlckNvdW50ZG93blNlY29uZHMgLSBlbGFwc2VkO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8vIFRoZSB0cnVlIGFyZ3VtZW50IGVtaXRzIHRoZSBmaW5hbCB2YWx1ZSB0aGF0IGNvbXBsZXRlZCB0aGUgb2JzZXJ2YWJsZVxyXG4gICAgICAgIHRha2VXaGlsZSgodmFsdWUpID0+IHZhbHVlID4gMCwgdHJ1ZSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNlY29uZHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgaWYgKHZhbHVlIDwgMSkge1xyXG4gICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5sb2dvdXQodHJ1ZSk7XHJcbiAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLnVwZGF0ZVVzZXJBY3Rpdml0eSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
2
|
+
import { InjectionToken, Inject, Injectable, isDevMode, Optional, ViewChild, Component, SkipSelf, NgModule, inject } from '@angular/core';
|
|
3
3
|
import * as i4$1 from '@angular/common';
|
|
4
4
|
import { LocationStrategy, CommonModule } from '@angular/common';
|
|
5
5
|
import * as i2$2 from '@angular/forms';
|
|
@@ -15,7 +15,7 @@ import { JwtHelperService, JwtInterceptor, JWT_OPTIONS } from '@auth0/angular-jw
|
|
|
15
15
|
import { BehaviorSubject, fromEvent, interval, throwError, timer } from 'rxjs';
|
|
16
16
|
import { map, catchError, first, takeWhile } from 'rxjs/operators';
|
|
17
17
|
import * as i2$1 from '@angular/platform-browser';
|
|
18
|
-
import { trigger, state,
|
|
18
|
+
import { trigger, state, transition, style, animate } from '@angular/animations';
|
|
19
19
|
|
|
20
20
|
let AUTHENTICATION_TOKEN_KEY = new InjectionToken("authentication_token_key");
|
|
21
21
|
class AuthenticationProvider {
|
|
@@ -39,10 +39,10 @@ class AuthenticationProvider {
|
|
|
39
39
|
get authToken() {
|
|
40
40
|
return this._localStorageService.getItem(this._authenticationTokenKey);
|
|
41
41
|
}
|
|
42
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
43
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationProvider, deps: [{ token: i1.CoolLocalStorage }, { token: AUTHENTICATION_TOKEN_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
43
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationProvider }); }
|
|
44
44
|
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationProvider, decorators: [{
|
|
46
46
|
type: Injectable
|
|
47
47
|
}], ctorParameters: () => [{ type: i1.CoolLocalStorage }, { type: undefined, decorators: [{
|
|
48
48
|
type: Inject,
|
|
@@ -469,10 +469,10 @@ class AuthenticationService {
|
|
|
469
469
|
let errMsg = (error.message) ? error.message : AuthenticationService.GENERIC_ERR_MSG;
|
|
470
470
|
return throwError(errMsg);
|
|
471
471
|
}
|
|
472
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
473
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
472
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationService, deps: [{ token: i1$1.HttpClient }, { token: i2.Router }, { token: i1.CoolLocalStorage }, { token: i4.JwtHelperService }, { token: AuthenticationProvider }, { token: AUTHENTICATION_LOGOUT_PATH }, { token: AUTHENTICATION_TOKEN_ENDPOINT }, { token: AUTHENTICATION_LOGIN_PATH, optional: true }, { token: AUTHENTICATION_LOGOUT_CONFIRM_PATH, optional: true }, { token: AUTHENTICATION_ROUTE, optional: true }, { token: AUTHENTICATION_SERVER_URL, optional: true }, { token: AUTHENTICATION_DIRECT_ENDPOINT, optional: true }, { token: AUTHENTICATION_MAX_INACTIVITY_MINUTES, optional: true }, { token: AUTHENTICATION_USER_COUNTDOWN_SECONDS, optional: true }, { token: AUTHENTICATION_IDP_INACTIVITY_MINUTES, optional: true }, { token: AUTHENTICATION_USE_UI_EVENTS_FOR_ACTIVITY, optional: true }, { token: AUTHENTICATION_APP_KEEP_ALIVE_ENDPOINT, optional: true }, { token: LocationStrategy, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
473
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationService }); }
|
|
474
474
|
}
|
|
475
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationService, decorators: [{
|
|
476
476
|
type: Injectable
|
|
477
477
|
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2.Router }, { type: i1.CoolLocalStorage }, { type: i4.JwtHelperService }, { type: AuthenticationProvider }, { type: undefined, decorators: [{
|
|
478
478
|
type: Inject,
|
|
@@ -622,8 +622,8 @@ class AuthenticationComponent {
|
|
|
622
622
|
this.beginAuthenticationProcess();
|
|
623
623
|
});
|
|
624
624
|
}
|
|
625
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
626
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
625
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationComponent, deps: [{ token: AuthenticationService }, { token: i2$1.DomSanitizer }, { token: i2.Router }, { token: i4$1.Location }, { token: i0.Renderer2 }, { token: AUTHENTICATION_ROUTE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
626
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuthenticationComponent, selector: "authentication-iframe", host: { classAttribute: "outlet-row" }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true, static: true }], ngImport: i0, template: `
|
|
627
627
|
<div class="container">
|
|
628
628
|
<iframe #iframe class="frame" [src]="url" (load)="handleChanges()"></iframe>
|
|
629
629
|
<div *ngIf="_errorMsg" class="alert-box">
|
|
@@ -635,7 +635,7 @@ class AuthenticationComponent {
|
|
|
635
635
|
</div>
|
|
636
636
|
`, isInline: true, styles: [":host{background-color:#fff}.container{max-width:100%;margin-top:60px;padding-top:15px}.frame{width:100%;height:100%;border:0px}\n"], dependencies: [{ kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
637
637
|
}
|
|
638
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
638
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationComponent, decorators: [{
|
|
639
639
|
type: Component,
|
|
640
640
|
args: [{ selector: "authentication-iframe", template: `
|
|
641
641
|
<div class="container">
|
|
@@ -687,8 +687,8 @@ class DirectLoginComponent {
|
|
|
687
687
|
this._errorMsg = "Please check your username and password.";
|
|
688
688
|
});
|
|
689
689
|
}
|
|
690
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
691
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
690
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DirectLoginComponent, deps: [{ token: AuthenticationService }, { token: i2$2.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
691
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DirectLoginComponent, selector: "hci-login-form", ngImport: i0, template: `
|
|
692
692
|
<div class="container">
|
|
693
693
|
<div class="login-box" id="hci-login-form-box">
|
|
694
694
|
<div class="login-heading" id="hci-login-form-heading">
|
|
@@ -715,7 +715,7 @@ class DirectLoginComponent {
|
|
|
715
715
|
</div>
|
|
716
716
|
`, isInline: true, styles: [".container{max-width:400px;margin-top:20px;padding-top:15px}.login-box{border-radius:10px;box-shadow:0 0 2px #ccc;padding:15px}.login-box .login-heading h3{line-height:1.5;margin:0 0 10px}.login-box .form-control{padding:10px;border:1px solid #ccc}.login-box input[type=password]{margin-bottom:10px;border-top-left-radius:0;border-top-right-radius:0}.login-box input[type=text]{margin-bottom:-1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.login-box .alert-box{margin:10px 0 -5px}.login-box .alert-text{font-size:small}.login-box .btn-box{margin:10px 0 0}\n"], dependencies: [{ kind: "directive", type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
717
717
|
}
|
|
718
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
718
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DirectLoginComponent, decorators: [{
|
|
719
719
|
type: Component,
|
|
720
720
|
args: [{ selector: "hci-login-form", template: `
|
|
721
721
|
<div class="container">
|
|
@@ -785,8 +785,8 @@ class TimeoutNotificationComponent {
|
|
|
785
785
|
this.subscription.unsubscribe();
|
|
786
786
|
this.authenticationService.updateUserActivity();
|
|
787
787
|
}
|
|
788
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
789
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
788
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeoutNotificationComponent, deps: [{ token: AuthenticationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
789
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TimeoutNotificationComponent, selector: "timeout-notification", ngImport: i0, template: `
|
|
790
790
|
<div class="flyout-max" [@openBacksplash]="openState">
|
|
791
791
|
<div class="modal-dialog" [@openModal]="openState" role="document">
|
|
792
792
|
<div class="modal-header">
|
|
@@ -834,7 +834,7 @@ class TimeoutNotificationComponent {
|
|
|
834
834
|
])
|
|
835
835
|
] }); }
|
|
836
836
|
}
|
|
837
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
837
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TimeoutNotificationComponent, decorators: [{
|
|
838
838
|
type: Component,
|
|
839
839
|
args: [{ selector: "timeout-notification", template: `
|
|
840
840
|
<div class="flyout-max" [@openBacksplash]="openState">
|
|
@@ -953,10 +953,10 @@ class AuthorizationInterceptor {
|
|
|
953
953
|
}
|
|
954
954
|
}));
|
|
955
955
|
}
|
|
956
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
957
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
956
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthorizationInterceptor, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
957
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthorizationInterceptor }); }
|
|
958
958
|
}
|
|
959
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
959
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthorizationInterceptor, decorators: [{
|
|
960
960
|
type: Injectable
|
|
961
961
|
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
962
962
|
|
|
@@ -999,8 +999,8 @@ class AuthenticationModule {
|
|
|
999
999
|
ngModule: AuthenticationModule
|
|
1000
1000
|
};
|
|
1001
1001
|
}
|
|
1002
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
1003
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.
|
|
1002
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, deps: [{ token: i4.JwtModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1003
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, declarations: [AuthenticationComponent,
|
|
1004
1004
|
DirectLoginComponent,
|
|
1005
1005
|
TimeoutNotificationComponent], imports: [CommonModule,
|
|
1006
1006
|
HttpClientModule,
|
|
@@ -1011,7 +1011,7 @@ class AuthenticationModule {
|
|
|
1011
1011
|
CoolStorageModule], exports: [AuthenticationComponent,
|
|
1012
1012
|
DirectLoginComponent,
|
|
1013
1013
|
TimeoutNotificationComponent] }); }
|
|
1014
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.
|
|
1014
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, imports: [CommonModule,
|
|
1015
1015
|
HttpClientModule,
|
|
1016
1016
|
//JwtModule,
|
|
1017
1017
|
RouterModule,
|
|
@@ -1019,7 +1019,7 @@ class AuthenticationModule {
|
|
|
1019
1019
|
ReactiveFormsModule,
|
|
1020
1020
|
CoolStorageModule] }); }
|
|
1021
1021
|
}
|
|
1022
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
1022
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthenticationModule, decorators: [{
|
|
1023
1023
|
type: NgModule,
|
|
1024
1024
|
args: [{
|
|
1025
1025
|
imports: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"huntsman-cancer-institute-authentication.mjs","sources":["../../../projects/authentication/src/authentication.provider.ts","../../../projects/authentication/src/authentication.service.ts","../../../projects/authentication/src/authentication.component.ts","../../../projects/authentication/src/directlogin.component.ts","../../../projects/authentication/src/timeout-notification.component.ts","../../../projects/authentication/src/authorization.interceptor.ts","../../../projects/authentication/src/authentication.module.ts","../../../projects/authentication/src/route-guard.service.ts","../../../projects/authentication/src/huntsman-cancer-institute-authentication.ts"],"sourcesContent":["import {Inject, Injectable, InjectionToken, Injector} from \"@angular/core\";\r\n\r\nimport {Subject} from \"rxjs\";\r\n\r\nimport {CoolLocalStorage} from '@angular-cool/storage';\r\n\r\nexport let AUTHENTICATION_TOKEN_KEY = new InjectionToken<string>(\"authentication_token_key\");\r\n\r\n@Injectable()\r\nexport class AuthenticationProvider {\r\n\r\n public whitelistedDomains = [\r\n \"localhost\",\r\n new RegExp(\".*[.]utah[.]edu\")\r\n ];\r\n\r\n constructor(private _localStorageService: CoolLocalStorage,\r\n @Inject(AUTHENTICATION_TOKEN_KEY) private _authenticationTokenKey: string) {}\r\n\r\n public tokenGetter = () => {\r\n return this.authToken;\r\n }\r\n\r\n get authenticationTokenKey(): string {\r\n return this._authenticationTokenKey;\r\n }\r\n\r\n set authenticationTokenKey(_authenticationTokenKey: string) {\r\n this._authenticationTokenKey = _authenticationTokenKey;\r\n }\r\n\r\n get authToken(): string {\r\n return <string>this._localStorageService.getItem(this._authenticationTokenKey);\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Injectable, InjectionToken, Inject, Optional, isDevMode} from \"@angular/core\";\r\nimport {LocationStrategy} from \"@angular/common\";\r\nimport {Router} from \"@angular/router\";\r\nimport {HttpClient, HttpHeaders, HttpRequest, HttpResponse} from \"@angular/common/http\";\r\n\r\nimport {interval, Observable, BehaviorSubject, Subscription, throwError, of, fromEvent} from \"rxjs\";\r\nimport {catchError, first, map} from \"rxjs/operators\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\n\r\nimport {AuthenticationProvider} from \"./authentication.provider\";\r\nimport { CoolLocalStorage } from \"@angular-cool/storage\";\r\n\r\n/**\r\n * The token used for injection of the server side endpoint for the currently authenticated subject.\r\n *\r\n * @type {InjectionToken}\r\n */\r\nexport let AUTHENTICATION_SERVER_URL = new InjectionToken<string>(\"authentication_server_rest_api\");\r\nexport let AUTHENTICATION_LOGIN_PATH = new InjectionToken<string>(\"authentication_login_path\");\r\nexport let AUTHENTICATION_LOGOUT_PATH = new InjectionToken<string>(\"authentication_logout_path\");\r\nexport let AUTHENTICATION_LOGOUT_CONFIRM_PATH = new InjectionToken<string>(\"authentication_logout_confirm_path\");\r\nexport let AUTHENTICATION_DIRECT_ENDPOINT = new InjectionToken<string>(\"authentication_direct_endpoint\");\r\nexport let AUTHENTICATION_TOKEN_ENDPOINT = new InjectionToken<string>(\"authentication_token_endpoint\");\r\nexport let AUTHENTICATION_ROUTE = new InjectionToken<string>(\"authentication_route\");\r\nexport let AUTHENTICATION_MAX_INACTIVITY_MINUTES = new InjectionToken<number>(\"authentication_max_inactivity\");\r\nexport let AUTHENTICATION_USER_COUNTDOWN_SECONDS = new InjectionToken<number>(\"authentication_user_countdown_seconds\");\r\nexport let AUTHENTICATION_IDP_INACTIVITY_MINUTES = new InjectionToken<number>(\"authentication_idp_inactivity_minutes\");\r\nexport let AUTHENTICATION_USE_UI_EVENTS_FOR_ACTIVITY = new InjectionToken<boolean>(\"authentication_use_ui_events_for_activity\");\r\nexport let AUTHENTICATION_APP_KEEP_ALIVE_ENDPOINT = new InjectionToken<string>(\"authentication_app_keep_alive_endpoint\");\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Injectable()\r\nexport class AuthenticationService {\r\n\r\n /**\r\n * The generic error message used when a server error is thrown without a status.\r\n *\r\n * @type {string}\r\n */\r\n public static GENERIC_ERR_MSG: string = \"Server error\";\r\n\r\n private static CONTENT_TYPE: string = \"Content-Type\";\r\n private static SEC_GOV_CLASS_HEADER: string = \"SecurityGovernorClass\";\r\n private static SEC_GOV_ID_HEADER: string = \"SecurityGovernorId\";\r\n private static DEIDENT_HEADER: string = \"DeidentifiedContext\";\r\n private static LIMITED_HEADER: string = \"LimitedContext\";\r\n\r\n public userCountdownSeconds: number = 60;\r\n public idpInactivityMinutes: number = 5;\r\n\r\n public contentType: string = \"application/json\";\r\n public securityGovernorClass: string;\r\n public securityGovernorId: number;\r\n public limitedContext: boolean = false;\r\n public deidentifiedContext: boolean = false;\r\n\r\n private maxViewPermission: BehaviorSubject<\"view\" | \"viewident\" | \"viewlimited\"> = new BehaviorSubject<\"view\" | \"viewident\" | \"viewlimited\">(\"viewident\");\r\n private _isAuthenticatedSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n private _userIsAboutToTimeOut: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n private _redirectUrl: string;\r\n private _refreshSubscription: Subscription;\r\n private _lastUserInteraction: Date;\r\n private _maxInactivityMinutes: number = 120;\r\n private _uiEvents: string[] = ['keydown', 'click', 'wheel', 'mousemove'];\r\n\r\n private baseUrl: string;\r\n private contextRoot: string = \"\";\r\n\r\n constructor(private _http: HttpClient,\r\n private _router: Router,\r\n private _localStorageService: CoolLocalStorage,\r\n private _jwtHelper: JwtHelperService,\r\n private authenticationProvider: AuthenticationProvider,\r\n @Inject(AUTHENTICATION_LOGOUT_PATH) private _logoutPath: string,\r\n @Inject(AUTHENTICATION_TOKEN_ENDPOINT) private _tokenEndpoint: string,\r\n @Optional() @Inject(AUTHENTICATION_LOGIN_PATH) private _loginPath: string,\r\n\t\t @Optional() @Inject(AUTHENTICATION_LOGOUT_CONFIRM_PATH) private _logoutConfirmPath: string,\t\t\r\n @Optional() @Inject(AUTHENTICATION_ROUTE) private _authenticationRoute: string,\r\n @Optional() @Inject(AUTHENTICATION_SERVER_URL) private _serverUrl: string,\r\n @Optional() @Inject(AUTHENTICATION_DIRECT_ENDPOINT) private _directEndpoint: string,\r\n @Optional() @Inject(AUTHENTICATION_MAX_INACTIVITY_MINUTES) private _maxInactivity: number,\r\n @Optional() @Inject(AUTHENTICATION_USER_COUNTDOWN_SECONDS) private _userCountdownSeconds: number,\r\n @Optional() @Inject(AUTHENTICATION_IDP_INACTIVITY_MINUTES) private _idpInactivityMinutes: number,\r\n @Optional() @Inject(AUTHENTICATION_USE_UI_EVENTS_FOR_ACTIVITY) private _useUIEventsForActivity: boolean,\r\n @Optional() @Inject(AUTHENTICATION_APP_KEEP_ALIVE_ENDPOINT) private _keepAliveEndpoint: string,\r\n @Optional() @Inject(LocationStrategy) private locationStrategy: LocationStrategy) {\r\n if (isDevMode()) {\r\n console.debug(\"window.location.href: \" + window.location.href);\r\n }\r\n\r\n if (window.location) {\r\n let parts: string[] = window.location.href.split(\"/\");\r\n this.baseUrl = parts[0] + \"//\" + parts[2];\r\n if (parts.length > 3) {\r\n this.contextRoot = parts[3];\r\n }\r\n }\r\n\r\n if (this._localStorageService.getItem(\"maxViewPermission\")) {\r\n this.maxViewPermission.next(<\"view\" | \"viewident\" | \"viewlimited\">this._localStorageService.getItem(\"maxViewPermission\"));\r\n }\r\n\r\n if (_maxInactivity) {\r\n this._maxInactivityMinutes = _maxInactivity;\r\n }\r\n\r\n if (_userCountdownSeconds) {\r\n this.userCountdownSeconds = _userCountdownSeconds;\r\n }\r\n\r\n if (_idpInactivityMinutes) {\r\n this.idpInactivityMinutes = _idpInactivityMinutes;\r\n }\r\n \r\n //Subscribe to UI events for user activity\r\n if (_useUIEventsForActivity) {\r\n this.subscribeToUIActivity();\r\n }\r\n\r\n this.hasValidConfig();\r\n }\r\n\r\n getBaseUrl(): string {\r\n return (this.baseUrl) ? this.baseUrl : \"\";\r\n }\r\n\r\n getContextRoot(): string {\r\n return this.contextRoot;\r\n }\r\n\r\n getHeaders(req: HttpRequest<any>): HttpHeaders {\r\n let headers: HttpHeaders = req.headers;\r\n\r\n //Don't set content type if already set\r\n if (!req.headers.get(AuthenticationService.CONTENT_TYPE)) {\r\n headers = headers.set(AuthenticationService.CONTENT_TYPE, this.contentType.toString());\r\n }\r\n\r\n if (headers.get(AuthenticationService.SEC_GOV_CLASS_HEADER) === \"\") {\r\n headers = headers.delete(AuthenticationService.SEC_GOV_CLASS_HEADER);\r\n } else if (this.securityGovernorClass && !headers.get(AuthenticationService.SEC_GOV_CLASS_HEADER)) {\r\n headers = headers.set(AuthenticationService.SEC_GOV_CLASS_HEADER, this.securityGovernorClass);\r\n }\r\n\r\n if (headers.get(AuthenticationService.SEC_GOV_ID_HEADER) === \"\") {\r\n headers = headers.delete(AuthenticationService.SEC_GOV_ID_HEADER);\r\n } else if (this.securityGovernorId && !headers.get(AuthenticationService.SEC_GOV_ID_HEADER)) {\r\n headers = headers.set(AuthenticationService.SEC_GOV_ID_HEADER, this.securityGovernorId.toString());\r\n }\r\n\r\n headers = headers.set(AuthenticationService.DEIDENT_HEADER, this.deidentifiedContext.toString());\r\n headers = headers.set(AuthenticationService.LIMITED_HEADER, this.limitedContext.toString());\r\n\r\n return headers;\r\n }\r\n\r\n get authenticationTokenKey(): string {\r\n return this.authenticationProvider.authenticationTokenKey;\r\n }\r\n\r\n get authToken(): string {\r\n return this.authenticationProvider.authToken;\r\n }\r\n\r\n public updateUserActivity(): void {\r\n if (this._isAuthenticatedSubject.value) {\r\n this._lastUserInteraction = new Date();\r\n this._userIsAboutToTimeOut.next(false);\r\n }\r\n }\r\n\r\n /**\r\n * A mutator for identifying the clients original request location. Setting this value will influence the end location\r\n * navigated to by {@link #navigateToPath}.\r\n *\r\n * @param redirectUrl location of the users request before authentication\r\n */\r\n set redirectUrl(redirectUrl: string) {\r\n this._redirectUrl = redirectUrl;\r\n }\r\n\r\n get redirectUrl() {\r\n return this._redirectUrl;\r\n }\r\n \r\n \r\n isRedirectBasedLogin(): boolean {\r\n if (this._loginPath) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n \r\n \r\n initiateLogin() {\r\n if (isDevMode()) {\r\n console.debug(\"Authentication Service: Initiate Login\");\r\n }\r\n \r\n //Redirect based authentication\r\n window.location.href = this.getBaseUrl() + (this._loginPath.startsWith(\"/\")?\"\":\"/\") + this._loginPath;\r\n }\r\n\r\n requestAccessToken(fromRouteGuard: boolean, redirectOnSuccess: boolean): void {\r\n \r\n if (isDevMode()) {\r\n console.debug(\"Authentication Service: Request Acces Token\");\r\n }\r\n\r\n this._http.get(this.tokenLocation(), {withCredentials: true, responseType: \"json\"})\r\n .subscribe(\r\n (response: any) => {\r\n this.storeToken(response.auth_token);\r\n if (redirectOnSuccess) {\r\n this.proceedIfAuthenticated();\r\n }\r\n },\r\n (error) => {\r\n //Not logged in - start authentication\r\n if (fromRouteGuard) {\r\n this.initiateLogin();\r\n }\r\n //Background token request failed - logout and clear\r\n else {\r\n if (isDevMode()) {\r\n console.error(\"Authentication Service: Request Acces Token - Logout\");\r\n }\r\n \r\n this.logout(true);\r\n }\r\n }\r\n );\r\n }\r\n \r\n makeKeepAliveRequest(): void {\r\n this._http.get(this.keepAliveLocation(), {withCredentials: true}).subscribe();\r\n }\r\n\r\n /**\r\n * Verifies whether or not a current user session exists.\r\n *\r\n * @returns {Observable<boolean>} evaluates to true if the user is authenticated, false otherwise.\r\n */\r\n isAuthenticated(): Observable<boolean> {\r\n return this._isAuthenticatedSubject.asObservable();\r\n }\r\n\r\n isAboutToTimeOut(): Observable<boolean> {\r\n return this._userIsAboutToTimeOut.asObservable();\r\n }\r\n\r\n getTimeoutStart(): number {\r\n if (this._lastUserInteraction) {\r\n return this._lastUserInteraction.valueOf() + (((this._maxInactivityMinutes * 60) - this.userCountdownSeconds) * 1000);\r\n }\r\n }\r\n\r\n tokenLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._tokenEndpoint;\r\n } else {\r\n return this._tokenEndpoint;\r\n }\r\n }\r\n \r\n keepAliveLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._keepAliveEndpoint;\r\n } else {\r\n return this._keepAliveEndpoint;\r\n }\r\n }\r\n\r\n directLoginLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._directEndpoint;\r\n } else {\r\n return this._directEndpoint;\r\n }\r\n }\r\n\r\n logoutLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._logoutPath;\r\n } else {\r\n return this._logoutPath;\r\n }\r\n }\r\n\r\n logoutConfirmLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._logoutConfirmPath;\r\n } else {\r\n return this._logoutConfirmPath;\r\n }\r\n }\r\n\r\n /**\r\n * A function to authenticated the user with the provided credentials. Failure results in an error that describes the\r\n * server response (status and status message) and should be actionable by the client application.\r\n *\r\n * @param username of the authenticating user to verify\r\n * @param password of the authenticating user to verify\r\n * @returns {Observable<R>} describing the result of the login action, true or an error\r\n */\r\n login(_username: string, _password: string): Observable<boolean> {\r\n return this._http.post(\r\n this.directLoginLocation(),\r\n {username: _username, password: _password},\r\n {observe: \"response\"}\r\n ).pipe(map((resp: HttpResponse<any>) => {\r\n if (resp.status === 201) {\r\n return true;\r\n } else {\r\n throw new Error(\"Authentication failed. \" + resp.status + \": \" + resp.statusText);\r\n }\r\n }),\r\n catchError(this.handleError)) as Observable<boolean>;\r\n }\r\n\r\n\r\n clearLogin(useRedirect: boolean = false): Observable<string> {\r\n //Front-end logout\r\n try {\r\n this._localStorageService.removeItem(this.authenticationProvider.authenticationTokenKey);\r\n this.unsubscribeFromTokenRefresh();\r\n this._isAuthenticatedSubject.next(false);\r\n this._userIsAboutToTimeOut.next(false);\r\n } catch (Error) {\r\n }\r\n\r\n if (useRedirect) {\r\n //Redirect based login/logout\r\n window.location.href = this.getBaseUrl() + (this._logoutPath.startsWith(\"/\")?\"\":\"/\") + this._logoutPath;\r\n //Nothing to return. This is going to leave the NG app\r\n return null;\r\n }\r\n else {\r\n //Back-end logout\r\n let headers = new HttpHeaders().set(AuthenticationService.CONTENT_TYPE, \"text/plain\");\r\n return <Observable<string>>this._http.get(this.logoutLocation(), {headers: headers, responseType: \"text\"});\r\n }\r\n }\r\n\r\n /**\r\n * A function to signal the termination of the current session. Invoking this function will clean up any relevant state\r\n * related to the last active session.\r\n */\r\n logout(keepCurrentRoute: boolean = false): void {\r\n //Logout and leave NG app\r\n if (this.isRedirectBasedLogin() && ! this._logoutConfirmPath) {\r\n this.clearLogin(true);\r\n }\r\n //Logout within NG app and return to same route after login or redirect to confirm screen\r\n else {\r\n //Prevent logout if already on authentication route. Doing otherwise screws up SAML\r\n if (! this._router.routerState || this._router.routerState.snapshot.url !== this._authenticationRoute) {\r\n this._redirectUrl = (keepCurrentRoute && this._router.routerState && this._router.routerState.snapshot) ? this._router.routerState.snapshot.url : \"\";\r\n \r\n if (this._redirectUrl.startsWith(\"/\")) {\r\n this._redirectUrl = this._redirectUrl.substring(1);\r\n }\r\n \r\n this.clearLogin().subscribe(\r\n (response) => {\r\n\t\t\tif (this._logoutConfirmPath) {\r\n\t\t\t\twindow.location.href = this.getBaseUrl() + (this._logoutPath.startsWith(\"/\")?\"\":\"/\") + this._logoutConfirmPath;\r\n\t\t\t}\r\n\t\t\telse {\r\n \twindow.location.replace(this._redirectUrl);\r\n\t\t\t}\r\n },\r\n (error) => {\r\n window.location.replace(this._redirectUrl);\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n storeToken(token: string): void {\r\n let valid = this.validateToken(token);\r\n\r\n // unsubscribe from refesh before we decide wether to resubscribe\r\n this.unsubscribeFromTokenRefresh();\r\n\r\n if (valid) {\r\n this._localStorageService.setItem(this.authenticationProvider.authenticationTokenKey, token);\r\n this.subscribeToTokenRefresh(token);\r\n\r\n //Change the BehaviorSubject if the user was not previously authenticated.\r\n //Since other code may be subscribing to this observable, we don't want to cause new events to fire if just refreshing the JWT.\r\n if (! this._isAuthenticatedSubject.value) {\r\n this._isAuthenticatedSubject.next(true);\r\n }\r\n } else {\r\n this._localStorageService.removeItem(this.authenticationProvider.authenticationTokenKey);\r\n this._isAuthenticatedSubject.next(false);\r\n }\r\n }\r\n\r\n proceedIfAuthenticated(): boolean {\r\n if (isDevMode()) {\r\n console.debug(\"AuthenticationService.proceedIfAuthenticated: \" + this._redirectUrl);\r\n }\r\n\r\n if (this._isAuthenticatedSubject.value) {\r\n //Login counts as user activity, too\r\n this.updateUserActivity();\r\n\r\n if (this._redirectUrl && this._redirectUrl && this._redirectUrl !== \"\") {\r\n this._router.navigateByUrl(this._redirectUrl);\r\n } else {\r\n this._router.navigate([\"\"]);\r\n }\r\n\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n validateToken(token: string): boolean {\r\n return (token && !this._jwtHelper.isTokenExpired(token));\r\n }\r\n \r\n subscribeToUIActivity(){\r\n this._uiEvents.forEach(event =>\r\n fromEvent(document, event).subscribe(_ => {\r\n //Only update activity on UI event if not already about to time out. Counter intuitive, but in this case we should have 60 second count-down dialog open.\r\n if (this._userIsAboutToTimeOut.getValue() !== true) {\r\n this.updateUserActivity();\r\n }\r\n })\r\n ); \r\n }\r\n\r\n subscribeToTokenRefresh(token: any): void {\r\n let exp = this._jwtHelper.getTokenExpirationDate(token);\r\n\r\n // Use a timer to periodically check timeouts\r\n this._refreshSubscription = interval(1000)\r\n .subscribe(() => {\r\n\r\n // If a tab is inactive we can't know if our timer is accurate\r\n // so when the interval hits check against timestamps\r\n if (this._isAuthenticatedSubject.value && Date.now() > this.getTimeoutStart()) {\r\n //Don't update the subject more than once! Doing so initializes more than one countdown timer!\r\n if (this._userIsAboutToTimeOut.getValue() !== true) {\r\n this._userIsAboutToTimeOut.next(true);\r\n }\r\n }\r\n\r\n // check for refresh token\r\n let msToExpiry = (exp.valueOf() - new Date().valueOf());\r\n\r\n // Refresh 60 seconds before expiry\r\n if (msToExpiry <= 60000) {\r\n this.refreshTokenIfUserIsActive();\r\n }\r\n });\r\n }\r\n\r\n unsubscribeFromTokenRefresh(): void {\r\n if (this._refreshSubscription && ! this._refreshSubscription.closed) {\r\n this._refreshSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n getMaxViewPermission(): \"view\" | \"viewident\" | \"viewlimited\" {\r\n return this.maxViewPermission.getValue();\r\n }\r\n\r\n getMaxViewPermissionSubject(): BehaviorSubject<\"view\" | \"viewident\" | \"viewlimited\"> {\r\n return this.maxViewPermission;\r\n }\r\n\r\n setMaxViewPermission(maxViewPermission: \"view\" | \"viewident\" | \"viewlimited\"): void {\r\n this._localStorageService.setItem(\"maxViewPermission\", maxViewPermission);\r\n this.maxViewPermission.next(maxViewPermission);\r\n }\r\n\r\n private refreshTokenIfUserIsActive(): void {\r\n //Only refresh if the user has been active\r\n if (this._lastUserInteraction && ((new Date().valueOf() - this._lastUserInteraction.valueOf()) <= (this._maxInactivityMinutes * 60 * 1000))) {\r\n //Refresh the JWT\r\n this.requestAccessToken(false, false);\r\n \r\n //Might as well make application keep alive requests at the same time as refreshing tokens - more efficient & probably needs same logic\r\n if (this._keepAliveEndpoint) {\r\n this.makeKeepAliveRequest();\r\n }\r\n }\r\n }\r\n\r\n private hasValidConfig(): void {\r\n if (this._tokenEndpoint == null && (this._serverUrl === null || this._logoutPath === null)) {\r\n throw new Error(\"BUG ALERT! Invalid AuthenticationService configuration. No valid configuration for authentication endpoint(s).\");\r\n }\r\n if (this._localStorageService === null || this.authenticationProvider.authenticationTokenKey === null) {\r\n throw new Error(\"BUG ALERT! Invalid AuthenticationService configuration. No valid configuration for local storage\");\r\n }\r\n }\r\n\r\n private handleError(error: any) : Observable<never> {\r\n let errMsg = (error.message) ? error.message : AuthenticationService.GENERIC_ERR_MSG;\r\n return throwError(errMsg);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, ElementRef, ViewChild, Inject, Renderer2} from \"@angular/core\";\r\nimport {Location, PopStateEvent} from \"@angular/common\";\r\nimport {Router} from \"@angular/router\";\r\nimport {DomSanitizer} from \"@angular/platform-browser\";\r\n\r\nimport {interval, Subscription} from \"rxjs\";\r\nimport {first} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService, AUTHENTICATION_ROUTE} from \"./authentication.service\";\r\n\r\n@Component({\r\n selector: \"authentication-iframe\",\r\n template: `\r\n <div class=\"container\">\r\n <iframe #iframe class=\"frame\" [src]=\"url\" (load)=\"handleChanges()\"></iframe>\r\n <div *ngIf=\"_errorMsg\" class=\"alert-box\">\r\n <div class=\"alert alert-danger\">\r\n <h5 class=\"alert-heading\">Authentication Failed</h5>\r\n <span id=\"hci-login-error\" class=\"alert-text\">{{_errorMsg}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n \r\n :host {\r\n background-color: white;\r\n }\r\n \r\n .container {\r\n max-width: 100%;\r\n margin-top: 60px;\r\n padding-top: 15px;\r\n }\r\n\r\n .frame {\r\n width: 100%;\r\n height: 100%;\r\n border: 0px;\r\n }\r\n `],\r\n host: {class: \"outlet-row\"}\r\n})\r\nexport class AuthenticationComponent {\r\n\r\n public url;\r\n public _errorMsg: string;\r\n\r\n @ViewChild(\"iframe\", {static: true}) iframe : ElementRef;\r\n\r\n private resetSubscription: Subscription;\r\n private popstateSubscription: Subscription;\r\n\r\n constructor(private authenticationService: AuthenticationService,\r\n private domSanitizer : DomSanitizer,\r\n private router: Router,\r\n private location: Location,\r\n private renderer: Renderer2,\r\n @Inject(AUTHENTICATION_ROUTE) private authenticationRoute: string) {\r\n }\r\n\r\n ngOnInit() {\r\n /*\r\n * Fix back bug\r\n * Issue is that the browser will go back to the previous route. If it's guarded, the route guard will just load the login again\r\n * Eventually the browser gets to the /authenticate route and going back from there loads the iframe history and Shibboleth displays\r\n * an error relating to navigating back.\r\n */\r\n history.pushState(null, null, this.location.prepareExternalUrl(this.authenticationRoute));\r\n\r\n this.popstateSubscription = <Subscription> this.location.subscribe((value: PopStateEvent) => {\r\n //This is going to prevent back from working from the login component\r\n history.go(1);\r\n });\r\n\r\n this.beginAuthenticationProcess();\r\n }\r\n\r\n handleChanges(): void {\r\n if (!this.iframe.nativeElement.contentDocument) {\r\n return;\r\n }\r\n\r\n try {\r\n let element: HTMLElement = this.iframe.nativeElement.contentDocument.body;\r\n if (element.querySelector(\"pre\")) {\r\n element = element.querySelector(\"pre\");\r\n }\r\n\r\n this._errorMsg = null;\r\n var jsonText = element.innerText;\r\n\r\n var json = JSON.parse(jsonText);\r\n this.authenticationService.storeToken(json.auth_token);\r\n var authenticated = this.authenticationService.proceedIfAuthenticated();\r\n\r\n if (!authenticated) {\r\n this.resetSubscription.unsubscribe();\r\n this.beginAuthenticationProcess();\r\n }\r\n } catch (error) {\r\n if (this.iframe.nativeElement.contentDocument.title.toUpperCase() === \"ERROR\") {\r\n if (this.iframe.nativeElement.contentDocument.body.innerHTML.toUpperCase() === \"FORBIDDEN\") {\r\n this._errorMsg = \"You do not have permission to log into this application\";\r\n } else {\r\n this._errorMsg = null;\r\n }\r\n\r\n //A bit of a workaround for a WildFly issue. Success on Pac4j authentication, but failure on DB load of user put things in a weird state. Just logout, and redo the login.\r\n this.clearLoginAndRetry();\r\n }\r\n }\r\n\r\n // After the iframe loads, make the background transparent so we use the implementation's background and not the sso background.\r\n this.renderer.setStyle(this.iframe.nativeElement.contentDocument.body, \"background-color\", \"transparent\");\r\n }\r\n\r\n ngOnDestroy() {\r\n this.resetSubscription.unsubscribe();\r\n this.popstateSubscription.unsubscribe();\r\n }\r\n\r\n private clearLoginAndRetry(): void {\r\n this.resetSubscription.unsubscribe();\r\n this.authenticationService.clearLogin().subscribe(\r\n () => { this.beginAuthenticationProcess(); },\r\n (error) => { this.beginAuthenticationProcess(); }\r\n );\r\n }\r\n\r\n private beginAuthenticationProcess(): void {\r\n var tokenEndpoint = this.authenticationService.tokenLocation();\r\n \r\n if (tokenEndpoint !== \"\") {\r\n this.url = this.domSanitizer.bypassSecurityTrustResourceUrl(tokenEndpoint);\r\n }\r\n\r\n /**\r\n * If the user doesn't complete authentication before the IdP session times out, that will be a problem when they eventually\r\n * attampt to log in. It is likely that users will do this often when they log out or are timed out in the evening, leave\r\n * their browser open, then attempt to log back in in the morning. In order to work around this, this component will re-request\r\n * the token prior to IdP timeout, which will reset the process. This will happen 1 minute before idpInactivityMinutes\r\n **/\r\n this.resetSubscription = interval((this.authenticationService.idpInactivityMinutes - 1) * 60 * 1000)\r\n .pipe(first())\r\n .subscribe((value) => {\r\n this.beginAuthenticationProcess();\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, OnInit} from \"@angular/core\";\r\nimport {AuthenticationService} from \"./authentication.service\";\r\nimport {UntypedFormBuilder, UntypedFormGroup, Validators} from \"@angular/forms\";\r\n\r\n@Component({\r\n selector: \"hci-login-form\",\r\n template: `\r\n <div class=\"container\">\r\n <div class=\"login-box\" id=\"hci-login-form-box\">\r\n <div class=\"login-heading\" id=\"hci-login-form-heading\">\r\n <h3>Sign in</h3>\r\n </div>\r\n <div class=\"panel-body\">\r\n <form [formGroup]=\"_loginForm\" (ngSubmit)=\"login()\">\r\n <input aria-label=\"direct-login-username\" formControlName=\"username\" class=\"form-control\" id=\"username\" name=\"username\" placeholder=\"Username\" type=\"text\">\r\n <input aria-label=\"direct-login-password\" formControlName=\"password\" class=\"form-control\" id=\"password\" name=\"password\" type=\"password\" placeholder=\"Password\">\r\n\r\n <div *ngIf=\"_errorMsg\" class=\"alert-box\">\r\n <div class=\"alert alert-danger\">\r\n <h5 class=\"alert-heading\">Authentication Failed</h5>\r\n <span id=\"hci-login-error\" class=\"alert-text\">{{_errorMsg}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-primary\" id=\"hci-login-form-submit-button\" type=\"submit\" [disabled]=\"!_loginForm.valid\">Login</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .container {\r\n max-width: 400px;\r\n margin-top: 20px;\r\n padding-top: 15px;\r\n }\r\n\r\n .login-box {\r\n border-radius: 10px;\r\n box-shadow: 0 0 2px #ccc;\r\n padding: 15px;\r\n }\r\n\r\n .login-box .login-heading h3 {\r\n line-height:1.5;\r\n margin: 0 0 10px\r\n }\r\n\r\n .login-box .form-control {\r\n padding: 10px;\r\n border: 1px solid #ccc;\r\n }\r\n\r\n .login-box input[type=\"password\"] {\r\n margin-bottom: 10px;\r\n border-top-left-radius: 0;\r\n border-top-right-radius: 0;\r\n }\r\n\r\n .login-box input[type=\"text\"] {\r\n margin-bottom: -1px;\r\n border-bottom-right-radius: 0;\r\n border-bottom-left-radius: 0;\r\n }\r\n\r\n .login-box .alert-box {\r\n margin: 10px 0 -5px 0\r\n }\r\n\r\n .login-box .alert-text {\r\n font-size: small;\r\n }\r\n\r\n .login-box .btn-box {\r\n margin: 10px 0 0px 0\r\n }\r\n `]\r\n})\r\nexport class DirectLoginComponent implements OnInit {\r\n public _loginForm: UntypedFormGroup;\r\n public _errorMsg: string;\r\n\r\n constructor(private _authenticationService: AuthenticationService, private _formBuilder: UntypedFormBuilder) {}\r\n\r\n /**\r\n * Initializes the authentication form.\r\n */\r\n ngOnInit(): void {\r\n this._loginForm = this._formBuilder.group({\r\n username: [\"\", Validators.required],\r\n password: [\"\", Validators.required]\r\n });\r\n }\r\n\r\n /**\r\n * A function to submit the login form the the {@link UserService}.\r\n */\r\n login() {\r\n this._authenticationService.login(this._loginForm.value.username, this._loginForm.value.password)\r\n .subscribe((res) => {\r\n if (res) {\r\n this._errorMsg = null;\r\n this._authenticationService.requestAccessToken(false, true);\r\n }\r\n }, (error: any) => {\r\n this._errorMsg = \"Please check your username and password.\";\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component} from \"@angular/core\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nimport {Observable, Subscription, timer} from \"rxjs\";\r\nimport {map, takeWhile} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService} from \"./authentication.service\";\r\n\r\n@Component({\r\n selector: \"timeout-notification\",\r\n template: `\r\n <div class=\"flyout-max\" [@openBacksplash]=\"openState\">\r\n <div class=\"modal-dialog\" [@openModal]=\"openState\" role=\"document\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Your Session Is About To Expire</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>For your security, your session is about to automatically time out in the next <b>{{seconds | async}}</b> seconds. Would you like to stay signed in?</p>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <ng-container>\r\n <button id=\"updateBtn\" type=\"button\" class=\"btn btn-secondary\" (click)=\"click()\">Yes, Keep me signed in</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n animations: [\r\n trigger(\"openBacksplash\",\r\n [\r\n state(\"in\", style({\r\n \"display\": \"none\"\r\n })),\r\n state(\"hidden\", style({\r\n \"display\": \"none\"\r\n })),\r\n state(\"opened\", style({\r\n \"display\": \"inherit\"\r\n })),\r\n transition(\"hidden => opened\", animate(100)),\r\n transition(\"opened => hidden\", animate(200))\r\n ]\r\n ),\r\n trigger(\"openModal\",\r\n [\r\n state(\"in\", style({\r\n \"opacity\": \"0\",\r\n \"left\": \"-50vw\"\r\n })),\r\n state(\"hidden\", style({\r\n \"opacity\": \"0\",\r\n \"left\": \"-50vw\"\r\n })),\r\n state(\"opened\", style({\r\n \"opacity\": \"1\",\r\n \"left\": \"25vw\"\r\n })),\r\n transition(\"hidden => opened\", animate(500)),\r\n transition(\"opened => hidden\", animate(300))\r\n ]\r\n )\r\n ],\r\n styles: [`\r\n\r\n .flyout-max {\r\n position: fixed;\r\n z-index: 9999;\r\n top: 0;\r\n bottom: 0;\r\n background-color: rgba(0, 0, 0, 0.4);\r\n width: 100vw;\r\n }\r\n \r\n .modal-dialog {\r\n position: fixed;\r\n max-width: 50vw;\r\n min-width: 50vw;\r\n left: -50vw;\r\n top: 25vw;\r\n margin: 0;\r\n background-color: white;\r\n border: black 1px solid;\r\n border-left: none;\r\n border-top-right-radius: 20px;\r\n border-bottom-right-radius: 20px;\r\n border-top-left-radius: 20px;\r\n border-bottom-left-radius: 20px;\r\n pointer-events: all;\r\n }\r\n \r\n .modal-body {\r\n width: 100%;\r\n display: inline-block;\r\n }\r\n \r\n .modal-body-left {\r\n display: inline-block;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n \r\n .modal-body-right {\r\n width: 70%;\r\n vertical-align: top;\r\n padding-left: 15px;\r\n border-left: black 1px solid;\r\n margin-left: 15px;\r\n display: inline-block;\r\n overflow-y: auto;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n `]\r\n})\r\nexport class TimeoutNotificationComponent {\r\n public seconds: Observable<number>;\r\n public openState: string = \"hidden\";\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(private authenticationService: AuthenticationService) {\r\n authenticationService.isAboutToTimeOut().subscribe((isAboutToTimeOut) => {\r\n\r\n if (isAboutToTimeOut) {\r\n this.openState = \"opened\";\r\n this.startCountdown();\r\n } else {\r\n this.openState = \"hidden\";\r\n //If something changed mid-timeout, cancel the timeout/logout.\r\n if (this.subscription != null && !this.subscription.closed) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n });\r\n }\r\n\r\n startCountdown(): void {\r\n this.seconds = timer(0, 1000)\r\n .pipe(\r\n map(() => {\r\n const elapsed: number = Math.round((Date.now() - this.authenticationService.getTimeoutStart()) / 1000);\r\n return this.authenticationService.userCountdownSeconds - elapsed;\r\n }),\r\n // The true argument emits the final value that completed the observable\r\n takeWhile((value) => value > 0, true),\r\n );\r\n\r\n this.subscription = this.seconds.subscribe((value) => {\r\n if (value < 1) {\r\n this.subscription.unsubscribe();\r\n this.authenticationService.logout(true);\r\n }\r\n });\r\n }\r\n\r\n click(): void {\r\n this.subscription.unsubscribe();\r\n this.authenticationService.updateUserActivity();\r\n }\r\n}\r\n","import {Injectable, Injector, isDevMode} from \"@angular/core\";\r\nimport {HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpHeaders, HttpParams, HttpErrorResponse} from \"@angular/common/http\";\r\n\r\nimport {Observable, throwError} from \"rxjs\";\r\nimport {catchError, map} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService} from \"./authentication.service\";\r\n\r\n@Injectable()\r\nexport class AuthorizationInterceptor implements HttpInterceptor {\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (isDevMode()) {\r\n console.debug(\"AuthorizationInterceptor.intercept\");\r\n }\r\n \r\n let authService: AuthenticationService = this.injector.get(AuthenticationService);\r\n \r\n //Don't want to include background token refreshes in considering the user 'active'\r\n if (req.url !== authService.tokenLocation()) {\r\n //Update user activity. Done here instead of the previous method using a subscription to a subject in AuthenticationProvider\r\n authService.updateUserActivity();\r\n }\r\n \r\n let headers: HttpHeaders = authService.getHeaders(req);\r\n let url: string = req.url;\r\n if (url.startsWith(\"/\")) {\r\n url = authService.getBaseUrl() + url;\r\n } else if (!url.startsWith(\"http\")) {\r\n if (authService.getContextRoot().length > 0) {\r\n url = authService.getBaseUrl() + \"/\" + authService.getContextRoot() + \"/\" + url;\r\n } else {\r\n url = authService.getBaseUrl() + \"/\" + url;\r\n }\r\n }\r\n\r\n let params: HttpParams = req.params;\r\n if (url.indexOf(\"/crud/\") > 0) {\r\n params = params.set(\"maxViewPermission\", authService.getMaxViewPermission());\r\n }\r\n\r\n let reqClone = req.clone({\r\n url: url,\r\n withCredentials: true,\r\n headers: headers,\r\n params: params\r\n });\r\n\r\n return next.handle(reqClone)\r\n .pipe(catchError((error: HttpErrorResponse) => {\r\n if (isDevMode()) {\r\n console.debug(\"AuthorizationInterceptor.error\");\r\n }\r\n\r\n /**\r\n * If the token is not authenticated which angular does not know about, then a REST request to the backend will\r\n * return a 401. To duplicate this, open Core in two tabs. In one tab, logout, in the other, perform a request\r\n * that hits a protected resource.\r\n */\r\n if (error && error.status === 401) {\r\n authService.isAuthenticated().pipe(map((authenticated) => {\r\n if (authenticated) {\r\n // If the user was previously authenticated, then logout which will redirect.\r\n authService.logout(true);\r\n return throwError(error.message);\r\n } else {\r\n //This happens for legitimate reasons. Attempting to get the JWT when not authenticated returns the login form, for example, which NG will see as an error\r\n return throwError(error);\r\n }\r\n }));\r\n }\r\n else if (error && error.status === 403) {\r\n // TODO: Trigger notification for unauthorized.\r\n }\r\n else {\r\n return throwError(error);\r\n }\r\n })) as Observable<HttpEvent<any>>;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule, Optional, SkipSelf} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {ReactiveFormsModule, FormsModule} from \"@angular/forms\";\r\nimport {HTTP_INTERCEPTORS, HttpClientModule} from \"@angular/common/http\";\r\nimport {RouterModule} from \"@angular/router\";\r\n\r\nimport {CoolStorageModule} from \"@angular-cool/storage\";\r\nimport {JWT_OPTIONS, JwtHelperService, JwtInterceptor, JwtModule} from \"@auth0/angular-jwt\";\r\n\r\nimport {AuthenticationService} from \"./authentication.service\";\r\nimport {AuthenticationComponent} from \"./authentication.component\";\r\nimport {DirectLoginComponent} from \"./directlogin.component\";\r\nimport {TimeoutNotificationComponent} from \"./timeout-notification.component\";\r\nimport {AuthorizationInterceptor} from \"./authorization.interceptor\";\r\nimport {AuthenticationProvider} from \"./authentication.provider\";\r\n\r\n/**\r\n * Provide a single auth service and interceptor for the implementing application. Also provide everything\r\n * from the angular-jwt library.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n //JwtModule,\r\n RouterModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CoolStorageModule\r\n ],\r\n declarations: [\r\n AuthenticationComponent,\r\n DirectLoginComponent,\r\n TimeoutNotificationComponent\r\n ],\r\n exports: [\r\n AuthenticationComponent,\r\n DirectLoginComponent,\r\n TimeoutNotificationComponent\r\n ]\r\n})\r\nexport class AuthenticationModule {\r\n constructor(@Optional() @SkipSelf() parentModule: JwtModule) {\r\n if (parentModule) {\r\n throw new Error(\"AuthenticationModule is already loaded.\");\r\n }\r\n }\r\n static forRoot(): ModuleWithProviders<AuthenticationModule> {\r\n return {\r\n providers: [\r\n AuthenticationProvider,\r\n JwtHelperService,\r\n AuthenticationService,\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: AuthorizationInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: JwtInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: JWT_OPTIONS,\r\n useClass: AuthenticationProvider\r\n }\r\n ],\r\n ngModule: AuthenticationModule\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {inject} from \"@angular/core\";\r\nimport {Router, ActivatedRouteSnapshot, RouterStateSnapshot} from \"@angular/router\";\r\n\r\nimport {Observable} from \"rxjs\";\r\nimport {map} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService, AUTHENTICATION_ROUTE} from \"./authentication.service\";\r\n\r\n\r\nexport const RouteGuardService = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\r\n const authenticationService = inject(AuthenticationService);\r\n const router = inject(Router);\r\n const authenticationRoute = inject(AUTHENTICATION_ROUTE, { optional: true });\r\n\r\n return authenticationService.isAuthenticated().pipe(map((authenticated) => {\r\n if (authenticated) {\r\n return true;\r\n }\r\n else {\r\n // Store the attempted URL for redirecting\r\n authenticationService.redirectUrl = state.url;\r\n \r\n //Redirect based login\r\n if (authenticationService.isRedirectBasedLogin()) {\r\n //Try to get an access token\r\n authenticationService.requestAccessToken(true, true);\r\n }\r\n //Authentication component based login\r\n else {\r\n // Navigate to the login page\r\n return router.createUrlTree([authenticationRoute]);\r\n }\r\n }\r\n }));\r\n};\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i5.AuthenticationProvider","i4","i1.AuthenticationService","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"huntsman-cancer-institute-authentication.mjs","sources":["../../../projects/authentication/src/authentication.provider.ts","../../../projects/authentication/src/authentication.service.ts","../../../projects/authentication/src/authentication.component.ts","../../../projects/authentication/src/directlogin.component.ts","../../../projects/authentication/src/timeout-notification.component.ts","../../../projects/authentication/src/authorization.interceptor.ts","../../../projects/authentication/src/authentication.module.ts","../../../projects/authentication/src/route-guard.service.ts","../../../projects/authentication/src/huntsman-cancer-institute-authentication.ts"],"sourcesContent":["import {Inject, Injectable, InjectionToken, Injector} from \"@angular/core\";\r\n\r\nimport {Subject} from \"rxjs\";\r\n\r\nimport {CoolLocalStorage} from '@angular-cool/storage';\r\n\r\nexport let AUTHENTICATION_TOKEN_KEY = new InjectionToken<string>(\"authentication_token_key\");\r\n\r\n@Injectable()\r\nexport class AuthenticationProvider {\r\n\r\n public whitelistedDomains = [\r\n \"localhost\",\r\n new RegExp(\".*[.]utah[.]edu\")\r\n ];\r\n\r\n constructor(private _localStorageService: CoolLocalStorage,\r\n @Inject(AUTHENTICATION_TOKEN_KEY) private _authenticationTokenKey: string) {}\r\n\r\n public tokenGetter = () => {\r\n return this.authToken;\r\n }\r\n\r\n get authenticationTokenKey(): string {\r\n return this._authenticationTokenKey;\r\n }\r\n\r\n set authenticationTokenKey(_authenticationTokenKey: string) {\r\n this._authenticationTokenKey = _authenticationTokenKey;\r\n }\r\n\r\n get authToken(): string {\r\n return <string>this._localStorageService.getItem(this._authenticationTokenKey);\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Injectable, InjectionToken, Inject, Optional, isDevMode} from \"@angular/core\";\r\nimport {LocationStrategy} from \"@angular/common\";\r\nimport {Router} from \"@angular/router\";\r\nimport {HttpClient, HttpHeaders, HttpRequest, HttpResponse} from \"@angular/common/http\";\r\n\r\nimport {interval, Observable, BehaviorSubject, Subscription, throwError, of, fromEvent} from \"rxjs\";\r\nimport {catchError, first, map} from \"rxjs/operators\";\r\nimport {JwtHelperService} from \"@auth0/angular-jwt\";\r\n\r\nimport {AuthenticationProvider} from \"./authentication.provider\";\r\nimport { CoolLocalStorage } from \"@angular-cool/storage\";\r\n\r\n/**\r\n * The token used for injection of the server side endpoint for the currently authenticated subject.\r\n *\r\n * @type {InjectionToken}\r\n */\r\nexport let AUTHENTICATION_SERVER_URL = new InjectionToken<string>(\"authentication_server_rest_api\");\r\nexport let AUTHENTICATION_LOGIN_PATH = new InjectionToken<string>(\"authentication_login_path\");\r\nexport let AUTHENTICATION_LOGOUT_PATH = new InjectionToken<string>(\"authentication_logout_path\");\r\nexport let AUTHENTICATION_LOGOUT_CONFIRM_PATH = new InjectionToken<string>(\"authentication_logout_confirm_path\");\r\nexport let AUTHENTICATION_DIRECT_ENDPOINT = new InjectionToken<string>(\"authentication_direct_endpoint\");\r\nexport let AUTHENTICATION_TOKEN_ENDPOINT = new InjectionToken<string>(\"authentication_token_endpoint\");\r\nexport let AUTHENTICATION_ROUTE = new InjectionToken<string>(\"authentication_route\");\r\nexport let AUTHENTICATION_MAX_INACTIVITY_MINUTES = new InjectionToken<number>(\"authentication_max_inactivity\");\r\nexport let AUTHENTICATION_USER_COUNTDOWN_SECONDS = new InjectionToken<number>(\"authentication_user_countdown_seconds\");\r\nexport let AUTHENTICATION_IDP_INACTIVITY_MINUTES = new InjectionToken<number>(\"authentication_idp_inactivity_minutes\");\r\nexport let AUTHENTICATION_USE_UI_EVENTS_FOR_ACTIVITY = new InjectionToken<boolean>(\"authentication_use_ui_events_for_activity\");\r\nexport let AUTHENTICATION_APP_KEEP_ALIVE_ENDPOINT = new InjectionToken<string>(\"authentication_app_keep_alive_endpoint\");\r\n\r\n/**\r\n * @since 1.0.0\r\n */\r\n@Injectable()\r\nexport class AuthenticationService {\r\n\r\n /**\r\n * The generic error message used when a server error is thrown without a status.\r\n *\r\n * @type {string}\r\n */\r\n public static GENERIC_ERR_MSG: string = \"Server error\";\r\n\r\n private static CONTENT_TYPE: string = \"Content-Type\";\r\n private static SEC_GOV_CLASS_HEADER: string = \"SecurityGovernorClass\";\r\n private static SEC_GOV_ID_HEADER: string = \"SecurityGovernorId\";\r\n private static DEIDENT_HEADER: string = \"DeidentifiedContext\";\r\n private static LIMITED_HEADER: string = \"LimitedContext\";\r\n\r\n public userCountdownSeconds: number = 60;\r\n public idpInactivityMinutes: number = 5;\r\n\r\n public contentType: string = \"application/json\";\r\n public securityGovernorClass: string;\r\n public securityGovernorId: number;\r\n public limitedContext: boolean = false;\r\n public deidentifiedContext: boolean = false;\r\n\r\n private maxViewPermission: BehaviorSubject<\"view\" | \"viewident\" | \"viewlimited\"> = new BehaviorSubject<\"view\" | \"viewident\" | \"viewlimited\">(\"viewident\");\r\n private _isAuthenticatedSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n private _userIsAboutToTimeOut: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n private _redirectUrl: string;\r\n private _refreshSubscription: Subscription;\r\n private _lastUserInteraction: Date;\r\n private _maxInactivityMinutes: number = 120;\r\n private _uiEvents: string[] = ['keydown', 'click', 'wheel', 'mousemove'];\r\n\r\n private baseUrl: string;\r\n private contextRoot: string = \"\";\r\n\r\n constructor(private _http: HttpClient,\r\n private _router: Router,\r\n private _localStorageService: CoolLocalStorage,\r\n private _jwtHelper: JwtHelperService,\r\n private authenticationProvider: AuthenticationProvider,\r\n @Inject(AUTHENTICATION_LOGOUT_PATH) private _logoutPath: string,\r\n @Inject(AUTHENTICATION_TOKEN_ENDPOINT) private _tokenEndpoint: string,\r\n @Optional() @Inject(AUTHENTICATION_LOGIN_PATH) private _loginPath: string,\r\n\t\t @Optional() @Inject(AUTHENTICATION_LOGOUT_CONFIRM_PATH) private _logoutConfirmPath: string,\t\t\r\n @Optional() @Inject(AUTHENTICATION_ROUTE) private _authenticationRoute: string,\r\n @Optional() @Inject(AUTHENTICATION_SERVER_URL) private _serverUrl: string,\r\n @Optional() @Inject(AUTHENTICATION_DIRECT_ENDPOINT) private _directEndpoint: string,\r\n @Optional() @Inject(AUTHENTICATION_MAX_INACTIVITY_MINUTES) private _maxInactivity: number,\r\n @Optional() @Inject(AUTHENTICATION_USER_COUNTDOWN_SECONDS) private _userCountdownSeconds: number,\r\n @Optional() @Inject(AUTHENTICATION_IDP_INACTIVITY_MINUTES) private _idpInactivityMinutes: number,\r\n @Optional() @Inject(AUTHENTICATION_USE_UI_EVENTS_FOR_ACTIVITY) private _useUIEventsForActivity: boolean,\r\n @Optional() @Inject(AUTHENTICATION_APP_KEEP_ALIVE_ENDPOINT) private _keepAliveEndpoint: string,\r\n @Optional() @Inject(LocationStrategy) private locationStrategy: LocationStrategy) {\r\n if (isDevMode()) {\r\n console.debug(\"window.location.href: \" + window.location.href);\r\n }\r\n\r\n if (window.location) {\r\n let parts: string[] = window.location.href.split(\"/\");\r\n this.baseUrl = parts[0] + \"//\" + parts[2];\r\n if (parts.length > 3) {\r\n this.contextRoot = parts[3];\r\n }\r\n }\r\n\r\n if (this._localStorageService.getItem(\"maxViewPermission\")) {\r\n this.maxViewPermission.next(<\"view\" | \"viewident\" | \"viewlimited\">this._localStorageService.getItem(\"maxViewPermission\"));\r\n }\r\n\r\n if (_maxInactivity) {\r\n this._maxInactivityMinutes = _maxInactivity;\r\n }\r\n\r\n if (_userCountdownSeconds) {\r\n this.userCountdownSeconds = _userCountdownSeconds;\r\n }\r\n\r\n if (_idpInactivityMinutes) {\r\n this.idpInactivityMinutes = _idpInactivityMinutes;\r\n }\r\n \r\n //Subscribe to UI events for user activity\r\n if (_useUIEventsForActivity) {\r\n this.subscribeToUIActivity();\r\n }\r\n\r\n this.hasValidConfig();\r\n }\r\n\r\n getBaseUrl(): string {\r\n return (this.baseUrl) ? this.baseUrl : \"\";\r\n }\r\n\r\n getContextRoot(): string {\r\n return this.contextRoot;\r\n }\r\n\r\n getHeaders(req: HttpRequest<any>): HttpHeaders {\r\n let headers: HttpHeaders = req.headers;\r\n\r\n //Don't set content type if already set\r\n if (!req.headers.get(AuthenticationService.CONTENT_TYPE)) {\r\n headers = headers.set(AuthenticationService.CONTENT_TYPE, this.contentType.toString());\r\n }\r\n\r\n if (headers.get(AuthenticationService.SEC_GOV_CLASS_HEADER) === \"\") {\r\n headers = headers.delete(AuthenticationService.SEC_GOV_CLASS_HEADER);\r\n } else if (this.securityGovernorClass && !headers.get(AuthenticationService.SEC_GOV_CLASS_HEADER)) {\r\n headers = headers.set(AuthenticationService.SEC_GOV_CLASS_HEADER, this.securityGovernorClass);\r\n }\r\n\r\n if (headers.get(AuthenticationService.SEC_GOV_ID_HEADER) === \"\") {\r\n headers = headers.delete(AuthenticationService.SEC_GOV_ID_HEADER);\r\n } else if (this.securityGovernorId && !headers.get(AuthenticationService.SEC_GOV_ID_HEADER)) {\r\n headers = headers.set(AuthenticationService.SEC_GOV_ID_HEADER, this.securityGovernorId.toString());\r\n }\r\n\r\n headers = headers.set(AuthenticationService.DEIDENT_HEADER, this.deidentifiedContext.toString());\r\n headers = headers.set(AuthenticationService.LIMITED_HEADER, this.limitedContext.toString());\r\n\r\n return headers;\r\n }\r\n\r\n get authenticationTokenKey(): string {\r\n return this.authenticationProvider.authenticationTokenKey;\r\n }\r\n\r\n get authToken(): string {\r\n return this.authenticationProvider.authToken;\r\n }\r\n\r\n public updateUserActivity(): void {\r\n if (this._isAuthenticatedSubject.value) {\r\n this._lastUserInteraction = new Date();\r\n this._userIsAboutToTimeOut.next(false);\r\n }\r\n }\r\n\r\n /**\r\n * A mutator for identifying the clients original request location. Setting this value will influence the end location\r\n * navigated to by {@link #navigateToPath}.\r\n *\r\n * @param redirectUrl location of the users request before authentication\r\n */\r\n set redirectUrl(redirectUrl: string) {\r\n this._redirectUrl = redirectUrl;\r\n }\r\n\r\n get redirectUrl() {\r\n return this._redirectUrl;\r\n }\r\n \r\n \r\n isRedirectBasedLogin(): boolean {\r\n if (this._loginPath) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n \r\n \r\n initiateLogin() {\r\n if (isDevMode()) {\r\n console.debug(\"Authentication Service: Initiate Login\");\r\n }\r\n \r\n //Redirect based authentication\r\n window.location.href = this.getBaseUrl() + (this._loginPath.startsWith(\"/\")?\"\":\"/\") + this._loginPath;\r\n }\r\n\r\n requestAccessToken(fromRouteGuard: boolean, redirectOnSuccess: boolean): void {\r\n \r\n if (isDevMode()) {\r\n console.debug(\"Authentication Service: Request Acces Token\");\r\n }\r\n\r\n this._http.get(this.tokenLocation(), {withCredentials: true, responseType: \"json\"})\r\n .subscribe(\r\n (response: any) => {\r\n this.storeToken(response.auth_token);\r\n if (redirectOnSuccess) {\r\n this.proceedIfAuthenticated();\r\n }\r\n },\r\n (error) => {\r\n //Not logged in - start authentication\r\n if (fromRouteGuard) {\r\n this.initiateLogin();\r\n }\r\n //Background token request failed - logout and clear\r\n else {\r\n if (isDevMode()) {\r\n console.error(\"Authentication Service: Request Acces Token - Logout\");\r\n }\r\n \r\n this.logout(true);\r\n }\r\n }\r\n );\r\n }\r\n \r\n makeKeepAliveRequest(): void {\r\n this._http.get(this.keepAliveLocation(), {withCredentials: true}).subscribe();\r\n }\r\n\r\n /**\r\n * Verifies whether or not a current user session exists.\r\n *\r\n * @returns {Observable<boolean>} evaluates to true if the user is authenticated, false otherwise.\r\n */\r\n isAuthenticated(): Observable<boolean> {\r\n return this._isAuthenticatedSubject.asObservable();\r\n }\r\n\r\n isAboutToTimeOut(): Observable<boolean> {\r\n return this._userIsAboutToTimeOut.asObservable();\r\n }\r\n\r\n getTimeoutStart(): number {\r\n if (this._lastUserInteraction) {\r\n return this._lastUserInteraction.valueOf() + (((this._maxInactivityMinutes * 60) - this.userCountdownSeconds) * 1000);\r\n }\r\n }\r\n\r\n tokenLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._tokenEndpoint;\r\n } else {\r\n return this._tokenEndpoint;\r\n }\r\n }\r\n \r\n keepAliveLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._keepAliveEndpoint;\r\n } else {\r\n return this._keepAliveEndpoint;\r\n }\r\n }\r\n\r\n directLoginLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._directEndpoint;\r\n } else {\r\n return this._directEndpoint;\r\n }\r\n }\r\n\r\n logoutLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._logoutPath;\r\n } else {\r\n return this._logoutPath;\r\n }\r\n }\r\n\r\n logoutConfirmLocation(): string {\r\n if (this._serverUrl) {\r\n return this._serverUrl + this._logoutConfirmPath;\r\n } else {\r\n return this._logoutConfirmPath;\r\n }\r\n }\r\n\r\n /**\r\n * A function to authenticated the user with the provided credentials. Failure results in an error that describes the\r\n * server response (status and status message) and should be actionable by the client application.\r\n *\r\n * @param username of the authenticating user to verify\r\n * @param password of the authenticating user to verify\r\n * @returns {Observable<R>} describing the result of the login action, true or an error\r\n */\r\n login(_username: string, _password: string): Observable<boolean> {\r\n return this._http.post(\r\n this.directLoginLocation(),\r\n {username: _username, password: _password},\r\n {observe: \"response\"}\r\n ).pipe(map((resp: HttpResponse<any>) => {\r\n if (resp.status === 201) {\r\n return true;\r\n } else {\r\n throw new Error(\"Authentication failed. \" + resp.status + \": \" + resp.statusText);\r\n }\r\n }),\r\n catchError(this.handleError)) as Observable<boolean>;\r\n }\r\n\r\n\r\n clearLogin(useRedirect: boolean = false): Observable<string> {\r\n //Front-end logout\r\n try {\r\n this._localStorageService.removeItem(this.authenticationProvider.authenticationTokenKey);\r\n this.unsubscribeFromTokenRefresh();\r\n this._isAuthenticatedSubject.next(false);\r\n this._userIsAboutToTimeOut.next(false);\r\n } catch (Error) {\r\n }\r\n\r\n if (useRedirect) {\r\n //Redirect based login/logout\r\n window.location.href = this.getBaseUrl() + (this._logoutPath.startsWith(\"/\")?\"\":\"/\") + this._logoutPath;\r\n //Nothing to return. This is going to leave the NG app\r\n return null;\r\n }\r\n else {\r\n //Back-end logout\r\n let headers = new HttpHeaders().set(AuthenticationService.CONTENT_TYPE, \"text/plain\");\r\n return <Observable<string>>this._http.get(this.logoutLocation(), {headers: headers, responseType: \"text\"});\r\n }\r\n }\r\n\r\n /**\r\n * A function to signal the termination of the current session. Invoking this function will clean up any relevant state\r\n * related to the last active session.\r\n */\r\n logout(keepCurrentRoute: boolean = false): void {\r\n //Logout and leave NG app\r\n if (this.isRedirectBasedLogin() && ! this._logoutConfirmPath) {\r\n this.clearLogin(true);\r\n }\r\n //Logout within NG app and return to same route after login or redirect to confirm screen\r\n else {\r\n //Prevent logout if already on authentication route. Doing otherwise screws up SAML\r\n if (! this._router.routerState || this._router.routerState.snapshot.url !== this._authenticationRoute) {\r\n this._redirectUrl = (keepCurrentRoute && this._router.routerState && this._router.routerState.snapshot) ? this._router.routerState.snapshot.url : \"\";\r\n \r\n if (this._redirectUrl.startsWith(\"/\")) {\r\n this._redirectUrl = this._redirectUrl.substring(1);\r\n }\r\n \r\n this.clearLogin().subscribe(\r\n (response) => {\r\n\t\t\tif (this._logoutConfirmPath) {\r\n\t\t\t\twindow.location.href = this.getBaseUrl() + (this._logoutPath.startsWith(\"/\")?\"\":\"/\") + this._logoutConfirmPath;\r\n\t\t\t}\r\n\t\t\telse {\r\n \twindow.location.replace(this._redirectUrl);\r\n\t\t\t}\r\n },\r\n (error) => {\r\n window.location.replace(this._redirectUrl);\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n storeToken(token: string): void {\r\n let valid = this.validateToken(token);\r\n\r\n // unsubscribe from refesh before we decide wether to resubscribe\r\n this.unsubscribeFromTokenRefresh();\r\n\r\n if (valid) {\r\n this._localStorageService.setItem(this.authenticationProvider.authenticationTokenKey, token);\r\n this.subscribeToTokenRefresh(token);\r\n\r\n //Change the BehaviorSubject if the user was not previously authenticated.\r\n //Since other code may be subscribing to this observable, we don't want to cause new events to fire if just refreshing the JWT.\r\n if (! this._isAuthenticatedSubject.value) {\r\n this._isAuthenticatedSubject.next(true);\r\n }\r\n } else {\r\n this._localStorageService.removeItem(this.authenticationProvider.authenticationTokenKey);\r\n this._isAuthenticatedSubject.next(false);\r\n }\r\n }\r\n\r\n proceedIfAuthenticated(): boolean {\r\n if (isDevMode()) {\r\n console.debug(\"AuthenticationService.proceedIfAuthenticated: \" + this._redirectUrl);\r\n }\r\n\r\n if (this._isAuthenticatedSubject.value) {\r\n //Login counts as user activity, too\r\n this.updateUserActivity();\r\n\r\n if (this._redirectUrl && this._redirectUrl && this._redirectUrl !== \"\") {\r\n this._router.navigateByUrl(this._redirectUrl);\r\n } else {\r\n this._router.navigate([\"\"]);\r\n }\r\n\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n validateToken(token: string): boolean {\r\n return (token && !this._jwtHelper.isTokenExpired(token));\r\n }\r\n \r\n subscribeToUIActivity(){\r\n this._uiEvents.forEach(event =>\r\n fromEvent(document, event).subscribe(_ => {\r\n //Only update activity on UI event if not already about to time out. Counter intuitive, but in this case we should have 60 second count-down dialog open.\r\n if (this._userIsAboutToTimeOut.getValue() !== true) {\r\n this.updateUserActivity();\r\n }\r\n })\r\n ); \r\n }\r\n\r\n subscribeToTokenRefresh(token: any): void {\r\n let exp = this._jwtHelper.getTokenExpirationDate(token);\r\n\r\n // Use a timer to periodically check timeouts\r\n this._refreshSubscription = interval(1000)\r\n .subscribe(() => {\r\n\r\n // If a tab is inactive we can't know if our timer is accurate\r\n // so when the interval hits check against timestamps\r\n if (this._isAuthenticatedSubject.value && Date.now() > this.getTimeoutStart()) {\r\n //Don't update the subject more than once! Doing so initializes more than one countdown timer!\r\n if (this._userIsAboutToTimeOut.getValue() !== true) {\r\n this._userIsAboutToTimeOut.next(true);\r\n }\r\n }\r\n\r\n // check for refresh token\r\n let msToExpiry = (exp.valueOf() - new Date().valueOf());\r\n\r\n // Refresh 60 seconds before expiry\r\n if (msToExpiry <= 60000) {\r\n this.refreshTokenIfUserIsActive();\r\n }\r\n });\r\n }\r\n\r\n unsubscribeFromTokenRefresh(): void {\r\n if (this._refreshSubscription && ! this._refreshSubscription.closed) {\r\n this._refreshSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n getMaxViewPermission(): \"view\" | \"viewident\" | \"viewlimited\" {\r\n return this.maxViewPermission.getValue();\r\n }\r\n\r\n getMaxViewPermissionSubject(): BehaviorSubject<\"view\" | \"viewident\" | \"viewlimited\"> {\r\n return this.maxViewPermission;\r\n }\r\n\r\n setMaxViewPermission(maxViewPermission: \"view\" | \"viewident\" | \"viewlimited\"): void {\r\n this._localStorageService.setItem(\"maxViewPermission\", maxViewPermission);\r\n this.maxViewPermission.next(maxViewPermission);\r\n }\r\n\r\n private refreshTokenIfUserIsActive(): void {\r\n //Only refresh if the user has been active\r\n if (this._lastUserInteraction && ((new Date().valueOf() - this._lastUserInteraction.valueOf()) <= (this._maxInactivityMinutes * 60 * 1000))) {\r\n //Refresh the JWT\r\n this.requestAccessToken(false, false);\r\n \r\n //Might as well make application keep alive requests at the same time as refreshing tokens - more efficient & probably needs same logic\r\n if (this._keepAliveEndpoint) {\r\n this.makeKeepAliveRequest();\r\n }\r\n }\r\n }\r\n\r\n private hasValidConfig(): void {\r\n if (this._tokenEndpoint == null && (this._serverUrl === null || this._logoutPath === null)) {\r\n throw new Error(\"BUG ALERT! Invalid AuthenticationService configuration. No valid configuration for authentication endpoint(s).\");\r\n }\r\n if (this._localStorageService === null || this.authenticationProvider.authenticationTokenKey === null) {\r\n throw new Error(\"BUG ALERT! Invalid AuthenticationService configuration. No valid configuration for local storage\");\r\n }\r\n }\r\n\r\n private handleError(error: any) : Observable<never> {\r\n let errMsg = (error.message) ? error.message : AuthenticationService.GENERIC_ERR_MSG;\r\n return throwError(errMsg);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, ElementRef, ViewChild, Inject, Renderer2} from \"@angular/core\";\r\nimport {Location, PopStateEvent} from \"@angular/common\";\r\nimport {Router} from \"@angular/router\";\r\nimport {DomSanitizer} from \"@angular/platform-browser\";\r\n\r\nimport {interval, Subscription} from \"rxjs\";\r\nimport {first} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService, AUTHENTICATION_ROUTE} from \"./authentication.service\";\r\n\r\n@Component({\r\n selector: \"authentication-iframe\",\r\n template: `\r\n <div class=\"container\">\r\n <iframe #iframe class=\"frame\" [src]=\"url\" (load)=\"handleChanges()\"></iframe>\r\n <div *ngIf=\"_errorMsg\" class=\"alert-box\">\r\n <div class=\"alert alert-danger\">\r\n <h5 class=\"alert-heading\">Authentication Failed</h5>\r\n <span id=\"hci-login-error\" class=\"alert-text\">{{_errorMsg}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n \r\n :host {\r\n background-color: white;\r\n }\r\n \r\n .container {\r\n max-width: 100%;\r\n margin-top: 60px;\r\n padding-top: 15px;\r\n }\r\n\r\n .frame {\r\n width: 100%;\r\n height: 100%;\r\n border: 0px;\r\n }\r\n `],\r\n host: {class: \"outlet-row\"}\r\n})\r\nexport class AuthenticationComponent {\r\n\r\n public url;\r\n public _errorMsg: string;\r\n\r\n @ViewChild(\"iframe\", {static: true}) iframe : ElementRef;\r\n\r\n private resetSubscription: Subscription;\r\n private popstateSubscription: Subscription;\r\n\r\n constructor(private authenticationService: AuthenticationService,\r\n private domSanitizer : DomSanitizer,\r\n private router: Router,\r\n private location: Location,\r\n private renderer: Renderer2,\r\n @Inject(AUTHENTICATION_ROUTE) private authenticationRoute: string) {\r\n }\r\n\r\n ngOnInit() {\r\n /*\r\n * Fix back bug\r\n * Issue is that the browser will go back to the previous route. If it's guarded, the route guard will just load the login again\r\n * Eventually the browser gets to the /authenticate route and going back from there loads the iframe history and Shibboleth displays\r\n * an error relating to navigating back.\r\n */\r\n history.pushState(null, null, this.location.prepareExternalUrl(this.authenticationRoute));\r\n\r\n this.popstateSubscription = <Subscription> this.location.subscribe((value: PopStateEvent) => {\r\n //This is going to prevent back from working from the login component\r\n history.go(1);\r\n });\r\n\r\n this.beginAuthenticationProcess();\r\n }\r\n\r\n handleChanges(): void {\r\n if (!this.iframe.nativeElement.contentDocument) {\r\n return;\r\n }\r\n\r\n try {\r\n let element: HTMLElement = this.iframe.nativeElement.contentDocument.body;\r\n if (element.querySelector(\"pre\")) {\r\n element = element.querySelector(\"pre\");\r\n }\r\n\r\n this._errorMsg = null;\r\n var jsonText = element.innerText;\r\n\r\n var json = JSON.parse(jsonText);\r\n this.authenticationService.storeToken(json.auth_token);\r\n var authenticated = this.authenticationService.proceedIfAuthenticated();\r\n\r\n if (!authenticated) {\r\n this.resetSubscription.unsubscribe();\r\n this.beginAuthenticationProcess();\r\n }\r\n } catch (error) {\r\n if (this.iframe.nativeElement.contentDocument.title.toUpperCase() === \"ERROR\") {\r\n if (this.iframe.nativeElement.contentDocument.body.innerHTML.toUpperCase() === \"FORBIDDEN\") {\r\n this._errorMsg = \"You do not have permission to log into this application\";\r\n } else {\r\n this._errorMsg = null;\r\n }\r\n\r\n //A bit of a workaround for a WildFly issue. Success on Pac4j authentication, but failure on DB load of user put things in a weird state. Just logout, and redo the login.\r\n this.clearLoginAndRetry();\r\n }\r\n }\r\n\r\n // After the iframe loads, make the background transparent so we use the implementation's background and not the sso background.\r\n this.renderer.setStyle(this.iframe.nativeElement.contentDocument.body, \"background-color\", \"transparent\");\r\n }\r\n\r\n ngOnDestroy() {\r\n this.resetSubscription.unsubscribe();\r\n this.popstateSubscription.unsubscribe();\r\n }\r\n\r\n private clearLoginAndRetry(): void {\r\n this.resetSubscription.unsubscribe();\r\n this.authenticationService.clearLogin().subscribe(\r\n () => { this.beginAuthenticationProcess(); },\r\n (error) => { this.beginAuthenticationProcess(); }\r\n );\r\n }\r\n\r\n private beginAuthenticationProcess(): void {\r\n var tokenEndpoint = this.authenticationService.tokenLocation();\r\n \r\n if (tokenEndpoint !== \"\") {\r\n this.url = this.domSanitizer.bypassSecurityTrustResourceUrl(tokenEndpoint);\r\n }\r\n\r\n /**\r\n * If the user doesn't complete authentication before the IdP session times out, that will be a problem when they eventually\r\n * attampt to log in. It is likely that users will do this often when they log out or are timed out in the evening, leave\r\n * their browser open, then attempt to log back in in the morning. In order to work around this, this component will re-request\r\n * the token prior to IdP timeout, which will reset the process. This will happen 1 minute before idpInactivityMinutes\r\n **/\r\n this.resetSubscription = interval((this.authenticationService.idpInactivityMinutes - 1) * 60 * 1000)\r\n .pipe(first())\r\n .subscribe((value) => {\r\n this.beginAuthenticationProcess();\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component, OnInit} from \"@angular/core\";\r\nimport {AuthenticationService} from \"./authentication.service\";\r\nimport {UntypedFormBuilder, UntypedFormGroup, Validators} from \"@angular/forms\";\r\n\r\n@Component({\r\n selector: \"hci-login-form\",\r\n template: `\r\n <div class=\"container\">\r\n <div class=\"login-box\" id=\"hci-login-form-box\">\r\n <div class=\"login-heading\" id=\"hci-login-form-heading\">\r\n <h3>Sign in</h3>\r\n </div>\r\n <div class=\"panel-body\">\r\n <form [formGroup]=\"_loginForm\" (ngSubmit)=\"login()\">\r\n <input aria-label=\"direct-login-username\" formControlName=\"username\" class=\"form-control\" id=\"username\" name=\"username\" placeholder=\"Username\" type=\"text\">\r\n <input aria-label=\"direct-login-password\" formControlName=\"password\" class=\"form-control\" id=\"password\" name=\"password\" type=\"password\" placeholder=\"Password\">\r\n\r\n <div *ngIf=\"_errorMsg\" class=\"alert-box\">\r\n <div class=\"alert alert-danger\">\r\n <h5 class=\"alert-heading\">Authentication Failed</h5>\r\n <span id=\"hci-login-error\" class=\"alert-text\">{{_errorMsg}}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-primary\" id=\"hci-login-form-submit-button\" type=\"submit\" [disabled]=\"!_loginForm.valid\">Login</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n .container {\r\n max-width: 400px;\r\n margin-top: 20px;\r\n padding-top: 15px;\r\n }\r\n\r\n .login-box {\r\n border-radius: 10px;\r\n box-shadow: 0 0 2px #ccc;\r\n padding: 15px;\r\n }\r\n\r\n .login-box .login-heading h3 {\r\n line-height:1.5;\r\n margin: 0 0 10px\r\n }\r\n\r\n .login-box .form-control {\r\n padding: 10px;\r\n border: 1px solid #ccc;\r\n }\r\n\r\n .login-box input[type=\"password\"] {\r\n margin-bottom: 10px;\r\n border-top-left-radius: 0;\r\n border-top-right-radius: 0;\r\n }\r\n\r\n .login-box input[type=\"text\"] {\r\n margin-bottom: -1px;\r\n border-bottom-right-radius: 0;\r\n border-bottom-left-radius: 0;\r\n }\r\n\r\n .login-box .alert-box {\r\n margin: 10px 0 -5px 0\r\n }\r\n\r\n .login-box .alert-text {\r\n font-size: small;\r\n }\r\n\r\n .login-box .btn-box {\r\n margin: 10px 0 0px 0\r\n }\r\n `]\r\n})\r\nexport class DirectLoginComponent implements OnInit {\r\n public _loginForm: UntypedFormGroup;\r\n public _errorMsg: string;\r\n\r\n constructor(private _authenticationService: AuthenticationService, private _formBuilder: UntypedFormBuilder) {}\r\n\r\n /**\r\n * Initializes the authentication form.\r\n */\r\n ngOnInit(): void {\r\n this._loginForm = this._formBuilder.group({\r\n username: [\"\", Validators.required],\r\n password: [\"\", Validators.required]\r\n });\r\n }\r\n\r\n /**\r\n * A function to submit the login form the the {@link UserService}.\r\n */\r\n login() {\r\n this._authenticationService.login(this._loginForm.value.username, this._loginForm.value.password)\r\n .subscribe((res) => {\r\n if (res) {\r\n this._errorMsg = null;\r\n this._authenticationService.requestAccessToken(false, true);\r\n }\r\n }, (error: any) => {\r\n this._errorMsg = \"Please check your username and password.\";\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {Component} from \"@angular/core\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nimport {Observable, Subscription, timer} from \"rxjs\";\r\nimport {map, takeWhile} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService} from \"./authentication.service\";\r\n\r\n@Component({\r\n selector: \"timeout-notification\",\r\n template: `\r\n <div class=\"flyout-max\" [@openBacksplash]=\"openState\">\r\n <div class=\"modal-dialog\" [@openModal]=\"openState\" role=\"document\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Your Session Is About To Expire</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>For your security, your session is about to automatically time out in the next <b>{{seconds | async}}</b> seconds. Would you like to stay signed in?</p>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <ng-container>\r\n <button id=\"updateBtn\" type=\"button\" class=\"btn btn-secondary\" (click)=\"click()\">Yes, Keep me signed in</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n animations: [\r\n trigger(\"openBacksplash\",\r\n [\r\n state(\"in\", style({\r\n \"display\": \"none\"\r\n })),\r\n state(\"hidden\", style({\r\n \"display\": \"none\"\r\n })),\r\n state(\"opened\", style({\r\n \"display\": \"inherit\"\r\n })),\r\n transition(\"hidden => opened\", animate(100)),\r\n transition(\"opened => hidden\", animate(200))\r\n ]\r\n ),\r\n trigger(\"openModal\",\r\n [\r\n state(\"in\", style({\r\n \"opacity\": \"0\",\r\n \"left\": \"-50vw\"\r\n })),\r\n state(\"hidden\", style({\r\n \"opacity\": \"0\",\r\n \"left\": \"-50vw\"\r\n })),\r\n state(\"opened\", style({\r\n \"opacity\": \"1\",\r\n \"left\": \"25vw\"\r\n })),\r\n transition(\"hidden => opened\", animate(500)),\r\n transition(\"opened => hidden\", animate(300))\r\n ]\r\n )\r\n ],\r\n styles: [`\r\n\r\n .flyout-max {\r\n position: fixed;\r\n z-index: 9999;\r\n top: 0;\r\n bottom: 0;\r\n background-color: rgba(0, 0, 0, 0.4);\r\n width: 100vw;\r\n }\r\n \r\n .modal-dialog {\r\n position: fixed;\r\n max-width: 50vw;\r\n min-width: 50vw;\r\n left: -50vw;\r\n top: 25vw;\r\n margin: 0;\r\n background-color: white;\r\n border: black 1px solid;\r\n border-left: none;\r\n border-top-right-radius: 20px;\r\n border-bottom-right-radius: 20px;\r\n border-top-left-radius: 20px;\r\n border-bottom-left-radius: 20px;\r\n pointer-events: all;\r\n }\r\n \r\n .modal-body {\r\n width: 100%;\r\n display: inline-block;\r\n }\r\n \r\n .modal-body-left {\r\n display: inline-block;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n \r\n .modal-body-right {\r\n width: 70%;\r\n vertical-align: top;\r\n padding-left: 15px;\r\n border-left: black 1px solid;\r\n margin-left: 15px;\r\n display: inline-block;\r\n overflow-y: auto;\r\n min-height: 300px;\r\n max-height: 300px;\r\n }\r\n `]\r\n})\r\nexport class TimeoutNotificationComponent {\r\n public seconds: Observable<number>;\r\n public openState: string = \"hidden\";\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(private authenticationService: AuthenticationService) {\r\n authenticationService.isAboutToTimeOut().subscribe((isAboutToTimeOut) => {\r\n\r\n if (isAboutToTimeOut) {\r\n this.openState = \"opened\";\r\n this.startCountdown();\r\n } else {\r\n this.openState = \"hidden\";\r\n //If something changed mid-timeout, cancel the timeout/logout.\r\n if (this.subscription != null && !this.subscription.closed) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n });\r\n }\r\n\r\n startCountdown(): void {\r\n this.seconds = timer(0, 1000)\r\n .pipe(\r\n map(() => {\r\n const elapsed: number = Math.round((Date.now() - this.authenticationService.getTimeoutStart()) / 1000);\r\n return this.authenticationService.userCountdownSeconds - elapsed;\r\n }),\r\n // The true argument emits the final value that completed the observable\r\n takeWhile((value) => value > 0, true),\r\n );\r\n\r\n this.subscription = this.seconds.subscribe((value) => {\r\n if (value < 1) {\r\n this.subscription.unsubscribe();\r\n this.authenticationService.logout(true);\r\n }\r\n });\r\n }\r\n\r\n click(): void {\r\n this.subscription.unsubscribe();\r\n this.authenticationService.updateUserActivity();\r\n }\r\n}\r\n","import {Injectable, Injector, isDevMode} from \"@angular/core\";\r\nimport {HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpHeaders, HttpParams, HttpErrorResponse} from \"@angular/common/http\";\r\n\r\nimport {Observable, throwError} from \"rxjs\";\r\nimport {catchError, map} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService} from \"./authentication.service\";\r\n\r\n@Injectable()\r\nexport class AuthorizationInterceptor implements HttpInterceptor {\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (isDevMode()) {\r\n console.debug(\"AuthorizationInterceptor.intercept\");\r\n }\r\n \r\n let authService: AuthenticationService = this.injector.get(AuthenticationService);\r\n \r\n //Don't want to include background token refreshes in considering the user 'active'\r\n if (req.url !== authService.tokenLocation()) {\r\n //Update user activity. Done here instead of the previous method using a subscription to a subject in AuthenticationProvider\r\n authService.updateUserActivity();\r\n }\r\n \r\n let headers: HttpHeaders = authService.getHeaders(req);\r\n let url: string = req.url;\r\n if (url.startsWith(\"/\")) {\r\n url = authService.getBaseUrl() + url;\r\n } else if (!url.startsWith(\"http\")) {\r\n if (authService.getContextRoot().length > 0) {\r\n url = authService.getBaseUrl() + \"/\" + authService.getContextRoot() + \"/\" + url;\r\n } else {\r\n url = authService.getBaseUrl() + \"/\" + url;\r\n }\r\n }\r\n\r\n let params: HttpParams = req.params;\r\n if (url.indexOf(\"/crud/\") > 0) {\r\n params = params.set(\"maxViewPermission\", authService.getMaxViewPermission());\r\n }\r\n\r\n let reqClone = req.clone({\r\n url: url,\r\n withCredentials: true,\r\n headers: headers,\r\n params: params\r\n });\r\n\r\n return next.handle(reqClone)\r\n .pipe(catchError((error: HttpErrorResponse) => {\r\n if (isDevMode()) {\r\n console.debug(\"AuthorizationInterceptor.error\");\r\n }\r\n\r\n /**\r\n * If the token is not authenticated which angular does not know about, then a REST request to the backend will\r\n * return a 401. To duplicate this, open Core in two tabs. In one tab, logout, in the other, perform a request\r\n * that hits a protected resource.\r\n */\r\n if (error && error.status === 401) {\r\n authService.isAuthenticated().pipe(map((authenticated) => {\r\n if (authenticated) {\r\n // If the user was previously authenticated, then logout which will redirect.\r\n authService.logout(true);\r\n return throwError(error.message);\r\n } else {\r\n //This happens for legitimate reasons. Attempting to get the JWT when not authenticated returns the login form, for example, which NG will see as an error\r\n return throwError(error);\r\n }\r\n }));\r\n }\r\n else if (error && error.status === 403) {\r\n // TODO: Trigger notification for unauthorized.\r\n }\r\n else {\r\n return throwError(error);\r\n }\r\n })) as Observable<HttpEvent<any>>;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {ModuleWithProviders, NgModule, Optional, SkipSelf} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {ReactiveFormsModule, FormsModule} from \"@angular/forms\";\r\nimport {HTTP_INTERCEPTORS, HttpClientModule} from \"@angular/common/http\";\r\nimport {RouterModule} from \"@angular/router\";\r\n\r\nimport {CoolStorageModule} from \"@angular-cool/storage\";\r\nimport {JWT_OPTIONS, JwtHelperService, JwtInterceptor, JwtModule} from \"@auth0/angular-jwt\";\r\n\r\nimport {AuthenticationService} from \"./authentication.service\";\r\nimport {AuthenticationComponent} from \"./authentication.component\";\r\nimport {DirectLoginComponent} from \"./directlogin.component\";\r\nimport {TimeoutNotificationComponent} from \"./timeout-notification.component\";\r\nimport {AuthorizationInterceptor} from \"./authorization.interceptor\";\r\nimport {AuthenticationProvider} from \"./authentication.provider\";\r\n\r\n/**\r\n * Provide a single auth service and interceptor for the implementing application. Also provide everything\r\n * from the angular-jwt library.\r\n *\r\n * @since 1.0.0\r\n */\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n //JwtModule,\r\n RouterModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CoolStorageModule\r\n ],\r\n declarations: [\r\n AuthenticationComponent,\r\n DirectLoginComponent,\r\n TimeoutNotificationComponent\r\n ],\r\n exports: [\r\n AuthenticationComponent,\r\n DirectLoginComponent,\r\n TimeoutNotificationComponent\r\n ]\r\n})\r\nexport class AuthenticationModule {\r\n constructor(@Optional() @SkipSelf() parentModule: JwtModule) {\r\n if (parentModule) {\r\n throw new Error(\"AuthenticationModule is already loaded.\");\r\n }\r\n }\r\n static forRoot(): ModuleWithProviders<AuthenticationModule> {\r\n return {\r\n providers: [\r\n AuthenticationProvider,\r\n JwtHelperService,\r\n AuthenticationService,\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: AuthorizationInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: JwtInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: JWT_OPTIONS,\r\n useClass: AuthenticationProvider\r\n }\r\n ],\r\n ngModule: AuthenticationModule\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary\r\n */\r\nimport {inject} from \"@angular/core\";\r\nimport {Router, ActivatedRouteSnapshot, RouterStateSnapshot} from \"@angular/router\";\r\n\r\nimport {Observable} from \"rxjs\";\r\nimport {map} from \"rxjs/operators\";\r\n\r\nimport {AuthenticationService, AUTHENTICATION_ROUTE} from \"./authentication.service\";\r\n\r\n\r\nexport const RouteGuardService = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\r\n const authenticationService = inject(AuthenticationService);\r\n const router = inject(Router);\r\n const authenticationRoute = inject(AUTHENTICATION_ROUTE, { optional: true });\r\n\r\n return authenticationService.isAuthenticated().pipe(map((authenticated) => {\r\n if (authenticated) {\r\n return true;\r\n }\r\n else {\r\n // Store the attempted URL for redirecting\r\n authenticationService.redirectUrl = state.url;\r\n \r\n //Redirect based login\r\n if (authenticationService.isRedirectBasedLogin()) {\r\n //Try to get an access token\r\n authenticationService.requestAccessToken(true, true);\r\n }\r\n //Authentication component based login\r\n else {\r\n // Navigate to the login page\r\n return router.createUrlTree([authenticationRoute]);\r\n }\r\n }\r\n }));\r\n};\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i5.AuthenticationProvider","i4","i1.AuthenticationService","i2"],"mappings":"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"}
|