@openziti/ziti-console-lib 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/styles/global.scss +70 -0
- package/fesm2022/openziti-ziti-console-lib.mjs +2136 -1327
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/index.d.ts +5689 -6
- package/index.d.ts.map +1 -0
- package/package.json +10 -12
- package/esm2022/lib/ZAC_VERSION.mjs +0 -4
- package/esm2022/lib/app.initializer.mjs +0 -24
- package/esm2022/lib/default-app-config.mjs +0 -5
- package/esm2022/lib/features/card/card.component.mjs +0 -34
- package/esm2022/lib/features/card-list/card-list.component.mjs +0 -55
- package/esm2022/lib/features/config-editor/config-editor.component.mjs +0 -337
- package/esm2022/lib/features/confirm/confirm.component.mjs +0 -77
- package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +0 -93
- package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +0 -111
- package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +0 -46
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +0 -49
- package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +0 -58
- package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +0 -123
- package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +0 -268
- package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +0 -93
- package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +0 -37
- package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +0 -33
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +0 -138
- package/esm2022/lib/features/data-table/data-table.component.mjs +0 -918
- package/esm2022/lib/features/data-table/data-table.service.mjs +0 -98
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +0 -108
- package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +0 -26
- package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +0 -29
- package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +0 -34
- package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +0 -72
- package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +0 -134
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +0 -189
- package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +0 -50
- package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +0 -95
- package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +0 -121
- package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +0 -83
- package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +0 -100
- package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +0 -201
- package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +0 -166
- package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +0 -108
- package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +0 -126
- package/esm2022/lib/features/extendable/extendable.component.mjs +0 -55
- package/esm2022/lib/features/extendable/extensions-noop.service.mjs +0 -52
- package/esm2022/lib/features/header-bar/header-bar.component.mjs +0 -105
- package/esm2022/lib/features/json-view/json-view.component.mjs +0 -212
- package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +0 -138
- package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +0 -66
- package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +0 -29
- package/esm2022/lib/features/login/login-dialog.component.mjs +0 -121
- package/esm2022/lib/features/messaging/growler.component.mjs +0 -62
- package/esm2022/lib/features/messaging/growler.model.mjs +0 -24
- package/esm2022/lib/features/messaging/growler.module.mjs +0 -34
- package/esm2022/lib/features/messaging/growler.service.mjs +0 -71
- package/esm2022/lib/features/messaging/logger.service.mjs +0 -174
- package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +0 -30
- package/esm2022/lib/features/no-items/no-items.component.mjs +0 -46
- package/esm2022/lib/features/overrides/overrides.component.mjs +0 -118
- package/esm2022/lib/features/overrides/overrides.service.mjs +0 -114
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +0 -151
- package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +0 -114
- package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +0 -43
- package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +0 -90
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.component.mjs +0 -143
- package/esm2022/lib/features/projectable-forms/api-session/api-session-form.service.mjs +0 -118
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +0 -337
- package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +0 -114
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +0 -399
- package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +0 -95
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +0 -217
- package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +0 -54
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +0 -244
- package/esm2022/lib/features/projectable-forms/config-type/config-type-form.service.mjs +0 -92
- package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +0 -275
- package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +0 -137
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +0 -231
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +0 -118
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +0 -277
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +0 -188
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +0 -101
- package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +0 -54
- package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +0 -135
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +0 -471
- package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +0 -131
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +0 -533
- package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +0 -79
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +0 -437
- package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.service.mjs +0 -81
- package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +0 -315
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +0 -330
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +0 -591
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +0 -1036
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +0 -275
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +0 -172
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +0 -279
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +0 -230
- package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +0 -213
- package/esm2022/lib/features/projectable-forms/session/session-form.service.mjs +0 -84
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +0 -244
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +0 -130
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +0 -224
- package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +0 -118
- package/esm2022/lib/features/qr-code/qr-code.component.mjs +0 -166
- package/esm2022/lib/features/quick-add/quick-add.component.mjs +0 -50
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +0 -86
- package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +0 -61
- package/esm2022/lib/features/side-modal/side-modal.component.mjs +0 -45
- package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +0 -127
- package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +0 -54
- package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +0 -291
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +0 -586
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +0 -373
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +0 -1706
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +0 -591
- package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +0 -883
- package/esm2022/lib/features/visualizer/visualizer-service.class.mjs +0 -32
- package/esm2022/lib/models/api-session.mjs +0 -7
- package/esm2022/lib/models/auth-policy.mjs +0 -31
- package/esm2022/lib/models/certificate-authority.mjs +0 -16
- package/esm2022/lib/models/config-type.mjs +0 -10
- package/esm2022/lib/models/config.mjs +0 -10
- package/esm2022/lib/models/edge-router-policy.mjs +0 -11
- package/esm2022/lib/models/edge-router.mjs +0 -13
- package/esm2022/lib/models/identity.mjs +0 -34
- package/esm2022/lib/models/jwt-signer.mjs +0 -20
- package/esm2022/lib/models/posture-check.mjs +0 -29
- package/esm2022/lib/models/service-edge-router-policy.mjs +0 -11
- package/esm2022/lib/models/service-policy.mjs +0 -13
- package/esm2022/lib/models/service.mjs +0 -12
- package/esm2022/lib/models/session.mjs +0 -7
- package/esm2022/lib/models/terminator.mjs +0 -14
- package/esm2022/lib/pages/api-sessions/api-sessions-page.component.mjs +0 -112
- package/esm2022/lib/pages/api-sessions/api-sessions-page.service.mjs +0 -235
- package/esm2022/lib/pages/attributes/attributes.component.mjs +0 -104
- package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +0 -120
- package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +0 -215
- package/esm2022/lib/pages/callback/callback.component.mjs +0 -155
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +0 -119
- package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +0 -240
- package/esm2022/lib/pages/config-types/config-types-page.component.mjs +0 -130
- package/esm2022/lib/pages/config-types/config-types-page.service.mjs +0 -134
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +0 -134
- package/esm2022/lib/pages/configurations/configurations-page.service.mjs +0 -251
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +0 -128
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +0 -407
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +0 -136
- package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +0 -354
- package/esm2022/lib/pages/geolocate/geolocate.component.mjs +0 -130
- package/esm2022/lib/pages/identities/identities-page.component.mjs +0 -221
- package/esm2022/lib/pages/identities/identities-page.service.mjs +0 -591
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +0 -160
- package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +0 -177
- package/esm2022/lib/pages/posture-checks/posture-checks-page.component.mjs +0 -103
- package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +0 -200
- package/esm2022/lib/pages/profile/profile.component.mjs +0 -58
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +0 -122
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +0 -367
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +0 -124
- package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +0 -446
- package/esm2022/lib/pages/services/services-page.component.mjs +0 -218
- package/esm2022/lib/pages/services/services-page.service.mjs +0 -378
- package/esm2022/lib/pages/sessions/sessions-page.component.mjs +0 -112
- package/esm2022/lib/pages/sessions/sessions-page.service.mjs +0 -228
- package/esm2022/lib/pages/settings/settings.component.mjs +0 -61
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +0 -97
- package/esm2022/lib/pages/terminators/terminators-page.service.mjs +0 -235
- package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +0 -129
- package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +0 -248
- package/esm2022/lib/safe.pipe.mjs +0 -18
- package/esm2022/lib/services/auth.service.mjs +0 -94
- package/esm2022/lib/services/console-events.service.mjs +0 -20
- package/esm2022/lib/services/csv-download.service.mjs +0 -91
- package/esm2022/lib/services/deactivate-guard.service.mjs +0 -17
- package/esm2022/lib/services/login-service.class.mjs +0 -47
- package/esm2022/lib/services/node-data.service.mjs +0 -397
- package/esm2022/lib/services/noop-login.service.mjs +0 -41
- package/esm2022/lib/services/schema.service.mjs +0 -807
- package/esm2022/lib/services/settings-service.class.mjs +0 -120
- package/esm2022/lib/services/settings.service.mjs +0 -203
- package/esm2022/lib/services/tab-name.service.mjs +0 -76
- package/esm2022/lib/services/validation.service.mjs +0 -156
- package/esm2022/lib/services/ziti-controller-data.service.mjs +0 -340
- package/esm2022/lib/services/ziti-data.service.mjs +0 -100
- package/esm2022/lib/services/ziti-domain-controller.service.mjs +0 -3
- package/esm2022/lib/shared/list-page-component.class.mjs +0 -186
- package/esm2022/lib/shared/list-page-service.class.mjs +0 -244
- package/esm2022/lib/urls.mjs +0 -34
- package/esm2022/lib/zac-routing.module.mjs +0 -34
- package/esm2022/lib/ziti-console-lib.module.mjs +0 -538
- package/esm2022/lib/ziti-console.constants.mjs +0 -20
- package/esm2022/openziti-ziti-console-lib.mjs +0 -5
- package/esm2022/public-api.mjs +0 -130
- package/lib/ZAC_VERSION.d.ts +0 -4
- package/lib/ZAC_VERSION.d.ts.map +0 -1
- package/lib/app.initializer.d.ts +0 -3
- package/lib/app.initializer.d.ts.map +0 -1
- package/lib/default-app-config.d.ts +0 -9
- package/lib/default-app-config.d.ts.map +0 -1
- package/lib/features/card/card.component.d.ts +0 -13
- package/lib/features/card/card.component.d.ts.map +0 -1
- package/lib/features/card-list/card-list.component.d.ts +0 -27
- package/lib/features/card-list/card-list.component.d.ts.map +0 -1
- package/lib/features/config-editor/config-editor.component.d.ts +0 -50
- package/lib/features/config-editor/config-editor.component.d.ts.map +0 -1
- package/lib/features/confirm/confirm.component.d.ts +0 -34
- package/lib/features/confirm/confirm.component.d.ts.map +0 -1
- package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts +0 -32
- package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts.map +0 -1
- package/lib/features/custom-tags/custom-tags.component.d.ts +0 -37
- package/lib/features/custom-tags/custom-tags.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts +0 -16
- package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts +0 -20
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +0 -15
- package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +0 -1
- package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts +0 -22
- package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts +0 -52
- package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts +0 -27
- package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts +0 -19
- package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts.map +0 -1
- package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts +0 -15
- package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts.map +0 -1
- package/lib/features/data-table/data-table-filter.service.d.ts +0 -37
- package/lib/features/data-table/data-table-filter.service.d.ts.map +0 -1
- package/lib/features/data-table/data-table.component.d.ts +0 -164
- package/lib/features/data-table/data-table.component.d.ts.map +0 -1
- package/lib/features/data-table/data-table.service.d.ts +0 -20
- package/lib/features/data-table/data-table.service.d.ts.map +0 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +0 -25
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +0 -1
- package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts +0 -10
- package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts.map +0 -1
- package/lib/features/data-table/tooltips/os-tooltip.component.d.ts +0 -15
- package/lib/features/data-table/tooltips/os-tooltip.component.d.ts.map +0 -1
- package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts +0 -15
- package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts +0 -19
- package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts +0 -28
- package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts +0 -50
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts +0 -14
- package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts +0 -23
- package/lib/features/dynamic-widgets/number/number-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/object/object.component.d.ts +0 -26
- package/lib/features/dynamic-widgets/object/object.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts +0 -24
- package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts +0 -22
- package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts +0 -60
- package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts +0 -30
- package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts +0 -27
- package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +0 -1
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts +0 -26
- package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +0 -1
- package/lib/features/extendable/extendable.component.d.ts +0 -15
- package/lib/features/extendable/extendable.component.d.ts.map +0 -1
- package/lib/features/extendable/extensions-noop.service.d.ts +0 -35
- package/lib/features/extendable/extensions-noop.service.d.ts.map +0 -1
- package/lib/features/header-bar/header-bar.component.d.ts +0 -29
- package/lib/features/header-bar/header-bar.component.d.ts.map +0 -1
- package/lib/features/json-view/json-view.component.d.ts +0 -40
- package/lib/features/json-view/json-view.component.d.ts.map +0 -1
- package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts +0 -35
- package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts.map +0 -1
- package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts +0 -14
- package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts.map +0 -1
- package/lib/features/loading-indicator/loading-indicator.component.d.ts +0 -11
- package/lib/features/loading-indicator/loading-indicator.component.d.ts.map +0 -1
- package/lib/features/login/login-dialog.component.d.ts +0 -30
- package/lib/features/login/login-dialog.component.d.ts.map +0 -1
- package/lib/features/messaging/growler.component.d.ts +0 -19
- package/lib/features/messaging/growler.component.d.ts.map +0 -1
- package/lib/features/messaging/growler.model.d.ts +0 -8
- package/lib/features/messaging/growler.model.d.ts.map +0 -1
- package/lib/features/messaging/growler.module.d.ts +0 -10
- package/lib/features/messaging/growler.module.d.ts.map +0 -1
- package/lib/features/messaging/growler.service.d.ts +0 -18
- package/lib/features/messaging/growler.service.d.ts.map +0 -1
- package/lib/features/messaging/logger.service.d.ts +0 -27
- package/lib/features/messaging/logger.service.d.ts.map +0 -1
- package/lib/features/multi-action-button/multi-action-button.component.d.ts +0 -13
- package/lib/features/multi-action-button/multi-action-button.component.d.ts.map +0 -1
- package/lib/features/no-items/no-items.component.d.ts +0 -19
- package/lib/features/no-items/no-items.component.d.ts.map +0 -1
- package/lib/features/overrides/overrides.component.d.ts +0 -33
- package/lib/features/overrides/overrides.component.d.ts.map +0 -1
- package/lib/features/overrides/overrides.service.d.ts +0 -18
- package/lib/features/overrides/overrides.service.d.ts.map +0 -1
- package/lib/features/preview-list/preview-list.component.d.ts +0 -34
- package/lib/features/preview-list/preview-list.component.d.ts.map +0 -1
- package/lib/features/preview-selections/preview-selections.component.d.ts +0 -39
- package/lib/features/preview-selections/preview-selections.component.d.ts.map +0 -1
- package/lib/features/progress-meter/progress-meter.component.d.ts +0 -19
- package/lib/features/progress-meter/progress-meter.component.d.ts.map +0 -1
- package/lib/features/progress-wizard/progress-wizard.component.d.ts +0 -31
- package/lib/features/progress-wizard/progress-wizard.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts +0 -50
- package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/api-session/api-session-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +0 -74
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts +0 -38
- package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +0 -80
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +0 -37
- package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +0 -62
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +0 -28
- package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts +0 -63
- package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/config-type/config-type-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +0 -62
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/configuration/configuration.service.d.ts +0 -33
- package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +0 -53
- package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts +0 -29
- package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +0 -54
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts +0 -40
- package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +0 -29
- package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts +0 -15
- package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts +0 -38
- package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts +0 -93
- package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/identity/identity-form.service.d.ts +0 -20
- package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +0 -97
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts +0 -21
- package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts +0 -134
- package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts +0 -23
- package/lib/features/projectable-forms/posture-check/posture-check-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/projectable-form.class.d.ts +0 -92
- package/lib/features/projectable-forms/projectable-form.class.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +0 -70
- package/lib/features/projectable-forms/service/service-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +0 -123
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +0 -173
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +0 -53
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts +0 -38
- package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +0 -55
- package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +0 -48
- package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/session/session-form.component.d.ts +0 -63
- package/lib/features/projectable-forms/session/session-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/session/session-form.service.d.ts +0 -23
- package/lib/features/projectable-forms/session/session-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +0 -58
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts +0 -33
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts.map +0 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +0 -50
- package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +0 -1
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts +0 -27
- package/lib/features/projectable-forms/transit-router/transit-router-form.service.d.ts.map +0 -1
- package/lib/features/qr-code/qr-code.component.d.ts +0 -45
- package/lib/features/qr-code/qr-code.component.d.ts.map +0 -1
- package/lib/features/quick-add/quick-add.component.d.ts +0 -15
- package/lib/features/quick-add/quick-add.component.d.ts.map +0 -1
- package/lib/features/reset-enrollment/reset-enrollment.component.d.ts +0 -27
- package/lib/features/reset-enrollment/reset-enrollment.component.d.ts.map +0 -1
- package/lib/features/reset-enrollment/reset-enrollment.service.d.ts +0 -13
- package/lib/features/reset-enrollment/reset-enrollment.service.d.ts.map +0 -1
- package/lib/features/side-modal/side-modal.component.d.ts +0 -15
- package/lib/features/side-modal/side-modal.component.d.ts.map +0 -1
- package/lib/features/side-navigator/side-navigator.component.d.ts +0 -33
- package/lib/features/side-navigator/side-navigator.component.d.ts.map +0 -1
- package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts +0 -16
- package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts.map +0 -1
- package/lib/features/tag-selector/tag-selector.component.d.ts +0 -59
- package/lib/features/tag-selector/tag-selector.component.d.ts.map +0 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts +0 -54
- package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts.map +0 -1
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts +0 -21
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +0 -146
- package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts +0 -172
- package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +0 -1
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts +0 -35
- package/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.d.ts.map +0 -1
- package/lib/features/visualizer/visualizer-service.class.d.ts +0 -10
- package/lib/features/visualizer/visualizer-service.class.d.ts.map +0 -1
- package/lib/models/api-session.d.ts +0 -18
- package/lib/models/api-session.d.ts.map +0 -1
- package/lib/models/auth-policy.d.ts +0 -8
- package/lib/models/auth-policy.d.ts.map +0 -1
- package/lib/models/certificate-authority.d.ts +0 -14
- package/lib/models/certificate-authority.d.ts.map +0 -1
- package/lib/models/config-type.d.ts +0 -7
- package/lib/models/config-type.d.ts.map +0 -1
- package/lib/models/config.d.ts +0 -7
- package/lib/models/config.d.ts.map +0 -1
- package/lib/models/edge-router-policy.d.ts +0 -8
- package/lib/models/edge-router-policy.d.ts.map +0 -1
- package/lib/models/edge-router.d.ts +0 -10
- package/lib/models/edge-router.d.ts.map +0 -1
- package/lib/models/identity.d.ts +0 -16
- package/lib/models/identity.d.ts.map +0 -1
- package/lib/models/jwt-signer.d.ts +0 -17
- package/lib/models/jwt-signer.d.ts.map +0 -1
- package/lib/models/posture-check.d.ts +0 -17
- package/lib/models/posture-check.d.ts.map +0 -1
- package/lib/models/service-edge-router-policy.d.ts +0 -8
- package/lib/models/service-edge-router-policy.d.ts.map +0 -1
- package/lib/models/service-policy.d.ts +0 -10
- package/lib/models/service-policy.d.ts.map +0 -1
- package/lib/models/service.d.ts +0 -9
- package/lib/models/service.d.ts.map +0 -1
- package/lib/models/session.d.ts +0 -17
- package/lib/models/session.d.ts.map +0 -1
- package/lib/models/terminator.d.ts +0 -11
- package/lib/models/terminator.d.ts.map +0 -1
- package/lib/pages/api-sessions/api-sessions-page.component.d.ts +0 -30
- package/lib/pages/api-sessions/api-sessions-page.component.d.ts.map +0 -1
- package/lib/pages/api-sessions/api-sessions-page.service.d.ts +0 -31
- package/lib/pages/api-sessions/api-sessions-page.service.d.ts.map +0 -1
- package/lib/pages/attributes/attributes.component.d.ts +0 -31
- package/lib/pages/attributes/attributes.component.d.ts.map +0 -1
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts +0 -29
- package/lib/pages/auth-policies/auth-policies-page.component.d.ts.map +0 -1
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts +0 -34
- package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +0 -1
- package/lib/pages/callback/callback.component.d.ts +0 -22
- package/lib/pages/callback/callback.component.d.ts.map +0 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +0 -30
- package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +0 -1
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +0 -35
- package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +0 -1
- package/lib/pages/config-types/config-types-page.component.d.ts +0 -31
- package/lib/pages/config-types/config-types-page.component.d.ts.map +0 -1
- package/lib/pages/config-types/config-types-page.service.d.ts +0 -29
- package/lib/pages/config-types/config-types-page.service.d.ts.map +0 -1
- package/lib/pages/configurations/configurations-page.component.d.ts +0 -30
- package/lib/pages/configurations/configurations-page.component.d.ts.map +0 -1
- package/lib/pages/configurations/configurations-page.service.d.ts +0 -80
- package/lib/pages/configurations/configurations-page.service.d.ts.map +0 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts +0 -33
- package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +0 -1
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts +0 -63
- package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +0 -1
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts +0 -36
- package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +0 -1
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts +0 -51
- package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +0 -1
- package/lib/pages/geolocate/geolocate.component.d.ts +0 -32
- package/lib/pages/geolocate/geolocate.component.d.ts.map +0 -1
- package/lib/pages/identities/identities-page.component.d.ts +0 -40
- package/lib/pages/identities/identities-page.component.d.ts.map +0 -1
- package/lib/pages/identities/identities-page.service.d.ts +0 -64
- package/lib/pages/identities/identities-page.service.d.ts.map +0 -1
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts +0 -34
- package/lib/pages/jwt-signers/jwt-signers-page.component.d.ts.map +0 -1
- package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts +0 -31
- package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +0 -1
- package/lib/pages/posture-checks/posture-checks-page.component.d.ts +0 -29
- package/lib/pages/posture-checks/posture-checks-page.component.d.ts.map +0 -1
- package/lib/pages/posture-checks/posture-checks-page.service.d.ts +0 -28
- package/lib/pages/posture-checks/posture-checks-page.service.d.ts.map +0 -1
- package/lib/pages/profile/profile.component.d.ts +0 -17
- package/lib/pages/profile/profile.component.d.ts.map +0 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +0 -33
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +0 -1
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts +0 -57
- package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +0 -1
- package/lib/pages/service-policies/service-policies-page.component.d.ts +0 -34
- package/lib/pages/service-policies/service-policies-page.component.d.ts.map +0 -1
- package/lib/pages/service-policies/service-policies-page.service.d.ts +0 -63
- package/lib/pages/service-policies/service-policies-page.service.d.ts.map +0 -1
- package/lib/pages/services/services-page.component.d.ts +0 -42
- package/lib/pages/services/services-page.component.d.ts.map +0 -1
- package/lib/pages/services/services-page.service.d.ts +0 -69
- package/lib/pages/services/services-page.service.d.ts.map +0 -1
- package/lib/pages/sessions/sessions-page.component.d.ts +0 -30
- package/lib/pages/sessions/sessions-page.component.d.ts.map +0 -1
- package/lib/pages/sessions/sessions-page.service.d.ts +0 -30
- package/lib/pages/sessions/sessions-page.service.d.ts.map +0 -1
- package/lib/pages/settings/settings.component.d.ts +0 -23
- package/lib/pages/settings/settings.component.d.ts.map +0 -1
- package/lib/pages/terminators/terminators-page.component.d.ts +0 -29
- package/lib/pages/terminators/terminators-page.component.d.ts.map +0 -1
- package/lib/pages/terminators/terminators-page.service.d.ts +0 -32
- package/lib/pages/terminators/terminators-page.service.d.ts.map +0 -1
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts +0 -35
- package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +0 -1
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts +0 -50
- package/lib/pages/transit-routers/transit-routers-page.service.d.ts.map +0 -1
- package/lib/safe.pipe.d.ts +0 -11
- package/lib/safe.pipe.d.ts.map +0 -1
- package/lib/services/auth.service.d.ts +0 -21
- package/lib/services/auth.service.d.ts.map +0 -1
- package/lib/services/console-events.service.d.ts +0 -12
- package/lib/services/console-events.service.d.ts.map +0 -1
- package/lib/services/csv-download.service.d.ts +0 -11
- package/lib/services/csv-download.service.d.ts.map +0 -1
- package/lib/services/deactivate-guard.service.d.ts +0 -14
- package/lib/services/deactivate-guard.service.d.ts.map +0 -1
- package/lib/services/login-service.class.d.ts +0 -30
- package/lib/services/login-service.class.d.ts.map +0 -1
- package/lib/services/node-data.service.d.ts +0 -38
- package/lib/services/node-data.service.d.ts.map +0 -1
- package/lib/services/noop-login.service.d.ts +0 -22
- package/lib/services/noop-login.service.d.ts.map +0 -1
- package/lib/services/schema.service.d.ts +0 -63
- package/lib/services/schema.service.d.ts.map +0 -1
- package/lib/services/settings-service.class.d.ts +0 -36
- package/lib/services/settings-service.class.d.ts.map +0 -1
- package/lib/services/settings.service.d.ts +0 -20
- package/lib/services/settings.service.d.ts.map +0 -1
- package/lib/services/tab-name.service.d.ts +0 -20
- package/lib/services/tab-name.service.d.ts.map +0 -1
- package/lib/services/validation.service.d.ts +0 -20
- package/lib/services/validation.service.d.ts.map +0 -1
- package/lib/services/ziti-controller-data.service.d.ts +0 -36
- package/lib/services/ziti-controller-data.service.d.ts.map +0 -1
- package/lib/services/ziti-data.service.d.ts +0 -49
- package/lib/services/ziti-data.service.d.ts.map +0 -1
- package/lib/services/ziti-domain-controller.service.d.ts +0 -13
- package/lib/services/ziti-domain-controller.service.d.ts.map +0 -1
- package/lib/shared/list-page-component.class.d.ts +0 -57
- package/lib/shared/list-page-component.class.d.ts.map +0 -1
- package/lib/shared/list-page-service.class.d.ts +0 -81
- package/lib/shared/list-page-service.class.d.ts.map +0 -1
- package/lib/urls.d.ts +0 -34
- package/lib/urls.d.ts.map +0 -1
- package/lib/zac-routing.module.d.ts +0 -8
- package/lib/zac-routing.module.d.ts.map +0 -1
- package/lib/ziti-console-lib.module.d.ts +0 -121
- package/lib/ziti-console-lib.module.d.ts.map +0 -1
- package/lib/ziti-console.constants.d.ts +0 -5
- package/lib/ziti-console.constants.d.ts.map +0 -1
- package/openziti-ziti-console-lib.d.ts.map +0 -1
- package/public-api.d.ts +0 -127
- package/public-api.d.ts.map +0 -1
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Output, Inject } from '@angular/core';
|
|
2
|
-
import { ProjectableForm } from "../projectable-form.class";
|
|
3
|
-
import { SETTINGS_SERVICE } from "../../../services/settings.service";
|
|
4
|
-
import { isEmpty, cloneDeep, invert } from 'lodash';
|
|
5
|
-
import { ZITI_DATA_SERVICE } from "../../../services/ziti-data.service";
|
|
6
|
-
import { EDGE_ROUTER_POLICY_EXTENSION_SERVICE } from './edge-router-policy-form.service';
|
|
7
|
-
import { MatDialogRef } from "@angular/material/dialog";
|
|
8
|
-
import { GrowlerModel } from "../../messaging/growler.model";
|
|
9
|
-
import { EdgeRouterPolicy } from "../../../models/edge-router-policy";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "./edge-router-policy-form.service";
|
|
12
|
-
import * as i2 from "../../messaging/growler.service";
|
|
13
|
-
import * as i3 from "@angular/router";
|
|
14
|
-
import * as i4 from "@angular/common";
|
|
15
|
-
import * as i5 from "@angular/forms";
|
|
16
|
-
import * as i6 from "../form-header/form-header.component";
|
|
17
|
-
import * as i7 from "../form-field-container/form-field-container.component";
|
|
18
|
-
import * as i8 from "../../preview-list/preview-list.component";
|
|
19
|
-
import * as i9 from "../../loading-indicator/loading-indicator.component";
|
|
20
|
-
import * as i10 from "../form-field-toggle/form-field-toggle.component";
|
|
21
|
-
import * as i11 from "../../json-view/json-view.component";
|
|
22
|
-
import * as i12 from "../../tag-selector/tag-selector.component";
|
|
23
|
-
import * as i13 from "../../custom-tags/custom-tags.component";
|
|
24
|
-
import * as i14 from "../../../services/settings.service";
|
|
25
|
-
import * as i15 from "../../../services/ziti-data.service";
|
|
26
|
-
export class EdgeRouterPolicyFormComponent extends ProjectableForm {
|
|
27
|
-
constructor(settingsService, svc, zitiService, growlerService, extService, router, route, location) {
|
|
28
|
-
super(growlerService, extService, zitiService, router, route, location, settingsService);
|
|
29
|
-
this.settingsService = settingsService;
|
|
30
|
-
this.svc = svc;
|
|
31
|
-
this.zitiService = zitiService;
|
|
32
|
-
this.router = router;
|
|
33
|
-
this.route = route;
|
|
34
|
-
this.close = new EventEmitter();
|
|
35
|
-
this.selectedEdgeRouterRoleAttributes = [];
|
|
36
|
-
this.selectedEdgeRouterNamedAttributes = [];
|
|
37
|
-
this.selectedIdentityRoleAttributes = [];
|
|
38
|
-
this.selectedIdentityNamedAttributes = [];
|
|
39
|
-
this.formView = 'simple';
|
|
40
|
-
this.isEditing = false;
|
|
41
|
-
this.edgeRoutersLoading = false;
|
|
42
|
-
this.identitiesLoading = false;
|
|
43
|
-
this.postureChecksLoading = false;
|
|
44
|
-
this.settings = {};
|
|
45
|
-
this.entityType = 'edge-router-policies';
|
|
46
|
-
this.entityClass = EdgeRouterPolicy;
|
|
47
|
-
this._apiData = {};
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
super.ngOnInit();
|
|
51
|
-
this.subscription.add(this.settingsService.settingsChange.subscribe((results) => {
|
|
52
|
-
this.settings = results;
|
|
53
|
-
}));
|
|
54
|
-
if (isEmpty(this.formData.id)) {
|
|
55
|
-
this.formData = new EdgeRouterPolicy();
|
|
56
|
-
}
|
|
57
|
-
this.initData = cloneDeep(this.formData);
|
|
58
|
-
this.initSelectedAttributes();
|
|
59
|
-
this.extService.updateFormData(this.formData);
|
|
60
|
-
this.subscription.add(this.extService.formDataChanged.subscribe((data) => {
|
|
61
|
-
if (data.isEmpty) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
this.formData = data;
|
|
65
|
-
}));
|
|
66
|
-
this.svc.edgeRouterNamedAttributesMap = this.svc.edgeRouterNamedAttributesMap;
|
|
67
|
-
this.svc.identityNamedAttributesMap = this.svc.identityNamedAttributesMap;
|
|
68
|
-
this.initData = cloneDeep(this.formData);
|
|
69
|
-
}
|
|
70
|
-
entityUpdated() {
|
|
71
|
-
this.loadAttributes();
|
|
72
|
-
if (isEmpty(this.formData.id)) {
|
|
73
|
-
this.formData = new EdgeRouterPolicy();
|
|
74
|
-
}
|
|
75
|
-
this.initData = cloneDeep(this.formData);
|
|
76
|
-
this.initSelectedAttributes();
|
|
77
|
-
this.extService.updateFormData(this.formData);
|
|
78
|
-
this.subscription.add(this.extService.formDataChanged.subscribe((data) => {
|
|
79
|
-
if (data.isEmpty) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
this.formData = data;
|
|
83
|
-
}));
|
|
84
|
-
this.svc.edgeRouterNamedAttributesMap = this.svc.edgeRouterNamedAttributesMap;
|
|
85
|
-
this.svc.identityNamedAttributesMap = this.svc.identityNamedAttributesMap;
|
|
86
|
-
this.initData = cloneDeep(this.formData);
|
|
87
|
-
}
|
|
88
|
-
ngOnDestroy() {
|
|
89
|
-
this.extService?.closed?.emit({});
|
|
90
|
-
this.subscription.unsubscribe();
|
|
91
|
-
}
|
|
92
|
-
ngOnChanges(changes) {
|
|
93
|
-
this.isEditing = !isEmpty(this.formData.id);
|
|
94
|
-
}
|
|
95
|
-
loadAttributes() {
|
|
96
|
-
const promises = [];
|
|
97
|
-
promises.push(this.svc.getEdgeRouterRoleAttributes());
|
|
98
|
-
promises.push(this.svc.getIdentityRoleAttributes());
|
|
99
|
-
promises.push(this.svc.getEdgeRouterNamedAttributes());
|
|
100
|
-
promises.push(this.svc.getIdentityNamedAttributes());
|
|
101
|
-
Promise.all(promises).then(() => {
|
|
102
|
-
this.initSelectedAttributes();
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
initSelectedAttributes() {
|
|
106
|
-
if (isEmpty(this.formData.id)) {
|
|
107
|
-
this.svc.associatedEdgeRouters = [];
|
|
108
|
-
this.svc.associatedEdgeRouterNames = [];
|
|
109
|
-
this.svc.associatedIdentities = [];
|
|
110
|
-
this.svc.associatedIdentityNames = [];
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const edgeRouterIdAttributesMap = invert(this.svc.edgeRouterNamedAttributesMap);
|
|
114
|
-
const identityIdAttributesMap = invert(this.svc.identityNamedAttributesMap);
|
|
115
|
-
this.selectedEdgeRouterRoleAttributes = [];
|
|
116
|
-
this.selectedEdgeRouterNamedAttributes = [];
|
|
117
|
-
this.selectedIdentityRoleAttributes = [];
|
|
118
|
-
this.selectedIdentityNamedAttributes = [];
|
|
119
|
-
this.formData.edgeRouterRoles?.forEach(attr => {
|
|
120
|
-
if (attr.indexOf('@') === 0) {
|
|
121
|
-
this.selectedEdgeRouterNamedAttributes.push(edgeRouterIdAttributesMap[attr.substring(1)]);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
this.selectedEdgeRouterRoleAttributes.push(attr.substring(1));
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
this.formData.identityRoles?.forEach(attr => {
|
|
128
|
-
if (attr.indexOf('@') === 0) {
|
|
129
|
-
this.selectedIdentityNamedAttributes.push(identityIdAttributesMap[attr.substring(1)]);
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
this.selectedIdentityRoleAttributes.push(attr.substring(1));
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
this.updateAssociations();
|
|
136
|
-
}
|
|
137
|
-
updateAssociations() {
|
|
138
|
-
this.svc.getAssociatedEdgeRoutersByAttribute(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.formData?.semantic);
|
|
139
|
-
this.svc.getAssociatedIdentitiesByAttribute(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.formData?.semantic);
|
|
140
|
-
}
|
|
141
|
-
headerActionRequested(action) {
|
|
142
|
-
switch (action.name) {
|
|
143
|
-
case 'save':
|
|
144
|
-
this.save();
|
|
145
|
-
break;
|
|
146
|
-
case 'close':
|
|
147
|
-
this.returnToListPage();
|
|
148
|
-
break;
|
|
149
|
-
case 'toggle-view':
|
|
150
|
-
this.formView = action.data;
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
async save(event) {
|
|
155
|
-
this.formData.name = this.formData.name.trim();
|
|
156
|
-
const isValid = this.validate();
|
|
157
|
-
const isExtValid = await this.extService.validateData();
|
|
158
|
-
if (!isValid || !isExtValid) {
|
|
159
|
-
const growlerData = new GrowlerModel('error', 'Error', `Data Invalid`, `Edge Router Policy data is invalid. Please update the highlighted fields and try again.`);
|
|
160
|
-
this.growlerService.show(growlerData);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
this.isLoading = true;
|
|
164
|
-
this.applySelectedAttributes();
|
|
165
|
-
this.svc.save(this.formData).then((result) => {
|
|
166
|
-
const data = result?.data?.id ? result.data : result;
|
|
167
|
-
this._dataChange = false;
|
|
168
|
-
if (!isEmpty(data.id)) {
|
|
169
|
-
this.formData = data || this.formData;
|
|
170
|
-
this.initData = this.formData;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
this.initData = this.formData;
|
|
174
|
-
}
|
|
175
|
-
if (result?.close) {
|
|
176
|
-
this.closeModal(true, true);
|
|
177
|
-
this.returnToListPage();
|
|
178
|
-
}
|
|
179
|
-
}).finally(() => {
|
|
180
|
-
this.isLoading = false;
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
applySelectedAttributes() {
|
|
184
|
-
this.formData.edgeRouterRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);
|
|
185
|
-
this.formData.identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);
|
|
186
|
-
}
|
|
187
|
-
validate() {
|
|
188
|
-
this.errors = {};
|
|
189
|
-
if (isEmpty(this.formData.name)) {
|
|
190
|
-
this.errors['name'] = true;
|
|
191
|
-
}
|
|
192
|
-
return isEmpty(this.errors);
|
|
193
|
-
}
|
|
194
|
-
apiActionRequested(action) {
|
|
195
|
-
switch (action.id) {
|
|
196
|
-
case 'cli':
|
|
197
|
-
this.copyCLICommand();
|
|
198
|
-
break;
|
|
199
|
-
case 'curl':
|
|
200
|
-
this.copyCURLCommand();
|
|
201
|
-
break;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
copyCLICommand() {
|
|
205
|
-
const erRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);
|
|
206
|
-
let erRolesVar = this.getRolesCLIVariable(erRoles);
|
|
207
|
-
const identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);
|
|
208
|
-
let identityRolesVar = this.getRolesCLIVariable(identityRoles);
|
|
209
|
-
const command = `ziti edge ${this.formData.id ? 'update' : 'create'} edge-router-policy ${this.formData.id ? `'${this.formData.id}'` : ''} ${this.formData.id ? '--name' : ''} '${this.formData.name}'${this.formData.id ? '' : ` --semantic '${this.formData.semantic}`} --edge-router-roles '${erRolesVar}' --identity-roles '${identityRolesVar}'`;
|
|
210
|
-
navigator.clipboard.writeText(command);
|
|
211
|
-
const growlerData = new GrowlerModel('success', 'Success', `Text Copied`, `CLI command copied to clipboard`);
|
|
212
|
-
this.growlerService.show(growlerData);
|
|
213
|
-
}
|
|
214
|
-
copyCURLCommand() {
|
|
215
|
-
const erRoles = this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap);
|
|
216
|
-
let erRolesVar = this.getRolesCURLVariable(erRoles);
|
|
217
|
-
const identityRoles = this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap);
|
|
218
|
-
let identityRolesVar = this.getRolesCURLVariable(identityRoles);
|
|
219
|
-
const command = `curl '${this.apiCallURL}' \\
|
|
220
|
-
${this.formData.id ? '--request PATCH \\' : ''}
|
|
221
|
-
-H 'accept: application/json' \\
|
|
222
|
-
-H 'content-type: application/json' \\
|
|
223
|
-
-H 'zt-session: ${this.settings.session.id}' \\
|
|
224
|
-
--data-raw '{"name":"${this.formData.name}","edgeRouterRoles":${erRolesVar},"identityRoles":${identityRolesVar},"semantic":"${this.formData.semantic}"}'`;
|
|
225
|
-
navigator.clipboard.writeText(command);
|
|
226
|
-
const growlerData = new GrowlerModel('success', 'Success', `Text Copied`, `CURL command copied to clipboard`);
|
|
227
|
-
this.growlerService.show(growlerData);
|
|
228
|
-
}
|
|
229
|
-
get apiCallURL() {
|
|
230
|
-
return this.settings.selectedEdgeController + '/edge/management/v1/edge-router-policies' + (this.formData.id ? `/${this.formData.id}` : '');
|
|
231
|
-
}
|
|
232
|
-
get apiData() {
|
|
233
|
-
const data = {
|
|
234
|
-
name: this.formData?.name || '',
|
|
235
|
-
appData: this.formData?.appData || '',
|
|
236
|
-
edgeRouterRoles: this.svc.getSelectedRoles(this.selectedEdgeRouterRoleAttributes, this.selectedEdgeRouterNamedAttributes, this.svc.edgeRouterNamedAttributesMap),
|
|
237
|
-
identityRoles: this.svc.getSelectedRoles(this.selectedIdentityRoleAttributes, this.selectedIdentityNamedAttributes, this.svc.identityNamedAttributesMap),
|
|
238
|
-
semantic: this.formData.semantic,
|
|
239
|
-
type: this.formData.type,
|
|
240
|
-
tags: this.formData.tags
|
|
241
|
-
};
|
|
242
|
-
return data;
|
|
243
|
-
}
|
|
244
|
-
set apiData(data) {
|
|
245
|
-
this._apiData = data;
|
|
246
|
-
}
|
|
247
|
-
clear() {
|
|
248
|
-
}
|
|
249
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterPolicyFormComponent, deps: [{ token: SETTINGS_SERVICE }, { token: i1.EdgeRouterPolicyFormService }, { token: ZITI_DATA_SERVICE }, { token: i2.GrowlerService }, { token: EDGE_ROUTER_POLICY_EXTENSION_SERVICE }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
250
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EdgeRouterPolicyFormComponent, selector: "lib-edge-router-policy-form", outputs: { close: "close" }, providers: [
|
|
251
|
-
{
|
|
252
|
-
provide: MatDialogRef,
|
|
253
|
-
useValue: {}
|
|
254
|
-
}
|
|
255
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton", "multiActions"], outputs: ["formViewChange", "actionRequested", "multiActionRequested"] }, { kind: "component", type: i7.FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "contentClass", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: i8.PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter", "localFilter"], outputs: ["itemSelected", "itemRemoved", "filterChanged"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i10.FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: i11.JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy", "showLineNumbers"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: i12.TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: i13.CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
|
|
256
|
-
}
|
|
257
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRouterPolicyFormComponent, decorators: [{
|
|
258
|
-
type: Component,
|
|
259
|
-
args: [{ selector: 'lib-edge-router-policy-form', providers: [
|
|
260
|
-
{
|
|
261
|
-
provide: MatDialogRef,
|
|
262
|
-
useValue: {}
|
|
263
|
-
}
|
|
264
|
-
], template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n [class.projectable-form-hidden]=\"!dataInit\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Edge Router Policy: ' : 'Create New Edge Router Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n [class.is-scrolled]=\"isScrolled\"\n ></lib-form-header>\n <div class=\"edge-router-policy-form-container projectable-form-container\" #formContainer>\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Edge Router Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge router policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Edge Router Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which edge router to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedEdgeRouterRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedEdgeRouterNamedAttributes\"\n [availableRoleAttributes]=\"svc.edgeRouterRoleAttributes\"\n [availableNamedAttributes]=\"svc.edgeRouterNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedEdgeRoutersByAttribute(selectedEdgeRouterRoleAttributes, selectedEdgeRouterNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select edge router attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes, formData.semantic)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.semantic\"\n (change)=\"updateAssociations()\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Edge Routers'\"\n [count]=\"svc.associatedEdgeRouterNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all Edge Routers that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"edgeRoutersLoading\"\n [allNames]=\"svc.associatedEdgeRouterNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Edge Router Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy-text\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading || !dataInit\" [isLoading]=\"isLoading || !dataInit\"></lib-loading-indicator>\n" }]
|
|
265
|
-
}], ctorParameters: function () { return [{ type: i14.SettingsService, decorators: [{
|
|
266
|
-
type: Inject,
|
|
267
|
-
args: [SETTINGS_SERVICE]
|
|
268
|
-
}] }, { type: i1.EdgeRouterPolicyFormService }, { type: i15.ZitiDataService, decorators: [{
|
|
269
|
-
type: Inject,
|
|
270
|
-
args: [ZITI_DATA_SERVICE]
|
|
271
|
-
}] }, { type: i2.GrowlerService }, { type: undefined, decorators: [{
|
|
272
|
-
type: Inject,
|
|
273
|
-
args: [EDGE_ROUTER_POLICY_EXTENSION_SERVICE]
|
|
274
|
-
}] }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.Location }]; }, propDecorators: { close: [{
|
|
275
|
-
type: Output
|
|
276
|
-
}] } });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1yb3V0ZXItcG9saWN5LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL2VkZ2Utcm91dGVyLXBvbGljeS9lZGdlLXJvdXRlci1wb2xpY3ktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvZWRnZS1yb3V0ZXItcG9saWN5L2VkZ2Utcm91dGVyLXBvbGljeS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUlaLE1BQU0sRUFJTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRixPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDbEQsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHFDQUFxQyxDQUFDO0FBRXZGLE9BQU8sRUFBOEIsb0NBQW9DLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQWVwRSxNQUFNLE9BQU8sNkJBQThCLFNBQVEsZUFBZTtJQW9CaEUsWUFDaUQsZUFB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QkFBZ0IsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUM7WUFDeEosUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTtZQUNoQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7U0FDekIsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUdELElBQUksT0FBTyxDQUFDLElBQUk7UUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7K0dBcFJVLDZCQUE2QixrQkFxQjVCLGdCQUFnQix3REFFaEIsaUJBQWlCLDJDQUVqQixvQ0FBb0M7bUdBekJyQyw2QkFBNkIsbUZBUDdCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLFFBQVEsRUFBRSxFQUFFO2FBQ2I7U0FDRixzRUNwQ0gsNmxQQStIQTs7NEZEekZhLDZCQUE2QjtrQkFYekMsU0FBUzsrQkFDRSw2QkFBNkIsYUFHNUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLFlBQVk7NEJBQ3JCLFFBQVEsRUFBRSxFQUFFO3lCQUNiO3FCQUNGOzswQkF1QkksTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUV2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBRXhCLE1BQU07MkJBQUMsb0NBQW9DO3FIQXZCdEMsS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEFmdGVyVmlld0luaXQsXG4gIEluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7UHJvamVjdGFibGVGb3JtfSBmcm9tIFwiLi4vcHJvamVjdGFibGUtZm9ybS5jbGFzc1wiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5cbmltcG9ydCB7aXNFbXB0eSwgY2xvbmVEZWVwLCBpbnZlcnR9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7RWRnZVJvdXRlclBvbGljeUZvcm1TZXJ2aWNlLCBFREdFX1JPVVRFUl9QT0xJQ1lfRVhURU5TSU9OX1NFUlZJQ0V9IGZyb20gJy4vZWRnZS1yb3V0ZXItcG9saWN5LWZvcm0uc2VydmljZSc7XG5pbXBvcnQge01hdERpYWxvZ1JlZn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtFZGdlUm91dGVyUG9saWN5fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2VkZ2Utcm91dGVyLXBvbGljeVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1lZGdlLXJvdXRlci1wb2xpY3ktZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGdlLXJvdXRlci1wb2xpY3ktZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkZ2Utcm91dGVyLXBvbGljeS1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1hdERpYWxvZ1JlZixcbiAgICAgIHVzZVZhbHVlOiB7fVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFZGdlUm91dGVyUG9saWN5Rm9ybUNvbXBvbmVudCBleHRlbmRzIFByb2plY3RhYmxlRm9ybSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZWxlY3RlZEVkZ2VSb3V0ZXJSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBzZWxlY3RlZEVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzID0gW107XG4gIHNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcblxuICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICBpc0VkaXRpbmcgPSBmYWxzZTtcbiAgZWRnZVJvdXRlcnNMb2FkaW5nID0gZmFsc2U7XG4gIGlkZW50aXRpZXNMb2FkaW5nID0gZmFsc2U7XG4gIHBvc3R1cmVDaGVja3NMb2FkaW5nID0gZmFsc2U7XG5cbiAgc2V0dGluZ3M6IGFueSA9IHt9O1xuXG4gIG92ZXJyaWRlIGVudGl0eVR5cGUgPSAnZWRnZS1yb3V0ZXItcG9saWNpZXMnO1xuICBvdmVycmlkZSBlbnRpdHlDbGFzcyA9IEVkZ2VSb3V0ZXJQb2xpY3k7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHByb3RlY3RlZCBvdmVycmlkZSBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgIHB1YmxpYyBzdmM6IEVkZ2VSb3V0ZXJQb2xpY3lGb3JtU2VydmljZSxcbiAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIG92ZXJyaWRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICBASW5qZWN0KEVER0VfUk9VVEVSX1BPTElDWV9FWFRFTlNJT05fU0VSVklDRSkgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICBsb2NhdGlvbjogTG9jYXRpb25cbiAgKSB7XG4gICAgc3VwZXIoZ3Jvd2xlclNlcnZpY2UsIGV4dFNlcnZpY2UsIHppdGlTZXJ2aWNlLCByb3V0ZXIsIHJvdXRlLCBsb2NhdGlvbiwgc2V0dGluZ3NTZXJ2aWNlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5nc0NoYW5nZS5zdWJzY3JpYmUoKHJlc3VsdHM6YW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHJlc3VsdHM7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLmlkKSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IG5ldyBFZGdlUm91dGVyUG9saWN5KCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdERhdGEgPSBjbG9uZURlZXAodGhpcy5mb3JtRGF0YSk7XG4gICAgdGhpcy5pbml0U2VsZWN0ZWRBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5leHRTZXJ2aWNlLnVwZGF0ZUZvcm1EYXRhKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhQ2hhbmdlZC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBkYXRhO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdmMuZWRnZVJvdXRlck5hbWVkQXR0cmlidXRlc01hcCA9IHRoaXMuc3ZjLmVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXNNYXA7XG4gICAgdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXAgPSB0aGlzLnN2Yy5pZGVudGl0eU5hbWVkQXR0cmlidXRlc01hcDtcbiAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZW50aXR5VXBkYXRlZCgpIHtcbiAgICB0aGlzLmxvYWRBdHRyaWJ1dGVzKCk7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5pZCkpIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBuZXcgRWRnZVJvdXRlclBvbGljeSgpO1xuICAgIH1cbiAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuaW5pdFNlbGVjdGVkQXR0cmlidXRlcygpO1xuICAgIHRoaXMuZXh0U2VydmljZS51cGRhdGVGb3JtRGF0YSh0aGlzLmZvcm1EYXRhKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIHRoaXMuZXh0U2VydmljZS5mb3JtRGF0YUNoYW5nZWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gZGF0YTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3ZjLmVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXNNYXAgPSB0aGlzLnN2Yy5lZGdlUm91dGVyTmFtZWRBdHRyaWJ1dGVzTWFwO1xuICAgIHRoaXMuc3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzTWFwID0gdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXA7XG4gICAgdGhpcy5pbml0RGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZXh0U2VydmljZT8uY2xvc2VkPy5lbWl0KHt9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gIWlzRW1wdHkodGhpcy5mb3JtRGF0YS5pZCk7XG4gIH1cblxuICBsb2FkQXR0cmlidXRlcygpIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIHByb21pc2VzLnB1c2godGhpcy5zdmMuZ2V0RWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzKCkpO1xuICAgIHByb21pc2VzLnB1c2godGhpcy5zdmMuZ2V0SWRlbnRpdHlSb2xlQXR0cmlidXRlcygpKTtcbiAgICBwcm9taXNlcy5wdXNoKHRoaXMuc3ZjLmdldEVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMoKSk7XG4gICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRJZGVudGl0eU5hbWVkQXR0cmlidXRlcygpKTtcbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmluaXRTZWxlY3RlZEF0dHJpYnV0ZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRTZWxlY3RlZEF0dHJpYnV0ZXMoKSB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5pZCkpIHtcbiAgICAgIHRoaXMuc3ZjLmFzc29jaWF0ZWRFZGdlUm91dGVycyA9IFtdO1xuICAgICAgdGhpcy5zdmMuYXNzb2NpYXRlZEVkZ2VSb3V0ZXJOYW1lcyA9IFtdO1xuICAgICAgdGhpcy5zdmMuYXNzb2NpYXRlZElkZW50aXRpZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ZjLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVkZ2VSb3V0ZXJJZEF0dHJpYnV0ZXNNYXAgPSBpbnZlcnQodGhpcy5zdmMuZWRnZVJvdXRlck5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgY29uc3QgaWRlbnRpdHlJZEF0dHJpYnV0ZXNNYXAgPSBpbnZlcnQodGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyUm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlck5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5mb3JtRGF0YS5lZGdlUm91dGVyUm9sZXM/LmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBpZiAoYXR0ci5pbmRleE9mKCdAJykgPT09IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMucHVzaChlZGdlUm91dGVySWRBdHRyaWJ1dGVzTWFwW2F0dHIuc3Vic3RyaW5nKDEpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzLnB1c2goYXR0ci5zdWJzdHJpbmcoMSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybURhdGEuaWRlbnRpdHlSb2xlcz8uZm9yRWFjaChhdHRyID0+IHtcbiAgICAgIGlmIChhdHRyLmluZGV4T2YoJ0AnKSA9PT0gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMucHVzaChpZGVudGl0eUlkQXR0cmlidXRlc01hcFthdHRyLnN1YnN0cmluZygxKV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMucHVzaChhdHRyLnN1YnN0cmluZygxKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUFzc29jaWF0aW9ucygpO1xuICB9XG5cbiAgdXBkYXRlQXNzb2NpYXRpb25zKCkge1xuICAgIHRoaXMuc3ZjLmdldEFzc29jaWF0ZWRFZGdlUm91dGVyc0J5QXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyUm9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyTmFtZWRBdHRyaWJ1dGVzLCB0aGlzLmZvcm1EYXRhPy5zZW1hbnRpYyk7XG4gICAgdGhpcy5zdmMuZ2V0QXNzb2NpYXRlZElkZW50aXRpZXNCeUF0dHJpYnV0ZSh0aGlzLnNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzLCB0aGlzLmZvcm1EYXRhPy5zZW1hbnRpYyk7XG4gIH1cblxuICBoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoYWN0aW9uKSB7XG4gICAgc3dpdGNoKGFjdGlvbi5uYW1lKSB7XG4gICAgICBjYXNlICdzYXZlJzpcbiAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2xvc2UnOlxuICAgICAgICB0aGlzLnJldHVyblRvTGlzdFBhZ2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b2dnbGUtdmlldyc6XG4gICAgICAgIHRoaXMuZm9ybVZpZXcgPSBhY3Rpb24uZGF0YTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZShldmVudD8pIHtcbiAgICB0aGlzLmZvcm1EYXRhLm5hbWUgPSB0aGlzLmZvcm1EYXRhLm5hbWUudHJpbSgpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgY29uc3QgaXNFeHRWYWxpZCA9IGF3YWl0IHRoaXMuZXh0U2VydmljZS52YWxpZGF0ZURhdGEoKTtcbiAgICBpZighaXNWYWxpZCB8fCAhaXNFeHRWYWxpZCkge1xuICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICBgRGF0YSBJbnZhbGlkYCxcbiAgICAgICAgICBgRWRnZSBSb3V0ZXIgUG9saWN5IGRhdGEgaXMgaW52YWxpZC4gUGxlYXNlIHVwZGF0ZSB0aGUgaGlnaGxpZ2h0ZWQgZmllbGRzIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWRBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5zdmMuc2F2ZSh0aGlzLmZvcm1EYXRhKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQ/LmRhdGE/LmlkID8gcmVzdWx0LmRhdGEgOiByZXN1bHQ7XG4gICAgICB0aGlzLl9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgICBpZiAoIWlzRW1wdHkoZGF0YS5pZCkpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IGRhdGEgfHwgdGhpcy5mb3JtRGF0YTtcbiAgICAgICAgdGhpcy5pbml0RGF0YSA9IHRoaXMuZm9ybURhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluaXREYXRhID0gdGhpcy5mb3JtRGF0YTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQ/LmNsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbCh0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5yZXR1cm5Ub0xpc3RQYWdlKCk7XG4gICAgICB9XG4gICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlTZWxlY3RlZEF0dHJpYnV0ZXMoKSB7XG4gICAgdGhpcy5mb3JtRGF0YS5lZGdlUm91dGVyUm9sZXMgPSB0aGlzLnN2Yy5nZXRTZWxlY3RlZFJvbGVzKHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyUm9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyTmFtZWRBdHRyaWJ1dGVzLCB0aGlzLnN2Yy5lZGdlUm91dGVyTmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICB0aGlzLmZvcm1EYXRhLmlkZW50aXR5Um9sZXMgPSB0aGlzLnN2Yy5nZXRTZWxlY3RlZFJvbGVzKHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5uYW1lKSkge1xuICAgICAgdGhpcy5lcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBpc0VtcHR5KHRoaXMuZXJyb3JzKTtcbiAgfVxuXG4gIGFwaUFjdGlvblJlcXVlc3RlZChhY3Rpb24pIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi5pZCkge1xuICAgICAgY2FzZSAnY2xpJzpcbiAgICAgICAgdGhpcy5jb3B5Q0xJQ29tbWFuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2N1cmwnOlxuICAgICAgICB0aGlzLmNvcHlDVVJMQ29tbWFuZCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjb3B5Q0xJQ29tbWFuZCgpIHtcbiAgICBjb25zdCBlclJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkRWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlck5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuZWRnZVJvdXRlck5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgbGV0IGVyUm9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ0xJVmFyaWFibGUoZXJSb2xlcyk7XG5cbiAgICBjb25zdCBpZGVudGl0eVJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzLCB0aGlzLnN2Yy5pZGVudGl0eU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgbGV0IGlkZW50aXR5Um9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ0xJVmFyaWFibGUoaWRlbnRpdHlSb2xlcyk7XG5cbiAgICBjb25zdCBjb21tYW5kID0gYHppdGkgZWRnZSAke3RoaXMuZm9ybURhdGEuaWQgPyAndXBkYXRlJyA6ICdjcmVhdGUnfSBlZGdlLXJvdXRlci1wb2xpY3kgJHt0aGlzLmZvcm1EYXRhLmlkID8gYCcke3RoaXMuZm9ybURhdGEuaWR9J2AgOiAnJ30gJHt0aGlzLmZvcm1EYXRhLmlkID8gJy0tbmFtZScgOiAnJ30gJyR7dGhpcy5mb3JtRGF0YS5uYW1lfScke3RoaXMuZm9ybURhdGEuaWQgPyAnJyA6IGAgLS1zZW1hbnRpYyAnJHt0aGlzLmZvcm1EYXRhLnNlbWFudGljfWB9IC0tZWRnZS1yb3V0ZXItcm9sZXMgJyR7ZXJSb2xlc1Zhcn0nIC0taWRlbnRpdHktcm9sZXMgJyR7aWRlbnRpdHlSb2xlc1Zhcn0nYDtcblxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbW1hbmQpO1xuICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgIGBUZXh0IENvcGllZGAsXG4gICAgICAgIGBDTEkgY29tbWFuZCBjb3BpZWQgdG8gY2xpcGJvYXJkYCxcbiAgICApO1xuICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gIH1cblxuICBjb3B5Q1VSTENvbW1hbmQoKSB7XG4gICAgY29uc3QgZXJSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXJSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLmVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGxldCBlclJvbGVzVmFyID0gdGhpcy5nZXRSb2xlc0NVUkxWYXJpYWJsZShlclJvbGVzKTtcblxuICAgIGNvbnN0IGlkZW50aXR5Um9sZXMgPSB0aGlzLnN2Yy5nZXRTZWxlY3RlZFJvbGVzKHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICBsZXQgaWRlbnRpdHlSb2xlc1ZhciA9IHRoaXMuZ2V0Um9sZXNDVVJMVmFyaWFibGUoaWRlbnRpdHlSb2xlcyk7XG5cbiAgICBjb25zdCBjb21tYW5kID0gYGN1cmwgJyR7dGhpcy5hcGlDYWxsVVJMfScgXFxcXFxuJHt0aGlzLmZvcm1EYXRhLmlkID8gJy0tcmVxdWVzdCBQQVRDSCBcXFxcJyA6ICcnfVxuICAtSCAnYWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy5zZXR0aW5ncy5zZXNzaW9uLmlkfScgXFxcXFxuICAtLWRhdGEtcmF3ICd7XCJuYW1lXCI6XCIke3RoaXMuZm9ybURhdGEubmFtZX1cIixcImVkZ2VSb3V0ZXJSb2xlc1wiOiR7ZXJSb2xlc1Zhcn0sXCJpZGVudGl0eVJvbGVzXCI6JHtpZGVudGl0eVJvbGVzVmFyfSxcInNlbWFudGljXCI6XCIke3RoaXMuZm9ybURhdGEuc2VtYW50aWN9XCJ9J2A7XG5cbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb21tYW5kKTtcbiAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICBgVGV4dCBDb3BpZWRgLFxuICAgICAgICBgQ1VSTCBjb21tYW5kIGNvcGllZCB0byBjbGlwYm9hcmRgLFxuICAgICk7XG4gICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgfVxuXG4gIGdldCBhcGlDYWxsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIgKyAnL2VkZ2UvbWFuYWdlbWVudC92MS9lZGdlLXJvdXRlci1wb2xpY2llcycgKyAodGhpcy5mb3JtRGF0YS5pZCA/IGAvJHt0aGlzLmZvcm1EYXRhLmlkfWAgOiAnJyk7XG4gIH1cblxuICBnZXQgYXBpRGF0YSgpIHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICBuYW1lOiB0aGlzLmZvcm1EYXRhPy5uYW1lIHx8ICcnLFxuICAgICAgYXBwRGF0YTogdGhpcy5mb3JtRGF0YT8uYXBwRGF0YSB8fCAnJyxcbiAgICAgIGVkZ2VSb3V0ZXJSb2xlczogdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkRWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlck5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuZWRnZVJvdXRlck5hbWVkQXR0cmlidXRlc01hcCksXG4gICAgICBpZGVudGl0eVJvbGVzOiB0aGlzLnN2Yy5nZXRTZWxlY3RlZFJvbGVzKHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzTWFwKSxcbiAgICAgIHNlbWFudGljOiB0aGlzLmZvcm1EYXRhLnNlbWFudGljLFxuICAgICAgdHlwZTogdGhpcy5mb3JtRGF0YS50eXBlLFxuICAgICAgdGFnczogdGhpcy5mb3JtRGF0YS50YWdzXG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX2FwaURhdGEgPSB7fTtcbiAgc2V0IGFwaURhdGEoZGF0YSkge1xuICAgIHRoaXMuX2FwaURhdGEgPSBkYXRhO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcm9qZWN0YWJsZS1mb3JtLXdyYXBwZXJcIlxuICAgICAoa2V5dXAuZW50ZXIpPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgKGtleXVwLmVzY2FwZSk9XCJjbG9zZU1vZGFsKGZhbHNlKVwiXG4gICAgIFtjbGFzcy5wcm9qZWN0YWJsZS1mb3JtLWhpZGRlbl09XCIhZGF0YUluaXRcIlxuPlxuICAgIDxsaWItZm9ybS1oZWFkZXJcbiAgICAgICAgICAgIFtkYXRhXT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJmb3JtRGF0YS5pZCA/ICdFZGl0IEVkZ2UgUm91dGVyIFBvbGljeTogJyA6ICdDcmVhdGUgTmV3IEVkZ2UgUm91dGVyIFBvbGljeSdcIlxuICAgICAgICAgICAgW21vcmVBY3Rpb25zXT1cIm1vcmVBY3Rpb25zXCJcbiAgICAgICAgICAgIChhY3Rpb25SZXF1ZXN0ZWQpPVwiaGVhZGVyQWN0aW9uUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAgICAgWyhmb3JtVmlldyldPVwiZm9ybVZpZXdcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLXNjcm9sbGVkXT1cImlzU2Nyb2xsZWRcIlxuICAgID48L2xpYi1mb3JtLWhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwiZWRnZS1yb3V0ZXItcG9saWN5LWZvcm0tY29udGFpbmVyIHByb2plY3RhYmxlLWZvcm0tY29udGFpbmVyXCIgI2Zvcm1Db250YWluZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9qZWN0YWJsZS1mb3JtLW1haW4tY29sdW1uIGZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJmb3JtVmlldyA9PT0gJ3NpbXBsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0aHJlZS1maWZ0aHNcIj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyIFt0aXRsZV09XCInRWRnZSBSb3V0ZXIgUG9saWN5IE5hbWUnXCIgW2xhYmVsXT1cIidSRVFVSVJFRCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBlZGdlIHJvdXRlciBwb2xpY3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzWyduYW1lJ119XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNuYW1lRmllbGRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IEVkZ2UgUm91dGVyIEF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAwMydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidDaG9vc2Ugd2hpY2ggZWRnZSByb3V0ZXIgdG8gYXNzb2NpYXRlIHRvIHRoaXMgcG9saWN5IGJ5IHBpY2tpbmcgZnJvbSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cInNlbGVjdGVkRWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJzZWxlY3RlZEVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJzdmMuZWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cInN2Yy5lZGdlUm91dGVyTmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRFZGdlUm91dGVyc0J5QXR0cmlidXRlKHNlbGVjdGVkRWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZEVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMsIGZvcm1EYXRhLnNlbWFudGljKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRFZGdlUm91dGVyc0J5QXR0cmlidXRlKHNlbGVjdGVkRWRnZVJvdXRlclJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZEVkZ2VSb3V0ZXJOYW1lZEF0dHJpYnV0ZXMsIGZvcm1EYXRhLnNlbWFudGljKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgZWRnZSByb3V0ZXIgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IElkZW50aXR5IEF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAwMidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidDaG9vc2Ugd2hpY2ggaWRlbnRpdGllcyB0byBhc3NvY2lhdGUgdG8gdGhpcyBwb2xpY3kgYnkgcGlja2luZyBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwic3ZjLmlkZW50aXR5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwic3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRJZGVudGl0aWVzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzLCBmb3JtRGF0YS5zZW1hbnRpYylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzQ2hhbmdlKT1cInN2Yy5nZXRBc3NvY2lhdGVkSWRlbnRpdGllc0J5QXR0cmlidXRlKHNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcywgc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcywgZm9ybURhdGEuc2VtYW50aWMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBpZGVudGl0eSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidTZW1hbnRpYydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIncm93J1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRGF0YS5zZW1hbnRpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVBc3NvY2lhdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJQb2xpY3lTZW1hbnRpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFueU9mXCI+QW55T2Y8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBbGxPZlwiPkFsbE9mPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC10b2dnbGUgWyh0b2dnbGVPbildPVwic2hvd01vcmVcIiAodG9nZ2xlT25DaGFuZ2UpPVwic2hvd01vcmVDaGFuZ2VkKCRldmVudClcIiBzdHlsZT1cIm1hcmdpbjogMHB4IDEwcHhcIj48L2xpYi1mb3JtLWZpZWxkLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiIXNob3dNb3JlXCIgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidDdXN0b20gVGFncydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVUYWdzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jdXN0b20tdGFncyBbKHRhZ3MpXT1cImZvcm1EYXRhLnRhZ3NcIj48L2xpYi1jdXN0b20tdGFncz5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0d28tZmlmdGhzXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBc3NvY2lhdGVkIEVkZ2UgUm91dGVycydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50XT1cInN2Yy5hc3NvY2lhdGVkRWRnZVJvdXRlck5hbWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2hpZGUtb3ZlcmZsb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCInUHJldmlldyBsaXN0IG9mIGFsbCBFZGdlIFJvdXRlcnMgdGhhdCB0aGlzIEVkZ2UgUm91dGVyIFBvbGljeSBpcyBhc3NvY2lhdGVkIHdpdGguJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXByZXZpZXctbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGlja2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0xvYWRpbmddPVwiZWRnZVJvdXRlcnNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTmFtZXNdPVwic3ZjLmFzc29jaWF0ZWRFZGdlUm91dGVyTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItcHJldmlldy1saXN0PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQXNzb2NpYXRlZCBJZGVudGl0aWVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY291bnRdPVwic3ZjLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ1ByZXZpZXcgbGlzdCBvZiBhbGwgSWRlbnRpdGllcyB0aGF0IHRoaXMgRWRnZSBSb3V0ZXIgUG9saWN5IGlzIGFzc29jaWF0ZWQgd2l0aC4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItcHJldmlldy1saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpZGVudGl0aWVzTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE5hbWVzXT1cInN2Yy5hc3NvY2lhdGVkSWRlbnRpdHlOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1wcmV2aWV3LWxpc3Q+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBUEkgQ2FsbHMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJBY3Rpb25zXT1cImFwaU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGFjdGlvblJlcXVlc3RlZCk9XCJhcGlBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIiBbdmFsdWVdPVwiYXBpQ2FsbFVSTFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNvcHkgY29weS10ZXh0XCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZChhcGlDYWxsVVJMKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1qc29uLXZpZXcgKm5nSWY9XCJmb3JtRGF0YVwiIFsoZGF0YSldPVwiYXBpRGF0YVwiIFtyZWFkT25seV09XCJ0cnVlXCIgW3Nob3dDb3B5XT1cInRydWVcIj48L2xpYi1qc29uLXZpZXc+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtblwiICpuZ0lmPVwiZm9ybVZpZXcgPT09ICdyYXcnXCI+XG4gICAgICAgICAgICA8bGliLWpzb24tdmlldyAqbmdJZj1cImZvcm1EYXRhXCIgWyhkYXRhKV09XCJmb3JtRGF0YVwiPjwvbGliLWpzb24tdmlldz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxsaWItbG9hZGluZy1pbmRpY2F0b3IgKm5nSWY9XCJpc0xvYWRpbmcgfHwgIWRhdGFJbml0XCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmcgfHwgIWRhdGFJbml0XCI+PC9saWItbG9hZGluZy1pbmRpY2F0b3I+XG4iXX0=
|