PKI: Fix small routing issues with SecretListHeader (#17526)

* fix routing issues with SecretListHeader

* clean up
This commit is contained in:
Angel Garbarino
2022-10-13 09:57:18 -07:00
committed by GitHub
parent acf8630040
commit 7c974beee4
22 changed files with 89 additions and 64 deletions

View File

@@ -1,8 +1,12 @@
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { next } from '@ember/runloop';
import { getOwner } from '@ember/application';
export default class PkiRolesIssuerController extends Controller {
get mountPoint() {
return getOwner(this).mountPoint;
}
// To prevent production build bug of passing D.actions to on "click": https://github.com/hashicorp/vault/pull/16983
@action onLinkClick(D) {
next(() => D.actions.close());

View File

@@ -0,0 +1,8 @@
import Controller from '@ember/controller';
import { getOwner } from '@ember/application';
export default class PkiRolesIssuerController extends Controller {
get mountPoint() {
return getOwner(this).mountPoint;
}
}

View File

@@ -1,3 +0,0 @@
import Route from '@ember/routing/route';
export default class PkiCertificatesRoute extends Route {}

View File

@@ -4,13 +4,22 @@ import { inject as service } from '@ember/service';
export default class PkiCertificatesIndexRoute extends Route {
@service store;
@service secretMountPath;
@service pathHelp;
beforeModel() {
// Must call this promise before the model hook otherwise it doesn't add OpenApi to record.
return this.pathHelp.getNewModel('pki/pki-certificate-engine', 'pki');
}
model() {
return this.store
.query('pki/pki-certificate-engine', { backend: this.secretMountPath.currentPath })
.then((certificateModel) => {
return { certificateModel, parentModel: this.modelFor('certificates') };
})
.catch((err) => {
if (err.httpStatus === 404) {
return [];
return { parentModel: this.modelFor('certificates') };
} else {
throw err;
}

View File

@@ -1,3 +1,3 @@
import Route from '@ember/routing/route';
export default class ConfigurationDetailsRoute extends Route {}
export default class PkiConfigurationDetailsRoute extends Route {}

View File

@@ -1,3 +1,3 @@
import Route from '@ember/routing/route';
export default class ConfigurationEditRoute extends Route {}
export default class PkiConfigurationEditRoute extends Route {}

View File

@@ -1,3 +1,3 @@
import Route from '@ember/routing/route';
export default class ConfigurationIndexRoute extends Route {}
export default class PkiConfigurationIndexRoute extends Route {}

View File

@@ -1,3 +1,3 @@
import Route from '@ember/routing/route';
export default class ConfigurationTidyRoute extends Route {}
export default class PkiConfigurationTidyRoute extends Route {}

View File

@@ -1,3 +0,0 @@
import Route from '@ember/routing/route';
export default class PkiIssuersRoute extends Route {}

View File

@@ -6,15 +6,23 @@ export default class PkiIssuersIndexRoute extends Route {
@service secretMountPath;
@service pathHelp;
beforeModel() {
// Must call this promise before the model hook otherwise it doesn't add OpenApi to record.
return this.pathHelp.getNewModel('pki/pki-issuer-engine', 'pki');
}
model() {
// the pathHelp service is needed for adding openAPI to the model
this.pathHelp.getNewModel('pki/pki-issuer-engine', 'pki');
return this.store
.query('pki/pki-issuer-engine', { backend: this.secretMountPath.currentPath })
.then((issuersModel) => {
return { issuersModel, parentModel: this.modelFor('issuers') };
})
.catch((err) => {
if (err.httpStatus === 404) {
return [];
return { parentModel: this.modelFor('issuers') };
} else {
throw err;
}

View File

@@ -1,3 +0,0 @@
import Route from '@ember/routing/route';
export default class PkiKeysRoute extends Route {}

View File

@@ -4,13 +4,22 @@ import { inject as service } from '@ember/service';
export default class PkiKeysIndexRoute extends Route {
@service store;
@service secretMountPath;
@service pathHelp;
beforeModel() {
// Must call this promise before the model hook otherwise it doesn't add OpenApi to record.
return this.pathHelp.getNewModel('pki/pki-key-engine', 'pki');
}
model() {
return this.store
.query('pki/pki-key-engine', { backend: this.secretMountPath.currentPath })
.then((keyModel) => {
return { keyModel, parentModel: this.modelFor('keys') };
})
.catch((err) => {
if (err.httpStatus === 404) {
return [];
return { parentModel: this.modelFor('keys') };
} else {
throw err;
}

View File

@@ -1,7 +1,7 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
export default class RolesIndexRoute extends Route {
export default class PkiRolesIndexRoute extends Route {
@service store;
@service secretMountPath;
@service pathHelp;

View File

@@ -1,11 +0,0 @@
<SecretListHeader
@model={{this.model}}
@backendCrumb={{hash
label=this.model.id
text=this.model.id
path="vault.cluster.secrets.backend.list-root"
model=this.model.id
}}
@isEngine={{true}}
/>
{{outlet}}

View File

@@ -1,12 +1,23 @@
<SecretListHeader
@model={{this.model.parentModel}}
@backendCrumb={{hash
label=this.model.parentModel.id
text=this.model.parentModel.id
path="vault.cluster.secrets.backend.list-root"
model=this.model.parentModel.id
}}
@isEngine={{true}}
/>
{{outlet}}
<Toolbar>
{{#if (gt this.model.length 0)}}
{{#if this.model.certificateModel.length}}
<ToolbarFilters>
{{! ARG TODO glimmerize the NavigateInput and refactor so you can use it in an engine }}
</ToolbarFilters>
{{/if}}
</Toolbar>
{{#if (gt this.model.length 0)}}
{{#each this.model as |pkiCertificate|}}
{{#if this.model.certificateModel.length}}
{{#each this.model.certificateModel as |pkiCertificate|}}
<LinkedBlock
class="list-item-row"
@params={{array "certificates.certificate.details" pkiCertificate.id}}
@@ -44,8 +55,8 @@
{{/each}}
{{else}}
<EmptyState @title="PKI not configured" @message="This PKI mount hasn't yet been configured with a certificate issuer.">
<LinkTo @route="configuration.create.index" @model={{this.model}}>
ARG TODO waiting from design for language.
<LinkTo @route="configuration.create.index" @model={{this.model.certificateModel}}>
{{! ARG TODO if configuration of engine not setup then direct toward setting that up otherwise replace with new design language }}
</LinkTo>
</EmptyState>
{{/if}}

View File

@@ -1,11 +0,0 @@
<SecretListHeader
@model={{this.model}}
@backendCrumb={{hash
label=this.model.id
text=this.model.id
path="vault.cluster.secrets.backend.list-root"
model=this.model.id
}}
@isEngine={{true}}
/>
{{outlet}}

View File

@@ -1,3 +1,13 @@
<SecretListHeader
@model={{this.model.parentModel}}
@backendCrumb={{hash
label=this.model.parentModel.id
text=this.model.parentModel.id
path="vault.cluster.secrets.backend.list-root"
model=this.model.parentModel.id
}}
@isEngine={{true}}
/>
<Toolbar>
<ToolbarActions>
<ToolbarLink @params={{array "configuration.create.import-ca"}}>
@@ -27,8 +37,8 @@
</BasicDropdown>
</ToolbarActions>
</Toolbar>
{{#if (gt this.model.length 0)}}
{{#each this.model as |pkiIssuer|}}
{{#if this.model.issuersModel.length}}
{{#each this.model.issuersModel as |pkiIssuer|}}
<LinkedBlock class="list-item-row" @params={{array "roles.role.details" pkiIssuer.id}} @linkPrefix={{this.mountPoint}}>
<div class="level is-mobile">
<div class="level-left">
@@ -72,7 +82,7 @@
{{/each}}
{{else}}
<EmptyState @title="PKI not configured" @message="This PKI mount hasnt yet been configured with a certificate issuer.">
<LinkTo @route="configuration.create.index" @model={{this.model}}>
<LinkTo @route="configuration.create.index" @model={{this.model.issuersModel}}>
Configure PKI
</LinkTo>
</EmptyState>

View File

@@ -1,11 +0,0 @@
<SecretListHeader
@model={{this.model}}
@backendCrumb={{hash
label=this.model.id
text=this.model.id
path="vault.cluster.secrets.backend.list-root"
model=this.model.id
}}
@isEngine={{true}}
/>
{{outlet}}

View File

@@ -1,3 +1,13 @@
<SecretListHeader
@model={{this.model.parentModel}}
@backendCrumb={{hash
label=this.model.parentModel.id
text=this.model.parentModel.id
path="vault.cluster.secrets.backend.list-root"
model=this.model.parentModel.id
}}
@isEngine={{true}}
/>
<Toolbar>
<ToolbarActions>
<ToolbarLink @params={{array "keys.import"}} @type="download">
@@ -11,8 +21,8 @@
<p class="has-padding">Below is information about the private keys used by the issuers to sign certificates. While
certificates represent a public assertion of an identity, private keys represent the private part of that identity, a
secret used to prove who they are and who they trust.</p>
{{#if (gt this.model.length 0)}}
{{#each this.model as |pkiKey|}}
{{#if this.model.keyModel.length}}
{{#each this.model.keyModel as |pkiKey|}}
<LinkedBlock class="list-item-row" @params={{array "roles.role.details" pkiKey.id}} @linkPrefix={{this.mountPoint}}>
<div class="level is-mobile">
<div class="level-left">
@@ -53,7 +63,7 @@
{{/each}}
{{else}}
<EmptyState @title="PKI not configured" @message="This PKI mount hasnt yet been configured with a certificate issuer.">
<LinkTo @route="configuration.create.index" @model={{this.model}}>
<LinkTo @route="configuration.create.index" @model={{this.model.keyModel}}>
ARG TODO waiting for language from design
</LinkTo>
</EmptyState>

View File

@@ -16,7 +16,6 @@
</ToolbarActions>
</Toolbar>
{{! ARG TODO: add conditional for empty state }}
<EmptyState @title="PKI not configured" @message="This PKI mount hasnt yet been configured with a certificate issuer.">
<LinkTo @route="configuration.create.index" @model={{this.model}}>
Configure PKI

View File

@@ -16,7 +16,7 @@
</ToolbarActions>
</Toolbar>
{{#if (gt this.model.roleModel.length 0)}}
{{#if this.model.roleModel.length}}
{{#each this.model.roleModel as |pkiRole|}}
<LinkedBlock class="list-item-row" @params={{array "roles.role.details" pkiRole.id}} @linkPrefix={{this.mountPoint}}>
<div class="level is-mobile">

View File

@@ -1 +0,0 @@
export { default } from 'pki/components/pki-key-usage';