@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.
Files changed (47) hide show
  1. package/authentication.component.d.ts +1 -1
  2. package/directlogin.component.d.ts +4 -4
  3. package/esm2020/authentication.component.mjs +131 -0
  4. package/esm2020/authentication.module.mjs +105 -0
  5. package/esm2020/authentication.provider.mjs +36 -0
  6. package/esm2020/authentication.service.mjs +393 -0
  7. package/esm2020/authorization.interceptor.mjs +79 -0
  8. package/esm2020/directlogin.component.mjs +96 -0
  9. package/esm2020/huntsman-cancer-institute-authentication.mjs +5 -0
  10. package/esm2020/index.mjs +13 -0
  11. package/esm2020/route-guard.service.mjs +52 -0
  12. package/esm2020/timeout-notification.component.mjs +148 -0
  13. package/fesm2015/huntsman-cancer-institute-authentication.mjs +1000 -0
  14. package/fesm2015/huntsman-cancer-institute-authentication.mjs.map +1 -0
  15. package/{fesm2015/huntsman-cancer-institute-authentication.js → fesm2020/huntsman-cancer-institute-authentication.mjs} +64 -189
  16. package/fesm2020/huntsman-cancer-institute-authentication.mjs.map +1 -0
  17. package/package.json +26 -18
  18. package/timeout-notification.component.d.ts +1 -1
  19. package/CHANGELOG.md +0 -4
  20. package/bundles/huntsman-cancer-institute-authentication.umd.js +0 -945
  21. package/bundles/huntsman-cancer-institute-authentication.umd.js.map +0 -1
  22. package/bundles/huntsman-cancer-institute-authentication.umd.min.js +0 -2
  23. package/bundles/huntsman-cancer-institute-authentication.umd.min.js.map +0 -1
  24. package/esm2015/authentication.component.js +0 -153
  25. package/esm2015/authentication.module.js +0 -107
  26. package/esm2015/authentication.provider.js +0 -36
  27. package/esm2015/authentication.service.js +0 -393
  28. package/esm2015/authorization.interceptor.js +0 -79
  29. package/esm2015/directlogin.component.js +0 -146
  30. package/esm2015/huntsman-cancer-institute-authentication.js +0 -5
  31. package/esm2015/index.js +0 -13
  32. package/esm2015/route-guard.service.js +0 -52
  33. package/esm2015/timeout-notification.component.js +0 -205
  34. package/esm5/authentication.component.js +0 -120
  35. package/esm5/authentication.module.js +0 -109
  36. package/esm5/authentication.provider.js +0 -47
  37. package/esm5/authentication.service.js +0 -411
  38. package/esm5/authorization.interceptor.js +0 -81
  39. package/esm5/directlogin.component.js +0 -53
  40. package/esm5/huntsman-cancer-institute-authentication.js +0 -5
  41. package/esm5/index.js +0 -13
  42. package/esm5/route-guard.service.js +0 -55
  43. package/esm5/timeout-notification.component.js +0 -125
  44. package/fesm2015/huntsman-cancer-institute-authentication.js.map +0 -1
  45. package/fesm5/huntsman-cancer-institute-authentication.js +0 -937
  46. package/fesm5/huntsman-cancer-institute-authentication.js.map +0 -1
  47. 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