@openziti/ziti-console-lib 0.5.1 → 0.6.1

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 (100) hide show
  1. package/assets/scripts/growler.js +4 -0
  2. package/assets/styles/forms.css +7 -7
  3. package/assets/styles/global.scss +273 -22
  4. package/assets/styles/header.css +1 -1
  5. package/assets/styles/ziti.css +40 -40
  6. package/esm2022/lib/features/card/card.component.mjs +2 -2
  7. package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -2
  8. package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +12 -3
  9. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
  10. package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -2
  11. package/esm2022/lib/features/data-table/data-table.component.mjs +2 -2
  12. package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +2 -2
  13. package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +2 -2
  14. package/esm2022/lib/features/json-view/json-view.component.mjs +2 -2
  15. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +22 -3
  16. package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -2
  17. package/esm2022/lib/features/overrides/overrides.component.mjs +2 -2
  18. package/esm2022/lib/features/preview-list/preview-list.component.mjs +2 -2
  19. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +342 -0
  20. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +127 -0
  21. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -2
  22. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
  23. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +2 -2
  24. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +2 -2
  25. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +338 -0
  26. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +92 -0
  27. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
  28. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +14 -11
  29. package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +2 -2
  30. package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +2 -2
  31. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -2
  32. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +2 -2
  33. package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +3 -3
  34. package/esm2022/lib/models/auth-policy.mjs +31 -0
  35. package/esm2022/lib/models/jwt-signer.mjs +19 -0
  36. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +115 -0
  37. package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +207 -0
  38. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +2 -2
  39. package/esm2022/lib/pages/identities/identities-page.component.mjs +2 -2
  40. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +96 -0
  41. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +177 -0
  42. package/esm2022/lib/pages/services/services-page.component.mjs +2 -2
  43. package/esm2022/lib/pages/terminators/terminators-page.component.mjs +2 -2
  44. package/esm2022/lib/services/login-service.class.mjs +1 -1
  45. package/esm2022/lib/services/node-data.service.mjs +23 -3
  46. package/esm2022/lib/services/noop-login.service.mjs +1 -4
  47. package/esm2022/lib/services/settings-service.class.mjs +1 -1
  48. package/esm2022/lib/services/settings.service.mjs +6 -1
  49. package/esm2022/lib/services/validation.service.mjs +23 -1
  50. package/esm2022/lib/services/ziti-controller-data.service.mjs +16 -1
  51. package/esm2022/lib/services/ziti-data.service.mjs +4 -4
  52. package/esm2022/lib/ziti-console-lib.module.mjs +29 -5
  53. package/esm2022/public-api.mjs +9 -1
  54. package/fesm2022/openziti-ziti-console-lib.mjs +1874 -356
  55. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  56. package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +1 -1
  57. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts +1 -0
  58. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts.map +1 -1
  59. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +75 -0
  60. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -0
  61. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts +38 -0
  62. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +1 -0
  63. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +64 -0
  64. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -0
  65. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts +21 -0
  66. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +1 -0
  67. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  68. package/lib/models/auth-policy.d.ts +8 -0
  69. package/lib/models/auth-policy.d.ts.map +1 -0
  70. package/lib/models/jwt-signer.d.ts +16 -0
  71. package/lib/models/jwt-signer.d.ts.map +1 -0
  72. package/lib/pages/auth-policies/auth-policies-page.component.d.ts +29 -0
  73. package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +1 -0
  74. package/lib/pages/auth-policies/auth-policies-page.service.d.ts +34 -0
  75. package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -0
  76. package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts +29 -0
  77. package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts.map +1 -0
  78. package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts +31 -0
  79. package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +1 -0
  80. package/lib/services/login-service.class.d.ts +0 -1
  81. package/lib/services/login-service.class.d.ts.map +1 -1
  82. package/lib/services/node-data.service.d.ts +1 -0
  83. package/lib/services/node-data.service.d.ts.map +1 -1
  84. package/lib/services/noop-login.service.d.ts +0 -1
  85. package/lib/services/noop-login.service.d.ts.map +1 -1
  86. package/lib/services/settings-service.class.d.ts +1 -0
  87. package/lib/services/settings-service.class.d.ts.map +1 -1
  88. package/lib/services/settings.service.d.ts +1 -0
  89. package/lib/services/settings.service.d.ts.map +1 -1
  90. package/lib/services/validation.service.d.ts +2 -0
  91. package/lib/services/validation.service.d.ts.map +1 -1
  92. package/lib/services/ziti-controller-data.service.d.ts +1 -0
  93. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  94. package/lib/services/ziti-data.service.d.ts +4 -3
  95. package/lib/services/ziti-data.service.d.ts.map +1 -1
  96. package/lib/ziti-console-lib.module.d.ts +22 -17
  97. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  98. package/package.json +1 -1
  99. package/public-api.d.ts +8 -0
  100. package/public-api.d.ts.map +1 -1
@@ -16,7 +16,7 @@
16
16
  import { Component, Inject, ViewChild } from '@angular/core';
17
17
  import { NavigationEnd } from '@angular/router';
18
18
  import { ZAC_WRAPPER_SERVICE } from "./zac-wrapper-service.class";
19
- import { cloneDeep, invoke, isEmpty, defer, set, get } from 'lodash';
19
+ import { cloneDeep, invoke, defer, set, get } from 'lodash';
20
20
  import { Subscription } from "rxjs";
21
21
  import { SETTINGS_SERVICE } from "../../services/settings.service";
22
22
  import { ZAC_LOGIN_SERVICE } from "../../services/login-service.class";
@@ -61,7 +61,7 @@ class ZacWrapperComponent {
61
61
  this.loadPage();
62
62
  }));
