blob: 5254f2efa4a246ce3cea8c3a06755c727f42a1db [file] [log] [blame] [edit]
<PageHeader as |p|>
<p.top>
<Page::Breadcrumbs @breadcrumbs={{@breadcrumbs}} />
</p.top>
<p.levelLeft>
<h1 class="title is-3" data-test-pki-page-title>
{{if @newRootModel.id "View issuer certificate" "Generate new root"}}
</h1>
</p.levelLeft>
</PageHeader>
{{#if @newRootModel.id}}
<Toolbar>
<ToolbarActions>
<ToolbarLink
@route="issuers.issuer.cross-sign"
@type="pen-tool"
@model={{@newRootModel.issuerId}}
data-test-pki-issuer-cross-sign
>
Cross-sign issuers
</ToolbarLink>
<ToolbarLink
@route="issuers.issuer.sign"
@type="pen-tool"
@model={{@newRootModel.issuerId}}
data-test-pki-issuer-sign-int
>
Sign Intermediate
</ToolbarLink>
<BasicDropdown @class="popup-menu" @horizontalPosition="auto-right" @verticalPosition="below" as |D|>
<D.Trigger
data-test-popup-menu-trigger
class={{concat "toolbar-link" (if D.isOpen " is-active")}}
@htmlTag="button"
data-test-issuer-download
>
Download
<Chevron @direction="down" @isButton={{true}} />
</D.Trigger>
<D.Content @defaultClass="popup-menu-content">
<nav class="box menu" aria-label="snapshots actions">
<ul class="menu-list">
<li class="action">
<DownloadButton
class="link"
@filename={{@newRootModel.issuerId}}
@extension="pem"
@fetchData={{fn this.fetchDataForDownload "pem"}}
data-test-issuer-download-type="pem"
>
PEM format
</DownloadButton>
</li>
<li class="action">
<DownloadButton
class="link"
@filename={{@newRootModel.issuerId}}
@extension="der"
@fetchData={{fn this.fetchDataForDownload "der"}}
data-test-issuer-download-type="der"
>
DER format
</DownloadButton>
</li>
</ul>
</nav>
</D.Content>
</BasicDropdown>
<ToolbarLink @route="issuers.issuer.edit" @model={{@newRootModel.issuerId}} data-test-pki-issuer-configure>
Configure
</ToolbarLink>
</ToolbarActions>
</Toolbar>
{{/if}}
{{#if @newRootModel.id}}
<div class="has-top-margin-m">
<AlertBanner @title="Next steps" @type="warning">
Your new root has been generated.
{{#if @newRootModel.privateKey}}
Make sure to copy and save the
<strong>private_key</strong>
as it is only available once.
{{/if}}
If you’re ready, you can begin cross-signing issuers now. If not, the option to cross-sign is available when you use
this certificate.
<br />
<LinkTo class="is-marginless" @route="issuers.issuer.cross-sign" @model={{@newRootModel.issuerId}}>
Cross-sign issuers
</LinkTo>
</AlertBanner>
</div>
{{else}}
<div class="box is-bottomless is-marginless is-flex-start">
{{#each this.generateOptions as |option|}}
<RadioCard
class="has-fixed-width"
@title={{option.label}}
@description={{option.description}}
@icon={{option.icon}}
@value={{option.key}}
@groupValue={{this.displayedForm}}
@onChange={{fn (mut this.displayedForm) option.key}}
data-test-radio={{option.key}}
/>
{{/each}}
</div>
{{/if}}
{{#if (eq this.displayedForm "use-old-settings")}}
{{#if @newRootModel.id}}
<PkiInfoTableRows @model={{@newRootModel}} @displayFields={{this.displayFields}} />
<ParsedCertificateInfoRows @model={{@newRootModel.parsedCertificate}} />
<div class="field is-grouped is-fullwidth has-top-margin-l has-bottom-margin-s">
<div class="control">
<button type="button" class="button is-primary" {{on "click" @onComplete}} data-test-done>
Done
</button>
</div>
</div>
{{else}}
{{! USE OLD SETTINGS FORM INPUTS }}
<h2 class="title is-size-5 has-border-bottom-light page-header">
Root parameters
</h2>
<form {{on "submit" (perform this.save)}} data-test-pki-rotate-old-settings-form>
{{#if @parsingErrors}}
<AlertBanner
@title="Not all of the certificate values could be parsed and transferred to new root"
@type="warning"
@message={{@parsingErrors}}
data-test-warning-banner
/>
{{/if}}
{{#if this.alertBanner}}
<AlertBanner @type="danger" @message={{this.alertBanner}} data-test-error-banner />
{{/if}}
{{#let (find-by "name" "commonName" @newRootModel.allFields) as |attr|}}
<FormField @attr={{attr}} @model={{@newRootModel}} @modelValidations={{this.modelValidations}} />
{{/let}}
{{#let (find-by "name" "issuerName" @newRootModel.allFields) as |attr|}}
<FormField @attr={{attr}} @model={{@newRootModel}} @modelValidations={{this.modelValidations}} />
{{/let}}
<div class="box has-slim-padding is-shadowless">
<ToggleButton
data-test-details-toggle
@closedLabel="Old root settings"
@openLabel="Hide old root settings"
@isOpen={{this.showOldSettings}}
@onClick={{fn (mut this.showOldSettings)}}
/>
{{#if this.showOldSettings}}
<PkiInfoTableRows @model={{@oldRoot}} @displayFields={{this.displayFields}} />
<ParsedCertificateInfoRows @model={{@oldRoot.parsedCertificate}} />
{{/if}}
</div>
<div class="field is-grouped box is-fullwidth is-bottomless">
<div class="control">
<button type="submit" class="button is-primary" data-test-pki-rotate-root-save>
Done
</button>
<button {{on "click" @onCancel}} type="button" class="button has-left-margin-s" data-test-pki-rotate-root-cancel>
Cancel
</button>
</div>
{{#if this.invalidFormAlert}}
<div class="control">
<AlertInline
@type="danger"
@paddingTop={{true}}
@message={{this.invalidFormAlert}}
@mimicRefresh={{true}}
data-test-pki-rotate-root-validation-error
/>
</div>
{{/if}}
</div>
</form>
{{/if}}
{{else}}
<PkiGenerateRoot
@model={{@newRootModel}}
@onCancel={{@onCancel}}
@onComplete={{@onComplete}}
@adapterOptions={{hash actionType="rotate-root"}}
/>
{{/if}}