UI - code cleanup (#4699)

* use lazyCapabilities macro in models

* use expandAttributeMeta and fieldToAttrs everywhere

* add angle bracket component polyfill

* use PageHeader component throughout
This commit is contained in:
Matthew Irish 2018-06-12 16:06:37 -05:00 committed by GitHub
parent c4abeb9ea5
commit 924d1b4ddc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
65 changed files with 1025 additions and 1336 deletions

View File

@ -1,7 +1,8 @@
import DS from 'ember-data';
import Ember from 'ember';
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
const { attr } = DS;
const { computed, get } = Ember;
const { computed } = Ember;
const CREATE_FIELDS = ['ttl'];
const DISPLAY_FIELDS = ['accessKey', 'secretKey', 'securityToken', 'leaseId', 'renewable', 'leaseDuration'];
@ -27,18 +28,7 @@ export default DS.Model.extend({
attrs: computed('accessKey', function() {
let keys = this.get('accessKey') ? DISPLAY_FIELDS.slice(0) : CREATE_FIELDS.slice(0);
get(this.constructor, 'attributes').forEach((meta, name) => {
const index = keys.indexOf(name);
if (index === -1) {
return;
}
keys.replace(index, 1, {
type: meta.type,
name,
options: meta.options,
});
});
return keys;
return expandAttributeMeta(this, keys);
}),
toCreds: computed('accessKey', 'secretKey', 'securityToken', 'leaseId', function() {

View File

@ -1,7 +1,7 @@
import Certificate from './pki-certificate';
import Ember from 'ember';
import DS from 'ember-data';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
const { computed } = Ember;
const { attr } = DS;
@ -146,15 +146,6 @@ export default Certificate.extend({
}),
expiration: attr(),
deletePath: queryRecord(
'capabilities',
context => {
const { backend } = context.getProperties('backend');
return {
id: `${backend}/root`,
};
},
'backend'
),
deletePath: lazyCapabilities( apiPath`${'backend'}/root`, 'backend'),
canDeleteRoot: computed.and('deletePath.canDelete', 'deletePath.canSudo'),
});

View File

@ -1,8 +1,9 @@
import Ember from 'ember';
import DS from 'ember-data';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
import fieldToAttrs, { expandAttributeMeta } from 'vault/utils/field-to-attrs';
const { computed, get } = Ember;
const { computed } = Ember;
const { attr } = DS;
export default DS.Model.extend({
@ -74,20 +75,7 @@ export default DS.Model.extend({
serialNumber: attr('string'),
fieldsToAttrs(fieldGroups) {
const attrMap = get(this.constructor, 'attributes');
return fieldGroups.map(group => {
const groupKey = Object.keys(group)[0];
const groupMembers = group[groupKey];
const fields = groupMembers.map(field => {
var meta = attrMap.get(field);
return {
type: meta.type,
name: meta.name,
options: meta.options,
};
});
return { [groupKey]: fields };
});
return fieldToAttrs(this, fieldGroups);
},
fieldDefinition: computed(function() {
@ -104,16 +92,7 @@ export default DS.Model.extend({
attrs: computed('certificate', 'csr', function() {
let keys = this.get('certificate') || this.get('csr') ? this.DISPLAY_FIELDS.slice(0) : [];
const attrMap = get(this.constructor, 'attributes');
keys = keys.map(key => {
let meta = attrMap.get(key);
return {
type: meta.type,
name: meta.name,
options: meta.options,
};
});
return keys;
return expandAttributeMeta(this, keys);
}),
toCreds: computed(
@ -145,15 +124,6 @@ export default DS.Model.extend({
}
),
revokePath: queryRecord(
'capabilities',
context => {
const { backend } = context.getProperties('backend');
return {
id: `${backend}/revoke`,
};
},
'backend'
),
revokePath: lazyCapabilities(apiPath`${'backend'}/revoke`, 'backend'),
canRevoke: computed.alias('revokePath.canUpdate'),
});

View File

@ -1,8 +1,9 @@
import Ember from 'ember';
import DS from 'ember-data';
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
const { attr } = DS;
const { computed, get } = Ember;
const { computed } = Ember;
export default DS.Model.extend({
backend: attr('string'),
@ -10,16 +11,7 @@ export default DS.Model.extend({
pem: attr('string'),
caChain: attr('string'),
attrList(keys) {
const attrMap = get(this.constructor, 'attributes');
keys = keys.map(key => {
let meta = attrMap.get(key);
return {
type: meta.type,
name: meta.name,
options: meta.options,
};
});
return keys;
return expandAttributeMeta(this, keys);
},
//urls

View File

@ -1,6 +1,6 @@
import DS from 'ember-data';
import Ember from 'ember';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
let { attr } = DS;
let { computed } = Ember;
@ -12,20 +12,7 @@ export default DS.Model.extend({
return this.constructor.modelName.split('/')[1];
}),
updatePath: queryRecord(
'capabilities',
context => {
const { policyType, id } = context.getProperties('policyType', 'id');
if (!policyType && id) {
return;
}
return {
id: `sys/policies/${policyType}/${id}`,
};
},
'id',
'policyType'
),
updatePath: lazyCapabilities(apiPath`sys/policies/${'policyType'}/${'id'}`, 'id', 'policyType'),
canDelete: computed.alias('updatePath.canDelete'),
canEdit: computed.alias('updatePath.canUpdate'),
canRead: computed.alias('updatePath.canRead'),

View File

@ -1,9 +1,10 @@
import Ember from 'ember';
import DS from 'ember-data';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
const { attr } = DS;
const { computed, get } = Ember;
const { computed } = Ember;
const CREATE_FIELDS = ['name', 'policy', 'arn'];
export default DS.Model.extend({
@ -24,58 +25,17 @@ export default DS.Model.extend({
}),
attrs: computed(function() {
let keys = CREATE_FIELDS.slice(0);
get(this.constructor, 'attributes').forEach((meta, name) => {
const index = keys.indexOf(name);
if (index === -1) {
return;
}
keys.replace(index, 1, {
type: meta.type,
name,
options: meta.options,
});
});
return keys;
return expandAttributeMeta(this, keys);
}),
updatePath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/roles/${id}`,
};
},
'id',
'backend'
),
updatePath: lazyCapabilities(apiPath`${'backend'}/roles/${'id'}`, 'backend', 'id'),
canDelete: computed.alias('updatePath.canDelete'),
canEdit: computed.alias('updatePath.canUpdate'),
canRead: computed.alias('updatePath.canRead'),
generatePath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/creds/${id}`,
};
},
'id',
'backend'
),
generatePath: lazyCapabilities(apiPath`${'backend'}/creds/${'id'}`, 'backend', 'id'),
canGenerate: computed.alias('generatePath.canUpdate'),
stsPath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/sts/${id}`,
};
},
'id',
'backend'
),
stsPath: lazyCapabilities(apiPath`${'backend'}/sts/${'id'}`, 'backend', 'id'),
canGenerateSTS: computed.alias('stsPath.canUpdate'),
});

View File

@ -1,9 +1,10 @@
import Ember from 'ember';
import DS from 'ember-data';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
import fieldToAttrs from 'vault/utils/field-to-attrs';
const { attr } = DS;
const { computed, get } = Ember;
const { computed } = Ember;
export default DS.Model.extend({
backend: attr('string', {
@ -104,97 +105,20 @@ export default DS.Model.extend({
label: 'Mark Basic Constraints valid when issuing non-CA certificates.',
}),
updatePath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/roles/${id}`,
};
},
'id',
'backend'
),
updatePath: lazyCapabilities(apiPath`${'backend'}/roles/${'id'}`, 'backend', 'id'),
canDelete: computed.alias('updatePath.canDelete'),
canEdit: computed.alias('updatePath.canUpdate'),
canRead: computed.alias('updatePath.canRead'),
generatePath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/issue/${id}`,
};
},
'id',
'backend'
),
generatePath: lazyCapabilities(apiPath`${'backend'}/issue/${'id'}`, 'backend', 'id'),
canGenerate: computed.alias('generatePath.canUpdate'),
signPath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/sign/${id}`,
};
},
'id',
'backend'
),
signPath: lazyCapabilities(apiPath`${'backend'}/sign/${'id'}`, 'backend', 'id'),
canSign: computed.alias('signPath.canUpdate'),
signVerbatimPath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/sign-verbatim/${id}`,
};
},
'id',
'backend'
),
signVerbatimPath: lazyCapabilities(apiPath`${'backend'}/sign-verbatim/${'id'}`, 'backend', 'id'),
canSignVerbatim: computed.alias('signVerbatimPath.canUpdate'),
/*
* this hydrates the map in `fieldGroups` so that it contains
* the actual field information, not just the name of the field
*/
fieldsToAttrs(fieldGroups) {
const attrMap = get(this.constructor, 'attributes');
return fieldGroups.map(group => {
const groupKey = Object.keys(group)[0];
const groupMembers = group[groupKey];
const fields = groupMembers.map(field => {
var meta = attrMap.get(field);
return {
type: meta.type,
name: meta.name,
options: meta.options,
};
});
return { [groupKey]: fields };
});
},
/*
* returns an array of objects that list attributes so that the form can be programmatically generated
* the attributes are pulled from the model's attribute hash
*
* The keys will be used to label each section of the form.
* the 'default' key contains fields that are outside of any grouping
*
* returns an array of objects:
*
* [
* {'default': [ { type: 'string', name: 'keyType', options: { label: 'Key Type'}}]},
* {'Options': [{ type: 'boolean', name: 'allowAnyName', options: {}}]}
* ]
*
*
*/
fieldGroups: computed(function() {
const groups = [
{ default: ['name', 'keyType'] },
@ -227,12 +151,20 @@ export default DS.Model.extend({
'allowedDomains',
],
},
{ 'Extended Key Usage': ['serverFlag', 'clientFlag', 'codeSigningFlag', 'emailProtectionFlag', 'extKeyUsageOids'] },
{
'Extended Key Usage': [
'serverFlag',
'clientFlag',
'codeSigningFlag',
'emailProtectionFlag',
'extKeyUsageOids',
],
},
{
Advanced: ['generateLease', 'noStore', 'basicConstraintsValidForNonCA', 'policyIdentifiers'],
},
];
return this.fieldsToAttrs(Ember.copy(groups, true));
return fieldToAttrs(this, groups);
}),
});

View File

@ -1,9 +1,10 @@
import Ember from 'ember';
import DS from 'ember-data';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
const { attr } = DS;
const { computed, get } = Ember;
const { computed } = Ember;
// these arrays define the order in which the fields will be displayed
// see
@ -124,70 +125,20 @@ export default DS.Model.extend({
attrsForKeyType: computed('keyType', function() {
const keyType = this.get('keyType');
let keys = keyType === 'ca' ? CA_FIELDS.slice(0) : OTP_FIELDS.slice(0);
get(this.constructor, 'attributes').forEach((meta, name) => {
const index = keys.indexOf(name);
if (index === -1) {
return;
}
keys.replace(index, 1, {
type: meta.type,
name,
options: meta.options,
});
});
return keys;
return expandAttributeMeta(this, keys);
}),
updatePath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/roles/${id}`,
};
},
'id',
'backend'
),
updatePath: lazyCapabilities(apiPath`${'backend'}/roles/${'id'}`, 'backend', 'id'),
canDelete: computed.alias('updatePath.canDelete'),
canEdit: computed.alias('updatePath.canUpdate'),
canRead: computed.alias('updatePath.canRead'),
generatePath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/creds/${id}`,
};
},
'id',
'backend'
),
generatePath: lazyCapabilities(apiPath`${'backend'}/creds/${'id'}`, 'backend', 'id'),
canGenerate: computed.alias('generatePath.canUpdate'),
signPath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
return {
id: `${backend}/sign/${id}`,
};
},
'id',
'backend'
),
signPath: lazyCapabilities(apiPath`${'backend'}/sign/${'id'}`, 'backend', 'id'),
canSign: computed.alias('signPath.canUpdate'),
zeroAddressPath: queryRecord(
'capabilities',
context => {
const { backend } = context.getProperties('backend');
return {
id: `${backend}/config/zeroaddress`,
};
},
'backend'
),
zeroAddressPath: lazyCapabilities(apiPath`${'backend'}/config/zeroaddress`, 'backend'),
canEditZeroAddress: computed.alias('zeroAddressPath.canUpdate'),
});

View File

@ -1,6 +1,6 @@
import Ember from 'ember';
import DS from 'ember-data';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
import { fragment } from 'ember-data-model-fragments/attributes';
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
@ -81,16 +81,7 @@ export default DS.Model.extend({
});
},
zeroAddressPath: queryRecord(
'capabilities',
context => {
const { id } = context.getProperties('backend', 'id');
return {
id: `${id}/config/zeroaddress`,
};
},
'id'
),
zeroAddressPath: lazyCapabilities(apiPath`${'id'}/config/zeroaddress`, 'id'),
canEditZeroAddress: computed.alias('zeroAddressPath.canUpdate'),
// aws backend attrs

View File

@ -1,7 +1,8 @@
import DS from 'ember-data';
import Ember from 'ember';
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
const { attr } = DS;
const { computed, get } = Ember;
const { computed } = Ember;
const CREATE_FIELDS = ['username', 'ip'];
const DISPLAY_FIELDS = ['username', 'ip', 'key', 'keyType', 'port'];
@ -18,18 +19,7 @@ export default DS.Model.extend({
port: attr('number'),
attrs: computed('key', function() {
let keys = this.get('key') ? DISPLAY_FIELDS.slice(0) : CREATE_FIELDS.slice(0);
get(this.constructor, 'attributes').forEach((meta, name) => {
const index = keys.indexOf(name);
if (index === -1) {
return;
}
keys.replace(index, 1, {
type: meta.type,
name,
options: meta.options,
});
});
return keys;
return expandAttributeMeta(this, keys);
}),
toCreds: computed('key', function() {
// todo: would this be better copied as an SSH command?

View File

@ -1,7 +1,8 @@
import DS from 'ember-data';
import Ember from 'ember';
import { expandAttributeMeta } from 'vault/utils/field-to-attrs';
const { attr } = DS;
const { computed, get } = Ember;
const { computed } = Ember;
const CREATE_FIELDS = [
'publicKey',
'keyId',
@ -45,17 +46,6 @@ export default DS.Model.extend({
attrs: computed('signedKey', function() {
let keys = this.get('signedKey') ? DISPLAY_FIELDS.slice(0) : CREATE_FIELDS.slice(0);
get(this.constructor, 'attributes').forEach((meta, name) => {
const index = keys.indexOf(name);
if (index === -1) {
return;
}
keys.replace(index, 1, {
type: meta.type,
name,
options: meta.options,
});
});
return keys;
return expandAttributeMeta(this, keys);
}),
});

View File

@ -1,7 +1,7 @@
import Ember from 'ember';
import DS from 'ember-data';
import clamp from 'vault/utils/clamp';
import { queryRecord } from 'ember-computed-query';
import lazyCapabilities, { apiPath } from 'vault/macros/lazy-capabilities';
const { attr } = DS;
const { computed, get, set } = Ember;
@ -120,20 +120,6 @@ export default DS.Model.extend({
readOnly: true,
}),
rotatePath: queryRecord(
'capabilities',
context => {
const { backend, id } = context.getProperties('backend', 'id');
if (!backend && id) {
return;
}
return {
id: `${backend}/keys/${id}/rotate`,
};
},
'id',
'backend'
),
rotatePath: lazyCapabilities(apiPath`${'backend'}/keys/${'id'}/rotate`, 'backend', 'id'),
canRotate: computed.alias('rotatePath.canUpdate'),
});

View File

@ -1,34 +1,34 @@
<header class="page-header">
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}} data-test-link="role-list">
{{backend.id}}
</a>
</li>
<li class="is-active">
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}}>
creds
</a>
</li>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend.show" model.role.name}}>
{{model.role.name}}
</a>
</li>
</ul>
</nav>
<div class="level">
<div class="level-left">
<h1 data-test-title class="title is-3">
{{options.title}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.top>
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}} data-test-link="role-list">
{{backend.id}}
</a>
</li>
<li class="is-active">
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}}>
creds
</a>
</li>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend.show" model.role.name}}>
{{model.role.name}}
</a>
</li>
</ul>
</nav>
</p.top>
<p.levelLeft>
<h1 data-test-title class="title is-3">
{{options.title}}
</h1>
</p.levelLeft>
</PageHeader>
{{#if (or options.generateWithoutInput (get model options.generatedAttr))}}
{{#if loading}}

View File

@ -1,24 +1,22 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{capitalize (pluralize identityType)}}
</h1>
</div>
<div class="level-right">
{{#if (eq identityType "entity")}}
<a href="{{href-to 'vault.cluster.access.identity.merge' (pluralize identityType)}}" class="button has-icon-right is-ghost is-compact" data-test-entity-merge-link=true>
Merge {{pluralize identityType}}
{{i-con glyph="chevron-right" size=11}}
</a>
{{/if}}
<a href="{{href-to 'vault.cluster.access.identity.create' (pluralize identityType)}}" class="button has-icon-right is-ghost is-compact" data-test-entity-create-link=true>
Create {{identityType}}
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
{{capitalize (pluralize identityType)}}
</h1>
</p.levelLeft>
<p.levelRight>
{{#if (eq identityType "entity")}}
<a href="{{href-to 'vault.cluster.access.identity.merge' (pluralize identityType)}}" class="button has-icon-right is-ghost is-compact" data-test-entity-merge-link=true>
Merge {{pluralize identityType}}
{{i-con glyph="chevron-right" size=11}}
</a>
</div>
</div>
</header>
{{/if}}
<a href="{{href-to 'vault.cluster.access.identity.create' (pluralize identityType)}}" class="button has-icon-right is-ghost is-compact" data-test-entity-create-link=true>
Create {{identityType}}
{{i-con glyph="chevron-right" size=11}}
</a>
</p.levelRight>
</PageHeader>
<div class="box is-sideless is-fullwidth is-paddingless is-marginless">
<nav class="tabs sub-nav">
<ul>

View File

@ -1,14 +1,14 @@
<header class="page-header">
<div class="level">
<h1 class="title is-3" data-test-mount-form-header=true>
{{#if (eq mountType "auth")}}
Enable an authentication method
{{else}}
Enable a secrets engine
{{/if}}
</h1>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3" data-test-mount-form-header=true>
{{#if (eq mountType "auth")}}
Enable an authentication method
{{else}}
Enable a secrets engine
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<form {{action (perform mountBackend) on="submit"}}>
<div class="box is-sideless is-fullwidth is-marginless">
{{message-error model=mountModel}}

View File

@ -1,13 +1,11 @@
<div class="box is-shadowless" data-test-not-found>
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3 has-text-grey">
404 Not Found
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3 has-text-grey">
404 Not Found
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-white-bis has-text-grey has-text-centered">
<p>Sorry, we were unable to find any content at <code>{{or model.path path}}</code>.</p>
<p>Double check the url or go back {{home-link text="home"}}.</p>

View File

@ -1,19 +1,19 @@
<header class="page-header">
{{key-value-header
baseKey=(hash display=model.id id=model.idForNav)
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3" data-test-secret-header="true">
PKI Certificate
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=(hash display=model.id id=model.idForNav)
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3" data-test-secret-header="true">
PKI Certificate
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-fullwidth is-sideless is-paddingless is-marginless">
{{message-error model=model}}

View File

@ -1,71 +1,71 @@
<header class="page-header">
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3" data-test-secret-header="true">
{{#if (eq mode "create") }}
Create an AWS Role
{{else if (eq mode 'edit')}}
Edit AWS Role
{{else}}
AWS Role <code>{{model.id}}</code>
{{/if}}
</h1>
</div>
<div class="level-right">
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or model.canUpdate model.canDelete)}}
<div class="control">
{{#secret-link
secret=model.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
}}
Edit role
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{#if model.canGenerate}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials="iam"
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3" data-test-secret-header="true">
{{#if (eq mode "create") }}
Create an AWS Role
{{else if (eq mode 'edit')}}
Edit AWS Role
{{else}}
AWS Role <code>{{model.id}}</code>
{{/if}}
</h1>
</p.levelLeft>
<p.levelRight>
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or model.canUpdate model.canDelete)}}
<div class="control">
{{#secret-link
secret=model.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
}}
Generate IAM
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{#if model.canGenerateSTS}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
queryParams=(query-params action="sts")
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials="sts"
}}
Generate IAM with STS
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
Edit role
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
</div>
{{#if model.canGenerate}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials="iam"
}}
Generate IAM
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{#if model.canGenerateSTS}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
queryParams=(query-params action="sts")
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials="sts"
}}
Generate IAM with STS
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{/if}}
</div>
</div>
</header>
</p.levelRight>
</PageHeader>
{{#if (or (eq mode 'edit') (eq mode 'create'))}}
{{partial 'partials/role-aws/form'}}

View File

@ -1,73 +1,73 @@
<header class="page-header">
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3" data-test-secret-header="true">
{{#if (eq mode "create") }}
Create a PKI Role
{{else if (eq mode 'edit')}}
Edit PKI Role
{{else}}
PKI Role <code>{{model.id}}</code>
{{/if}}
</h1>
</div>
<div class="level-right">
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or model.canUpdate model.canDelete)}}
<div class="control">
{{#secret-link
secret=model.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
data-test-edit-link=true
}}
Edit role
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{#if model.canGenerate}}
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3" data-test-secret-header="true">
{{#if (eq mode "create") }}
Create a PKI Role
{{else if (eq mode 'edit')}}
Edit PKI Role
{{else}}
PKI Role <code>{{model.id}}</code>
{{/if}}
</h1>
</p.levelLeft>
<p.levelRight>
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or model.canUpdate model.canDelete)}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
queryParams=(query-params action="issue")
class="button has-icon-right is-ghost is-compact"
data-test-credentials-link=true
{{#secret-link
secret=model.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
data-test-edit-link=true
}}
Generate Certificate
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
Edit role
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{#if model.canSign}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
queryParams=(query-params action="sign")
class="button has-icon-right is-ghost is-compact"
data-test-sign-link=true
}}
Sign Certificate
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{/if}}
</div>
{{#if model.canGenerate}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
queryParams=(query-params action="issue")
class="button has-icon-right is-ghost is-compact"
data-test-credentials-link=true
}}
Generate Certificate
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{#if model.canSign}}
<div class="control">
{{#secret-link
mode="credentials"
secret=model.id
queryParams=(query-params action="sign")
class="button has-icon-right is-ghost is-compact"
data-test-sign-link=true
}}
Sign Certificate
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
{{/if}}
</div>
</div>
</header>
</p.levelRight>
</PageHeader>
{{#if (or (eq mode 'edit') (eq mode 'create'))}}
{{partial 'partials/role-pki/form'}}

View File

@ -1,67 +1,67 @@
<header class="page-header">
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3" data-test-secret-header="true">
{{#if (eq mode "create") }}
Create an SSH Role
{{else if (eq mode 'edit')}}
Edit SSH Role
{{else}}
SSH Role <code>{{model.id}}</code>
{{/if}}
</h1>
</div>
<div class="level-right">
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or model.canUpdate model.canDelete)}}
<div class="control">
{{#secret-link
secret=model.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
}}
Edit role
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3" data-test-secret-header="true">
{{#if (eq mode "create") }}
Create an SSH Role
{{else if (eq mode 'edit')}}
Edit SSH Role
{{else}}
SSH Role <code>{{model.id}}</code>
{{/if}}
</h1>
</p.levelLeft>
<p.levelRight>
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or model.canUpdate model.canDelete)}}
<div class="control">
{{#if (eq model.keyType "otp")}}
{{#secret-link
mode="credentials"
secret=model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials=true
{{#secret-link
secret=model.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
}}
Generate Credentials
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
{{else}}
{{#secret-link
mode="sign"
secret=model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials=true
}}
Sign Keys
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
{{/if}}
Edit role
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
</div>
<div class="control">
{{#if (eq model.keyType "otp")}}
{{#secret-link
mode="credentials"
secret=model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials=true
}}
Generate Credentials
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
{{else}}
{{#secret-link
mode="sign"
secret=model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-credentials=true
}}
Sign Keys
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
{{/if}}
</div>
{{/if}}
</div>
</div>
</header>
</p.levelRight>
</PageHeader>
{{#if (or (eq mode 'edit') (eq mode 'create'))}}
{{partial 'partials/role-ssh/form'}}

View File

@ -1,12 +1,14 @@
<header class="page-header">
{{key-value-header
baseKey=baseKey
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
<div class="level">
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=baseKey
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{#if (eq mode "create") }}
Create Secret
@ -16,8 +18,8 @@
{{key.id}}
{{/if}}
</h1>
</div>
</header>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-grey-lighter has-slim-padding is-marginless">
<div class="level">
<div class="level-left">

View File

@ -1,6 +1,6 @@
{{#with (options-for-backend model.type) as |options|}}
{{#page-header as |p|}}
{{#p.top}}
<PageHeader as |p|>
<p.top>
{{#key-value-header
baseKey=baseKey
path="vault.cluster.secrets.backend.list"
@ -13,8 +13,8 @@
</a>
</li>
{{/key-value-header}}
{{/p.top}}
{{#p.levelLeft}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{model.id}}
<span class="tag is-outlined is-inverted has-text-grey-dark is-font-mono">
@ -26,8 +26,8 @@
</span>
{{/if}}
</h1>
{{/p.levelLeft}}
{{#p.levelRight}}
</p.levelLeft>
<p.levelRight>
{{#unless (or isCertTab isConfigure)}}
<div class="control">
{{#secret-link
@ -55,8 +55,8 @@
</a>
</div>
{{/if}}
{{/p.levelRight}}
{{/page-header}}
</p.levelRight>
</PageHeader>
{{#if options.tabs}}
<div class="box is-bottomless is-marginless is-fullwidth is-paddingless">
<nav class="tabs sub-nav">

View File

@ -1,54 +1,54 @@
<header class="page-header">
{{key-value-header
baseKey=key
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{#if (eq mode "create") }}
Create Encryption Key
{{else if (eq mode "edit") }}
Edit Encryption Key
{{else}}
Encryption Key <code>{{key.id}}</code>
{{/if}}
</h1>
</div>
<div class="level-right">
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or capabilities.canUpdate capabilities.canDelete)}}
<div class="control">
{{#secret-link
secret=key.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
}}
Edit encryption key
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=key
path="vault.cluster.secrets.backend.list"
mode=mode
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{#if (eq mode "create") }}
Create Encryption Key
{{else if (eq mode "edit") }}
Edit Encryption Key
{{else}}
Encryption Key <code>{{key.id}}</code>
{{/if}}
</h1>
</p.levelLeft>
<p.levelRight>
<div class="field is-grouped">
{{#if (eq mode "show") }}
{{#if (or capabilities.canUpdate capabilities.canDelete)}}
<div class="control">
{{#secret-link
mode="actions"
secret=key.id
mode="edit"
replace=true
class="button has-icon-right is-ghost is-compact"
data-test-transit-key-actions-link=true
}}
Key actions
}}
Edit encryption key
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
</div>
<div class="control">
{{#secret-link
mode="actions"
secret=key.id
class="button has-icon-right is-ghost is-compact"
data-test-transit-key-actions-link=true
}}
Key actions
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
{{/if}}
</div>
</div>
</header>
</p.levelRight>
</PageHeader>
{{partial (concat 'partials/transit-form-' mode)}}

View File

@ -1,8 +1,10 @@
<header class="page-header">
<h1 class="title is-3">
{{title}}
</h1>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
{{title}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless is-bottomless has-text-centered has-background-white-bis">
<p class="has-text-grey-dark">

View File

@ -1,20 +1,18 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{#if initialReplicationMode}}
{{#if (eq initialReplicationMode 'dr')}}
Enable Disaster Recovery Replication
{{else if (eq initialReplicationMode 'performance')}}
Enable Performance Replication
{{/if}}
{{else}}
Enable Replication
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
{{#if initialReplicationMode}}
{{#if (eq initialReplicationMode 'dr')}}
Enable Disaster Recovery Replication
{{else if (eq initialReplicationMode 'performance')}}
Enable Performance Replication
{{/if}}
</h1>
</div>
</div>
</header>
{{else}}
Enable Replication
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<form
onsubmit={{

View File

@ -1,13 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Replication
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Replication
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless is-fullwidth is-marginless">
<h3 class="title is-flex-center is-5 is-marginless">
{{i-con class="has-text-grey is-medium" glyph="replication" size=20}}

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h3 class="title is-3">
Hash Data
</h3>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Hash Data
</h1>
</p.levelLeft>
</PageHeader>
{{#if sum}}
<div class="box is-sideless is-fullwidth is-marginless">

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h3 class="title is-3">
Lookup Token
</h3>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Lookup Token
</h1>
</p.levelLeft>
</PageHeader>
{{#if (or creation_time creation_ttl)}}
<div class="box is-fullwidth is-sideless is-paddingless is-marginless">

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h3 class="title is-3">
Random Bytes
</h3>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Random Bytes
</h1>
</p.levelLeft>
</PageHeader>
{{#if random_bytes}}
<div class="box is-sideless is-fullwidth is-marginless">

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h3 class="title is-3">
Rewrap Token
</h3>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Rewrap Token
</h1>
</p.levelLeft>
</PageHeader>
{{#if rewrap_token}}
<div class="box is-sideless is-fullwidth is-marginless">

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h3 class="title is-3">
Unwrap Data
</h3>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Unwrap Data
</h1>
</p.levelLeft>
</PageHeader>
{{#if unwrap_data}}
<div class="box is-sideless is-fullwidth is-marginless">

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h3 class="title is-3">
Wrap Data
</h3>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Wrap Data
</h1>
</p.levelLeft>
</PageHeader>
{{#if token}}
<div class="box is-sideless is-fullwidth is-marginless">

View File

@ -1,19 +1,17 @@
{{#if (eq model.httpStatus 404)}}
{{not-found model=model}}
{{else}}
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-white-bis has-text-grey has-text-centered">
{{#if model.message}}
<p>{{model.message}}</p>

View File

@ -1,11 +1,9 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Add {{lowercase (humanize model.identityType)}} for {{model.canonicalId}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Add {{lowercase (humanize model.identityType)}} for {{model.canonicalId}}
</h1>
</p.levelLeft>
</PageHeader>
{{identity/edit-form model=model onSave=(perform navAfterSave)}}

View File

@ -1,11 +1,9 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Edit {{model.name}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Edit {{model.name}}
</h1>
</p.levelLeft>
</PageHeader>
{{identity/edit-form mode="edit" model=model onSave=(perform navAfterSave)}}

View File

@ -1,28 +1,28 @@
<header class="page-header">
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.access.identity.aliases"}}>
{{pluralize (humanize model.identityType)}}
</a>
</li>
</ul>
</nav>
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{model.name}}
</h1>
</div>
<div class="level-right">
<a href="{{href-to 'vault.cluster.access.identity.aliases.edit' model.id}}" class="button has-icon-right is-ghost is-compact" data-test-alias-edit-link=true>
Edit {{lowercase (humanize model.identityType)}}
{{i-con glyph="chevron-right" size=11}}
</a>
</div>
</div>
</header>
<PageHeader as |p|>
<p.top>
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.access.identity.aliases"}}>
{{pluralize (humanize model.identityType)}}
</a>
</li>
</ul>
</nav>
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{model.name}}
</h1>
</p.levelLeft>
<p.levelRight>
<a href="{{href-to 'vault.cluster.access.identity.aliases.edit' model.id}}" class="button has-icon-right is-ghost is-compact" data-test-alias-edit-link=true>
Edit {{lowercase (humanize model.identityType)}}
{{i-con glyph="chevron-right" size=11}}
</a>
</p.levelRight>
</PageHeader>
<div class="box is-sideless is-fullwidth is-paddingless is-marginless">
<nav class="tabs sub-nav">
<ul>

View File

@ -1,11 +1,9 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Add {{model.identityType}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Add {{model.identityType}}
</h1>
</p.levelLeft>
</PageHeader>
{{identity/edit-form model=model onSave=(perform navAfterSave)}}

View File

@ -1,11 +1,9 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Edit {{model.name}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Edit {{model.name}}
</h1>
</p.levelLeft>
</PageHeader>
{{identity/edit-form mode="edit" model=model onSave=(perform navAfterSave)}}

View File

@ -1,11 +1,9 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Merge entities
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Merge entities
</h1>
</p.levelLeft>
</PageHeader>
{{identity/edit-form mode="merge" model=model onSave=(perform navAfterSave)}}

View File

@ -1,34 +1,34 @@
<header class="page-header">
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.access.identity.index"}}>
{{capitalize (pluralize model.identityType)}}
</a>
</li>
</ul>
</nav>
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{model.name}}
</h1>
</div>
<div class="level-right">
{{#unless (or (and (eq model.identityType "group") (eq model.type "internal")) model.alias)}}
<a href="{{href-to 'vault.cluster.access.identity.aliases.add' (pluralize model.identityType) model.id}}" class="button has-icon-right is-ghost is-compact" data-test-entity-create-link=true>
Add alias
{{i-con glyph="chevron-right" size=11}}
</a>
{{/unless}}
<a href="{{href-to 'vault.cluster.access.identity.edit' (pluralize model.identityType) model.id}}" class="button has-icon-right is-ghost is-compact" data-test-entity-edit-link=true>
Edit {{model.identityType}}
<PageHeader as |p|>
<p.top>
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.access.identity.index"}}>
{{capitalize (pluralize model.identityType)}}
</a>
</li>
</ul>
</nav>
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{model.name}}
</h1>
</p.levelLeft>
<p.levelRight>
{{#unless (or (and (eq model.identityType "group") (eq model.type "internal")) model.alias)}}
<a href="{{href-to 'vault.cluster.access.identity.aliases.add' (pluralize model.identityType) model.id}}" class="button has-icon-right is-ghost is-compact" data-test-entity-create-link=true>
Add alias
{{i-con glyph="chevron-right" size=11}}
</a>
</div>
</div>
</header>
{{/unless}}
<a href="{{href-to 'vault.cluster.access.identity.edit' (pluralize model.identityType) model.id}}" class="button has-icon-right is-ghost is-compact" data-test-entity-edit-link=true>
Edit {{model.identityType}}
{{i-con glyph="chevron-right" size=11}}
</a>
</p.levelRight>
</PageHeader>
<div class="box is-sideless is-fullwidth is-paddingless is-marginless">
<nav class="tabs sub-nav">
<ul>

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{#link-to "vault.cluster.access.leases"}}Leases{{/link-to}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
{{#link-to "vault.cluster.access.leases"}}Leases{{/link-to}}
</h1>
</p.levelLeft>
</PageHeader>
{{#unless (or (eq model.httpStatus 400) (eq model.httpStatus 404))}}
{{model.message}}

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Lookup a Lease
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Lookup a Lease
</h1>
</p.levelLeft>
</PageHeader>
<form {{action "lookupLease" leaseId on="submit"}}>
<div class="box is-sideless is-fullwidth is-marginless">

View File

@ -1,64 +1,64 @@
<header class="page-header">
{{key-value-header
baseKey=baseKey
path="vault.cluster.access.leases.list"
model=clusterController.model.name
root=backendCrumb
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{#link-to "vault.cluster.access.leases.list-root"}}
Leases
{{/link-to}}
</h1>
</div>
<div class="level-right">
<div class="field is-grouped">
{{#if (not-eq baseKey.id '')}}
<div class="control">
{{#if (and capabilities.forceRevokePrefix.canUpdate (not confirmingRevoke))}}
{{#confirm-action
buttonClasses="button is-ghost is-compact"
onConfirmAction=(action "revokePrefix" baseKey.id true)
confirmMessage= (concat
"Confirming removes all leases under "
baseKey.id
" and disregards any errors encountered."
)
confirmButtonText=(concat "Revoke " baseKey.id)
confirmButtonClasses="button is-danger is-outlined is-compact"
cancelButtonText="Cancel"
cancelButtonClasses="button is-outlined is-compact"
showConfirm=confirmingForceRevoke
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=baseKey
path="vault.cluster.access.leases.list"
model=clusterController.model.name
root=backendCrumb
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{#link-to "vault.cluster.access.leases.list-root"}}
Leases
{{/link-to}}
</h1>
</p.levelLeft>
<p.levelRight>
<div class="field is-grouped">
{{#if (not-eq baseKey.id '')}}
<div class="control">
{{#if (and capabilities.forceRevokePrefix.canUpdate (not confirmingRevoke))}}
{{#confirm-action
buttonClasses="button is-ghost is-compact"
onConfirmAction=(action "revokePrefix" baseKey.id true)
confirmMessage= (concat
"Confirming removes all leases under "
baseKey.id
" and disregards any errors encountered."
)
confirmButtonText=(concat "Revoke " baseKey.id)
confirmButtonClasses="button is-danger is-outlined is-compact"
cancelButtonText="Cancel"
cancelButtonClasses="button is-outlined is-compact"
showConfirm=confirmingForceRevoke
}}
Force revoke prefix
{{/confirm-action}}
{{/if}}
</div>
<div class="control">
{{#if (and capabilities.revokePrefix.canUpdate (not confirmingForceRevoke))}}
{{#confirm-action
buttonClasses="button is-ghost is-compact"
onConfirmAction=(action "revokePrefix" baseKey.id)
confirmMessage= (concat "Confirming will remove all leases under " baseKey.id)
confirmButtonText=(concat "Revoke " baseKey.id)
confirmButtonClasses="button is-danger is-outlined is-compact"
cancelButtonText="Cancel"
cancelButtonClasses="button is-outlined is-compact"
showConfirm=confirmingRevoke
data-test-lease-revoke-prefix=true
Force revoke prefix
{{/confirm-action}}
{{/if}}
</div>
<div class="control">
{{#if (and capabilities.revokePrefix.canUpdate (not confirmingForceRevoke))}}
{{#confirm-action
buttonClasses="button is-ghost is-compact"
onConfirmAction=(action "revokePrefix" baseKey.id)
confirmMessage= (concat "Confirming will remove all leases under " baseKey.id)
confirmButtonText=(concat "Revoke " baseKey.id)
confirmButtonClasses="button is-danger is-outlined is-compact"
cancelButtonText="Cancel"
cancelButtonClasses="button is-outlined is-compact"
showConfirm=confirmingRevoke
data-test-lease-revoke-prefix=true
}}
Revoke prefix
{{/confirm-action}}
{{/if}}
</div>
{{/if}}
</div>
Revoke prefix
{{/confirm-action}}
{{/if}}
</div>
{{/if}}
</div>
</div>
</header>
</p.levelRight>
</PageHeader>
<div class="box is-sideless has-background-grey-lighter has-short-padding is-marginless">
<div class="level">
<div class="level-left">

View File

@ -1,21 +1,21 @@
<header class="page-header">
{{key-value-header
baseKey=baseKey
path="vault.cluster.access.leases.list"
root=backendCrumb
showCurrent=true
linkToPaths=capabilities.leases.canList
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{#link-to "vault.cluster.access.leases" }}
Leases
{{/link-to}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=baseKey
path="vault.cluster.access.leases.list"
root=backendCrumb
showCurrent=true
linkToPaths=capabilities.leases.canList
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{#link-to "vault.cluster.access.leases" }}
Leases
{{/link-to}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="field box is-fullwidth is-sideless is-paddingless is-marginless">
{{#info-table-row label="Issue time" value=model.issueTime}}
{{moment-format model.issueTime 'MMM DD, YYYY hh:mm:ss A'}}

View File

@ -1,35 +1,35 @@
<header class="page-header">
{{key-value-header
baseKey=model
path="vault.cluster.access.method"
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{capitalize model.type}}
</h1>
</div>
<div class="level-right">
{{#if (eq section "configuration")}}
<div class="field is-grouped">
<div class="control">
{{#link-to
"vault.cluster.settings.auth.configure"
model.id
class="button is-ghost has-icon-right is-compact"
data-test-configure-link=true
}}
Configure
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=model
path="vault.cluster.access.method"
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{capitalize model.type}}
</h1>
</p.levelLeft>
<p.levelRight>
{{#if (eq section "configuration")}}
<div class="field is-grouped">
<div class="control">
{{#link-to
"vault.cluster.settings.auth.configure"
model.id
class="button is-ghost has-icon-right is-compact"
data-test-configure-link=true
}}
Configure
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
{{/if}}
</div>
</div>
</header>
</div>
{{/if}}
</p.levelRight>
</PageHeader>
{{section-tabs model 'authShow'}}
{{component (concat "auth-method/" section) model=model}}

View File

@ -1,18 +1,16 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Authentication Methods
</h1>
</div>
<div class="level-right">
{{#link-to 'vault.cluster.settings.auth.enable' class="button has-icon-right is-ghost is-compact"}}
Enable new method
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Authentication Methods
</h1>
</p.levelLeft>
<p.levelRight>
{{#link-to 'vault.cluster.settings.auth.enable' class="button has-icon-right is-ghost is-compact"}}
Enable new method
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</p.levelRight>
</PageHeader>
{{#each (sort-by "path" model) as |method|}}
{{#linked-block

View File

@ -1,19 +1,17 @@
{{#if (eq model.httpStatus 404)}}
{{not-found model=model}}
{{else}}
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-white-bis has-text-grey has-text-centered">
{{#if (and
(eq model.httpStatus 403)

View File

@ -1,19 +1,18 @@
<header class="page-header">
<div class="breadcrumb">
<a href="{{href-to 'vault.cluster.policies' policyType}}" data-test-policy-list-link=true>
<span class="sep">&#x0002f;</span>
{{uppercase policyType}} Policies
</a>
</div>
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Add {{uppercase policyType}} policy
</h1>
<PageHeader as |p|>
<p.top>
<div class="breadcrumb">
<a href="{{href-to 'vault.cluster.policies' policyType}}" data-test-policy-list-link=true>
<span class="sep">&#x0002f;</span>
{{uppercase policyType}} Policies
</a>
</div>
</div>
</header>
</p.top>
<p.levelLeft>
<h1 class="title is-3">
Add {{uppercase policyType}} policy
</h1>
</p.levelLeft>
</PageHeader>
<form {{ action "savePolicy" model on="submit"}}>
<div class="box is-bottomless is-fullwidth is-marginless">

View File

@ -1,24 +1,22 @@
{{#if (or (eq policyType "acl") (has-feature "Sentinel"))}}
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{uppercase policyType}} Policies
{{#unless (eq policyType "acl")}}
<span class="tag" aria-label="Enforcement level: {{model.enforcementLevel}}">
Sentinel
</span>
{{/unless}}
</h1>
</div>
<div class="level-right">
<a href="{{href-to 'vault.cluster.policies.create'}}" class="button has-icon-right is-ghost is-compact" data-test-policy-create-link=true>
Create {{uppercase policyType}} policy
{{i-con glyph="chevron-right" size=11}}
</a>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
{{uppercase policyType}} Policies
{{#unless (eq policyType "acl")}}
<span class="tag" aria-label="Enforcement level: {{model.enforcementLevel}}">
Sentinel
</span>
{{/unless}}
</h1>
</p.levelLeft>
<p.levelRight>
<a href="{{href-to 'vault.cluster.policies.create'}}" class="button has-icon-right is-ghost is-compact" data-test-policy-create-link=true>
Create {{uppercase policyType}} policy
{{i-con glyph="chevron-right" size=11}}
</a>
</p.levelRight>
</PageHeader>
<div class="box is-sideless has-background-grey-lighter has-short-padding is-marginless">
<div class="level">
<div class="level-left">

View File

@ -1,23 +1,23 @@
<header class="page-header">
<div class="breadcrumb">
<a href="{{href-to 'vault.cluster.policies' policyType}}" data-test-policy-list-link=true>
<span class="sep">&#x0002f;</span>
{{uppercase policyType}} Policies
</a>
</div>
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{model.id}}
{{#if model.enforcementLevel}}
<span class="tag is-medium" aria-label="Enforcement level: {{model.enforcementLevel}}">
{{model.enforcementLevel}}
</span>
{{/if}}
</h1>
<PageHeader as |p|>
<p.top>
<div class="breadcrumb">
<a href="{{href-to 'vault.cluster.policies' policyType}}" data-test-policy-list-link=true>
<span class="sep">&#x0002f;</span>
{{uppercase policyType}} Policies
</a>
</div>
</div>
</header>
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{model.id}}
{{#if model.enforcementLevel}}
<span class="tag is-medium" aria-label="Enforcement level: {{model.enforcementLevel}}">
{{model.enforcementLevel}}
</span>
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<form {{action "savePolicy" model on="submit"}}>
<div class="box is-bottomless is-fullwidth is-marginless">

View File

@ -1,19 +1,17 @@
{{#if (eq model.httpStatus 404)}}
{{not-found model=model}}
{{else}}
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-white-bis has-text-grey has-text-centered">
{{#if model.message}}
<p>{{model.message}}</p>

View File

@ -1,25 +1,25 @@
<header class="page-header">
<nav class="breadcrumb">
<li>
<a href="{{href-to 'vault.cluster.policies'}}" data-test-policy-list-link=true>
<span class="sep">&#x0002f;</span>
{{uppercase policyType}} Policies
</a>
</li>
</nav>
<div class="level">
<div class="level-left">
<h1 class="title is-3" data-test-policy-name="true">
{{model.id}}
{{#if model.enforcementLevel}}
<span class="tag" aria-label="Enforcement level: {{model.enforcementLevel}}">
{{model.enforcementLevel}}
</span>
{{/if}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.top>
<nav class="breadcrumb">
<li>
<a href="{{href-to 'vault.cluster.policies'}}" data-test-policy-list-link=true>
<span class="sep">&#x0002f;</span>
{{uppercase policyType}} Policies
</a>
</li>
</nav>
</p.top>
<p.levelLeft>
<h1 class="title is-3" data-test-policy-name="true">
{{model.id}}
{{#if model.enforcementLevel}}
<span class="tag" aria-label="Enforcement level: {{model.enforcementLevel}}">
{{model.enforcementLevel}}
</span>
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-bottomless is-fullwidth is-marginless">
<div class="level is-mobile">
<div class="level-left">

View File

@ -1,13 +1,11 @@
{{#if (eq model.mode 'unsupported')}}
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3 has-text-grey">
Replication unsupported
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3 has-text-grey">
Replication unsupported
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-white-bis has-text-grey has-text-centered">
<p>
The current cluster configuration does not support replication.

View File

@ -1,33 +1,30 @@
{{#if model.replicationAttrs.replicationEnabled}}
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3" data-test-replication-title=true>
{{#if (eq replicationMode 'dr')}}
Disaster Recovery
{{else if (eq replicationMode 'performance')}}
Performance
{{/if}}
<span class="tag is-light has-text-grey-dark" data-test-replication-mode-display=true>
{{model.replicationAttrs.modeForUrl}}
</span>
{{#if secondaryId}}
<span class="tag is-light has-text-grey-dark">
<code>
{{model.replicationAttrs.secondaryId}}
</code>
</span>
{{/if}}
<span class="tag is-light">
<code class="has-text-grey-dark">
{{model.replicationAttrs.clusterIdDisplay}}
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3" data-test-replication-title=true>
{{#if (eq replicationMode 'dr')}}
Disaster Recovery
{{else if (eq replicationMode 'performance')}}
Performance
{{/if}}
<span class="tag is-light has-text-grey-dark" data-test-replication-mode-display=true>
{{model.replicationAttrs.modeForUrl}}
</span>
{{#if secondaryId}}
<span class="tag is-light has-text-grey-dark">
<code>
{{model.replicationAttrs.secondaryId}}
</code>
</span>
</h1>
</div>
</div>
</header>
{{/if}}
<span class="tag is-light">
<code class="has-text-grey-dark">
{{model.replicationAttrs.clusterIdDisplay}}
</code>
</span>
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-bottomless is-fullwidth is-paddingless is-marginless">
<nav class="tabs sub-nav">
<ul>

View File

@ -1,31 +1,31 @@
<div class="box is-shadowless">
<header class="page-header">
<nav class="breadcrumb">
<li>
<a href={{href-to params=(if model.backend
(array "vault.cluster.secrets.backend.list-root")
(array "vault.cluster.secrets")
)
}}>
<span class="sep">&#x0002f;</span>
{{if model.backend model.backend 'secrets'}}
</a>
</li>
</nav>
<div class="level">
<div class="level-left">
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 404)}}
404 Not Found
{{else if (eq model.httpStatus 403)}}
Not Authorized
{{else}}
Error
{{/if}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.top>
<nav class="breadcrumb">
<li>
<a href={{href-to params=(if model.backend
(array "vault.cluster.secrets.backend.list-root")
(array "vault.cluster.secrets")
)
}}>
<span class="sep">&#x0002f;</span>
{{if model.backend model.backend 'secrets'}}
</a>
</li>
</nav>
</p.top>
<p.levelLeft>
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 404)}}
404 Not Found
{{else if (eq model.httpStatus 403)}}
Not Authorized
{{else}}
Error
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-white-bis has-text-grey has-text-centered">
{{#if (eq model.httpStatus 404)}}
<p data-test-secret-not-found>

View File

@ -1,34 +1,34 @@
<header class="page-header">
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}}>
ssh
</a>
</li>
<li class="is-active">
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}}>
sign
</a>
</li>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend.show" model.role.name}}>
{{model.role.name}}
</a>
</li>
</ul>
</nav>
<div class="level">
<div class="level-left">
<h1 class="title is-3 ">
Sign SSH Key
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.top>
<nav class="breadcrumb">
<ul>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}}>
ssh
</a>
</li>
<li class="is-active">
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend" backend.id}}>
sign
</a>
</li>
<li>
<span class="sep">&#x0002f;</span>
<a href={{href-to "vault.cluster.secrets.backend.show" model.role.name}}>
{{model.role.name}}
</a>
</li>
</ul>
</nav>
</p.top>
<p.levelLeft>
<h1 class="title is-3 ">
Sign SSH Key
</h1>
</p.levelLeft>
</PageHeader>
{{#if model.signedKey}}
<div class="box is-fullwidth is-sideless is-paddingless is-marginless">

View File

@ -15,37 +15,37 @@
{{/each}}
{{/menu-sidebar}}
<div class="column is-10">
<header class="page-header">
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=backendCrumb
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3">
{{model.id}}
</h1>
</div>
<div class="level-right">
{{#secret-link
mode="show"
secret=model.id
class="button has-icon-right is-ghost is-compact"
}}
Details
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</div>
</div>
{{transit-key-actions
selectedAction=selectedAction
backend=backend
key=model
capabilities=capabilities
}}
</header>
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend.list"
mode=mode
root=backendCrumb
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{model.id}}
</h1>
</p.levelLeft>
<p.levelRight>
{{#secret-link
mode="show"
secret=model.id
class="button has-icon-right is-ghost is-compact"
}}
Details
{{i-con glyph="chevron-right" size=11}}
{{/secret-link}}
</p.levelRight>
</PageHeader>
{{transit-key-actions
selectedAction=selectedAction
backend=backend
key=model
capabilities=capabilities
}}
</div>
</div>

View File

@ -1,18 +1,16 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Secrets Engines
</h1>
</div>
<div class="level-right">
{{#link-to 'vault.cluster.settings.mount-secret-backend' class="button has-icon-right is-ghost is-compact"}}
Enable new engine
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Secrets Engines
</h1>
</p.levelLeft>
<p.levelRight>
{{#link-to 'vault.cluster.settings.mount-secret-backend' class="button has-icon-right is-ghost is-compact"}}
Enable new engine
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</p.levelRight>
</PageHeader>
{{#each supportedBackends as |backend|}}
{{#linked-block

View File

@ -1,33 +1,33 @@
<header class="page-header">
{{key-value-header
baseKey=model
path="vault.cluster.access.method"
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Configure {{get (find-by "type" model.type (mountable-auth-methods)) "displayName"}}
</h1>
</div>
<div class="level-right">
<div class="field is-grouped">
<div class="control">
{{#link-to
"vault.cluster.access.method"
model.id
class="button is-ghost has-icon-right is-compact"
data-test-backend-view-link=true
}}
View method
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=model
path="vault.cluster.access.method"
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
Configure {{get (find-by "type" model.type (mountable-auth-methods)) "displayName"}}
</h1>
</p.levelLeft>
<p.levelRight>
<div class="field is-grouped">
<div class="control">
{{#link-to
"vault.cluster.access.method"
model.id
class="button is-ghost has-icon-right is-compact"
data-test-backend-view-link=true
}}
View method
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
</div>
</div>
</header>
</p.levelRight>
</PageHeader>
{{section-tabs model}}
{{outlet}}

View File

@ -1,33 +1,33 @@
<header class="page-header">
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend"
root=root
showCurrent=true
}}
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Configure {{get (options-for-backend model.type) "displayName"}}
</h1>
</div>
<div class="level-right">
<div class="field is-grouped">
<div class="control">
{{#link-to
"vault.cluster.secrets.backend"
model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-view-link=true
}}
View backend
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
<PageHeader as |p|>
<p.top>
{{key-value-header
baseKey=model
path="vault.cluster.secrets.backend"
root=root
showCurrent=true
}}
</p.top>
<p.levelLeft>
<h1 class="title is-3">
Configure {{get (options-for-backend model.type) "displayName"}}
</h1>
</p.levelLeft>
<p.levelRight>
<div class="field is-grouped">
<div class="control">
{{#link-to
"vault.cluster.secrets.backend"
model.id
class="button has-icon-right is-ghost is-compact"
data-test-backend-view-link=true
}}
View backend
{{i-con glyph="chevron-right" size=11}}
{{/link-to}}
</div>
</div>
</div>
</header>
</p.levelRight>
</PageHeader>
{{partial (concat "partials/secret-backend-settings/" model.type)}}
{{outlet}}

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Enable a secrets engine
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Enable a secrets engine
</h1>
</p.levelLeft>
</PageHeader>
<form {{action "mountBackend" on="submit"}}>
<div class="box is-sideless is-fullwidth is-marginless">
{{message-error model=model}}

View File

@ -1,12 +1,10 @@
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3">
Seal this vault
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3">
Seal this vault
</h1>
</p.levelLeft>
</PageHeader>
{{#if model.seal.canUpdate}}
<div class="box is-sideless is-fullwidth is-marginless">

View File

@ -12,19 +12,17 @@
{{#if (eq model.httpStatus 404)}}
{{not-found model=model}}
{{else}}
<header class="page-header">
<div class="level">
<div class="level-left">
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</div>
</div>
</header>
<PageHeader as |p|>
<p.levelLeft>
<h1 class="title is-3 has-text-grey">
{{#if (eq model.httpStatus 403)}}
Not authorized
{{else}}
Error
{{/if}}
</h1>
</p.levelLeft>
</PageHeader>
<div class="box is-sideless has-background-white-bis has-text-grey has-text-centered">
{{#if model.message}}
<p>{{model.message}}</p>

View File

@ -20,13 +20,12 @@
"precommit": "lint-staged"
},
"lint-staged": {
"gitDir": "../",
"linters": {
"ui/{app,tests,config,lib,mirage}/**/*.js": [
"prettier-eslint --single-quote --trailing-comma es5 --print-width 110 --write",
"*.js": [
"prettier-eslint --single-quote --no-use-tabs --trailing-comma es5 --print-width 110 --write",
"git add"
],
"ui/app/styles/**/*.*": [
"*.scss": [
"prettier --write",
"git add"
]
@ -45,6 +44,7 @@
"columnify": "^1.5.4",
"cool-checkboxes-for-bulma.io": "^1.1.0",
"ember-ajax": "^3.0.0",
"ember-angle-bracket-invocation-polyfill": "^1.0.2",
"ember-api-actions": "^0.1.8",
"ember-basic-dropdown": "^0.33.5",
"ember-basic-dropdown-hover": "^0.2.0",

View File

@ -2722,6 +2722,13 @@ ember-ajax@^3.0.0:
dependencies:
ember-cli-babel "^6.0.0"
ember-angle-bracket-invocation-polyfill@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ember-angle-bracket-invocation-polyfill/-/ember-angle-bracket-invocation-polyfill-1.0.2.tgz#b8e43e91161c0da1b442c995e1f270b64c7d8d00"
dependencies:
ember-cli-babel "^6.6.0"
ember-cli-version-checker "^2.1.2"
ember-api-actions@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/ember-api-actions/-/ember-api-actions-0.1.8.tgz#651031b9d61a320c221dd75b20f7e8f783e6393d"
@ -3171,6 +3178,13 @@ ember-cli-version-checker@^2.1.0:
resolve "^1.3.3"
semver "^5.3.0"
ember-cli-version-checker@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.1.2.tgz#305ce102390c66e4e0f1432dea9dc5c7c19fed98"
dependencies:
resolve "^1.3.3"
semver "^5.3.0"
ember-cli@~2.16.0:
version "2.16.2"
resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-2.16.2.tgz#53b922073a8e6f34255a6e0dcb1794a91ba3e1b7"