@huntsman-cancer-institute/authentication 12.5.0 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/authentication.component.d.ts +1 -1
- package/directlogin.component.d.ts +4 -4
- package/esm2020/authentication.component.mjs +131 -0
- package/esm2020/authentication.module.mjs +105 -0
- package/esm2020/authentication.provider.mjs +36 -0
- package/esm2020/authentication.service.mjs +393 -0
- package/esm2020/authorization.interceptor.mjs +79 -0
- package/esm2020/directlogin.component.mjs +96 -0
- package/esm2020/huntsman-cancer-institute-authentication.mjs +5 -0
- package/esm2020/index.mjs +13 -0
- package/esm2020/route-guard.service.mjs +52 -0
- package/esm2020/timeout-notification.component.mjs +148 -0
- package/fesm2015/huntsman-cancer-institute-authentication.mjs +1000 -0
- package/fesm2015/huntsman-cancer-institute-authentication.mjs.map +1 -0
- package/{fesm2015/huntsman-cancer-institute-authentication.js → fesm2020/huntsman-cancer-institute-authentication.mjs} +64 -189
- package/fesm2020/huntsman-cancer-institute-authentication.mjs.map +1 -0
- package/package.json +26 -18
- package/timeout-notification.component.d.ts +1 -1
- package/CHANGELOG.md +0 -4
- package/bundles/huntsman-cancer-institute-authentication.umd.js +0 -945
- package/bundles/huntsman-cancer-institute-authentication.umd.js.map +0 -1
- package/bundles/huntsman-cancer-institute-authentication.umd.min.js +0 -2
- package/bundles/huntsman-cancer-institute-authentication.umd.min.js.map +0 -1
- package/esm2015/authentication.component.js +0 -153
- package/esm2015/authentication.module.js +0 -107
- package/esm2015/authentication.provider.js +0 -36
- package/esm2015/authentication.service.js +0 -393
- package/esm2015/authorization.interceptor.js +0 -79
- package/esm2015/directlogin.component.js +0 -146
- package/esm2015/huntsman-cancer-institute-authentication.js +0 -5
- package/esm2015/index.js +0 -13
- package/esm2015/route-guard.service.js +0 -52
- package/esm2015/timeout-notification.component.js +0 -205
- package/esm5/authentication.component.js +0 -120
- package/esm5/authentication.module.js +0 -109
- package/esm5/authentication.provider.js +0 -47
- package/esm5/authentication.service.js +0 -411
- package/esm5/authorization.interceptor.js +0 -81
- package/esm5/directlogin.component.js +0 -53
- package/esm5/huntsman-cancer-institute-authentication.js +0 -5
- package/esm5/index.js +0 -13
- package/esm5/route-guard.service.js +0 -55
- package/esm5/timeout-notification.component.js +0 -125
- package/fesm2015/huntsman-cancer-institute-authentication.js.map +0 -1
- package/fesm5/huntsman-cancer-institute-authentication.js +0 -937
- package/fesm5/huntsman-cancer-institute-authentication.js.map +0 -1
- package/huntsman-cancer-institute-authentication.d.ts +0 -5
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
import { Component } from "@angular/core";
|
|
5
|
+
import { AuthenticationService } from "./authentication.service";
|
|
6
|
+
import { UntypedFormBuilder, Validators } from "@angular/forms";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./authentication.service";
|
|
9
|
+
import * as i2 from "@angular/forms";
|
|
10
|
+
import * as i3 from "@angular/common";
|
|
11
|
+
export class DirectLoginComponent {
|
|
12
|
+
constructor(_authenticationService, _formBuilder) {
|
|
13
|
+
this._authenticationService = _authenticationService;
|
|
14
|
+
this._formBuilder = _formBuilder;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initializes the authentication form.
|
|
18
|
+
*/
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
this._loginForm = this._formBuilder.group({
|
|
21
|
+
username: ["", Validators.required],
|
|
22
|
+
password: ["", Validators.required]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A function to submit the login form the the {@link UserService}.
|
|
27
|
+
*/
|
|
28
|
+
login() {
|
|
29
|
+
this._authenticationService.login(this._loginForm.value.username, this._loginForm.value.password)
|
|
30
|
+
.subscribe((res) => {
|
|
31
|
+
if (res) {
|
|
32
|
+
this._errorMsg = null;
|
|
33
|
+
this._authenticationService.requestAccessToken(true);
|
|
34
|
+
}
|
|
35
|
+
}, (error) => {
|
|
36
|
+
this._errorMsg = "Please check your username and password.";
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
DirectLoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DirectLoginComponent, deps: [{ token: i1.AuthenticationService }, { token: i2.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
DirectLoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DirectLoginComponent, selector: "hci-login-form", ngImport: i0, template: `
|
|
42
|
+
<div class="container">
|
|
43
|
+
<div class="login-box" id="hci-login-form-box">
|
|
44
|
+
<div class="login-heading" id="hci-login-form-heading">
|
|
45
|
+
<h3>Sign in</h3>
|
|
46
|
+
</div>
|
|
47
|
+
<div class="panel-body">
|
|
48
|
+
<form [formGroup]="_loginForm" (ngSubmit)="login()">
|
|
49
|
+
<input formControlName="username" class="form-control" id="username" name="username" placeholder="Username" type="text">
|
|
50
|
+
<input formControlName="password" class="form-control" id="password" name="password" type="password" placeholder="Password">
|
|
51
|
+
|
|
52
|
+
<div *ngIf="_errorMsg" class="alert-box">
|
|
53
|
+
<div class="alert alert-danger">
|
|
54
|
+
<h5 class="alert-heading">Authentication Failed</h5>
|
|
55
|
+
<span id="hci-login-error" class="alert-text">{{_errorMsg}}</span>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div class="btn-box">
|
|
60
|
+
<button class="btn btn-primary" id="hci-login-form-submit-button" type="submit" [disabled]="!_loginForm.valid">Login</button>
|
|
61
|
+
</div>
|
|
62
|
+
</form>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
`, 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"] }] });
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DirectLoginComponent, decorators: [{
|
|
68
|
+
type: Component,
|
|
69
|
+
args: [{ selector: "hci-login-form", template: `
|
|
70
|
+
<div class="container">
|
|
71
|
+
<div class="login-box" id="hci-login-form-box">
|
|
72
|
+
<div class="login-heading" id="hci-login-form-heading">
|
|
73
|
+
<h3>Sign in</h3>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="panel-body">
|
|
76
|
+
<form [formGroup]="_loginForm" (ngSubmit)="login()">
|
|
77
|
+
<input formControlName="username" class="form-control" id="username" name="username" placeholder="Username" type="text">
|
|
78
|
+
<input formControlName="password" class="form-control" id="password" name="password" type="password" placeholder="Password">
|
|
79
|
+
|
|
80
|
+
<div *ngIf="_errorMsg" class="alert-box">
|
|
81
|
+
<div class="alert alert-danger">
|
|
82
|
+
<h5 class="alert-heading">Authentication Failed</h5>
|
|
83
|
+
<span id="hci-login-error" class="alert-text">{{_errorMsg}}</span>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<div class="btn-box">
|
|
88
|
+
<button class="btn btn-primary" id="hci-login-form-submit-button" type="submit" [disabled]="!_loginForm.valid">Login</button>
|
|
89
|
+
</div>
|
|
90
|
+
</form>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
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
|
+
}], ctorParameters: function () { return [{ type: i1.AuthenticationService }, { type: i2.UntypedFormBuilder }]; } });
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0bG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL2RpcmVjdGxvZ2luLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGtCQUFrQixFQUFvQixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUE4RWhGLE1BQU0sT0FBTyxvQkFBb0I7SUFJL0IsWUFBb0Isc0JBQTZDLEVBQVUsWUFBZ0M7UUFBdkYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtJQUFHLENBQUM7SUFFL0c7O09BRUc7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUN4QyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQzlGLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdEQ7UUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLDBDQUEwQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7aUhBN0JVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHNEQTFFckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F5QlA7MkZBaURRLG9CQUFvQjtrQkE1RWhDLFNBQVM7K0JBQ0UsZ0JBQWdCLFlBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBeUJQIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKi9cclxuaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBdXRoZW50aWNhdGlvblNlcnZpY2V9IGZyb20gXCIuL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiaGNpLWxvZ2luLWZvcm1cIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibG9naW4tYm94XCIgaWQ9XCJoY2ktbG9naW4tZm9ybS1ib3hcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4taGVhZGluZ1wiIGlkPVwiaGNpLWxvZ2luLWZvcm0taGVhZGluZ1wiPlxyXG4gICAgICAgICAgPGgzPlNpZ24gaW48L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCI+XHJcbiAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIl9sb2dpbkZvcm1cIiAobmdTdWJtaXQpPVwibG9naW4oKVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidXNlcm5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwidXNlcm5hbWVcIiBuYW1lPVwidXNlcm5hbWVcIiBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lXCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInBhc3N3b3JkXCIgbmFtZT1cInBhc3N3b3JkXCIgdHlwZT1cInBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIl9lcnJvck1zZ1wiIGNsYXNzPVwiYWxlcnQtYm94XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiYWxlcnQtaGVhZGluZ1wiPkF1dGhlbnRpY2F0aW9uIEZhaWxlZDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBpZD1cImhjaS1sb2dpbi1lcnJvclwiIGNsYXNzPVwiYWxlcnQtdGV4dFwiPnt7X2Vycm9yTXNnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tYm94XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGlkPVwiaGNpLWxvZ2luLWZvcm0tc3VibWl0LWJ1dHRvblwiIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiIV9sb2dpbkZvcm0udmFsaWRcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgLmNvbnRhaW5lciB7XHJcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XHJcbiAgICAgIG1hcmdpbi10b3A6IDIwcHg7XHJcbiAgICAgIHBhZGRpbmctdG9wOiAxNXB4O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAubG9naW4tYm94IHtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgICAgYm94LXNoYWRvdzogMCAwIDJweCAjY2NjO1xyXG4gICAgICBwYWRkaW5nOiAxNXB4O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAubG9naW4tYm94IC5sb2dpbi1oZWFkaW5nIGgzIHtcclxuICAgICAgbGluZS1oZWlnaHQ6MS41O1xyXG4gICAgICBtYXJnaW46IDAgMCAxMHB4XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5sb2dpbi1ib3ggLmZvcm0tY29udHJvbCB7XHJcbiAgICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5sb2dpbi1ib3ggaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcclxuICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcclxuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5sb2dpbi1ib3ggaW5wdXRbdHlwZT1cInRleHRcIl0ge1xyXG4gICAgICBtYXJnaW4tYm90dG9tOiAtMXB4O1xyXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcclxuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmxvZ2luLWJveCAuYWxlcnQtYm94IHtcclxuICAgICAgbWFyZ2luOiAxMHB4IDAgLTVweCAwXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5sb2dpbi1ib3ggLmFsZXJ0LXRleHQge1xyXG4gICAgICBmb250LXNpemU6IHNtYWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAubG9naW4tYm94IC5idG4tYm94IHtcclxuICAgICAgbWFyZ2luOiAxMHB4IDAgMHB4IDBcclxuICAgIH1cclxuICBgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlyZWN0TG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHB1YmxpYyBfbG9naW5Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBfZXJyb3JNc2c6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBhdXRoZW50aWNhdGlvbiBmb3JtLlxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9naW5Gb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICB1c2VybmFtZTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBwYXNzd29yZDogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gc3VibWl0IHRoZSBsb2dpbiBmb3JtIHRoZSB0aGUge0BsaW5rIFVzZXJTZXJ2aWNlfS5cclxuICAgKi9cclxuICBsb2dpbigpIHtcclxuICAgIHRoaXMuX2F1dGhlbnRpY2F0aW9uU2VydmljZS5sb2dpbih0aGlzLl9sb2dpbkZvcm0udmFsdWUudXNlcm5hbWUsIHRoaXMuX2xvZ2luRm9ybS52YWx1ZS5wYXNzd29yZClcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JNc2cgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5fYXV0aGVudGljYXRpb25TZXJ2aWNlLnJlcXVlc3RBY2Nlc3NUb2tlbih0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3JNc2cgPSBcIlBsZWFzZSBjaGVjayB5b3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cIjtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS1hdXRoZW50aWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2F1dGhlbnRpY2F0aW9uL3NyYy9odW50c21hbi1jYW5jZXItaW5zdGl0dXRlLWF1dGhlbnRpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { AuthenticationModule } from "./authentication.module";
|
|
2
|
+
/**
|
|
3
|
+
* The injection tokens for service configuration.
|
|
4
|
+
*/
|
|
5
|
+
export { AUTHENTICATION_LOGOUT_PATH, AUTHENTICATION_SERVER_URL, AUTHENTICATION_TOKEN_ENDPOINT, AUTHENTICATION_DIRECT_ENDPOINT, AUTHENTICATION_ROUTE, AUTHENTICATION_MAX_INACTIVITY_MINUTES, AUTHENTICATION_USER_COUNTDOWN_SECONDS, AUTHENTICATION_IDP_INACTIVITY_MINUTES } from "./authentication.service";
|
|
6
|
+
export { AUTHENTICATION_TOKEN_KEY } from "./authentication.provider";
|
|
7
|
+
export { AuthenticationComponent } from "./authentication.component";
|
|
8
|
+
export { DirectLoginComponent } from "./directlogin.component";
|
|
9
|
+
export { RouteGuardService } from "./route-guard.service";
|
|
10
|
+
export { AuthenticationService } from "./authentication.service";
|
|
11
|
+
export { TimeoutNotificationComponent } from "./timeout-notification.component";
|
|
12
|
+
export { AuthorizationInterceptor } from "./authorization.interceptor";
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hdXRoZW50aWNhdGlvbi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6Qiw2QkFBNkIsRUFDN0IsOEJBQThCLEVBQzlCLG9CQUFvQixFQUNwQixxQ0FBcUMsRUFDckMscUNBQXFDLEVBQ3JDLHFDQUFxQyxFQUN0QyxNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ2xFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzVELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzlELE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtBdXRoZW50aWNhdGlvbk1vZHVsZX0gZnJvbSBcIi4vYXV0aGVudGljYXRpb24ubW9kdWxlXCI7XHJcblxyXG4vKipcclxuICogVGhlIGluamVjdGlvbiB0b2tlbnMgZm9yIHNlcnZpY2UgY29uZmlndXJhdGlvbi5cclxuICovXHJcbmV4cG9ydCB7XHJcbiAgQVVUSEVOVElDQVRJT05fTE9HT1VUX1BBVEgsXHJcbiAgQVVUSEVOVElDQVRJT05fU0VSVkVSX1VSTCxcclxuICBBVVRIRU5USUNBVElPTl9UT0tFTl9FTkRQT0lOVCxcclxuICBBVVRIRU5USUNBVElPTl9ESVJFQ1RfRU5EUE9JTlQsXHJcbiAgQVVUSEVOVElDQVRJT05fUk9VVEUsXHJcbiAgQVVUSEVOVElDQVRJT05fTUFYX0lOQUNUSVZJVFlfTUlOVVRFUyxcclxuICBBVVRIRU5USUNBVElPTl9VU0VSX0NPVU5URE9XTl9TRUNPTkRTLFxyXG4gIEFVVEhFTlRJQ0FUSU9OX0lEUF9JTkFDVElWSVRZX01JTlVURVNcclxufSBmcm9tIFwiLi9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQge0FVVEhFTlRJQ0FUSU9OX1RPS0VOX0tFWX0gZnJvbSBcIi4vYXV0aGVudGljYXRpb24ucHJvdmlkZXJcIjtcclxuXHJcbmV4cG9ydCB7QXV0aGVudGljYXRpb25Db21wb25lbnR9IGZyb20gXCIuL2F1dGhlbnRpY2F0aW9uLmNvbXBvbmVudFwiXHJcbmV4cG9ydCB7RGlyZWN0TG9naW5Db21wb25lbnR9IGZyb20gXCIuL2RpcmVjdGxvZ2luLmNvbXBvbmVudFwiXHJcbmV4cG9ydCB7Um91dGVHdWFyZFNlcnZpY2V9IGZyb20gXCIuL3JvdXRlLWd1YXJkLnNlcnZpY2VcIlxyXG5leHBvcnQge0F1dGhlbnRpY2F0aW9uU2VydmljZX0gZnJvbSBcIi4vYXV0aGVudGljYXRpb24uc2VydmljZVwiXHJcbmV4cG9ydCB7VGltZW91dE5vdGlmaWNhdGlvbkNvbXBvbmVudH0gZnJvbSBcIi4vdGltZW91dC1ub3RpZmljYXRpb24uY29tcG9uZW50XCI7XHJcbmV4cG9ydCB7QXV0aG9yaXphdGlvbkludGVyY2VwdG9yfSBmcm9tIFwiLi9hdXRob3JpemF0aW9uLmludGVyY2VwdG9yXCI7Il19
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
import { Injectable, Inject } from "@angular/core";
|
|
5
|
+
import { Router } from "@angular/router";
|
|
6
|
+
import { map } from "rxjs/operators";
|
|
7
|
+
import { AuthenticationService, AUTHENTICATION_ROUTE } from "./authentication.service";
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "./authentication.service";
|
|
10
|
+
import * as i2 from "@angular/router";
|
|
11
|
+
/**
|
|
12
|
+
* A {@code CanActivate} implementation which makes its calculation based on the current authentication state.
|
|
13
|
+
*
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export class RouteGuardService {
|
|
17
|
+
constructor(_authenticationService, _router, _authenticationRoute) {
|
|
18
|
+
this._authenticationService = _authenticationService;
|
|
19
|
+
this._router = _router;
|
|
20
|
+
this._authenticationRoute = _authenticationRoute;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Determines whether or not a route can be activated, based on the current authentication state.
|
|
24
|
+
*
|
|
25
|
+
* @param route for activation to be determined on
|
|
26
|
+
* @param state of the router snapshot
|
|
27
|
+
* @returns {Observable<boolean>} describing the result of this calculation
|
|
28
|
+
*/
|
|
29
|
+
canActivate(route, state) {
|
|
30
|
+
return this._authenticationService.isAuthenticated().pipe(map((authenticated) => {
|
|
31
|
+
if (!authenticated) {
|
|
32
|
+
// Store the attempted URL for redirecting
|
|
33
|
+
this._authenticationService.redirectUrl = state.url;
|
|
34
|
+
// Navigate to the login page
|
|
35
|
+
this._router.navigate([this._authenticationRoute]);
|
|
36
|
+
}
|
|
37
|
+
return authenticated;
|
|
38
|
+
}, (error) => {
|
|
39
|
+
return false;
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
;
|
|
43
|
+
}
|
|
44
|
+
RouteGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RouteGuardService, deps: [{ token: i1.AuthenticationService }, { token: i2.Router }, { token: AUTHENTICATION_ROUTE }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
45
|
+
RouteGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RouteGuardService });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RouteGuardService, decorators: [{
|
|
47
|
+
type: Injectable
|
|
48
|
+
}], ctorParameters: function () { return [{ type: i1.AuthenticationService }, { type: i2.Router }, { type: undefined, decorators: [{
|
|
49
|
+
type: Inject,
|
|
50
|
+
args: [AUTHENTICATION_ROUTE]
|
|
51
|
+
}] }]; } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2F1dGhlbnRpY2F0aW9uL3NyYy9yb3V0ZS1ndWFyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFjLE1BQU0sRUFBOEMsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFFckY7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBb0Isc0JBQTZDLEVBQzdDLE9BQWUsRUFDZSxvQkFBNEI7UUFGMUQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3QyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2UseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFRO0lBQzlFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUNuRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDOUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsMENBQTBDO2dCQUMxQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBRXBELDZCQUE2QjtnQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDaEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUFBLENBQUM7OzhHQTVCUyxpQkFBaUIsNkVBSVIsb0JBQW9CO2tIQUo3QixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBS0ksTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSHVudHNtYW4gQ2FuY2VyIEluc3RpdHV0ZSBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoLCBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5XHJcbiAqL1xyXG5pbXBvcnQge0luamVjdGFibGUsIEluamVjdH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDYW5BY3RpdmF0ZSwgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7bWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7QXV0aGVudGljYXRpb25TZXJ2aWNlLCBBVVRIRU5USUNBVElPTl9ST1VURX0gZnJvbSBcIi4vYXV0aGVudGljYXRpb24uc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIEEge0Bjb2RlIENhbkFjdGl2YXRlfSBpbXBsZW1lbnRhdGlvbiB3aGljaCBtYWtlcyBpdHMgY2FsY3VsYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24gc3RhdGUuXHJcbiAqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUm91dGVHdWFyZFNlcnZpY2UgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoQVVUSEVOVElDQVRJT05fUk9VVEUpIHByaXZhdGUgX2F1dGhlbnRpY2F0aW9uUm91dGU6IHN0cmluZykge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIHJvdXRlIGNhbiBiZSBhY3RpdmF0ZWQsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGF1dGhlbnRpY2F0aW9uIHN0YXRlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvdXRlIGZvciBhY3RpdmF0aW9uIHRvIGJlIGRldGVybWluZWQgb25cclxuICAgKiBAcGFyYW0gc3RhdGUgb2YgdGhlIHJvdXRlciBzbmFwc2hvdFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPGJvb2xlYW4+fSBkZXNjcmliaW5nIHRoZSByZXN1bHQgb2YgdGhpcyBjYWxjdWxhdGlvblxyXG4gICAqL1xyXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKS5waXBlKG1hcCgoYXV0aGVudGljYXRlZCkgPT4ge1xyXG4gICAgICBpZiAoIWF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAvLyBTdG9yZSB0aGUgYXR0ZW1wdGVkIFVSTCBmb3IgcmVkaXJlY3RpbmdcclxuICAgICAgICB0aGlzLl9hdXRoZW50aWNhdGlvblNlcnZpY2UucmVkaXJlY3RVcmwgPSBzdGF0ZS51cmw7XHJcblxyXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBsb2dpbiBwYWdlXHJcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFt0aGlzLl9hdXRoZW50aWNhdGlvblJvdXRlXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhdXRoZW50aWNhdGVkO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkpO1xyXG4gIH07XHJcbn1cclxuXHJcbiJdfQ==
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
|
|
3
|
+
*/
|
|
4
|
+
import { Component } from "@angular/core";
|
|
5
|
+
import { animate, state, style, transition, trigger } from "@angular/animations";
|
|
6
|
+
import { timer } from "rxjs";
|
|
7
|
+
import { map, takeWhile } from "rxjs/operators";
|
|
8
|
+
import { AuthenticationService } from "./authentication.service";
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./authentication.service";
|
|
11
|
+
import * as i2 from "@angular/common";
|
|
12
|
+
export class TimeoutNotificationComponent {
|
|
13
|
+
constructor(authenticationService) {
|
|
14
|
+
this.authenticationService = authenticationService;
|
|
15
|
+
this.openState = "hidden";
|
|
16
|
+
authenticationService.isAboutToTimeOut().subscribe((isAboutToTimeOut) => {
|
|
17
|
+
if (isAboutToTimeOut) {
|
|
18
|
+
this.openState = "opened";
|
|
19
|
+
this.startCountdown();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
this.openState = "hidden";
|
|
23
|
+
//If something changed mid-timeout, cancel the timeout/logout.
|
|
24
|
+
if (this.subscription != null && !this.subscription.closed) {
|
|
25
|
+
this.subscription.unsubscribe();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
startCountdown() {
|
|
31
|
+
this.seconds = timer(0, 1000)
|
|
32
|
+
.pipe(map(() => {
|
|
33
|
+
const elapsed = Math.round((Date.now() - this.authenticationService.getTimeoutStart()) / 1000);
|
|
34
|
+
return this.authenticationService.userCountdownSeconds - elapsed;
|
|
35
|
+
}),
|
|
36
|
+
// The true argument emits the final value that completed the observable
|
|
37
|
+
takeWhile((value) => value > 0, true));
|
|
38
|
+
this.subscription = this.seconds.subscribe((value) => {
|
|
39
|
+
if (value < 1) {
|
|
40
|
+
this.subscription.unsubscribe();
|
|
41
|
+
this.authenticationService.logout(true);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
click() {
|
|
46
|
+
this.subscription.unsubscribe();
|
|
47
|
+
this.authenticationService.updateUserActivity();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
TimeoutNotificationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimeoutNotificationComponent, deps: [{ token: i1.AuthenticationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
51
|
+
TimeoutNotificationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TimeoutNotificationComponent, selector: "timeout-notification", ngImport: i0, template: `
|
|
52
|
+
<div class="flyout-max" [@openBacksplash]="openState">
|
|
53
|
+
<div class="modal-dialog" [@openModal]="openState" role="document">
|
|
54
|
+
<div class="modal-header">
|
|
55
|
+
<h4 class="modal-title">Your Session Is About To Expire</h4>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="modal-body">
|
|
58
|
+
<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>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="modal-footer">
|
|
61
|
+
<ng-container>
|
|
62
|
+
<button id="updateBtn" type="button" class="btn btn-secondary" (click)="click()">Yes, Keep me signed in</button>
|
|
63
|
+
</ng-container>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
`, isInline: true, 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"], dependencies: [{ kind: "pipe", type: i2.AsyncPipe, name: "async" }], animations: [
|
|
68
|
+
trigger("openBacksplash", [
|
|
69
|
+
state("in", style({
|
|
70
|
+
"display": "none"
|
|
71
|
+
})),
|
|
72
|
+
state("hidden", style({
|
|
73
|
+
"display": "none"
|
|
74
|
+
})),
|
|
75
|
+
state("opened", style({
|
|
76
|
+
"display": "inherit"
|
|
77
|
+
})),
|
|
78
|
+
transition("hidden => opened", animate(100)),
|
|
79
|
+
transition("opened => hidden", animate(200))
|
|
80
|
+
]),
|
|
81
|
+
trigger("openModal", [
|
|
82
|
+
state("in", style({
|
|
83
|
+
"opacity": "0",
|
|
84
|
+
"left": "-50vw"
|
|
85
|
+
})),
|
|
86
|
+
state("hidden", style({
|
|
87
|
+
"opacity": "0",
|
|
88
|
+
"left": "-50vw"
|
|
89
|
+
})),
|
|
90
|
+
state("opened", style({
|
|
91
|
+
"opacity": "1",
|
|
92
|
+
"left": "25vw"
|
|
93
|
+
})),
|
|
94
|
+
transition("hidden => opened", animate(500)),
|
|
95
|
+
transition("opened => hidden", animate(300))
|
|
96
|
+
])
|
|
97
|
+
] });
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TimeoutNotificationComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: "timeout-notification", template: `
|
|
101
|
+
<div class="flyout-max" [@openBacksplash]="openState">
|
|
102
|
+
<div class="modal-dialog" [@openModal]="openState" role="document">
|
|
103
|
+
<div class="modal-header">
|
|
104
|
+
<h4 class="modal-title">Your Session Is About To Expire</h4>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="modal-body">
|
|
107
|
+
<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>
|
|
108
|
+
</div>
|
|
109
|
+
<div class="modal-footer">
|
|
110
|
+
<ng-container>
|
|
111
|
+
<button id="updateBtn" type="button" class="btn btn-secondary" (click)="click()">Yes, Keep me signed in</button>
|
|
112
|
+
</ng-container>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
`, animations: [
|
|
117
|
+
trigger("openBacksplash", [
|
|
118
|
+
state("in", style({
|
|
119
|
+
"display": "none"
|
|
120
|
+
})),
|
|
121
|
+
state("hidden", style({
|
|
122
|
+
"display": "none"
|
|
123
|
+
})),
|
|
124
|
+
state("opened", style({
|
|
125
|
+
"display": "inherit"
|
|
126
|
+
})),
|
|
127
|
+
transition("hidden => opened", animate(100)),
|
|
128
|
+
transition("opened => hidden", animate(200))
|
|
129
|
+
]),
|
|
130
|
+
trigger("openModal", [
|
|
131
|
+
state("in", style({
|
|
132
|
+
"opacity": "0",
|
|
133
|
+
"left": "-50vw"
|
|
134
|
+
})),
|
|
135
|
+
state("hidden", style({
|
|
136
|
+
"opacity": "0",
|
|
137
|
+
"left": "-50vw"
|
|
138
|
+
})),
|
|
139
|
+
state("opened", style({
|
|
140
|
+
"opacity": "1",
|
|
141
|
+
"left": "25vw"
|
|
142
|
+
})),
|
|
143
|
+
transition("hidden => opened", animate(500)),
|
|
144
|
+
transition("opened => hidden", animate(300))
|
|
145
|
+
])
|
|
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
|
+
}], ctorParameters: function () { return [{ type: i1.AuthenticationService }]; } });
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC1ub3RpZmljYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYXV0aGVudGljYXRpb24vc3JjL3RpbWVvdXQtbm90aWZpY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQTJCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBOEcvRCxNQUFNLE9BQU8sNEJBQTRCO0lBTXZDLFlBQW9CLHFCQUE0QztRQUE1QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBSnpELGNBQVMsR0FBVyxRQUFRLENBQUM7UUFLbEMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBRXRFLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO2dCQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBQzFCLDhEQUE4RDtnQkFDOUQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO29CQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lC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QUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQ0FDcEIsU0FBUyxFQUFFLE1BQU07NkJBQ2xCLENBQUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztnQ0FDcEIsU0FBUyxFQUFFLFNBQVM7NkJBQ3JCLENBQUMsQ0FBQzs0QkFDSCxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM1QyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUM3QyxDQUNGO3dCQUNELE9BQU8sQ0FBQyxXQUFXLEVBQ2pCOzRCQUNFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dDQUNoQixTQUFTLEVBQUUsR0FBRztnQ0FDZCxNQUFNLEVBQUUsT0FBTzs2QkFDaEIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsR0FBRztnQ0FDZCxNQUFNLEVBQUUsT0FBTzs2QkFDaEIsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNwQixTQUFTLEVBQUUsR0FBRztnQ0FDZCxNQUFNLEVBQUUsTUFBTTs2QkFDZixDQUFDLENBQUM7NEJBQ0gsVUFBVSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDNUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDN0MsQ0FDRjtxQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAxNiBIdW50c21hbiBDYW5jZXIgSW5zdGl0dXRlIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFV0YWgsIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnlcclxuICovXHJcbmltcG9ydCB7Q29tcG9uZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcclxuXHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHttYXAsIHRha2VXaGlsZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5pbXBvcnQge0F1dGhlbnRpY2F0aW9uU2VydmljZX0gZnJvbSBcIi4vYXV0aGVudGljYXRpb24uc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwidGltZW91dC1ub3RpZmljYXRpb25cIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImZseW91dC1tYXhcIiBbQG9wZW5CYWNrc3BsYXNoXT1cIm9wZW5TdGF0ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgW0BvcGVuTW9kYWxdPVwib3BlblN0YXRlXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5Zb3VyIFNlc3Npb24gSXMgQWJvdXQgVG8gRXhwaXJlPC9oND5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgPHA+Rm9yIHlvdXIgc2VjdXJpdHksIHlvdXIgc2Vzc2lvbiBpcyBhYm91dCB0byBhdXRvbWF0aWNhbGx5IHRpbWUgb3V0IGluIHRoZSBuZXh0IDxiPnt7c2Vjb25kcyB8IGFzeW5jfX08L2I+IHNlY29uZHMuIFdvdWxkIHlvdSBsaWtlIHRvIHN0YXkgc2lnbmVkIGluPzwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwidXBkYXRlQnRuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2xpY2soKVwiPlllcywgS2VlcCBtZSBzaWduZWQgaW48L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcihcIm9wZW5CYWNrc3BsYXNoXCIsXHJcbiAgICAgIFtcclxuICAgICAgICBzdGF0ZShcImluXCIsIHN0eWxlKHtcclxuICAgICAgICAgIFwiZGlzcGxheVwiOiBcIm5vbmVcIlxyXG4gICAgICAgIH0pKSxcclxuICAgICAgICBzdGF0ZShcImhpZGRlblwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBcImRpc3BsYXlcIjogXCJub25lXCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgXCJkaXNwbGF5XCI6IFwiaW5oZXJpdFwiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJoaWRkZW4gPT4gb3BlbmVkXCIsIGFuaW1hdGUoMTAwKSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBoaWRkZW5cIiwgYW5pbWF0ZSgyMDApKVxyXG4gICAgICBdXHJcbiAgICApLFxyXG4gICAgdHJpZ2dlcihcIm9wZW5Nb2RhbFwiLFxyXG4gICAgICBbXHJcbiAgICAgICAgc3RhdGUoXCJpblwiLCBzdHlsZSh7XHJcbiAgICAgICAgICBcIm9wYWNpdHlcIjogXCIwXCIsXHJcbiAgICAgICAgICBcImxlZnRcIjogXCItNTB2d1wiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHN0YXRlKFwiaGlkZGVuXCIsIHN0eWxlKHtcclxuICAgICAgICAgIFwib3BhY2l0eVwiOiBcIjBcIixcclxuICAgICAgICAgIFwibGVmdFwiOiBcIi01MHZ3XCJcclxuICAgICAgICB9KSksXHJcbiAgICAgICAgc3RhdGUoXCJvcGVuZWRcIiwgc3R5bGUoe1xyXG4gICAgICAgICAgXCJvcGFjaXR5XCI6IFwiMVwiLFxyXG4gICAgICAgICAgXCJsZWZ0XCI6IFwiMjV2d1wiXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHRyYW5zaXRpb24oXCJoaWRkZW4gPT4gb3BlbmVkXCIsIGFuaW1hdGUoNTAwKSksXHJcbiAgICAgICAgdHJhbnNpdGlvbihcIm9wZW5lZCA9PiBoaWRkZW5cIiwgYW5pbWF0ZSgzMDApKVxyXG4gICAgICBdXHJcbiAgICApXHJcbiAgXSxcclxuICBzdHlsZXM6IFtgXHJcblxyXG4gICAgLmZseW91dC1tYXgge1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICAgIHotaW5kZXg6IDk5OTk7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNCk7XHJcbiAgICAgIHdpZHRoOiAxMDB2dztcclxuICAgIH1cclxuICAgIFxyXG4gICAgLm1vZGFsLWRpYWxvZyB7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgICAgbWF4LXdpZHRoOiA1MHZ3O1xyXG4gICAgICBtaW4td2lkdGg6IDUwdnc7XHJcbiAgICAgIGxlZnQ6IC01MHZ3O1xyXG4gICAgICB0b3A6IDI1dnc7XHJcbiAgICAgIG1hcmdpbjogMDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICAgIGJvcmRlcjogYmxhY2sgMXB4IHNvbGlkO1xyXG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcclxuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDIwcHg7XHJcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAyMHB4O1xyXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAyMHB4O1xyXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAyMHB4O1xyXG4gICAgICBwb2ludGVyLWV2ZW50czogYWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAubW9kYWwtYm9keSB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC5tb2RhbC1ib2R5LWxlZnQge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcclxuICAgICAgbWluLWhlaWdodDogMzAwcHg7XHJcbiAgICAgIG1heC1oZWlnaHQ6IDMwMHB4O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAubW9kYWwtYm9keS1yaWdodCB7XHJcbiAgICAgIHdpZHRoOiA3MCU7XHJcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XHJcbiAgICAgIHBhZGRpbmctbGVmdDogMTVweDtcclxuICAgICAgYm9yZGVyLWxlZnQ6IGJsYWNrIDFweCBzb2xpZDtcclxuICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgbWluLWhlaWdodDogMzAwcHg7XHJcbiAgICAgIG1heC1oZWlnaHQ6IDMwMHB4O1xyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaW1lb3V0Tm90aWZpY2F0aW9uQ29tcG9uZW50IHtcclxuICBwdWJsaWMgc2Vjb25kczogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gIHB1YmxpYyBvcGVuU3RhdGU6IHN0cmluZyA9IFwiaGlkZGVuXCI7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpIHtcclxuICAgIGF1dGhlbnRpY2F0aW9uU2VydmljZS5pc0Fib3V0VG9UaW1lT3V0KCkuc3Vic2NyaWJlKChpc0Fib3V0VG9UaW1lT3V0KSA9PiB7XHJcblxyXG4gICAgICBpZiAoaXNBYm91dFRvVGltZU91dCkge1xyXG4gICAgICAgIHRoaXMub3BlblN0YXRlID0gXCJvcGVuZWRcIjtcclxuICAgICAgICB0aGlzLnN0YXJ0Q291bnRkb3duKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU3RhdGUgPSBcImhpZGRlblwiO1xyXG4gICAgICAgIC8vSWYgc29tZXRoaW5nIGNoYW5nZWQgbWlkLXRpbWVvdXQsIGNhbmNlbCB0aGUgdGltZW91dC9sb2dvdXQuXHJcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uICE9IG51bGwgJiYgIXRoaXMuc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRDb3VudGRvd24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlY29uZHMgPSB0aW1lcigwLCAxMDAwKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxhcHNlZDogbnVtYmVyID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmdldFRpbWVvdXRTdGFydCgpKSAvIDEwMDApO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLnVzZXJDb3VudGRvd25TZWNvbmRzIC0gZWxhcHNlZDtcclxuICAgICAgICB9KSxcclxuICAgICAgICAvLyBUaGUgdHJ1ZSBhcmd1bWVudCBlbWl0cyB0aGUgZmluYWwgdmFsdWUgdGhhdCBjb21wbGV0ZWQgdGhlIG9ic2VydmFibGVcclxuICAgICAgICB0YWtlV2hpbGUoKHZhbHVlKSA9PiB2YWx1ZSA+IDAsIHRydWUpLFxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5zZWNvbmRzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgIGlmICh2YWx1ZSA8IDEpIHtcclxuICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UubG9nb3V0KHRydWUpO1xyXG4gICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS51cGRhdGVVc2VyQWN0aXZpdHkoKTtcclxuICB9XHJcbn1cclxuIl19
|