create static credential store form and route updates (#1195)

* chore: 🤖 static cred store support to route and templates
This commit is contained in:
Dharini Jeeva authored and GitHub committed 2022-07-19 09:29:43 -07:00
1 parent 94530cec9c
commit bc76d49729
6 files changed
+460 -282

No files matched your search

@@ -1,279 +1,7 @@
<Rose::Form
@onSubmit={{@submit}}
@cancel={{@cancel}}
@disabled={{@model.isSaving}}
@error={{@model.errors.base}}
@showEditToggle={{if @model.isNew false true}}
as |form|
>
{{#if (feature-flag 'static-credentials')}}
<form.fieldset>
<:title>{{t 'form.type.label'}}</:title>
<:body>
{{#if @model.isNew}}
{{! Code to allow option to select between cred. store types (vault or static) when it is first created goes here}}
<form.input
@value={{@model.type}}
readonly={{true}}
@disabled={{true}}
/>
{{else}}
<form.radioGroup
@name='types'
@selectedValue={{@model.type}}
as |radioGroup|
>
<radioGroup.card
@label={{t
(concat 'resources.credential-store.types.' @model.type)
}}
@helperText={{t
(concat 'resources.credential-store.help.' @model.type)
}}
@value={{@model.type}}
@layout='wide'
readonly={{true}}
@disabled={{true}}
/>
</form.radioGroup>
{{/if}}
</:body>
</form.fieldset>
{{else}}
<form.input
@value={{@model.type}}
@label={{t 'form.type.label'}}
readonly={{true}}
@disabled={{true}}
/>
{{/if}}
<form.input
@name='name'
@type='name'
@value={{@model.name}}
@label={{t 'form.name.label'}}
@helperText={{t 'form.name.help'}}
@error={{@model.errors.name}}
readonly={{false}}
as |field|
>
{{#if @model.errors.name}}
<field.errors as |errors|>
{{#each @model.errors.name as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.textarea
@name='description'
@type='description'
@value={{@model.description}}
@label={{t 'form.description.label'}}
@error={{@model.errors.description}}
@helperText={{t 'form.description.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.description}}
<field.errors as |errors|>
{{#each @model.errors.description as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
<form.input
@name='address'
@type='text'
@value={{@model.address}}
@label={{t 'resources.credential-store.form.address.label'}}
@error={{@model.errors.address}}
@helperText={{t 'resources.credential-store.form.address.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.address}}
<field.errors as |errors|>
{{#each @model.errors.address as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.input
@name='token'
@type='text'
@value={{@model.token}}
@label={{t 'resources.credential-store.form.token.label'}}
@error={{@model.errors.token}}
@helperText={{t 'resources.credential-store.form.token.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.token}}
<field.errors as |errors|>
{{#each @model.errors.token as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
{{#unless @model.isNew}}
<form.input
@value={{@model.token_hmac}}
@label={{t 'resources.credential-store.form.token_hmac.label'}}
readonly={{true}}
@disabled={{true}}
/>
{{/unless}}
<form.input
@name='namespace'
@type='text'
@value={{@model.namespace}}
@label={{t 'resources.credential-store.form.namespace.label'}}
@error={{@model.errors.namespace}}
@helperText={{t 'resources.credential-store.form.namespace.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.namespace}}
<field.errors as |errors|>
{{#each @model.errors.namespace as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.input
@name='tls_server_name'
@type='text'
@value={{@model.tls_server_name}}
@label={{t 'resources.credential-store.form.tls_server_name.label'}}
@error={{@model.errors.tls_server_name}}
@helperText={{t 'resources.credential-store.form.tls_server_name.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.tls_server_name}}
<field.errors as |errors|>
{{#each @model.errors.tls_server_name as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.checkbox
@label={{t 'resources.credential-store.form.tls_skip_verify.label'}}
@helperText={{t 'resources.credential-store.form.tls_skip_verify.help'}}
@checked={{@model.tls_skip_verify}}
@onChange={{fn
(mut @model.tls_skip_verify)
(if @model.tls_skip_verify false true)
}}
@error={{@model.errors.tls_skip_verify}}
as |field|
>
{{#if @model.errors.tls_skip_verify}}
<field.errors as |errors|>
{{#each @model.errors.tls_skip_verify as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.checkbox>
<form.textarea
@name='client_certificate'
@type='text'
@value={{@model.client_certificate}}
@label={{t 'resources.credential-store.form.client_certificate.label'}}
@error={{@model.errors.client_certificate}}
@helperText={{t 'resources.credential-store.form.client_certificate.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.client_certificate}}
<field.errors as |errors|>
{{#each @model.errors.client_certificate as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
<form.textarea
@name='client_certificate_key'
@type='text'
@value={{@model.client_certificate_key}}
@label={{t 'resources.credential-store.form.client_certificate_key.label'}}
@error={{@model.errors.client_certificate_key}}
@helperText={{t
'resources.credential-store.form.client_certificate_key.help'
}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.client_certificate_key}}
<field.errors as |errors|>
{{#each @model.errors.client_certificate_key as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
{{#unless @model.isNew}}
<form.input
@value={{@model.client_certificate_key_hmac}}
@label={{t
'resources.credential-store.form.client_certificate_key_hmac.label'
}}
readonly={{true}}
@disabled={{true}}
/>
{{/unless}}
<form.textarea
@name='ca_cert'
@type='text'
@value={{@model.ca_cert}}
@label={{t 'resources.credential-store.form.ca_cert.label'}}
@error={{@model.errors.ca_cert}}
@helperText={{t 'resources.credential-store.form.ca_cert.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.ca_cert}}
<field.errors as |errors|>
{{#each @model.errors.ca_cert as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
{{#if (can 'save model' @model)}}
<form.actions
@disabled={{if @model.cannotSave @model.cannotSave}}
@enableEditText={{t 'actions.edit-form'}}
@submitText={{t 'actions.save'}}
@cancelText={{t 'actions.cancel'}}
/>
{{/if}}
</Rose::Form>
{{component
(concat 'form/credential-store/' @model.type)
model=@model
submit=@submit
cancel=@cancel
changeType=@changeType
}}
@@ -0,0 +1,104 @@
<Rose::Form
@onSubmit={{@submit}}
@cancel={{@cancel}}
@disabled={{@model.isSaving}}
@error={{@model.errors.base}}
@showEditToggle={{if @model.isNew false true}}
as |form|
>
<form.input
@name='name'
@type='name'
@value={{@model.name}}
@label={{t 'form.name.label'}}
@helperText={{t 'form.name.help'}}
@error={{@model.errors.name}}
readonly={{false}}
as |field|
>
{{#if @model.errors.name}}
<field.errors as |errors|>
{{#each @model.errors.name as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.textarea
@name='description'
@type='description'
@value={{@model.description}}
@label={{t 'form.description.label'}}
@error={{@model.errors.description}}
@helperText={{t 'form.description.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.description}}
<field.errors as |errors|>
{{#each @model.errors.description as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
{{#if (feature-flag 'static-credentials')}}
<form.fieldset>
<:title>{{t 'form.type.label'}}</:title>
<:body>
{{#if @model.isNew}}
<form.radioGroup
@name='types'
@selectedValue={{@model.type}}
@changed={{@changeType}}
as |radioGroup|
>
<radioGroup.card
@label={{t 'resources.credential-store.types.static'}}
@helperText={{t 'resources.credential-store.help.static'}}
@value='static'
@layout='wide'
/>
<radioGroup.card
@label={{t 'resources.credential-store.types.vault'}}
@helperText={{t 'resources.credential-store.help.vault'}}
@value='vault'
@layout='wide'
/>
</form.radioGroup>
{{else}}
<form.radioGroup
@name='types'
@selectedValue={{@model.type}}
as |radioGroup|
>
<radioGroup.card
@label={{t
(concat 'resources.credential-store.types.' @model.type)
}}
@helperText={{t
(concat 'resources.credential-store.help.' @model.type)
}}
@value={{@model.type}}
@layout='wide'
readonly={{true}}
@disabled={{true}}
/>
</form.radioGroup>
{{/if}}
</:body>
</form.fieldset>
{{/if}}
{{#if (can 'save model' @model)}}
<form.actions
@disabled={{if @model.cannotSave @model.cannotSave}}
@enableEditText={{t 'actions.edit-form'}}
@submitText={{t 'actions.save'}}
@cancelText={{t 'actions.cancel'}}
/>
{{/if}}
</Rose::Form>
@@ -0,0 +1,309 @@
<Rose::Form
@onSubmit={{@submit}}
@cancel={{@cancel}}
@disabled={{@model.isSaving}}
@error={{@model.errors.base}}
@showEditToggle={{if @model.isNew false true}}
as |form|
>
<form.input
@name='name'
@type='name'
@value={{@model.name}}
@label={{t 'form.name.label'}}
@helperText={{t 'form.name.help'}}
@error={{@model.errors.name}}
readonly={{false}}
as |field|
>
{{#if @model.errors.name}}
<field.errors as |errors|>
{{#each @model.errors.name as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.textarea
@name='description'
@type='description'
@value={{@model.description}}
@label={{t 'form.description.label'}}
@error={{@model.errors.description}}
@helperText={{t 'form.description.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.description}}
<field.errors as |errors|>
{{#each @model.errors.description as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
{{#if (feature-flag 'static-credentials')}}
<form.fieldset>
<:title>{{t 'form.type.label'}}</:title>
<:body>
{{#if @model.isNew}}
<form.radioGroup
@name='types'
@selectedValue={{@model.type}}
@changed={{@changeType}}
as |radioGroup|
>
<radioGroup.card
@label={{t 'resources.credential-store.types.static'}}
@helperText={{t 'resources.credential-store.help.static'}}
@value='static'
@layout='wide'
/>
<radioGroup.card
@label={{t 'resources.credential-store.types.vault'}}
@helperText={{t 'resources.credential-store.help.vault'}}
@value='vault'
@layout='wide'
/>
</form.radioGroup>
{{else}}
<form.radioGroup
@name='types'
@selectedValue={{@model.type}}
as |radioGroup|
>
<radioGroup.card
@label={{t
(concat 'resources.credential-store.types.' @model.type)
}}
@helperText={{t
(concat 'resources.credential-store.help.' @model.type)
}}
@value={{@model.type}}
@layout='wide'
readonly={{true}}
@disabled={{true}}
/>
</form.radioGroup>
{{/if}}
</:body>
</form.fieldset>
{{else}}
<form.fieldset>
<:title>{{t 'form.type.label'}}</:title>
<:body>
<form.radioGroup
@name='types'
@selectedValue={{@model.type}}
as |radioGroup|
>
<radioGroup.card
@label={{t
(concat 'resources.credential-store.types.' @model.type)
}}
@helperText={{t
(concat 'resources.credential-store.help.' @model.type)
}}
@value={{@model.type}}
@layout='wide'
readonly={{true}}
@disabled={{true}}
/>
</form.radioGroup>
</:body>
</form.fieldset>
{{/if}}
<form.input
@name='address'
@type='text'
@value={{@model.address}}
@label={{t 'resources.credential-store.form.address.label'}}
@error={{@model.errors.address}}
@helperText={{t 'resources.credential-store.form.address.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.address}}
<field.errors as |errors|>
{{#each @model.errors.address as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.input
@name='token'
@type='text'
@value={{@model.token}}
@label={{t 'resources.credential-store.form.token.label'}}
@error={{@model.errors.token}}
@helperText={{t 'resources.credential-store.form.token.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.token}}
<field.errors as |errors|>
{{#each @model.errors.token as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
{{#unless @model.isNew}}
<form.input
@value={{@model.token_hmac}}
@label={{t 'resources.credential-store.form.token_hmac.label'}}
readonly={{true}}
@disabled={{true}}
/>
{{/unless}}
<form.input
@name='namespace'
@type='text'
@value={{@model.namespace}}
@label={{t 'resources.credential-store.form.namespace.label'}}
@error={{@model.errors.namespace}}
@helperText={{t 'resources.credential-store.form.namespace.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.namespace}}
<field.errors as |errors|>
{{#each @model.errors.namespace as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.input
@name='tls_server_name'
@type='text'
@value={{@model.tls_server_name}}
@label={{t 'resources.credential-store.form.tls_server_name.label'}}
@error={{@model.errors.tls_server_name}}
@helperText={{t 'resources.credential-store.form.tls_server_name.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.tls_server_name}}
<field.errors as |errors|>
{{#each @model.errors.tls_server_name as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.checkbox
@label={{t 'resources.credential-store.form.tls_skip_verify.label'}}
@helperText={{t 'resources.credential-store.form.tls_skip_verify.help'}}
@checked={{@model.tls_skip_verify}}
@onChange={{fn
(mut @model.tls_skip_verify)
(if @model.tls_skip_verify false true)
}}
@error={{@model.errors.tls_skip_verify}}
as |field|
>
{{#if @model.errors.tls_skip_verify}}
<field.errors as |errors|>
{{#each @model.errors.tls_skip_verify as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.checkbox>
<form.textarea
@name='client_certificate'
@type='text'
@value={{@model.client_certificate}}
@label={{t 'resources.credential-store.form.client_certificate.label'}}
@error={{@model.errors.client_certificate}}
@helperText={{t 'resources.credential-store.form.client_certificate.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.client_certificate}}
<field.errors as |errors|>
{{#each @model.errors.client_certificate as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
<form.textarea
@name='client_certificate_key'
@type='text'
@value={{@model.client_certificate_key}}
@label={{t 'resources.credential-store.form.client_certificate_key.label'}}
@error={{@model.errors.client_certificate_key}}
@helperText={{t
'resources.credential-store.form.client_certificate_key.help'
}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.client_certificate_key}}
<field.errors as |errors|>
{{#each @model.errors.client_certificate_key as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
{{#unless @model.isNew}}
<form.input
@value={{@model.client_certificate_key_hmac}}
@label={{t
'resources.credential-store.form.client_certificate_key_hmac.label'
}}
readonly={{true}}
@disabled={{true}}
/>
{{/unless}}
<form.textarea
@name='ca_cert'
@type='text'
@value={{@model.ca_cert}}
@label={{t 'resources.credential-store.form.ca_cert.label'}}
@error={{@model.errors.ca_cert}}
@helperText={{t 'resources.credential-store.form.ca_cert.help'}}
disabled={{@model.isSaving}}
readonly={{false}}
as |field|
>
{{#if @model.errors.ca_cert}}
<field.errors as |errors|>
{{#each @model.errors.ca_cert as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.textarea>
{{#if (can 'save model' @model)}}
<form.actions
@disabled={{if @model.cannotSave @model.cannotSave}}
@enableEditText={{t 'actions.edit-form'}}
@submitText={{t 'actions.save'}}
@cancelText={{t 'actions.cancel'}}
/>
{{/if}}
</Rose::Form>
@@ -7,7 +7,7 @@ export default class ScopesScopeCredentialStoresNewController extends Controller
@service intl;
// =attributes
queryParams = ['type'];
/**
* Breadcrumb for new route
* @type {string}
@@ -1,15 +1,51 @@
import Route from '@ember/routing/route';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
export default class ScopesScopeCredentialStoresNewRoute extends Route {
// =services
@service router;
@service features;
// =attributes
queryParams = {
type: {
refreshModel: true,
},
};
// =methods
/**
* Creates a new unsaved credential-store
* Also rollback/destroy any new, unsaved instances from this route before
* creating another, but reuse name/description if available.
*/
model() {
model({ type = 'static' }) {
const scopeModel = this.modelFor('scopes.scope');
let name, description;
if (this.currentModel?.isNew) {
({ name, description } = this.currentModel);
this.currentModel.rollbackAttributes();
}
//hide static type credential stores if the feature flag isn't enabled
if (!this.features.isEnabled('static-credentials')) {
type = 'vault';
}
return this.store.createRecord('credential-store', {
type: 'vault',
type,
scopeModel,
name,
description,
});
}
/**
* Update type of credential store
* @param {string} type
*/
@action
changeType(type) {
this.router.replaceWith({ queryParams: { type } });
}
}
@@ -14,6 +14,7 @@
@model={{@model}}
@submit={{route-action 'save' @model}}
@cancel={{route-action 'cancel' @model}}
@changeType={{route-action 'changeType'}}
/>
</page.body>