63
63
  this.subscription.add(this.settingsService.settingsChange.subscribe(async (results) => {
64
- const hasSession = !isEmpty(results?.session?.id);
64
+ const hasSession = this.settingsService.hasSession();
65
65
  const controllerChanged = this.settings?.session?.controllerDomain !== results?.session?.controllerDomain;
66
66
  if (hasSession && (!this.pageLoading || controllerChanged)) {
67
67
  this.pageLoading = true;
@@ -145,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
145
145
  type: ViewChild,
146
146
  args: ['zacContainer']
147
147
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFjLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3dyYXBwZXJzL3phYy13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy93cmFwcGVycy96YWMtd3JhcHBlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFTLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxtQkFBbUIsRUFBeUIsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RixPQUFPLEVBQUMsU0FBUyxFQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQWtCLGdCQUFnQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFJbEYsT0FBTyxFQUFvQixpQkFBaUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7OztBQUN4RixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFbEMsTUFLYSxtQkFBbUI7SUFXOUIsWUFDeUMsY0FBc0MsRUFDekMsZUFBZ0MsRUFDMUQsYUFBNEIsRUFDRCxZQUErQixFQUMxRCxNQUFjO1FBSmUsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3pDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUMxRCxrQkFBYSxHQUFi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QUFDLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3BILElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzthQUMvQztZQUFBLE9BQU0sR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7YUFDN0Q7b0JBQVM7Z0JBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBMUdVLG1CQUFtQixrQkFZbEIsbUJBQW1CLGFBQ25CLGdCQUFnQiwwQ0FFaEIsaUJBQWlCO21HQWZsQixtQkFBbUIscUtDakNoQywwNU1Ba0lxRjs7U0RqR3hFLG1CQUFtQjs0RkFBbkIsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGlCQUFpQjs7MEJBZ0J4QixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFFdkIsTUFBTTsyQkFBQyxpQkFBaUI7aUVBTkYsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlciwgTmF2aWdhdGlvbkVuZH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7WkFDX1dSQVBQRVJfU0VSVklDRSwgWmFjV3JhcHBlclNlcnZpY2VDbGFzc30gZnJvbSBcIi4vemFjLXdyYXBwZXItc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtjbG9uZURlZXAsIGRlbGF5LCBpbnZva2UsIGlzRW1wdHksIGRlZmVyLCBzZXQsIGdldH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2UsIFNFVFRJTkdTX1NFUlZJQ0V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gXCIuLi9tZXNzYWdpbmcvbG9nZ2VyLnNlcnZpY2VcIjtcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB7TG9naW5TZXJ2aWNlQ2xhc3MsIFpBQ19MT0dJTl9TRVJWSUNFfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9naW4tc2VydmljZS5jbGFzc1wiO1xuY29uc3QgY29udGV4dCA9IHdpbmRvd1snY29udGV4dCddO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC16YWMtd3JhcHBlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3phYy13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi96YWMtd3JhcHBlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBaYWNXcmFwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgcGFnZUh0bWw6IGFueSA9ICcnO1xuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHRpdGxlID0gJ1ppdGkgQ29uc29sZSc7XG4gIHdhaXRpbmdGb3JTZXNzaW9uID0gdHJ1ZTtcbiAgcGFnZUxvYWRpbmcgPSBmYWxzZTtcbiAgc2V0dGluZ3M6IGFueSA9IHt9O1xuICBAVmlld0NoaWxkKCd6YWNDb250YWluZXInKSB6YWNDb250YWluZXI6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIEBJbmplY3QoWkFDX1dSQVBQRVJfU0VSVklDRSkgcHJpdmF0ZSB3cmFwcGVyU2VydmljZTogWmFjV3JhcHBlclNlcnZpY2VDbGFzcyxcbiAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgIHByaXZhdGUgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZSxcbiAgICAgIEBJbmplY3QoWkFDX0xPR0lOX1NFUlZJQ0UpIHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2VDbGFzcyxcbiAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy53cmFwcGVyU2VydmljZS5pbml0WmFjKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy53cmFwcGVyU2VydmljZS5wYWdlQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy53YWl0aW5nRm9yU2Vzc2lvbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRQYWdlKCk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICB0aGlzLndyYXBwZXJTZXJ2aWNlLnppdGlVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMud2FpdGluZ0ZvclNlc3Npb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkUGFnZSgpO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKGFzeW5jIChyZXN1bHRzOmFueSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNTZXNzaW9uID0gIWlzRW1wdHkocmVzdWx0cz8uc2Vzc2lvbj8uaWQpO1xuICAgICAgICBjb25zdCBjb250cm9sbGVyQ2hhbmdlZCA9IHRoaXMuc2V0dGluZ3M/LnNlc3Npb24/LmNvbnRyb2xsZXJEb21haW4gIT09IHJlc3VsdHM/LnNlc3Npb24/LmNvbnRyb2xsZXJEb21haW47XG4gICAgICAgIGlmIChoYXNTZXNzaW9uICYmICghdGhpcy5wYWdlTG9hZGluZyB8fCBjb250cm9sbGVyQ2hhbmdlZCkpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnBhZ2VIdG1sID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlZmVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFBhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMud2FpdGluZ0ZvclNlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldHRpbmdzID0gY2xvbmVEZWVwKHJlc3VsdHMpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcbiAgICBkZWZlcigoKSA9PiB7XG4gICAgICB0aGlzLndyYXBwZXJTZXJ2aWNlLmluaXRaQUNCdXR0b25MaXN0ZW5lcigpO1xuICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucGFnZUh0bWwgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBsb2FkUGFnZSgpIHtcbiAgICB0aGlzLnBhZ2VIdG1sID0gYXdhaXQgdGhpcy53cmFwcGVyU2VydmljZS5sb2FkQ3VycmVudFBhZ2UoKTtcbiAgICBkZWZlcigoKSA9PiB7XG4gICAgICB0aGlzLndyYXBwZXJTZXJ2aWNlLnJlc2V0WmFjRXZlbnRzKCk7XG4gICAgICB0aGlzLmV4ZWN1dGVQYWdlU2NyaXB0cygpO1xuICAgIH0pO1xuICB9XG5cbiAgZXhlY3V0ZVBhZ2VTY3JpcHRzKCkge1xuICAgIGNvbnN0IHNjcmlwdHMgPSB0aGlzLnphY0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgICBmb3IgKGNvbnN0IHNjcmlwdCBvZiBzY3JpcHRzKSB7XG4gICAgICBjb25zdCBzY3JpcHRDb3B5ID0gPEhUTUxTY3JpcHRFbGVtZW50PmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0Q29weS50eXBlID0gc2NyaXB0LnR5cGUgPyBzY3JpcHQudHlwZSA6ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgaWYgKHNjcmlwdC5pbm5lckhUTUwpIHtcbiAgICAgICAgc2NyaXB0Q29weS5pbm5lckhUTUwgPSBzY3JpcHQuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIGlmIChzY3JpcHQuc3JjKSB7XG4gICAgICAgIHNjcmlwdENvcHkuc3JjID0gc2NyaXB0LnNyYztcbiAgICAgIH1cbiAgICAgIHNjcmlwdENvcHkuYXN5bmMgPSBmYWxzZTtcbiAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChzY3JpcHRDb3B5LCBzY3JpcHQpO1xuICAgIH1cbiAgICBkZWZlcigoKSA9PiB7XG4gICAgICB0cnl7XG4gICAgICAgIHNldCh3aW5kb3csICdjb250ZXh0Lml0ZW1zJywgW10pO1xuICAgICAgICBzZXQod2luZG93LCAnY29udGV4dC53YXRjaGVycycsIFtdKTtcbiAgICAgICAgc2V0KHdpbmRvdywgJ2NvbnRleHQuZXZlbnRXYXRjaGVycycsIFtdKTtcbiAgICAgICAgaW52b2tlKHdpbmRvdywgJ2FwcC5pbml0Jyk7XG4gICAgICAgIGNvbnRleHQuYWRkTGlzdGVuZXIoZ2V0KHdpbmRvdywgJ3BhZ2UuZmlsdGVyT2JqZWN0Lm5hbWUnLCAnaWRlbnRpdGllcycpLCB0aGlzLndyYXBwZXJTZXJ2aWNlLmluaXRaQUNCdXR0b25MaXN0ZW5lcik7XG4gICAgICAgIHRoaXMud3JhcHBlclNlcnZpY2UuaW5pdFpBQ1BlcnNvbmFsU2V0dGluZ3MoKTtcbiAgICAgIH1jYXRjaChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdlcnJvciBpbml0aWFsaXppbmcgcGFnZSBzY3JpcHRzJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInphYy13cmFwcGVyLWNvbnRhaW5lclwiIFtpbm5lckhUTUxdPVwicGFnZUh0bWwgfCBzYWZlXCIgI3phY0NvbnRhaW5lciBbbmdDbGFzc109XCJ7J2hpZGRlbic6IHBhZ2VMb2FkaW5nfVwiPjwvZGl2PlxuPCEtLSBPcGVyYXRpb25hbCBXaXphcmQgVUkgLS0+XG48ZGl2IGlkPVwiV2l6YXJkTW9kYWxcIiBjbGFzcz1cIm1vZGFsIGJveFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjbG9zZSBpY29uLWNsb3NlXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgZGF0YS1pMThuPVwiWml0aVdpemFyZFwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiIGRhdGEtaTE4bj1cIldpemFyZFNlcnZpY2VcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwid2l6YXJkIGFyZWEgb3BlblwiPlxuICAgICAgICA8bGFiZWwgZm9yPVwiV1NlcnZpY2VOYW1lXCIgZGF0YS1pMThuPVwiU2VydmljZU5hbWVcIj48L2xhYmVsPlxuICAgICAgICA8aW5wdXQgaWQ9XCJXU2VydmljZU5hbWVcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIC8+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJXU2VydmljZVJvbGVzXCI+PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PjwvZGl2PlxuPC9kaXY+XG5cblxuPCEtLSBBZGQgQW55IE1vZGFsIFVJIC0tPlxuPGRpdiBpZD1cIkFkZEFueU1vZGFsXCIgY2xhc3M9XCJtb2RhbCBib3hcIiBzdHlsZT1cImhlaWdodDogZml0LWNvbnRlbnQ7IHdpZHRoOiA2MDBweDsgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7XCIgW25nQ2xhc3NdPVwieydoaWRkZW4nOiBwYWdlTG9hZGluZ31cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2UgaWNvbi1jbG9zZVwiPjwvZGl2PlxuICAgIDxkaXYgaWQ9XCJTZWxlY3QxXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIGRhdGEtaTE4bj1cIkFkZFRpdGxlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJTZWxlY3RvclwiIGNsYXNzPVwiZ3JpZCBkdWFsXCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiSW5saW5lQWRkSWRlbnRpdHlCdXR0b25cIiBjbGFzcz1cImljb25CdXR0b25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UgaWNvbi1pZGVudGl0eVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIGRhdGEtaTE4bj1cIkFkZElkZW50aXR5XCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJJbmxpbmVBZGRTZXJ2aWNlQnV0dG9uXCIgY2xhc3M9XCJpY29uQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlIGljb24tc2VydmljZXNcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIiBkYXRhLWkxOG49XCJBZGRTZXJ2aWNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGlkPVwiSW5saW5lSWRlbnRpdHlBcmVhXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGNsYXNzPVwiYW55YWRkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIGRhdGEtaTE4bj1cIkFkZFNpbXBsZUlkZW50aXR5XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJJZGVudGl0eUxvYWRlclwiIGNsYXNzPVwiY2VudGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1yaXBwbGVcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiSWRlbnRpdHkxXCIgY2xhc3M9XCJhbnlpZFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIklkTmFtZVwiIGRhdGEtaTE4bj1cIk5hbWVcIj48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiSWROYW1lXCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCI1MFwiIGRhdGEtaTE4bj1cIkVudGVyTmFtZVwiIC8+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiSWRSb2xlc1wiIGRhdGEtaTE4bj1cIlJvbGVBdHRyaWJ1dGVzXCI+PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJJZFJvbGVzXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIkNyZWF0ZUlkQnV0dG9uXCIgY2xhc3M9XCJidXR0b25cIiBkYXRhLWkxOG49XCJDcmVhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cIklkZW50aXR5MlwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBjbGFzcz1cImFueWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIklkZW50aXR5UXJDb2RlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJJZGVudGl0eURvd25sb2FkXCIgY2xhc3M9XCJsaW5rQnV0dG9uXCIgZGF0YS1pMThuPVwiRG93bmxvYWRKV1RcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiRG9uZUlkQnV0dG9uXCIgY2xhc3M9XCJidXR0b25cIiBkYXRhLWkxOG49XCJEb25lXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGlkPVwiSW5saW5lU2VydmljZUFyZWFcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgY2xhc3M9XCJhbnlhZGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgZGF0YS1pMThuPVwiQWRkU2ltcGxlU2VydmljZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiU1NlcnZpY2VMb2FkZXJcIiBjbGFzcz1cImNlbnRlclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZHMtcmlwcGxlXCI+PGRpdj48L2Rpdj48ZGl2PjwvZGl2PjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cIlNlcnZpY2UxXCIgY2xhc3M9XCJhbnlzZXJ2aWNlXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiU1NlcnZpY2VOYW1lXCIgZGF0YS1pMThuPVwiU2VydmljZU5hbWVcIj48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IGlkPVwiU1NlcnZpY2VOYW1lXCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCI1MFwiIGRhdGEtaTE4bj1cIkVudGVyTmFtZVwiIC8+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiV2hlcmVIb3N0ZWRcIiBkYXRhLWkxOG49XCJXaGVyZUhvc3RlZFwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiV2hlcmVIb3N0ZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJXaGF0SXNJdFwiIGRhdGEtaTE4bj1cIldoYXRTaGFyZVwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhZGRyZXNzRnVsbFwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJIb3N0ZWRQcm90b2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidGNwXCI+dGNwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ1ZHBcIj51ZHA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3N0ZWRIb3N0XCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCIxMDBcIiB2YWx1ZT1cImxvY2FsaG9zdFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIC8+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG9zdGVkUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIHZhbHVlPVwiODBcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiV2hvQWNjZXNzZXNcIiBkYXRhLWkxOG49XCJXaG9BY2Nlc3Nlc1wiPjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiV2hvQWNjZXNzZXNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJJc0VuY3J5cHRpb25SZXF1aXJlZFwiIGNsYXNzPVwiZm9ybWluZm9cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGNoZWNrTGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiU2ltcGxlRW5jcnlwdGlvblJlcXVpcmVkXCIgY2xhc3M9XCJ0b2dnbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlTGFiZWxcIiBkYXRhLWkxOG49XCJSZXF1aXJlRW5jcnlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiSG93VG9cIiBkYXRhLWkxOG49XCJIb3dTaGFyZVwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhZGRyZXNzUG9ydFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvd1RvXCIgdHlwZT1cInRleHRcIiBtYXhsZW5ndGg9XCIxMDBcIiBkYXRhLWkxOG49XCJFZ0hvc3RcIiAvPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvd1RvUG9ydFwiIHR5cGU9XCJudW1iZXJcIiBtYXhsZW5ndGg9XCIxMFwiIHZhbHVlPVwiODBcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rQnV0dG9uIGNsb3NlclwiIGRhdGEtaTE4bj1cIkNhbmNlbFwiIHN0eWxlPVwid2lkdGg6IGZpdC1jb250ZW50O1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJDcmVhdGVCdXR0b25cIiBjbGFzcz1cImJ1dHRvblwiIGRhdGEtaTE4bj1cIkNyZWF0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiU2VydmljZTJcIiBjbGFzcz1cImFueXNlcnZpY2VcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiU2VydmljZUhhcHBlblwiIGRhdGEtaTE4bj1cIlNlcnZpY2VIYXBwZW5cIj48L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBpZD1cIlNlcnZpY2VIYXBwZW5cIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiRG9uZVNlcnZpY2VCdXR0b25cIiBjbGFzcz1cImJ1dHRvblwiIGRhdGEtaTE4bj1cIkRvbmVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJPcGVyYXRpb25Db21tYW5kc1wiIGNsYXNzPVwiY29tbWFuZHNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgZGF0YS1pMThuPVwiRXhlY3V0aW9uT3BlcmF0aW9uc1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiRXhlY3V0aW9uU3RlcHNcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cIkljb25Eb3dubG9hZFwiIGNsYXNzPVwiaWNvbiBpY29uLWRvd25sb2FkXCI+PC9kaXY+XG4gICAgICAgIDxsYWJlbCBkYXRhLWkxOG49XCJDTElDb21tYW5kc1wiPjwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGVkXCI+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJDTElDb21tYW5kc1wiIHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29weSBjb3B5XCIgZGF0YS1jb3B5PVwiQ0xJQ29tbWFuZHNcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxsYWJlbCBkYXRhLWkxOG49XCJBUElDYWxsc1wiPjwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGVkXCI+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJBcGlDYWxsXCIgdHlwZT1cInRleHRcIiByZWFkb25seSAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29weSBjb3B5XCIgZGF0YS1jb3B5PVwiQXBpQ2FsbFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0ZWRcIj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cIkFwaUpzb25cIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29weSBjb3B5IHN3YXBcIiBkYXRhLWNvcHk9XCJBcGlKc29uXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cbjxsaWItbG9hZGluZy1pbmRpY2F0b3IgKm5nSWY9XCJsb2FkaW5nXCIgW2lzTG9hZGluZ109XCJsb2FkaW5nXCI+PC9saWItbG9hZGluZy1pbmRpY2F0b3I+Il19
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFjLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3dyYXBwZXJzL3phYy13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy93cmFwcGVycy96YWMtd3JhcHBlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFTLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxtQkFBbUIsRUFBeUIsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RixPQUFPLEVBQUMsU0FBUyxFQUFTLE1BQU0sRUFBVyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMxRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUlsRixPQUFPLEVBQW9CLGlCQUFpQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7O0FBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVsQyxNQUthLG1CQUFtQjtJQVc5QixZQUN5QyxjQUFzQyxFQUN6QyxlQUFnQyxFQUMxRCxhQUE0QixFQUNELFlBQStCLEVBQzFELE1BQWM7UUFKZSxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUFDekMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzFELGtCQUFhLEdBQWIsYUFBYSxDQUFl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LE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLHdCQUF3QixFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDcEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQy9DO1lBQUEsT0FBTSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQzthQUM3RDtvQkFBUztnQkFDUixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0ExR1UsbUJBQW1CLGtCQVlsQixtQkFBbUIsYUFDbkIsZ0JBQWdCLDBDQUVoQixpQkFBaUI7bUdBZmxCLG1CQUFtQixxS0NqQ2hDLDA1TUFrSXFGOztTRGpHeEUsbUJBQW1COzRGQUFuQixtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksaUJBQWlCOzswQkFnQnhCLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUV2QixNQUFNOzJCQUFDLGlCQUFpQjtpRUFORixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyLCBOYXZpZ2F0aW9uRW5kfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtaQUNfV1JBUFBFUl9TRVJWSUNFLCBaYWNXcmFwcGVyU2VydmljZUNsYXNzfSBmcm9tIFwiLi96YWMtd3JhcHBlci1zZXJ2aWNlLmNsYXNzXCI7XG5pbXBvcnQge2Nsb25lRGVlcCwgZGVsYXksIGludm9rZSwgaXNFbXB0eSwgZGVmZXIsIHNldCwgZ2V0fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1NldHRpbmdzU2VydmljZSwgU0VUVElOR1NfU0VSVklDRX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSBcIi4uL21lc3NhZ2luZy9sb2dnZXIuc2VydmljZVwiO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHtMb2dpblNlcnZpY2VDbGFzcywgWkFDX0xPR0lOX1NFUlZJQ0V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2dpbi1zZXJ2aWNlLmNsYXNzXCI7XG5jb25zdCBjb250ZXh0ID0gd2luZG93Wydjb250ZXh0J107XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXphYy13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vemFjLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3phYy13cmFwcGVyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFphY1dyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgbG9hZGluZyA9IGZhbHNlO1xuICBwYWdlSHRtbDogYW55ID0gJyc7XG4gIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgdGl0bGUgPSAnWml0aSBDb25zb2xlJztcbiAgd2FpdGluZ0ZvclNlc3Npb24gPSB0cnVlO1xuICBwYWdlTG9hZGluZyA9IGZhbHNlO1xuICBzZXR0aW5nczogYW55ID0ge307XG4gIEBWaWV3Q2hpbGQoJ3phY0NvbnRhaW5lcicpIHphY0NvbnRhaW5lcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgQEluamVjdChaQUNfV1JBUFBFUl9TRVJWSUNFKSBwcml2YXRlIHdyYXBwZXJTZXJ2aWNlOiBaYWNXcmFwcGVyU2VydmljZUNsYXNzLFxuICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwcml2YXRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgQEluamVjdChaQUNfTE9HSU5fU0VSVklDRSkgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZUNsYXNzLFxuICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLndyYXBwZXJTZXJ2aWNlLmluaXRaYWMoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLndyYXBwZXJTZXJ2aWNlLnBhZ2VDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLndhaXRpbmdGb3JTZXNzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIHRoaXMud3JhcHBlclNlcnZpY2Uueml0aVVwZGF0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy53YWl0aW5nRm9yU2Vzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvYWRQYWdlKCk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5nc0NoYW5nZS5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdHM6YW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc1Nlc3Npb24gPSB0aGlzLnNldHRpbmdzU2VydmljZS5oYXNTZXNzaW9uKCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXJDaGFuZ2VkID0gdGhpcy5zZXR0aW5ncz8uc2Vzc2lvbj8uY29udHJvbGxlckRvbWFpbiAhPT0gcmVzdWx0cz8uc2Vzc2lvbj8uY29udHJvbGxlckRvbWFpbjtcbiAgICAgICAgaWYgKGhhc1Nlc3Npb24gJiYgKCF0aGlzLnBhZ2VMb2FkaW5nIHx8IGNvbnRyb2xsZXJDaGFuZ2VkKSkge1xuICAgICAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGFnZUh0bWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVmZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGFnZSgpO1xuICAgICAgICAgICAgdGhpcy53YWl0aW5nRm9yU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBjbG9uZURlZXAocmVzdWx0cyk7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUGFnZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICAgIGRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMud3JhcHBlclNlcnZpY2UuaW5pdFpBQ0J1dHRvbkxpc3RlbmVyKCk7XG4gICAgfSlcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wYWdlSHRtbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRQYWdlKCkge1xuICAgIHRoaXMucGFnZUh0bWwgPSBhd2FpdCB0aGlzLndyYXBwZXJTZXJ2aWNlLmxvYWRDdXJyZW50UGFnZSgpO1xuICAgIGRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMud3JhcHBlclNlcnZpY2UucmVzZXRaYWNFdmVudHMoKTtcbiAgICAgIHRoaXMuZXhlY3V0ZVBhZ2VTY3JpcHRzKCk7XG4gICAgfSk7XG4gIH1cblxuICBleGVjdXRlUGFnZVNjcmlwdHMoKSB7XG4gICAgY29uc3Qgc2NyaXB0cyA9IHRoaXMuemFjQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpO1xuICAgIGZvciAoY29uc3Qgc2NyaXB0IG9mIHNjcmlwdHMpIHtcbiAgICAgIGNvbnN0IHNjcmlwdENvcHkgPSA8SFRNTFNjcmlwdEVsZW1lbnQ+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRDb3B5LnR5cGUgPSBzY3JpcHQudHlwZSA/IHNjcmlwdC50eXBlIDogJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBpZiAoc2NyaXB0LmlubmVySFRNTCkge1xuICAgICAgICBzY3JpcHRDb3B5LmlubmVySFRNTCA9IHNjcmlwdC5pbm5lckhUTUw7XG4gICAgICB9IGVsc2UgaWYgKHNjcmlwdC5zcmMpIHtcbiAgICAgICAgc2NyaXB0Q29weS5zcmMgPSBzY3JpcHQuc3JjO1xuICAgICAgfVxuICAgICAgc2NyaXB0Q29weS5hc3luYyA9IGZhbHNlO1xuICAgICAgc2NyaXB0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHNjcmlwdENvcHksIHNjcmlwdCk7XG4gICAgfVxuICAgIGRlZmVyKCgpID0+IHtcbiAgICAgIHRyeXtcbiAgICAgICAgc2V0KHdpbmRvdywgJ2NvbnRleHQuaXRlbXMnLCBbXSk7XG4gICAgICAgIHNldCh3aW5kb3csICdjb250ZXh0LndhdGNoZXJzJywgW10pO1xuICAgICAgICBzZXQod2luZG93LCAnY29udGV4dC5ldmVudFdhdGNoZXJzJywgW10pO1xuICAgICAgICBpbnZva2Uod2luZG93LCAnYXBwLmluaXQnKTtcbiAgICAgICAgY29udGV4dC5hZGRMaXN0ZW5lcihnZXQod2luZG93LCAncGFnZS5maWx0ZXJPYmplY3QubmFtZScsICdpZGVudGl0aWVzJyksIHRoaXMud3JhcHBlclNlcnZpY2UuaW5pdFpBQ0J1dHRvbkxpc3RlbmVyKTtcbiAgICAgICAgdGhpcy53cmFwcGVyU2VydmljZS5pbml0WkFDUGVyc29uYWxTZXR0aW5ncygpO1xuICAgICAgfWNhdGNoKGVycikge1xuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ2Vycm9yIGluaXRpYWxpemluZyBwYWdlIHNjcmlwdHMnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiemFjLXdyYXBwZXItY29udGFpbmVyXCIgW2lubmVySFRNTF09XCJwYWdlSHRtbCB8IHNhZmVcIiAjemFjQ29udGFpbmVyIFtuZ0NsYXNzXT1cInsnaGlkZGVuJzogcGFnZUxvYWRpbmd9XCI+PC9kaXY+XG48IS0tIE9wZXJhdGlvbmFsIFdpemFyZCBVSSAtLT5cbjxkaXYgaWQ9XCJXaXphcmRNb2RhbFwiIGNsYXNzPVwibW9kYWwgYm94XCI+XG4gICAgPGRpdiBjbGFzcz1cImNsb3NlIGljb24tY2xvc2VcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiBkYXRhLWkxOG49XCJaaXRpV2l6YXJkXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCIgZGF0YS1pMThuPVwiV2l6YXJkU2VydmljZVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3aXphcmQgYXJlYSBvcGVuXCI+XG4gICAgICAgIDxsYWJlbCBmb3I9XCJXU2VydmljZU5hbWVcIiBkYXRhLWkxOG49XCJTZXJ2aWNlTmFtZVwiPjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBpZD1cIldTZXJ2aWNlTmFtZVwiIHR5cGU9XCJ0ZXh0XCIgbWF4bGVuZ3RoPVwiMTAwXCIgLz5cbiAgICAgICAgPGxhYmVsIGZvcj1cIldTZXJ2aWNlUm9sZXNcIj48L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+PC9kaXY+XG48L2Rpdj5cblxuXG48IS0tIEFkZCBBbnkgTW9kYWwgVUkgLS0+XG48ZGl2IGlkPVwiQWRkQW55TW9kYWxcIiBjbGFzcz1cIm1vZGFsIGJveFwiIHN0eWxlPVwiaGVpZ2h0OiBmaXQtY29udGVudDsgd2lkdGg6IDYwMHB4OyB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTtcIiBbbmdDbGFzc109XCJ7J2hpZGRlbic6IHBhZ2VMb2FkaW5nfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjbG9zZSBpY29uLWNsb3NlXCI+PC9kaXY+XG4gICAgPGRpdiBpZD1cIlNlbGVjdDFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgZGF0YS1pMThuPVwiQWRkVGl0bGVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cIlNlbGVjdG9yXCIgY2xhc3M9XCJncmlkIGR1YWxcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJJbmxpbmVBZGRJZGVudGl0eUJ1dHRvblwiIGNsYXNzPVwiaWNvbkJ1dHRvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZSBpY29uLWlkZW50aXR5XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgZGF0YS1pMThuPVwiQWRkSWRlbnRpdHlcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBpZD1cIklubGluZUFkZFNlcnZpY2VCdXR0b25cIiBjbGFzcz1cImljb25CdXR0b25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UgaWNvbi1zZXJ2aWNlc1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIGRhdGEtaTE4bj1cIkFkZFNlcnZpY2VcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJJbmxpbmVJZGVudGl0eUFyZWFcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgY2xhc3M9XCJhbnlhZGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgZGF0YS1pMThuPVwiQWRkU2ltcGxlSWRlbnRpdHlcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cIklkZW50aXR5TG9hZGVyXCIgY2xhc3M9XCJjZW50ZXJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLXJpcHBsZVwiPjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJJZGVudGl0eTFcIiBjbGFzcz1cImFueWlkXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwiSWROYW1lXCIgZGF0YS1pMThuPVwiTmFtZVwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJJZE5hbWVcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjUwXCIgZGF0YS1pMThuPVwiRW50ZXJOYW1lXCIgLz5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJJZFJvbGVzXCIgZGF0YS1pMThuPVwiUm9sZUF0dHJpYnV0ZXNcIj48L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBpZD1cIklkUm9sZXNcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiQ3JlYXRlSWRCdXR0b25cIiBjbGFzcz1cImJ1dHRvblwiIGRhdGEtaTE4bj1cIkNyZWF0ZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiSWRlbnRpdHkyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGNsYXNzPVwiYW55aWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiSWRlbnRpdHlRckNvZGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBpZD1cIklkZW50aXR5RG93bmxvYWRcIiBjbGFzcz1cImxpbmtCdXR0b25cIiBkYXRhLWkxOG49XCJEb3dubG9hZEpXVFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJEb25lSWRCdXR0b25cIiBjbGFzcz1cImJ1dHRvblwiIGRhdGEtaTE4bj1cIkRvbmVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJJbmxpbmVTZXJ2aWNlQXJlYVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBjbGFzcz1cImFueWFkZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiBkYXRhLWkxOG49XCJBZGRTaW1wbGVTZXJ2aWNlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJTU2VydmljZUxvYWRlclwiIGNsYXNzPVwiY2VudGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1yaXBwbGVcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiU2VydmljZTFcIiBjbGFzcz1cImFueXNlcnZpY2VcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJTU2VydmljZU5hbWVcIiBkYXRhLWkxOG49XCJTZXJ2aWNlTmFtZVwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgaWQ9XCJTU2VydmljZU5hbWVcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjUwXCIgZGF0YS1pMThuPVwiRW50ZXJOYW1lXCIgLz5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJXaGVyZUhvc3RlZFwiIGRhdGEtaTE4bj1cIldoZXJlSG9zdGVkXCI+PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJXaGVyZUhvc3RlZFwiPjwvZGl2PlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cIldoYXRJc0l0XCIgZGF0YS1pMThuPVwiV2hhdFNoYXJlXCI+PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NGdWxsXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cIkhvc3RlZFByb3RvY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0Y3BcIj50Y3A8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInVkcFwiPnVkcDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIkhvc3RlZEhvc3RcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIHZhbHVlPVwibG9jYWxob3N0XCIgZGF0YS1pMThuPVwiRWdIb3N0XCIgLz5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJIb3N0ZWRQb3J0XCIgdHlwZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgdmFsdWU9XCI4MFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJXaG9BY2Nlc3Nlc1wiIGRhdGEtaTE4bj1cIldob0FjY2Vzc2VzXCI+PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJXaG9BY2Nlc3Nlc1wiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBpZD1cIklzRW5jcnlwdGlvblJlcXVpcmVkXCIgY2xhc3M9XCJmb3JtaW5mb1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgY2hlY2tMYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJTaW1wbGVFbmNyeXB0aW9uUmVxdWlyZWRcIiBjbGFzcz1cInRvZ2dsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGVMYWJlbFwiIGRhdGEtaTE4bj1cIlJlcXVpcmVFbmNyeXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJIb3dUb1wiIGRhdGEtaTE4bj1cIkhvd1NoYXJlXCI+PC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFkZHJlc3NQb3J0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG93VG9cIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjEwMFwiIGRhdGEtaTE4bj1cIkVnSG9zdFwiIC8+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiSG93VG9Qb3J0XCIgdHlwZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgdmFsdWU9XCI4MFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmtCdXR0b24gY2xvc2VyXCIgZGF0YS1pMThuPVwiQ2FuY2VsXCIgc3R5bGU9XCJ3aWR0aDogZml0LWNvbnRlbnQ7XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIkNyZWF0ZUJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uXCIgZGF0YS1pMThuPVwiQ3JlYXRlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJTZXJ2aWNlMlwiIGNsYXNzPVwiYW55c2VydmljZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJTZXJ2aWNlSGFwcGVuXCIgZGF0YS1pMThuPVwiU2VydmljZUhhcHBlblwiPjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiU2VydmljZUhhcHBlblwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJEb25lU2VydmljZUJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uXCIgZGF0YS1pMThuPVwiRG9uZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBpZD1cIk9wZXJhdGlvbkNvbW1hbmRzXCIgY2xhc3M9XCJjb21tYW5kc1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiBkYXRhLWkxOG49XCJFeGVjdXRpb25PcGVyYXRpb25zXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJFeGVjdXRpb25TdGVwc1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGlkPVwiSWNvbkRvd25sb2FkXCIgY2xhc3M9XCJpY29uIGljb24tZG93bmxvYWRcIj48L2Rpdj5cbiAgICAgICAgPGxhYmVsIGRhdGEtaTE4bj1cIkNMSUNvbW1hbmRzXCI+PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0ZWRcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cIkNMSUNvbW1hbmRzXCIgdHlwZT1cInRleHRcIiByZWFkb25seS8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb3B5IGNvcHlcIiBkYXRhLWNvcHk9XCJDTElDb21tYW5kc1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGxhYmVsIGRhdGEtaTE4bj1cIkFQSUNhbGxzXCI+PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0ZWRcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZD1cIkFwaUNhbGxcIiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb3B5IGNvcHlcIiBkYXRhLWNvcHk9XCJBcGlDYWxsXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRlZFwiPlxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwiQXBpSnNvblwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb3B5IGNvcHkgc3dhcFwiIGRhdGEtY29weT1cIkFwaUpzb25cIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuPGxpYi1sb2FkaW5nLWluZGljYXRvciAqbmdJZj1cImxvYWRpbmdcIiBbaXNMb2FkaW5nXT1cImxvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj4iXX0=
@@ -0,0 +1,31 @@
1
+ export class AuthPolicy {
2
+ constructor() {
3
+ this.name = '';
4
+ this.id = '';
5
+ this.primary = {
6
+ cert: {
7
+ allowed: false,
8
+ allowExpiredCerts: false,
9
+ },
10
+ extJwt: {
11
+ allowed: false,
12
+ allowedSigners: []
13
+ },
14
+ updb: {
15
+ allowed: false,
16
+ lockoutDurationMinutes: 0,
17
+ maxAttempts: 5,
18
+ minPasswordLength: 5,
19
+ requireMixedCase: false,
20
+ requireNumberChar: false,
21
+ requireSpecialChar: false
22
+ }
23
+ };
24
+ this.secondary = {
25
+ requireTotp: false,
26
+ requireExtJwtSigner: undefined
27
+ };
28
+ this.tags = {};
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvbW9kZWxzL2F1dGgtcG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBQ0ksU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixPQUFFLEdBQVcsRUFBRSxDQUFDO1FBQ2hCLFlBQU8sR0FBUTtZQUNYLElBQUksRUFBRTtnQkFDRixPQUFPLEVBQUUsS0FBSztnQkFDZCxpQkFBaUIsRUFBRSxLQUFLO2FBQzNCO1lBQ0QsTUFBTSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxLQUFLO2dCQUNkLGNBQWMsRUFBRSxFQUFFO2FBQ3JCO1lBQ0QsSUFBSSxFQUFFO2dCQUNGLE9BQU8sRUFBRSxLQUFLO2dCQUNkLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3pCLFdBQVcsRUFBRSxDQUFDO2dCQUNkLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3BCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCLGtCQUFrQixFQUFFLEtBQUs7YUFDNUI7U0FDSixDQUFDO1FBQ0YsY0FBUyxHQUFRO1lBQ2IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsbUJBQW1CLEVBQUUsU0FBUztTQUNqQyxDQUFDO1FBQ0YsU0FBSSxHQUFRLEVBQUUsQ0FBQTtJQUNsQixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQXV0aFBvbGljeSB7XG4gICAgbmFtZTogc3RyaW5nID0gJyc7XG4gICAgaWQ6IHN0cmluZyA9ICcnO1xuICAgIHByaW1hcnk6IGFueSA9IHtcbiAgICAgICAgY2VydDoge1xuICAgICAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgICAgICBhbGxvd0V4cGlyZWRDZXJ0czogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGV4dEp3dDoge1xuICAgICAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgICAgICBhbGxvd2VkU2lnbmVyczogW11cbiAgICAgICAgfSxcbiAgICAgICAgdXBkYjoge1xuICAgICAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgICAgICBsb2Nrb3V0RHVyYXRpb25NaW51dGVzOiAwLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDUsXG4gICAgICAgICAgICBtaW5QYXNzd29yZExlbmd0aDogNSxcbiAgICAgICAgICAgIHJlcXVpcmVNaXhlZENhc2U6IGZhbHNlLFxuICAgICAgICAgICAgcmVxdWlyZU51bWJlckNoYXI6IGZhbHNlLFxuICAgICAgICAgICAgcmVxdWlyZVNwZWNpYWxDaGFyOiBmYWxzZVxuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWNvbmRhcnk6IGFueSA9IHtcbiAgICAgICAgcmVxdWlyZVRvdHA6IGZhbHNlLFxuICAgICAgICByZXF1aXJlRXh0Snd0U2lnbmVyOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHRhZ3M6IGFueSA9IHt9XG59Il19
@@ -0,0 +1,19 @@
1
+ export class JwtSigner {
2
+ constructor() {
3
+ this.name = '';
4
+ this.audience = '';
5
+ this.issuer = '';
6
+ this.clientId = '';
7
+ this.claimsProperty = '';
8
+ this.enabled = true;
9
+ this.useExternalId = false;
10
+ this.externalAuthUrl = '';
11
+ this.kid = '';
12
+ this.scopes = [];
13
+ this.jwksEndpoint = undefined;
14
+ this.certPem = undefined;
15
+ this.tags = {};
16
+ }
17
+ }
18
+ ;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXNpZ25lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9tb2RlbHMvand0LXNpZ25lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sU0FBUztJQUF0QjtRQUNJLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFDNUIsWUFBTyxHQUFZLElBQUksQ0FBQztRQUN4QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3QixRQUFHLEdBQVcsRUFBRSxDQUFDO1FBQ2pCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsaUJBQVksR0FBVyxTQUFTLENBQUM7UUFDakMsWUFBTyxHQUFXLFNBQVMsQ0FBQztRQUM1QixTQUFJLEdBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FBQTtBQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgSnd0U2lnbmVyIHtcbiAgICBuYW1lOiBzdHJpbmcgPSAnJztcbiAgICBhdWRpZW5jZTogc3RyaW5nID0gJyc7XG4gICAgaXNzdWVyOiBzdHJpbmcgPSAnJztcbiAgICBjbGllbnRJZDogc3RyaW5nID0gJyc7XG4gICAgY2xhaW1zUHJvcGVydHk6IHN0cmluZyA9ICcnO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHVzZUV4dGVybmFsSWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBleHRlcm5hbEF1dGhVcmw6IHN0cmluZyA9ICcnO1xuICAgIGtpZDogc3RyaW5nID0gJyc7XG4gICAgc2NvcGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGp3a3NFbmRwb2ludDogc3RyaW5nID0gdW5kZWZpbmVkO1xuICAgIGNlcnRQZW06IHN0cmluZyA9IHVuZGVmaW5lZDtcbiAgICB0YWdzOiBhbnkgPSB7fTtcbn07Il19
@@ -0,0 +1,115 @@
1
+ /*
2
+ Copyright NetFoundry Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ https://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+ import { Component } from '@angular/core';
17
+ import { ListPageComponent } from "../../shared/list-page-component.class";
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "./auth-policies-page.service";
20
+ import * as i2 from "../../features/data-table/data-table-filter.service";
21
+ import * as i3 from "../../services/tab-name.service";
22
+ import * as i4 from "../../services/console-events.service";
23
+ import * as i5 from "@angular/material/dialog";
24
+ import * as i6 from "../../features/list-page-features/list-page-header/list-page-header.component";
25
+ import * as i7 from "../../features/data-table/data-table.component";
26
+ class AuthPoliciesPageComponent extends ListPageComponent {
27
+ constructor(svc, filterService, tabNames, consoleEvents, dialogForm) {
28
+ super(filterService, svc, consoleEvents, dialogForm);
29
+ this.svc = svc;
30
+ this.tabNames = tabNames;
31
+ this.title = 'Auth Policies Management';
32
+ this.formDataChanged = false;
33
+ }
34
+ ngOnInit() {
35
+ this.tabs = this.tabNames.getTabs('policies');
36
+ this.svc.refreshData = this.refreshData;
37
+ super.ngOnInit();
38
+ }
39
+ headerActionClicked(action) {
40
+ switch (action) {
41
+ case 'add':
42
+ this.svc.openEditForm();
43
+ break;
44
+ case 'edit':
45
+ this.svc.openEditForm();
46
+ break;
47
+ case 'delete':
48
+ let defaultPolicy;
49
+ const selectedItems = this.rowData.filter((row) => {
50
+ if (row.id === 'default') {
51
+ defaultPolicy = row;
52
+ }
53
+ return row.selected;
54
+ });
55
+ this.svc.checkDefaultAuthPolicy(defaultPolicy).then((result) => {
56
+ if (!result) {
57
+ return;
58
+ }
59
+ const label = selectedItems.length > 1 ? 'auth policies' : 'auth policy';
60
+ this.openBulkDelete(selectedItems, label);
61
+ });
62
+ break;
63
+ default:
64
+ }
65
+ }
66
+ tableAction(event) {
67
+ switch (event?.action) {
68
+ case 'toggleAll':
69
+ case 'toggleItem':
70
+ this.itemToggled(event.item);
71
+ break;
72
+ case 'update':
73
+ this.svc.checkDefaultAuthPolicy(event.item).then((result) => {
74
+ if (!result) {
75
+ return;
76
+ }
77
+ this.svc.openEditForm(event.item?.id);
78
+ });
79
+ break;
80
+ case 'create':
81
+ this.svc.openEditForm();
82
+ break;
83
+ case 'delete':
84
+ this.svc.checkDefaultAuthPolicy(event.item).then((result) => {
85
+ if (!result) {
86
+ return;
87
+ }
88
+ this.deleteItem(event.item);
89
+ });
90
+ break;
91
+ default:
92
+ break;
93
+ }
94
+ }
95
+ deleteItem(item) {
96
+ this.openBulkDelete([item], 'auth-policy');
97
+ }
98
+ closeModal(event) {
99
+ this.svc.sideModalOpen = false;
100
+ if (event?.refresh) {
101
+ this.refreshData();
102
+ }
103
+ }
104
+ dataChanged(event) {
105
+ this.formDataChanged = event;
106
+ }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthPoliciesPageComponent, deps: [{ token: i1.AuthPoliciesPageService }, { token: i2.DataTableFilterService }, { token: i3.TabNameService }, { token: i4.ConsoleEventsService }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AuthPoliciesPageComponent, selector: "lib-auth-policies", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-configs-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'configurations'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Configurations defined, Click the plus to add a Configuration.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n", styles: [".configurations{width:100%;height:100%;display:flex;flex-direction:column;position:relative;flex:1 1 auto}\n"], dependencies: [{ kind: "component", type: i6.ListPageHeaderComponent, selector: "lib-list-page-header", inputs: ["title", "tabs", "showAdd", "hideAction"], outputs: ["actionClicked"] }, { kind: "component", type: i7.DataTableComponent, selector: "lib-data-table", inputs: ["rowData", "expandRowData", "collapseRowData", "rowValidation", "isTimeSearchAvailable", "isLoading", "tableId", "options", "validateService", "rowsToggled", "tableRefreshCount", "view", "serverSideDataSource", "allowDownload", "startCount", "endCount", "totalCount", "emptyMsg", "filterApplied", "menuItems", "headerActions", "noItemsClass", "entityTypeName", "showNoItemsAdd", "currentPage", "noItemsImage", "rowHeight", "filterName", "filterColumn", "columnDefinitions", "refreshCount"], outputs: ["actionRequested", "gridReady", "dragStart", "dragLeave", "pageChanged"] }] }); }
109
+ }
110
+ export { AuthPoliciesPageComponent };
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthPoliciesPageComponent, decorators: [{
112
+ type: Component,
113
+ args: [{ selector: 'lib-auth-policies', template: "<div class=\"ziti-page-container ziti-configs-container\">\n <lib-list-page-header [title]=\"title\"\n [tabs]=\"tabs\"\n [showAdd]=\"!itemsSelected\"\n (actionClicked)=\"headerActionClicked($event)\"></lib-list-page-header>\n\n <lib-data-table [tableId]=\"'configurations'\"\n [rowData]=\"rowData\"\n [columnDefinitions]=\"columnDefs\"\n (actionRequested)=\"tableAction($event)\"\n [startCount]=\"startCount\"\n [endCount]=\"endCount\"\n [totalCount]=\"totalCount\"\n [emptyMsg]=\"'No Configurations defined, Click the plus to add a Configuration.'\"\n [filterApplied]=\"filterApplied\"\n [menuItems]=\"svc.menuItems\"\n (gridReady)=\"gridReady($event)\"\n >\n </lib-data-table>\n</div>\n", styles: [".configurations{width:100%;height:100%;display:flex;flex-direction:column;position:relative;flex:1 1 auto}\n"] }]
114
+ }], ctorParameters: function () { return [{ type: i1.AuthPoliciesPageService }, { type: i2.DataTableFilterService }, { type: i3.TabNameService }, { type: i4.ConsoleEventsService }, { type: i5.MatDialog }]; } });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wb2xpY2llcy1wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9hdXRoLXBvbGljaWVzL2F1dGgtcG9saWNpZXMtcGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvcGFnZXMvYXV0aC1wb2xpY2llcy9hdXRoLXBvbGljaWVzLXBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUMsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBSWhELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7QUFPekUsTUFLYSx5QkFBMEIsU0FBUSxpQkFBaUI7SUFNNUQsWUFDYSxHQUE0QixFQUNyQyxhQUFxQyxFQUM3QixRQUF3QixFQUNoQyxhQUFtQyxFQUNuQyxVQUFxQjtRQUVyQixLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFONUMsUUFBRyxHQUFILEdBQUcsQ0FBeUI7UUFFN0IsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFScEMsVUFBSyxHQUFHLDBCQUEwQixDQUFBO1FBR2xDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO0lBVXhCLENBQUM7SUFFUSxRQUFRO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYztRQUM5QixRQUFRLE1BQU0sRUFBRTtZQUNaLEtBQUssS0FBSztnQkFDTixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN4QixNQUFNO1lBQ1YsS0FBSyxNQUFNO2dCQUNQLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU07WUFDVixLQUFLLFFBQVE7Z0JBQ1QsSUFBSSxhQUFhLENBQUM7Z0JBQ2xCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQzlDLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUU7d0JBQ3RCLGFBQWEsR0FBRyxHQUFHLENBQUM7cUJBQ3ZCO29CQUNELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDM0QsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPO3FCQUNWO29CQUNELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztvQkFDekUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDVixRQUFRO1NBQ1g7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDbEIsUUFBTyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2xCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssWUFBWTtnQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDNUIsTUFBTTtZQUNWLEtBQUssUUFBUTtnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPO3FCQUNWO29CQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDVixLQUFLLFFBQVE7Z0JBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsTUFBTTtZQUNWLEtBQUssUUFBUTtnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDVCxPQUFPO3FCQUNWO29CQUNELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMvQixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1Y7Z0JBQ0ksTUFBTTtTQUNiO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNmLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7K0dBN0ZRLHlCQUF5QjttR0FBekIseUJBQXlCLGdGQ2hDdEMsdThCQW9CQTs7U0RZYSx5QkFBeUI7NEZBQXpCLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0YVRhYmxlRmlsdGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtBdXRoUG9saWNpZXNQYWdlU2VydmljZX0gZnJvbSBcIi4vYXV0aC1wb2xpY2llcy1wYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7VGFiTmFtZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90YWItbmFtZS5zZXJ2aWNlXCI7XG5pbXBvcnQge0xpc3RQYWdlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vc2hhcmVkL2xpc3QtcGFnZS1jb21wb25lbnQuY2xhc3NcIjtcbmltcG9ydCB7Q29uc29sZUV2ZW50c1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jb25zb2xlLWV2ZW50cy5zZXJ2aWNlXCI7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtDb25maXJtQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbX0gZnJvbSBcInJ4anNcIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1hdXRoLXBvbGljaWVzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXV0aC1wb2xpY2llcy1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hdXRoLXBvbGljaWVzLXBhZ2UuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBdXRoUG9saWNpZXNQYWdlQ29tcG9uZW50IGV4dGVuZHMgTGlzdFBhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHRpdGxlID0gJ0F1dGggUG9saWNpZXMgTWFuYWdlbWVudCdcbiAgICB0YWJzOiB7IHVybDogc3RyaW5nLCBsYWJlbDogc3RyaW5nIH1bXSA7XG4gICAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAgIGZvcm1EYXRhQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIG92ZXJyaWRlIHN2YzogQXV0aFBvbGljaWVzUGFnZVNlcnZpY2UsXG4gICAgICAgIGZpbHRlclNlcnZpY2U6IERhdGFUYWJsZUZpbHRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdGFiTmFtZXM6IFRhYk5hbWVTZXJ2aWNlLFxuICAgICAgICBjb25zb2xlRXZlbnRzOiBDb25zb2xlRXZlbnRzU2VydmljZSxcbiAgICAgICAgZGlhbG9nRm9ybTogTWF0RGlhbG9nXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UsIHN2YywgY29uc29sZUV2ZW50cywgZGlhbG9nRm9ybSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTmFtZXMuZ2V0VGFicygncG9saWNpZXMnKTtcbiAgICAgICAgdGhpcy5zdmMucmVmcmVzaERhdGEgPSB0aGlzLnJlZnJlc2hEYXRhO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIGhlYWRlckFjdGlvbkNsaWNrZWQoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zdmMub3BlbkVkaXRGb3JtKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlZGl0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnN2Yy5vcGVuRWRpdEZvcm0oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRQb2xpY3k7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMucm93RGF0YS5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocm93LmlkID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRQb2xpY3kgPSByb3c7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnN2Yy5jaGVja0RlZmF1bHRBdXRoUG9saWN5KGRlZmF1bHRQb2xpY3kpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxID8gJ2F1dGggcG9saWNpZXMnIDogJ2F1dGggcG9saWN5JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuQnVsa0RlbGV0ZShzZWxlY3RlZEl0ZW1zLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGFibGVBY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgICAgICBzd2l0Y2goZXZlbnQ/LmFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAndG9nZ2xlQWxsJzpcbiAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZUl0ZW0nOlxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbVRvZ2dsZWQoZXZlbnQuaXRlbSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zdmMuY2hlY2tEZWZhdWx0QXV0aFBvbGljeShldmVudC5pdGVtKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN2Yy5vcGVuRWRpdEZvcm0oZXZlbnQuaXRlbT8uaWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY3JlYXRlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnN2Yy5vcGVuRWRpdEZvcm0oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zdmMuY2hlY2tEZWZhdWx0QXV0aFBvbGljeShldmVudC5pdGVtKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUl0ZW0oZXZlbnQuaXRlbSlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWxldGVJdGVtKGl0ZW06IGFueSkge1xuICAgICAgICB0aGlzLm9wZW5CdWxrRGVsZXRlKFtpdGVtXSwgJ2F1dGgtcG9saWN5Jyk7XG4gICAgfVxuXG4gICAgY2xvc2VNb2RhbChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuc3ZjLnNpZGVNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYoZXZlbnQ/LnJlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRhdGFDaGFuZ2VkKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGFDaGFuZ2VkID0gZXZlbnQ7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInppdGktcGFnZS1jb250YWluZXIgeml0aS1jb25maWdzLWNvbnRhaW5lclwiPlxuICAgIDxsaWItbGlzdC1wYWdlLWhlYWRlciBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFic109XCJ0YWJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBZGRdPVwiIWl0ZW1zU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2tlZCk9XCJoZWFkZXJBY3Rpb25DbGlja2VkKCRldmVudClcIj48L2xpYi1saXN0LXBhZ2UtaGVhZGVyPlxuXG4gICAgPGxpYi1kYXRhLXRhYmxlIFt0YWJsZUlkXT1cIidjb25maWd1cmF0aW9ucydcIlxuICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZmluaXRpb25zXT1cImNvbHVtbkRlZnNcIlxuICAgICAgICAgICAgICAgICAgICAoYWN0aW9uUmVxdWVzdGVkKT1cInRhYmxlQWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhcnRDb3VudF09XCJzdGFydENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2VuZENvdW50XT1cImVuZENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsQ291bnRdPVwidG90YWxDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgIFtlbXB0eU1zZ109XCInTm8gQ29uZmlndXJhdGlvbnMgZGVmaW5lZCwgQ2xpY2sgdGhlIHBsdXMgdG8gYWRkIGEgQ29uZmlndXJhdGlvbi4nXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlckFwcGxpZWRdPVwiZmlsdGVyQXBwbGllZFwiXG4gICAgICAgICAgICAgICAgICAgIFttZW51SXRlbXNdPVwic3ZjLm1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwiZ3JpZFJlYWR5KCRldmVudClcIlxuICAgID5cbiAgICA8L2xpYi1kYXRhLXRhYmxlPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,207 @@
1
+ /*
2
+ Copyright NetFoundry Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ https://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+ import { Inject, Injectable } from '@angular/core';
17
+ import { isEmpty, unset } from "lodash";
18
+ import { ListPageServiceClass } from "../../shared/list-page-service.class";
19
+ import { TableColumnDefaultComponent } from "../../features/data-table/column-headers/table-column-default/table-column-default.component";
20
+ import { SETTINGS_SERVICE } from "../../services/settings.service";
21
+ import { SHAREDZ_EXTENSION } from "../../features/extendable/extensions-noop.service";
22
+ import { Service } from "../../models/service";
23
+ import { TableCellNameComponent } from "../../features/data-table/cells/table-cell-name/table-cell-name.component";
24
+ import { ConfirmComponent } from "../../features/confirm/confirm.component";
25
+ import { firstValueFrom } from "rxjs";
26
+ import * as i0 from "@angular/core";
27
+ import * as i1 from "../../services/schema.service";
28
+ import * as i2 from "../../features/data-table/data-table-filter.service";
29
+ import * as i3 from "../../services/csv-download.service";
30
+ import * as i4 from "@angular/router";
31
+ import * as i5 from "@angular/material/dialog";
32
+ import * as i6 from "../../services/settings.service";
33
+ class AuthPoliciesPageService extends ListPageServiceClass {
34
+ constructor(schemaSvc, settings, filterService, csvDownloadService, extService, router, dialogForm) {
35
+ super(settings, filterService, csvDownloadService, extService, router);
36
+ this.schemaSvc = schemaSvc;
37
+ this.router = router;
38
+ this.dialogForm = dialogForm;
39
+ this.paging = this.DEFAULT_PAGING;
40
+ this.resourceType = 'auth-policies';
41
+ this.selectedConfig = {};
42
+ this.modalType = '';
43
+ this.menuItems = [
44
+ { name: 'Edit', action: 'update' },
45
+ { name: 'Delete', action: 'delete' },
46
+ ];
47
+ this.validate = (formData) => {
48
+ return Promise.resolve({ passed: true });
49
+ };
50
+ }
51
+ initTableColumns() {
52
+ const allowedHeaderComponentParams = {
53
+ filterType: 'SELECT',
54
+ enableSorting: true,
55
+ filterOptions: [
56
+ { label: 'All', value: '' },
57
+ { label: 'Allowed', value: true },
58
+ { label: 'Not Allowed', value: false },
59
+ ]
60
+ };
61
+ const createdAtHeaderComponentParams = {
62
+ filterType: 'DATETIME',
63
+ };
64
+ return [
65
+ {
66
+ colId: 'name',
67
+ field: 'name',
68
+ headerName: 'Name',
69
+ headerComponent: TableColumnDefaultComponent,
70
+ headerComponentParams: this.headerComponentParams,
71
+ cellRenderer: TableCellNameComponent,
72
+ cellRendererParams: { pathRoot: this.basePath, cellNamePreCheck: this.checkDefaultAuthPolicy.bind(this) },
73
+ onCellClicked: (data) => {
74
+ if (this.hasSelectedText()) {
75
+ return;
76
+ }
77
+ this.checkDefaultAuthPolicy(data?.data).then((result) => {
78
+ if (!result) {
79
+ return;
80
+ }
81
+ this.openEditForm(data?.data?.id);
82
+ });
83
+ },
84
+ resizable: true,
85
+ cellClass: 'nf-cell-vert-align tCol',
86
+ sortable: true,
87
+ filter: true,
88
+ sortColumn: this.sort.bind(this)
89
+ },
90
+ {
91
+ colId: 'primary.cert.allowed',
92
+ field: 'primary.cert.allowed',
93
+ headerName: 'Cert',
94
+ headerComponent: TableColumnDefaultComponent,
95
+ headerComponentParams: allowedHeaderComponentParams,
96
+ resizable: true,
97
+ cellClass: 'nf-cell-vert-align tCol',
98
+ sortable: true,
99
+ filter: true,
100
+ sortColumn: this.sort.bind(this),
101
+ },
102
+ {
103
+ colId: 'primary.extJwt.allowed',
104
+ field: 'primary.extJwt.allowed',
105
+ headerName: 'External JWT',
106
+ headerComponent: TableColumnDefaultComponent,
107
+ headerComponentParams: allowedHeaderComponentParams,
108
+ resizable: true,
109
+ cellClass: 'nf-cell-vert-align tCol',
110
+ sortable: true,
111
+ filter: true,
112
+ sortColumn: this.sort.bind(this),
113
+ },
114
+ {
115
+ colId: 'primary.updb.allowed',
116
+ field: 'primary.updb.allowed',
117
+ headerName: 'UPDB',
118
+ headerComponent: TableColumnDefaultComponent,
119
+ headerComponentParams: allowedHeaderComponentParams,
120
+ resizable: true,
121
+ cellClass: 'nf-cell-vert-align tCol',
122
+ sortable: true,
123
+ filter: true,
124
+ sortColumn: this.sort.bind(this),
125
+ },
126
+ {
127
+ colId: 'createdAt',
128
+ field: 'createdAt',
129
+ headerName: 'Created At',
130
+ headerComponent: TableColumnDefaultComponent,
131
+ headerComponentParams: createdAtHeaderComponentParams,
132
+ valueFormatter: this.createdAtFormatter,
133
+ resizable: true,
134
+ cellClass: 'nf-cell-vert-align tCol',
135
+ }
136
+ ];
137
+ }
138
+ checkDefaultAuthPolicy(authPolicy) {
139
+ if (authPolicy.id !== 'default') {
140
+ return Promise.resolve(true);
141
+ }
142
+ const confirmationMessage = `<p>WARNING: Do not change the default policy unless you're sure you know what you are doing.</p>
143
+ <p>Before changing the default policy, it's recommended that you make another policy and apply that to other users first. Then make sure you can still authenticate. </p>
144
+ <p>Do you still want to continue?</p>`;
145
+ const data = {
146
+ appendId: 'ConfirmDefaultAuthPolicy',
147
+ title: 'Are You Sure?',
148
+ message: confirmationMessage,
149
+ confirmLabel: 'Yes',
150
+ cancelLabel: 'Oops, no get me out of here',
151
+ showCancelLink: true
152
+ };
153
+ this.dialogRef = this.dialogForm.open(ConfirmComponent, {
154
+ data: data,
155
+ autoFocus: false,
156
+ });
157
+ return firstValueFrom(this.dialogRef.afterClosed());
158
+ }
159
+ getData(filters, sort) {
160
+ // we can customize filters or sorting here before moving on...
161
+ return super.getTableData(this.resourceType, this.paging, filters, sort)
162
+ .then((results) => {
163
+ return this.processData(results);
164
+ });
165
+ }
166
+ processData(results) {
167
+ if (!isEmpty(results?.data)) {
168
+ //pre-process data before rendering
169
+ results.data = this.addActionsPerRow(results);
170
+ }
171
+ return results;
172
+ }
173
+ addActionsPerRow(results) {
174
+ return results.data.map((row) => {
175
+ row.actionList = ['update', 'delete'];
176
+ return row;
177
+ });
178
+ }
179
+ openUpdate(item) {
180
+ this.modalType = 'auth-policy';
181
+ if (item) {
182
+ this.selectedConfig = item;
183
+ this.selectedConfig.badges = [];
184
+ unset(this.selectedConfig, '_links');
185
+ }
186
+ else {
187
+ this.selectedConfig = new Service();
188
+ }
189
+ this.sideModalOpen = true;
190
+ }
191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthPoliciesPageService, deps: [{ token: i1.SchemaService }, { token: SETTINGS_SERVICE }, { token: i2.DataTableFilterService }, { token: i3.CsvDownloadService }, { token: SHAREDZ_EXTENSION }, { token: i4.Router }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable }); }
192
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthPoliciesPageService, providedIn: 'root' }); }
193
+ }
194
+ export { AuthPoliciesPageService };
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthPoliciesPageService, decorators: [{
196
+ type: Injectable,
197
+ args: [{
198
+ providedIn: 'root'
199
+ }]
200
+ }], ctorParameters: function () { return [{ type: i1.SchemaService }, { type: i6.SettingsService, decorators: [{
201
+ type: Inject,
202
+ args: [SETTINGS_SERVICE]
203
+ }] }, { type: i2.DataTableFilterService }, { type: i3.CsvDownloadService }, { type: undefined, decorators: [{
204
+ type: Inject,
205
+ args: [SHAREDZ_EXTENSION]
206
+ }] }, { type: i4.Router }, { type: i5.MatDialog }]; } });
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wb2xpY2llcy1wYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvcGFnZXMvYXV0aC1wb2xpY2llcy9hdXRoLXBvbGljaWVzLXBhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQVUsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDSCwyQkFBMkIsRUFDOUIsTUFBTSw4RkFBOEYsQ0FBQztBQUd0RyxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0saUNBQWlDLENBQUM7QUFFbEYsT0FBTyxFQUFtQixpQkFBaUIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ3RHLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQztBQUVqSCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUdwQyxNQUdhLHVCQUF3QixTQUFRLG9CQUFvQjtJQWE3RCxZQUNZLFNBQXdCLEVBQ04sUUFBeUIsRUFDbkQsYUFBcUMsRUFDckMsa0JBQXNDLEVBQ1gsVUFBNEIsRUFDcEMsTUFBYyxFQUN6QixVQUFxQjtRQUU3QixLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFSL0QsY0FBUyxHQUFU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QUUsUUFBUSxDQUFDLENBQUM7WUFDdEMsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBVTtRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztRQUMvQixJQUFJLElBQUksRUFBRTtZQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQzsrR0E5S1EsdUJBQXVCLCtDQWVwQixnQkFBZ0IscUZBR2hCLGlCQUFpQjttSEFsQnBCLHVCQUF1QixjQUZwQixNQUFNOztTQUVULHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBZ0JRLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFHdkIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGFUYWJsZUZpbHRlclNlcnZpY2UsIEZpbHRlck9ian0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IF8sIHtpc0VtcHR5LCB1bnNldH0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge0xpc3RQYWdlU2VydmljZUNsYXNzfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2xpc3QtcGFnZS1zZXJ2aWNlLmNsYXNzXCI7XG5pbXBvcnQge1xuICAgIFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudFxufSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvZGF0YS10YWJsZS9jb2x1bW4taGVhZGVycy90YWJsZS1jb2x1bW4tZGVmYXVsdC90YWJsZS1jb2x1bW4tZGVmYXVsdC5jb21wb25lbnRcIjtcbmltcG9ydCB7Q2FsbGJhY2tSZXN1bHRzfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvbGlzdC1wYWdlLWZlYXR1cmVzL2xpc3QtcGFnZS1mb3JtL2xpc3QtcGFnZS1mb3JtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtTY2hlbWFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2NoZW1hLnNlcnZpY2VcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtDc3ZEb3dubG9hZFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9jc3YtZG93bmxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7U2VydmljZX0gZnJvbSBcIi4uLy4uL21vZGVscy9zZXJ2aWNlXCI7XG5pbXBvcnQge1RhYmxlQ2VsbE5hbWVDb21wb25lbnR9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9kYXRhLXRhYmxlL2NlbGxzL3RhYmxlLWNlbGwtbmFtZS90YWJsZS1jZWxsLW5hbWUuY29tcG9uZW50XCI7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtDb25maXJtQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvY29uZmlybS9jb25maXJtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbX0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFBvbGljaWVzUGFnZVNlcnZpY2UgZXh0ZW5kcyBMaXN0UGFnZVNlcnZpY2VDbGFzcyB7XG5cbiAgICBwcml2YXRlIHBhZ2luZyA9IHRoaXMuREVGQVVMVF9QQUdJTkc7XG5cbiAgICByZXNvdXJjZVR5cGUgPSAnYXV0aC1wb2xpY2llcyc7XG4gICAgc2VsZWN0ZWRDb25maWc6IGFueSA9IHt9O1xuICAgIG1vZGFsVHlwZSA9ICcnO1xuXG4gICAgb3ZlcnJpZGUgbWVudUl0ZW1zID0gW1xuICAgICAgICB7bmFtZTogJ0VkaXQnLCBhY3Rpb246ICd1cGRhdGUnfSxcbiAgICAgICAge25hbWU6ICdEZWxldGUnLCBhY3Rpb246ICdkZWxldGUnfSxcbiAgICBdXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzY2hlbWFTdmM6IFNjaGVtYVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgc2V0dGluZ3M6IFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgZmlsdGVyU2VydmljZTogRGF0YVRhYmxlRmlsdGVyU2VydmljZSxcbiAgICAgICAgY3N2RG93bmxvYWRTZXJ2aWNlOiBDc3ZEb3dubG9hZFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoU0hBUkVEWl9FWFRFTlNJT04pIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dGb3JtOiBNYXREaWFsb2dcbiAgICApIHtcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MsIGZpbHRlclNlcnZpY2UsIGNzdkRvd25sb2FkU2VydmljZSwgZXh0U2VydmljZSwgcm91dGVyKTtcbiAgICB9XG5cbiAgICBpbml0VGFibGVDb2x1bW5zKCk6IGFueSB7XG5cbiAgICAgICAgY29uc3QgYWxsb3dlZEhlYWRlckNvbXBvbmVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgIGZpbHRlclR5cGU6ICdTRUxFQ1QnLFxuICAgICAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGZpbHRlck9wdGlvbnM6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnQWxsJywgdmFsdWU6ICcnIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0FsbG93ZWQnLCB2YWx1ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdOb3QgQWxsb3dlZCcsIHZhbHVlOiBmYWxzZSB9LFxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjcmVhdGVkQXRIZWFkZXJDb21wb25lbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICBmaWx0ZXJUeXBlOiAnREFURVRJTUUnLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnTmFtZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zOiB0aGlzLmhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IFRhYmxlQ2VsbE5hbWVDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IHBhdGhSb290OiB0aGlzLmJhc2VQYXRoLCBjZWxsTmFtZVByZUNoZWNrOiB0aGlzLmNoZWNrRGVmYXVsdEF1dGhQb2xpY3kuYmluZCh0aGlzKSB9LFxuICAgICAgICAgICAgICAgIG9uQ2VsbENsaWNrZWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkVGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0RlZmF1bHRBdXRoUG9saWN5KGRhdGE/LmRhdGEpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FZGl0Rm9ybShkYXRhPy5kYXRhPy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgc29ydENvbHVtbjogdGhpcy5zb3J0LmJpbmQodGhpcylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdwcmltYXJ5LmNlcnQuYWxsb3dlZCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwcmltYXJ5LmNlcnQuYWxsb3dlZCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ0NlcnQnLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtczogYWxsb3dlZEhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLnNvcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdwcmltYXJ5LmV4dEp3dC5hbGxvd2VkJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3ByaW1hcnkuZXh0Snd0LmFsbG93ZWQnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdFeHRlcm5hbCBKV1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtczogYWxsb3dlZEhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLnNvcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdwcmltYXJ5LnVwZGIuYWxsb3dlZCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwcmltYXJ5LnVwZGIuYWxsb3dlZCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ1VQREInLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtczogYWxsb3dlZEhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLnNvcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3JlYXRlZEF0JyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnQ3JlYXRlZCBBdCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zOiBjcmVhdGVkQXRIZWFkZXJDb21wb25lbnRQYXJhbXMsXG4gICAgICAgICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3JlYXRlZEF0Rm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgY2hlY2tEZWZhdWx0QXV0aFBvbGljeShhdXRoUG9saWN5KSB7XG4gICAgICAgIGlmIChhdXRoUG9saWN5LmlkICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlybWF0aW9uTWVzc2FnZSA9XG4gICAgICAgICAgICBgPHA+V0FSTklORzogRG8gbm90IGNoYW5nZSB0aGUgZGVmYXVsdCBwb2xpY3kgdW5sZXNzIHlvdSdyZSBzdXJlIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L3A+XG4gICAgICAgICAgICAgPHA+QmVmb3JlIGNoYW5naW5nIHRoZSBkZWZhdWx0IHBvbGljeSwgaXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBtYWtlIGFub3RoZXIgcG9saWN5IGFuZCBhcHBseSB0aGF0IHRvIG90aGVyIHVzZXJzIGZpcnN0LiBUaGVuIG1ha2Ugc3VyZSB5b3UgY2FuIHN0aWxsIGF1dGhlbnRpY2F0ZS4gPC9wPlxuICAgICAgICAgICAgIDxwPkRvIHlvdSBzdGlsbCB3YW50IHRvIGNvbnRpbnVlPzwvcD5gO1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgYXBwZW5kSWQ6ICdDb25maXJtRGVmYXVsdEF1dGhQb2xpY3knLFxuICAgICAgICAgICAgdGl0bGU6ICdBcmUgWW91IFN1cmU/JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGNvbmZpcm1hdGlvbk1lc3NhZ2UsXG4gICAgICAgICAgICBjb25maXJtTGFiZWw6ICdZZXMnLFxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6ICdPb3BzLCBubyBnZXQgbWUgb3V0IG9mIGhlcmUnLFxuICAgICAgICAgICAgc2hvd0NhbmNlbExpbms6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ0Zvcm0ub3BlbihDb25maXJtQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKTtcbiAgICB9XG5cbiAgICBnZXREYXRhKGZpbHRlcnM/OiBGaWx0ZXJPYmpbXSwgc29ydD86IGFueSkge1xuICAgICAgICAvLyB3ZSBjYW4gY3VzdG9taXplIGZpbHRlcnMgb3Igc29ydGluZyBoZXJlIGJlZm9yZSBtb3Zpbmcgb24uLi5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFRhYmxlRGF0YSh0aGlzLnJlc291cmNlVHlwZSwgdGhpcy5wYWdpbmcsIGZpbHRlcnMsIHNvcnQpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSA9IChmb3JtRGF0YSk6IFByb21pc2U8Q2FsbGJhY2tSZXN1bHRzPiA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBwYXNzZWQ6IHRydWV9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NEYXRhKHJlc3VsdHM6IGFueSkge1xuICAgICAgICBpZiAoIWlzRW1wdHkocmVzdWx0cz8uZGF0YSkpIHtcbiAgICAgICAgICAgIC8vcHJlLXByb2Nlc3MgZGF0YSBiZWZvcmUgcmVuZGVyaW5nXG4gICAgICAgICAgICByZXN1bHRzLmRhdGEgPSB0aGlzLmFkZEFjdGlvbnNQZXJSb3cocmVzdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRBY3Rpb25zUGVyUm93KHJlc3VsdHM6IGFueSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgcm93LmFjdGlvbkxpc3QgPSBbJ3VwZGF0ZScsICdkZWxldGUnXTtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuVXBkYXRlKGl0ZW0/OiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RhbFR5cGUgPSAnYXV0aC1wb2xpY3knO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZyA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnLmJhZGdlcyA9IFtdO1xuICAgICAgICAgICAgdW5zZXQodGhpcy5zZWxlY3RlZENvbmZpZywgJ19saW5rcycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZyA9IG5ldyBTZXJ2aWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaWRlTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB9XG59XG4iXX0=