/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: BUSL-1.1 */ import Component from '@glimmer/component'; import { action } from '@ember/object'; import { task } from 'ember-concurrency'; import { service } from '@ember/service'; import { tracked } from '@glimmer/tracking'; import errorMessage from 'vault/utils/error-message'; 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; model: PkiCertificateGenerateModel | PkiCertificateSignModel; type: string; } export default class PkiRoleGenerate extends Component { @service declare readonly router: Router; @service declare readonly store: Store; @service declare readonly flashMessages: FlashMessageService; @service declare readonly download: DownloadService; @tracked errorBanner = ''; @tracked invalidFormAlert = ''; get verb() { return this.args.type === 'sign' ? 'sign' : 'generate'; } @task *save(evt: Event) { evt.preventDefault(); this.errorBanner = ''; const { model, onSuccess } = this.args; try { yield model.save(); onSuccess(); } catch (err) { this.errorBanner = errorMessage(err, `Could not ${this.verb} certificate. See Vault logs for details.`); this.invalidFormAlert = 'There was an error submitting this form.'; } } @action cancel() { this.args.model.unloadRecord(); this.router.transitionTo('vault.cluster.secrets.backend.pki.roles.role.details'); } }