diff --git a/addons/api/mirage/factories/credential-store.js b/addons/api/mirage/factories/credential-store.js index 55ecf4f85..2472c23fe 100644 --- a/addons/api/mirage/factories/credential-store.js +++ b/addons/api/mirage/factories/credential-store.js @@ -14,10 +14,18 @@ export default factory.extend({ 'update', 'delete', ], - authorized_collection_actions: () => { - return { - 'credential-libraries': ['create', 'list'], - }; + authorized_collection_actions() { + switch (this.type) { + case 'vault': + return { + 'credential-libraries': ['create', 'list'], + }; + case 'static': + default: + return { + 'credentials': ['create', 'list'], + }; + } }, id: () => generateId('cs_'), type: (i) => types[i % types.length], @@ -40,11 +48,21 @@ export default factory.extend({ withAssociations: trait({ afterCreate(credentialStore, server) { - const { scope } = credentialStore; - server.createList('credential-library', 2, { - scope, - credentialStore, - }); + const { scope, type } = credentialStore; + switch (type) { + case 'vault': + server.createList('credential-library', 2, { + scope, + credentialStore, + }); + break; + case 'static': + default: + server.createList('credential', 2, { + scope, + credentialStore, + }); + } }, }), }); diff --git a/addons/api/mirage/factories/credential.js b/addons/api/mirage/factories/credential.js new file mode 100644 index 000000000..4d9dc1a18 --- /dev/null +++ b/addons/api/mirage/factories/credential.js @@ -0,0 +1,21 @@ +import factory from '../generated/factories/credential'; +import { random } from 'faker'; +import permissions from '../helpers/permissions'; +import generatedId from '../helpers/id'; + +export default factory.extend({ + id: () => generatedId('cred_'), + type: 'username_password', + authorized_actions: () => + permissions.authorizedActionsFor('credential') || [ + 'no-op', + 'read', + 'update', + 'delete', + ], + attributes() { + return { + username: random.word(), + }; + }, +}); \ No newline at end of file diff --git a/addons/api/mirage/generated/factories/credential.js b/addons/api/mirage/generated/factories/credential.js new file mode 100644 index 000000000..1df2627e3 --- /dev/null +++ b/addons/api/mirage/generated/factories/credential.js @@ -0,0 +1,13 @@ +import { Factory } from 'ember-cli-mirage'; +import { random, date, datatype } from 'faker'; + +/** + * GeneratedCredentialModelFactory + */ +export default Factory.extend({ + name: () => random.words(), + description: () => random.words(), + created_time: () => date.recent(), + updated_time: () => date.recent(), + version: () => datatype.number(), +}); diff --git a/addons/api/mirage/models/credential.js b/addons/api/mirage/models/credential.js new file mode 100644 index 000000000..83ad9f912 --- /dev/null +++ b/addons/api/mirage/models/credential.js @@ -0,0 +1,7 @@ +import { belongsTo } from 'ember-cli-mirage'; +import Model from './base'; + +export default Model.extend({ + scope: belongsTo(), + credentialStore: belongsTo(), +}); diff --git a/addons/api/mirage/serializers/credential.js b/addons/api/mirage/serializers/credential.js new file mode 100644 index 000000000..7afcc7965 --- /dev/null +++ b/addons/api/mirage/serializers/credential.js @@ -0,0 +1,19 @@ +import ApplicationSerializer from './application'; + +export default ApplicationSerializer.extend({ + modelName: 'credential', + + _hashForModel(model) { + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); + json.credential_store_id = model.credentialStoreId; + + // in a real API, the following field is set-only and returned + // as an associated HMAC field + delete json.attributes?.password_hmac; + + return json; + }, +});