diff --git a/addons/api/addon/serializers/credential-store.js b/addons/api/addon/serializers/credential-store.js index dd65d40fe..e06137dfa 100644 --- a/addons/api/addon/serializers/credential-store.js +++ b/addons/api/addon/serializers/credential-store.js @@ -1,4 +1,5 @@ import ApplicationSerializer from './application'; +import { copy } from 'ember-copy'; export default class CredentialStoreSerializer extends ApplicationSerializer { /** @@ -38,4 +39,12 @@ export default class CredentialStoreSerializer extends ApplicationSerializer { delete serialized.attributes; return serialized; } + + normalize(typeClass, hash, ...rest) { + const normalizedHash = copy(hash, true); + const normalized = super.normalize(typeClass, normalizedHash, ...rest); + // Remove secret fields as we don't track them after being created/updated + normalized.data.attributes.token = ''; + return normalized; + } } diff --git a/addons/api/tests/unit/serializers/credential-store-test.js b/addons/api/tests/unit/serializers/credential-store-test.js index 77a9b6faf..226217a5d 100644 --- a/addons/api/tests/unit/serializers/credential-store-test.js +++ b/addons/api/tests/unit/serializers/credential-store-test.js @@ -273,4 +273,35 @@ module('Unit | Serializer | credential store', function (hooks) { }; assert.deepEqual(record.serialize(), expectedResult); }); + + test('it normalizes vault type credential store record', async function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('credential-store'); + const credentialStoreModelClass = + store.createRecord('credential-store').constructor; + const payload = { + id: 'csvlt_123', + version: 1, + type: 'vault', + attributes: { + token: 'random', + token_hmac: 'completenonsense', + }, + }; + const normalized = serializer.normalize(credentialStoreModelClass, payload); + assert.deepEqual(normalized, { + data: { + attributes: { + type: 'vault', + version: 1, + token: '', + token_hmac: 'completenonsense', + }, + type: 'credential-store', + id: 'csvlt_123', + relationships: {}, + }, + }); + }); }); diff --git a/ui/admin/app/components/form/credential-store/vault/index.hbs b/ui/admin/app/components/form/credential-store/vault/index.hbs index 4be4cc091..6dacafe78 100644 --- a/ui/admin/app/components/form/credential-store/vault/index.hbs +++ b/ui/admin/app/components/form/credential-store/vault/index.hbs @@ -6,6 +6,7 @@ @showEditToggle={{if @model.isNew false true}} as |form| > + {{/if}} -{{#if (feature-flag 'vault-worker-filter')}} - - {{#if @model.errors.worker_filter}} - - {{#each @model.errors.worker_filter as |error|}} - {{error.message}} - {{/each}} - - {{/if}} - -{{/if}} - - {{#if @model.errors.token}} - - {{#each @model.errors.token as |error|}} - {{error.message}} - {{/each}} - - {{/if}} - + {{#if (feature-flag 'vault-worker-filter')}} + + {{#if @model.errors.worker_filter}} + + {{#each @model.errors.worker_filter as |error|}} + {{error.message}} + {{/each}} + + {{/if}} + + {{/if}} + + {{#if (or @model.isNew form.isEditable)}} + + {{#if @model.errors.token}} + + {{#each @model.errors.token as |error|}} + {{error.message}} + {{/each}} + + {{/if}} + + {{/if}} {{#unless @model.isNew}}