From 73c054062db3432c4ab6bfad88f3b958c4421e6b Mon Sep 17 00:00:00 2001 From: Kianna <30884335+kiannaquach@users.noreply.github.com> Date: Tue, 16 May 2023 08:07:12 -0700 Subject: [PATCH] UI: Convert pki component files to ts (#20533) --- .../page/pki-certificate-details.ts | 6 +- .../page/pki-configuration-details.ts | 12 ++-- .../components/page/pki-configuration-edit.ts | 12 ++-- .../components/page/pki-configure-create.ts | 11 ++- ...ssuer-details.js => pki-issuer-details.ts} | 7 +- .../addon/components/page/pki-issuer-edit.ts | 6 +- ...js => pki-issuer-generate-intermediate.ts} | 7 +- ...te-root.js => pki-issuer-generate-root.ts} | 7 +- ...-issuer-import.js => pki-issuer-import.ts} | 7 +- .../components/page/pki-issuer-rotate-root.ts | 15 ++--- .../addon/components/page/pki-key-details.ts | 8 +-- .../pki/addon/components/page/pki-overview.ts | 11 ++- .../addon/components/page/pki-role-details.ts | 10 +-- .../addon/components/page/pki-tidy-form.ts | 7 +- ...ows.js => parsed-certificate-info-rows.ts} | 17 ++++- .../pki/addon/components/pki-generate-csr.ts | 6 +- .../pki/addon/components/pki-generate-root.ts | 12 ++-- .../components/pki-generate-toggle-groups.ts | 4 +- .../addon/components/pki-import-pem-bundle.ts | 6 +- .../{pki-key-form.js => pki-key-form.ts} | 22 ++++-- .../{pki-key-import.js => pki-key-import.ts} | 27 +++++--- .../addon/components/pki-key-parameters.js | 47 ------------- .../addon/components/pki-key-parameters.ts | 67 +++++++++++++++++++ .../components/pki-not-valid-after-form.ts | 2 +- .../{pki-role-form.js => pki-role-form.ts} | 48 ++++++------- .../pki/addon/components/pki-role-generate.ts | 12 ++-- .../components/pki-sign-intermediate-form.ts | 8 +-- ui/types/vault/models/pki/key.d.ts | 26 +++++++ ui/types/vault/models/pki/role.d.ts | 13 ++++ 29 files changed, 272 insertions(+), 171 deletions(-) rename ui/lib/pki/addon/components/page/{pki-issuer-details.js => pki-issuer-details.ts} (70%) rename ui/lib/pki/addon/components/page/{pki-issuer-generate-intermediate.js => pki-issuer-generate-intermediate.ts} (60%) rename ui/lib/pki/addon/components/page/{pki-issuer-generate-root.js => pki-issuer-generate-root.ts} (60%) rename ui/lib/pki/addon/components/page/{pki-issuer-import.js => pki-issuer-import.ts} (60%) rename ui/lib/pki/addon/components/{parsed-certificate-info-rows.js => parsed-certificate-info-rows.ts} (86%) rename ui/lib/pki/addon/components/{pki-key-form.js => pki-key-form.ts} (75%) rename ui/lib/pki/addon/components/{pki-key-import.js => pki-key-import.ts} (74%) delete mode 100644 ui/lib/pki/addon/components/pki-key-parameters.js create mode 100644 ui/lib/pki/addon/components/pki-key-parameters.ts rename ui/lib/pki/addon/components/{pki-role-form.js => pki-role-form.ts} (63%) create mode 100644 ui/types/vault/models/pki/key.d.ts create mode 100644 ui/types/vault/models/pki/role.d.ts diff --git a/ui/lib/pki/addon/components/page/pki-certificate-details.ts b/ui/lib/pki/addon/components/page/pki-certificate-details.ts index 4dcbfc3a9e..e9f1f36598 100644 --- a/ui/lib/pki/addon/components/page/pki-certificate-details.ts +++ b/ui/lib/pki/addon/components/page/pki-certificate-details.ts @@ -9,9 +9,9 @@ import { action } from '@ember/object'; import { task } from 'ember-concurrency'; import { waitFor } from '@ember/test-waiters'; import errorMessage from 'vault/utils/error-message'; -import FlashMessageService from 'vault/services/flash-messages'; -import DownloadService from 'vault/services/download'; -import PkiCertificateBaseModel from 'vault/models/pki/certificate/base'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type DownloadService from 'vault/services/download'; +import type PkiCertificateBaseModel from 'vault/models/pki/certificate/base'; interface Args { model: PkiCertificateBaseModel; diff --git a/ui/lib/pki/addon/components/page/pki-configuration-details.ts b/ui/lib/pki/addon/components/page/pki-configuration-details.ts index 031bd1e081..fa849d139e 100644 --- a/ui/lib/pki/addon/components/page/pki-configuration-details.ts +++ b/ui/lib/pki/addon/components/page/pki-configuration-details.ts @@ -4,16 +4,14 @@ */ import Component from '@glimmer/component'; -import errorMessage from 'vault/utils/error-message'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { tracked } from '@glimmer/tracking'; - -//TYPES -import RouterService from '@ember/routing/router-service'; -import FlashMessageService from 'vault/services/flash-messages'; -import Store from '@ember-data/store'; -import VersionService from 'vault/services/version'; +import errorMessage from 'vault/utils/error-message'; +import type RouterService from '@ember/routing/router-service'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type Store from '@ember-data/store'; +import type VersionService from 'vault/services/version'; interface Args { currentPath: string; diff --git a/ui/lib/pki/addon/components/page/pki-configuration-edit.ts b/ui/lib/pki/addon/components/page/pki-configuration-edit.ts index 035761db98..e52fd48402 100644 --- a/ui/lib/pki/addon/components/page/pki-configuration-edit.ts +++ b/ui/lib/pki/addon/components/page/pki-configuration-edit.ts @@ -9,13 +9,13 @@ import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { task } from 'ember-concurrency'; import { waitFor } from '@ember/test-waiters'; -import RouterService from '@ember/routing/router-service'; -import FlashMessageService from 'vault/services/flash-messages'; -import VersionService from 'vault/services/version'; -import { FormField, TtlEvent } from 'vault/app-types'; -import PkiCrlModel from 'vault/models/pki/crl'; -import PkiUrlsModel from 'vault/models/pki/urls'; import errorMessage from 'vault/utils/error-message'; +import type RouterService from '@ember/routing/router-service'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type VersionService from 'vault/services/version'; +import type PkiCrlModel from 'vault/models/pki/crl'; +import type PkiUrlsModel from 'vault/models/pki/urls'; +import type { FormField, TtlEvent } from 'vault/app-types'; interface Args { crl: PkiCrlModel; diff --git a/ui/lib/pki/addon/components/page/pki-configure-create.ts b/ui/lib/pki/addon/components/page/pki-configure-create.ts index 94c859a81f..ac008dd2ad 100644 --- a/ui/lib/pki/addon/components/page/pki-configure-create.ts +++ b/ui/lib/pki/addon/components/page/pki-configure-create.ts @@ -6,12 +6,11 @@ import Component from '@glimmer/component'; import { inject as service } from '@ember/service'; import { tracked } from '@glimmer/tracking'; -// TYPES -import Store from '@ember-data/store'; -import Router from '@ember/routing/router'; -import FlashMessageService from 'vault/services/flash-messages'; -import PkiActionModel from 'vault/models/pki/action'; -import { Breadcrumb } from 'vault/vault/app-types'; +import type Store from '@ember-data/store'; +import type Router from '@ember/routing/router'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type PkiActionModel from 'vault/models/pki/action'; +import type { Breadcrumb } from 'vault/vault/app-types'; interface Args { config: PkiActionModel; diff --git a/ui/lib/pki/addon/components/page/pki-issuer-details.js b/ui/lib/pki/addon/components/page/pki-issuer-details.ts similarity index 70% rename from ui/lib/pki/addon/components/page/pki-issuer-details.js rename to ui/lib/pki/addon/components/page/pki-issuer-details.ts index 09815dee06..52b9718d37 100644 --- a/ui/lib/pki/addon/components/page/pki-issuer-details.js +++ b/ui/lib/pki/addon/components/page/pki-issuer-details.ts @@ -5,7 +5,12 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; +import type PkiIssuerModel from 'vault/models/pki/issuer'; -export default class PkiIssuerDetailsComponent extends Component { +interface Args { + issuer: PkiIssuerModel; +} + +export default class PkiIssuerDetailsComponent extends Component { @tracked showRotationModal = false; } diff --git a/ui/lib/pki/addon/components/page/pki-issuer-edit.ts b/ui/lib/pki/addon/components/page/pki-issuer-edit.ts index 6cef16de4e..4123235417 100644 --- a/ui/lib/pki/addon/components/page/pki-issuer-edit.ts +++ b/ui/lib/pki/addon/components/page/pki-issuer-edit.ts @@ -10,9 +10,9 @@ import { action } from '@ember/object'; import { task } from 'ember-concurrency'; import { waitFor } from '@ember/test-waiters'; import errorMessage from 'vault/utils/error-message'; -import RouterService from '@ember/routing/router-service'; -import FlashMessageService from 'vault/services/flash-messages'; -import PkiIssuerModel from 'vault/models/pki/issuer'; +import type RouterService from '@ember/routing/router-service'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type PkiIssuerModel from 'vault/models/pki/issuer'; interface Args { model: PkiIssuerModel; diff --git a/ui/lib/pki/addon/components/page/pki-issuer-generate-intermediate.js b/ui/lib/pki/addon/components/page/pki-issuer-generate-intermediate.ts similarity index 60% rename from ui/lib/pki/addon/components/page/pki-issuer-generate-intermediate.js rename to ui/lib/pki/addon/components/page/pki-issuer-generate-intermediate.ts index 50bdb871b8..6cd3194181 100644 --- a/ui/lib/pki/addon/components/page/pki-issuer-generate-intermediate.js +++ b/ui/lib/pki/addon/components/page/pki-issuer-generate-intermediate.ts @@ -1,6 +1,11 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; +import type PkiActionModel from 'vault/vault/models/pki/action'; -export default class PagePkiIssuerGenerateIntermediateComponent extends Component { +interface Args { + model: PkiActionModel; +} + +export default class PagePkiIssuerGenerateIntermediateComponent extends Component { @tracked title = 'Generate intermediate CSR'; } diff --git a/ui/lib/pki/addon/components/page/pki-issuer-generate-root.js b/ui/lib/pki/addon/components/page/pki-issuer-generate-root.ts similarity index 60% rename from ui/lib/pki/addon/components/page/pki-issuer-generate-root.js rename to ui/lib/pki/addon/components/page/pki-issuer-generate-root.ts index 58bb6de42f..61cecb7562 100644 --- a/ui/lib/pki/addon/components/page/pki-issuer-generate-root.js +++ b/ui/lib/pki/addon/components/page/pki-issuer-generate-root.ts @@ -1,6 +1,11 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; +import type PkiActionModel from 'vault/vault/models/pki/action'; -export default class PagePkiIssuerGenerateRootComponent extends Component { +interface Args { + model: PkiActionModel; +} + +export default class PagePkiIssuerGenerateRootComponent extends Component { @tracked title = 'Generate root'; } diff --git a/ui/lib/pki/addon/components/page/pki-issuer-import.js b/ui/lib/pki/addon/components/page/pki-issuer-import.ts similarity index 60% rename from ui/lib/pki/addon/components/page/pki-issuer-import.js rename to ui/lib/pki/addon/components/page/pki-issuer-import.ts index 8a5b7c444a..2430984ee5 100644 --- a/ui/lib/pki/addon/components/page/pki-issuer-import.js +++ b/ui/lib/pki/addon/components/page/pki-issuer-import.ts @@ -1,6 +1,11 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; +import type PkiActionModel from 'vault/vault/models/pki/action'; -export default class PagePkiIssuerImportComponent extends Component { +interface Args { + model: PkiActionModel; +} + +export default class PagePkiIssuerImportComponent extends Component { @tracked title = 'Import a CA'; } diff --git a/ui/lib/pki/addon/components/page/pki-issuer-rotate-root.ts b/ui/lib/pki/addon/components/page/pki-issuer-rotate-root.ts index 400b47feac..c5f4ff623f 100644 --- a/ui/lib/pki/addon/components/page/pki-issuer-rotate-root.ts +++ b/ui/lib/pki/addon/components/page/pki-issuer-rotate-root.ts @@ -5,14 +5,13 @@ import { action } from '@ember/object'; import { waitFor } from '@ember/test-waiters'; import { task } from 'ember-concurrency'; import errorMessage from 'vault/utils/error-message'; -// TYPES -import Store from '@ember-data/store'; -import Router from '@ember/routing/router'; -import FlashMessageService from 'vault/services/flash-messages'; -import SecretMountPath from 'vault/services/secret-mount-path'; -import PkiIssuerModel from 'vault/models/pki/issuer'; -import PkiActionModel from 'vault/vault/models/pki/action'; -import { Breadcrumb, ValidationMap } from 'vault/vault/app-types'; +import type Store from '@ember-data/store'; +import type Router from '@ember/routing/router'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type SecretMountPath from 'vault/services/secret-mount-path'; +import type PkiIssuerModel from 'vault/models/pki/issuer'; +import type PkiActionModel from 'vault/vault/models/pki/action'; +import type { Breadcrumb, ValidationMap } from 'vault/vault/app-types'; interface Args { oldRoot: PkiIssuerModel; diff --git a/ui/lib/pki/addon/components/page/pki-key-details.ts b/ui/lib/pki/addon/components/page/pki-key-details.ts index c164b6cb4d..ebcf91a02b 100644 --- a/ui/lib/pki/addon/components/page/pki-key-details.ts +++ b/ui/lib/pki/addon/components/page/pki-key-details.ts @@ -3,13 +3,13 @@ * SPDX-License-Identifier: MPL-2.0 */ -import { action } from '@ember/object'; import Component from '@glimmer/component'; -import RouterService from '@ember/routing/router-service'; -import FlashMessageService from 'vault/services/flash-messages'; +import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import errorMessage from 'vault/utils/error-message'; -import PkiKeyModel from 'vault/models/pki/key'; +import type RouterService from '@ember/routing/router-service'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type PkiKeyModel from 'vault/models/pki/key'; interface Args { key: PkiKeyModel; } diff --git a/ui/lib/pki/addon/components/page/pki-overview.ts b/ui/lib/pki/addon/components/page/pki-overview.ts index 2b261372ed..c72baff3f9 100644 --- a/ui/lib/pki/addon/components/page/pki-overview.ts +++ b/ui/lib/pki/addon/components/page/pki-overview.ts @@ -3,15 +3,14 @@ * SPDX-License-Identifier: MPL-2.0 */ +import Component from '@glimmer/component'; import { action } from '@ember/object'; import { tracked } from '@glimmer/tracking'; import { inject as service } from '@ember/service'; -import Component from '@glimmer/component'; -// TYPES -import Store from '@ember-data/store'; -import RouterService from '@ember/routing/router-service'; -import PkiIssuerModel from 'vault/models/pki/issuer'; -import PkiRoleModel from 'vault/models/pki/role'; +import type Store from '@ember-data/store'; +import type RouterService from '@ember/routing/router-service'; +import type PkiIssuerModel from 'vault/models/pki/issuer'; +import type PkiRoleModel from 'vault/models/pki/role'; interface Args { issuers: PkiIssuerModel | number; diff --git a/ui/lib/pki/addon/components/page/pki-role-details.ts b/ui/lib/pki/addon/components/page/pki-role-details.ts index 2e9a27f9a1..36bf046085 100644 --- a/ui/lib/pki/addon/components/page/pki-role-details.ts +++ b/ui/lib/pki/addon/components/page/pki-role-details.ts @@ -3,14 +3,14 @@ * SPDX-License-Identifier: MPL-2.0 */ -import { action } from '@ember/object'; -import RouterService from '@ember/routing/router-service'; import Component from '@glimmer/component'; -import FlashMessageService from 'vault/services/flash-messages'; -import SecretMountPath from 'vault/services/secret-mount-path'; +import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import errorMessage from 'vault/utils/error-message'; -import PkiRoleModel from 'vault/models/pki/role'; +import type SecretMountPath from 'vault/services/secret-mount-path'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type RouterService from '@ember/routing/router-service'; +import type PkiRoleModel from 'vault/models/pki/role'; interface Args { role: PkiRoleModel; diff --git a/ui/lib/pki/addon/components/page/pki-tidy-form.ts b/ui/lib/pki/addon/components/page/pki-tidy-form.ts index ed4e0d75b1..0b8e62237a 100644 --- a/ui/lib/pki/addon/components/page/pki-tidy-form.ts +++ b/ui/lib/pki/addon/components/page/pki-tidy-form.ts @@ -4,15 +4,14 @@ */ import Component from '@glimmer/component'; -import errorMessage from 'vault/utils/error-message'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import { task } from 'ember-concurrency'; import { waitFor } from '@ember/test-waiters'; import { tracked } from '@glimmer/tracking'; - -import PkiTidyModel from 'vault/models/pki/tidy'; -import RouterService from '@ember/routing/router-service'; +import errorMessage from 'vault/utils/error-message'; +import type PkiTidyModel from 'vault/models/pki/tidy'; +import type RouterService from '@ember/routing/router-service'; interface Args { tidy: PkiTidyModel; diff --git a/ui/lib/pki/addon/components/parsed-certificate-info-rows.js b/ui/lib/pki/addon/components/parsed-certificate-info-rows.ts similarity index 86% rename from ui/lib/pki/addon/components/parsed-certificate-info-rows.js rename to ui/lib/pki/addon/components/parsed-certificate-info-rows.ts index 57da9b45a4..a322d6a040 100644 --- a/ui/lib/pki/addon/components/parsed-certificate-info-rows.js +++ b/ui/lib/pki/addon/components/parsed-certificate-info-rows.ts @@ -1,5 +1,6 @@ import Component from '@glimmer/component'; import { parsedParameterKeys } from 'vault/utils/parse-pki-cert-oids'; +import { ParsedCertificateData } from 'vault/vault/utils/parse-pki-cert'; /** * @module ParsedCertificateInfoRowsComponent @@ -13,11 +14,23 @@ import { parsedParameterKeys } from 'vault/utils/parse-pki-cert-oids'; * * @param {object} model - object of parsed attributes from parse-pki-cert util */ -export default class ParsedCertificateInfoRowsComponent extends Component { + +interface AttrOptions { + [key: string]: { + label?: string; + formatDate?: string; + }; +} + +interface Args { + model: ParsedCertificateData; +} + +export default class ParsedCertificateInfoRowsComponent extends Component { get possibleFields() { // We show common name elsewhere on the details view, so no need to render it here const fieldKeys = parsedParameterKeys.filter((k) => k !== 'common_name'); - const attrsByKey = { + const attrsByKey: AttrOptions = { other_sans: { label: 'Other SANs' }, alt_names: { label: 'Subject Alternative Names (SANs)' }, uri_sans: { label: 'URI SANs' }, diff --git a/ui/lib/pki/addon/components/pki-generate-csr.ts b/ui/lib/pki/addon/components/pki-generate-csr.ts index 4542528780..621f381b02 100644 --- a/ui/lib/pki/addon/components/pki-generate-csr.ts +++ b/ui/lib/pki/addon/components/pki-generate-csr.ts @@ -10,10 +10,10 @@ import { action } from '@ember/object'; import { task } from 'ember-concurrency'; import { waitFor } from '@ember/test-waiters'; import { expandAttributeMeta } from 'vault/utils/field-to-attrs'; -import FlashMessageService from 'vault/services/flash-messages'; -import PkiActionModel from 'vault/models/pki/action'; import errorMessage from 'vault/utils/error-message'; -import { ValidationMap } from 'vault/vault/app-types'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type PkiActionModel from 'vault/models/pki/action'; +import type { ValidationMap } from 'vault/vault/app-types'; interface Args { model: PkiActionModel; diff --git a/ui/lib/pki/addon/components/pki-generate-root.ts b/ui/lib/pki/addon/components/pki-generate-root.ts index 856edc538d..7389e47adb 100644 --- a/ui/lib/pki/addon/components/pki-generate-root.ts +++ b/ui/lib/pki/addon/components/pki-generate-root.ts @@ -3,18 +3,18 @@ * SPDX-License-Identifier: MPL-2.0 */ +import Component from '@glimmer/component'; import { action } from '@ember/object'; -import RouterService from '@ember/routing/router-service'; import { service } from '@ember/service'; import { waitFor } from '@ember/test-waiters'; -import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { task } from 'ember-concurrency'; -import PkiActionModel from 'vault/models/pki/action'; -import PkiUrlsModel from 'vault/models/pki/urls'; -import FlashMessageService from 'vault/services/flash-messages'; import errorMessage from 'vault/utils/error-message'; -import { ValidationMap } from 'vault/vault/app-types'; +import type PkiActionModel from 'vault/models/pki/action'; +import type PkiUrlsModel from 'vault/models/pki/urls'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type RouterService from '@ember/routing/router-service'; +import type { ValidationMap } from 'vault/vault/app-types'; interface AdapterOptions { actionType: string; diff --git a/ui/lib/pki/addon/components/pki-generate-toggle-groups.ts b/ui/lib/pki/addon/components/pki-generate-toggle-groups.ts index 6f38aed300..9ab64c1f87 100644 --- a/ui/lib/pki/addon/components/pki-generate-toggle-groups.ts +++ b/ui/lib/pki/addon/components/pki-generate-toggle-groups.ts @@ -7,8 +7,8 @@ import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; import { keyParamsByType } from 'pki/utils/action-params'; -import PkiActionModel from 'vault/models/pki/action'; -import { ModelValidations } from 'vault/vault/app-types'; +import type PkiActionModel from 'vault/models/pki/action'; +import type { ModelValidations } from 'vault/vault/app-types'; interface Args { model: PkiActionModel; diff --git a/ui/lib/pki/addon/components/pki-import-pem-bundle.ts b/ui/lib/pki/addon/components/pki-import-pem-bundle.ts index 2c2caf8ab5..67658399dc 100644 --- a/ui/lib/pki/addon/components/pki-import-pem-bundle.ts +++ b/ui/lib/pki/addon/components/pki-import-pem-bundle.ts @@ -3,15 +3,15 @@ * SPDX-License-Identifier: MPL-2.0 */ -import { action } from '@ember/object'; import Component from '@glimmer/component'; -import FlashMessageService from 'vault/services/flash-messages'; +import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import { task } from 'ember-concurrency'; import { tracked } from '@glimmer/tracking'; import { waitFor } from '@ember/test-waiters'; import errorMessage from 'vault/utils/error-message'; -import PkiActionModel from 'vault/models/pki/action'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type PkiActionModel from 'vault/models/pki/action'; /** * @module PkiImportPemBundle diff --git a/ui/lib/pki/addon/components/pki-key-form.js b/ui/lib/pki/addon/components/pki-key-form.ts similarity index 75% rename from ui/lib/pki/addon/components/pki-key-form.js rename to ui/lib/pki/addon/components/pki-key-form.ts index 07e8d1ab05..721c304e32 100644 --- a/ui/lib/pki/addon/components/pki-key-form.js +++ b/ui/lib/pki/addon/components/pki-key-form.ts @@ -7,8 +7,11 @@ import Component from '@glimmer/component'; import { inject as service } from '@ember/service'; import { task } from 'ember-concurrency'; import { tracked } from '@glimmer/tracking'; -import errorMessage from 'vault/utils/error-message'; import { waitFor } from '@ember/test-waiters'; +import errorMessage from 'vault/utils/error-message'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type PkiKeyModel from 'vault/models/pki/key'; +import type { ValidationMap } from 'vault/app-types'; /** * @module PkiKeyForm @@ -24,16 +27,21 @@ import { waitFor } from '@ember/test-waiters'; * @callback onSave - Callback triggered on save success. */ -export default class PkiKeyForm extends Component { - @service flashMessages; +interface Args { + model: PkiKeyModel; + onSave: CallableFunction; +} - @tracked errorBanner; - @tracked invalidFormAlert; - @tracked modelValidations; +export default class PkiKeyForm extends Component { + @service declare readonly flashMessages: FlashMessageService; + + @tracked errorBanner = ''; + @tracked invalidFormAlert = ''; + @tracked modelValidations: ValidationMap | null = null; @task @waitFor - *save(event) { + *save(event: Event) { event.preventDefault(); try { const { isNew, keyName } = this.args.model; diff --git a/ui/lib/pki/addon/components/pki-key-import.js b/ui/lib/pki/addon/components/pki-key-import.ts similarity index 74% rename from ui/lib/pki/addon/components/pki-key-import.js rename to ui/lib/pki/addon/components/pki-key-import.ts index 804141bc95..652e9a86ab 100644 --- a/ui/lib/pki/addon/components/pki-key-import.js +++ b/ui/lib/pki/addon/components/pki-key-import.ts @@ -3,14 +3,16 @@ * SPDX-License-Identifier: MPL-2.0 */ -import { action } from '@ember/object'; import Component from '@glimmer/component'; +import { action } from '@ember/object'; import { task } from 'ember-concurrency'; import { tracked } from '@glimmer/tracking'; -import { inject as service } from '@ember/service'; -import errorMessage from 'vault/utils/error-message'; -import trimRight from 'vault/utils/trim-right'; import { waitFor } from '@ember/test-waiters'; +import { inject as service } from '@ember/service'; +import trimRight from 'vault/utils/trim-right'; +import errorMessage from 'vault/utils/error-message'; +import type PkiKeyModel from 'vault/models/pki/key'; +import type FlashMessageService from 'vault/services/flash-messages'; /** * @module PkiKeyImport @@ -25,16 +27,21 @@ import { waitFor } from '@ember/test-waiters'; * @callback onCancel - Callback triggered when cancel button is clicked. * @callback onSubmit - Callback triggered on submit success. */ +interface Args { + model: PkiKeyModel; + onSave: CallableFunction; + onCancel: CallableFunction; +} -export default class PkiKeyImport extends Component { - @service flashMessages; +export default class PkiKeyImport extends Component { + @service declare readonly flashMessages: FlashMessageService; - @tracked errorBanner; - @tracked invalidFormAlert; + @tracked errorBanner = ''; + @tracked invalidFormAlert = ''; @task @waitFor - *submitForm(event) { + *submitForm(event: Event) { event.preventDefault(); try { const { keyName } = this.args.model; @@ -48,7 +55,7 @@ export default class PkiKeyImport extends Component { } @action - onFileUploaded({ value, filename }) { + onFileUploaded({ value, filename }: { value: string; filename: string }) { this.args.model.pemBundle = value; if (!this.args.model.keyName) { const trimmedFileName = trimRight(filename, ['.json', '.pem']); diff --git a/ui/lib/pki/addon/components/pki-key-parameters.js b/ui/lib/pki/addon/components/pki-key-parameters.js deleted file mode 100644 index ef6f33cf6c..0000000000 --- a/ui/lib/pki/addon/components/pki-key-parameters.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) HashiCorp, Inc. - * SPDX-License-Identifier: MPL-2.0 - */ - -import Component from '@glimmer/component'; -import { action } from '@ember/object'; - -/** - * @module PkiKeyParameters - * PkiKeyParameters components are used to display a list of key bit options depending on the selected key type. The key bits field is disabled until a key type is selected. - * If the component renders in a group, other attrs may be passed in and will be rendered using the component - * @example - * ```js - * - * ``` - * @param {class} model - The pki/role model. - * @param {string} fields - Array of attributes from a formFieldGroup generated by the @withFormFields decorator ex: [{ name: 'attrName', type: 'string', options: {...} }] - */ - -// first value in array is the default bits for that key type -const KEY_BITS_OPTIONS = { - rsa: ['2048', '3072', '4096', '0'], - ec: ['256', '224', '384', '521', '0'], - ed25519: ['0'], - any: ['0'], -}; - -export default class PkiKeyParameters extends Component { - get keyBitOptions() { - return KEY_BITS_OPTIONS[this.args.model.keyType]; - } - - @action handleSelection(name, selection) { - this.args.model[name] = selection; - - if (name === 'keyType') { - this.args.model.keyBits = Object.keys(KEY_BITS_OPTIONS).includes(selection) - ? KEY_BITS_OPTIONS[selection][0] - : ''; - } - } - - @action onKeyBitsChange({ target }) { - this.handleSelection(target.name, target.value); - } -} diff --git a/ui/lib/pki/addon/components/pki-key-parameters.ts b/ui/lib/pki/addon/components/pki-key-parameters.ts new file mode 100644 index 0000000000..0041f4ba86 --- /dev/null +++ b/ui/lib/pki/addon/components/pki-key-parameters.ts @@ -0,0 +1,67 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: MPL-2.0 + */ + +import Component from '@glimmer/component'; +import { action } from '@ember/object'; +import type PkiRoleModel from 'vault/models/pki/role'; +import type PkiKeyModel from 'vault/models/pki/key'; +import type PkiActionModel from 'vault/models/pki/action'; +import type { HTMLElementEvent } from 'forms'; +/** + * @module PkiKeyParameters + * PkiKeyParameters components are used to display a list of key bit options depending on the selected key type. The key bits field is disabled until a key type is selected. + * If the component renders in a group, other attrs may be passed in and will be rendered using the component + * @example + * ```js + * + * ``` + * @param {class} model - The pki/role, pki/action, pki/key model. + * @param {string} fields - Array of attributes from a formFieldGroup generated by the @withFormFields decorator ex: [{ name: 'attrName', type: 'string', options: {...} }] + */ +interface Args { + model: PkiRoleModel | PkiKeyModel | PkiActionModel; +} +interface ModelAttributeName { + keyType: string; + keyBits: string; +} +interface TypeOptions { + rsa: string; + ec: string; + ed25519: string; + any: string; +} +interface BitOptions { + [key: string]: Array; +} + +// first value in array is the default bits for that key type +const KEY_BITS_OPTIONS: BitOptions = { + rsa: ['2048', '3072', '4096', '0'], + ec: ['256', '224', '384', '521', '0'], + ed25519: ['0'], + any: ['0'], +}; + +export default class PkiKeyParameters extends Component { + get keyBitOptions() { + if (!this.args.model.keyType) return []; + + return KEY_BITS_OPTIONS[this.args.model.keyType]; + } + + @action handleSelection(name: string, selection: string) { + this.args.model[name as keyof ModelAttributeName] = selection; + + if (name === 'keyType' && Object.keys(KEY_BITS_OPTIONS)?.includes(selection)) { + const bitOptions = KEY_BITS_OPTIONS[selection as keyof TypeOptions]; + this.args.model.keyBits = bitOptions?.firstObject; + } + } + + @action onKeyBitsChange(event: HTMLElementEvent) { + this.handleSelection(event.target.name, event.target.value); + } +} diff --git a/ui/lib/pki/addon/components/pki-not-valid-after-form.ts b/ui/lib/pki/addon/components/pki-not-valid-after-form.ts index 86bef8baad..91a344b528 100644 --- a/ui/lib/pki/addon/components/pki-not-valid-after-form.ts +++ b/ui/lib/pki/addon/components/pki-not-valid-after-form.ts @@ -6,8 +6,8 @@ import Component from '@glimmer/component'; import { action } from '@ember/object'; import { tracked } from '@glimmer/tracking'; -import { HTMLElementEvent } from 'forms'; import { format } from 'date-fns'; +import type { HTMLElementEvent } from 'forms'; /** * components are used to manage two mutually exclusive role options in the form. diff --git a/ui/lib/pki/addon/components/pki-role-form.js b/ui/lib/pki/addon/components/pki-role-form.ts similarity index 63% rename from ui/lib/pki/addon/components/pki-role-form.js rename to ui/lib/pki/addon/components/pki-role-form.ts index 7f0d329ada..6243f9c1fc 100644 --- a/ui/lib/pki/addon/components/pki-role-form.js +++ b/ui/lib/pki/addon/components/pki-role-form.ts @@ -8,6 +8,13 @@ import { inject as service } from '@ember/service'; import { task } from 'ember-concurrency'; import { tracked } from '@glimmer/tracking'; import { action } from '@ember/object'; +import errorMessage from 'vault/utils/error-message'; +import type Store from '@ember-data/store'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type SecretMountPathService from 'vault/services/secret-mount-path'; +import type PkiRoleModel from 'vault/models/pki/role'; +import type PkiIssuerModel from 'vault/models/pki/issuer'; +import type { ValidationMap } from 'vault/app-types'; /** * @module PkiRoleForm @@ -25,18 +32,24 @@ import { action } from '@ember/object'; * @param {onSave} onSave - Callback triggered on save success. */ -export default class PkiRoleForm extends Component { - @service store; - @service flashMessages; - @service secretMountPath; +interface Args { + role: PkiRoleModel; + issuers: PkiIssuerModel[]; + onSave: CallableFunction; +} - @tracked errorBanner; - @tracked invalidFormAlert; - @tracked modelValidations; +export default class PkiRoleForm extends Component { + @service declare readonly store: Store; + @service declare readonly flashMessages: FlashMessageService; + @service declare readonly secretMountPath: SecretMountPathService; + + @tracked errorBanner = ''; + @tracked invalidFormAlert = ''; + @tracked modelValidations: ValidationMap | null = null; @tracked showDefaultIssuer = true; - constructor() { - super(...arguments); + constructor(owner: unknown, args: Args) { + super(owner, args); this.showDefaultIssuer = this.args.role.issuerRef === 'default'; } @@ -47,20 +60,8 @@ export default class PkiRoleForm extends Component { }); } - get breadcrumbs() { - const crumbs = [ - { label: 'secrets', route: 'secrets', linkExternal: true }, - { label: this.secretMountPath.currentPath, route: 'overview' }, - { label: 'roles', route: 'roles.index' }, - ]; - if (!this.args.role.isNew) { - crumbs.push({ label: this.args.role.id, route: 'roles.role.details' }, { label: 'edit' }); - } - return crumbs; - } - @task - *save(event) { + *save(event: Event) { event.preventDefault(); try { const { isValid, state, invalidFormMessage } = this.args.role.validate(); @@ -73,8 +74,7 @@ export default class PkiRoleForm extends Component { this.args.onSave(); } } catch (error) { - const message = error.errors ? error.errors.join('. ') : error.message; - this.errorBanner = message; + this.errorBanner = errorMessage(error); this.invalidFormAlert = 'There was an error submitting this form.'; } } diff --git a/ui/lib/pki/addon/components/pki-role-generate.ts b/ui/lib/pki/addon/components/pki-role-generate.ts index a4ee5df513..03dc8db6ad 100644 --- a/ui/lib/pki/addon/components/pki-role-generate.ts +++ b/ui/lib/pki/addon/components/pki-role-generate.ts @@ -7,14 +7,14 @@ import Component from '@glimmer/component'; import { action } from '@ember/object'; import { task } from 'ember-concurrency'; import { service } from '@ember/service'; -import Router from '@ember/routing/router'; -import Store from '@ember-data/store'; import { tracked } from '@glimmer/tracking'; import errorMessage from 'vault/utils/error-message'; -import FlashMessageService from 'vault/services/flash-messages'; -import DownloadService from 'vault/services/download'; -import PkiCertificateGenerateModel from 'vault/models/pki/certificate/generate'; -import PkiCertificateSignModel from 'vault/models/pki/certificate/sign'; +import type Router from '@ember/routing/router'; +import type Store from '@ember-data/store'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type DownloadService from 'vault/services/download'; +import type PkiCertificateGenerateModel from 'vault/models/pki/certificate/generate'; +import type PkiCertificateSignModel from 'vault/models/pki/certificate/sign'; interface Args { onSuccess: CallableFunction; diff --git a/ui/lib/pki/addon/components/pki-sign-intermediate-form.ts b/ui/lib/pki/addon/components/pki-sign-intermediate-form.ts index 2c129b786c..937149f4a0 100644 --- a/ui/lib/pki/addon/components/pki-sign-intermediate-form.ts +++ b/ui/lib/pki/addon/components/pki-sign-intermediate-form.ts @@ -3,16 +3,16 @@ * SPDX-License-Identifier: MPL-2.0 */ +import Component from '@glimmer/component'; import { action } from '@ember/object'; import { service } from '@ember/service'; import { waitFor } from '@ember/test-waiters'; -import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import { task } from 'ember-concurrency'; -import PkiCertificateSignIntermediate from 'vault/models/pki/certificate/sign-intermediate'; -import FlashMessageService from 'vault/services/flash-messages'; import errorMessage from 'vault/utils/error-message'; -import { ValidationMap } from 'vault/vault/app-types'; +import type PkiCertificateSignIntermediate from 'vault/models/pki/certificate/sign-intermediate'; +import type FlashMessageService from 'vault/services/flash-messages'; +import type { ValidationMap } from 'vault/vault/app-types'; interface Args { onCancel: CallableFunction; diff --git a/ui/types/vault/models/pki/key.d.ts b/ui/types/vault/models/pki/key.d.ts new file mode 100644 index 0000000000..15275f6246 --- /dev/null +++ b/ui/types/vault/models/pki/key.d.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) HashiCorp, Inc. + * SPDX-License-Identifier: MPL-2.0 + */ + +import Model from '@ember-data/model'; +import { ModelValidations } from 'vault/app-types'; + +export default class PkiKeyModel extends Model { + secretMountPath: class; + keyId: string; + keyName: string; + type: string; + keyType: string; + keyBits: string; + pemBundle: string; + privateKey: string; + isNew: boolean; + get backend(): string; + get canRead(): boolean; + get canEdit(): boolean; + get canDelete(): boolean; + get canGenerateKey(): boolean; + get canImportKey(): boolean; + validate(): ModelValidations; +} diff --git a/ui/types/vault/models/pki/role.d.ts b/ui/types/vault/models/pki/role.d.ts new file mode 100644 index 0000000000..db059b1f52 --- /dev/null +++ b/ui/types/vault/models/pki/role.d.ts @@ -0,0 +1,13 @@ +import Model from '@ember-data/model'; +import { FModelValidations } from 'vault/app-types'; + +export default class PkiRoleModel extends Model { + get useOpenAPI(): boolean; + name: string; + issuerRef: string; + getHelpUrl(backendPath: string): string; + validate(): ModelValidations; + isNew: boolean; + keyType: string; + keyBits: string | undefined; +}