diff --git a/addons/api/addon/abilities/credential-store.js b/addons/api/addon/abilities/credential-store.js new file mode 100644 index 000000000..9b31cfdca --- /dev/null +++ b/addons/api/addon/abilities/credential-store.js @@ -0,0 +1,16 @@ +import ModelAbility from './model'; + +/** + * Provides abilities for credential store. + */ +export default class CredentialStoreAbility extends ModelAbility { + // =permissions + + /** + * Only "known" credential store types may be read. + * @type {boolean} + */ + get canRead() { + return !this.model.isStatic && this.hasAuthorizedAction('read'); + } +} diff --git a/addons/api/addon/models/credential-store.js b/addons/api/addon/models/credential-store.js index d8d52ba3a..0852da337 100644 --- a/addons/api/addon/models/credential-store.js +++ b/addons/api/addon/models/credential-store.js @@ -31,4 +31,9 @@ export default class CredentialStoreModel extends GeneratedCredentialStoreModel * @type {boolean} */ @equal('type', 'vault') isVault; + + /** + * @type {boolean} + */ + @equal('type', 'static') isStatic; } diff --git a/addons/api/app/abilities/credential-store.js b/addons/api/app/abilities/credential-store.js new file mode 100644 index 000000000..96ab303c6 --- /dev/null +++ b/addons/api/app/abilities/credential-store.js @@ -0,0 +1 @@ +export { default } from 'api/abilities/credential-store'; diff --git a/addons/api/mirage/factories/credential-store.js b/addons/api/mirage/factories/credential-store.js index 0858d8e48..55ecf4f85 100644 --- a/addons/api/mirage/factories/credential-store.js +++ b/addons/api/mirage/factories/credential-store.js @@ -4,7 +4,7 @@ import { trait } from 'ember-cli-mirage'; import permissions from '../helpers/permissions'; import generateId from '../helpers/id'; -const types = ['vault']; +const types = ['vault', 'static']; export default factory.extend({ authorized_actions: () => diff --git a/addons/core/translations/resources/en-us.yaml b/addons/core/translations/resources/en-us.yaml index 1d0a3feb3..17979a4b2 100644 --- a/addons/core/translations/resources/en-us.yaml +++ b/addons/core/translations/resources/en-us.yaml @@ -318,6 +318,7 @@ credential-store: delete: Delete Credential Store types: vault: Vault + static: Static form: address: label: Address diff --git a/ui/admin/app/routes/onboarding/quick-setup/create-resources.js b/ui/admin/app/routes/onboarding/quick-setup/create-resources.js index bf2d303fc..714e5c8e7 100644 --- a/ui/admin/app/routes/onboarding/quick-setup/create-resources.js +++ b/ui/admin/app/routes/onboarding/quick-setup/create-resources.js @@ -60,7 +60,6 @@ export default class OnboardingQuickSetupCreateResourcesRoute extends Route { try { await this.createOnboardingResourcesAndRedirect(hostAddress, targetPort); } catch (e) { - console.log(e); this.router.replaceWith('scopes.scope', 'global'); throw new Error(); } diff --git a/ui/admin/app/routes/scopes/scope/targets/target/add-credential-sources.js b/ui/admin/app/routes/scopes/scope/targets/target/add-credential-sources.js index 59a5a6e4a..2da08908d 100644 --- a/ui/admin/app/routes/scopes/scope/targets/target/add-credential-sources.js +++ b/ui/admin/app/routes/scopes/scope/targets/target/add-credential-sources.js @@ -32,9 +32,13 @@ export default class ScopesScopeTargetsTargetAddCredentialSourcesRoute extends R scope_id, }); await all( - credentialStores.map(({ id: credential_store_id }) => - this.store.query('credential-library', { credential_store_id }) - ) + credentialStores.map(({ id: credential_store_id, isStatic }) => { + //credential libraries don't have a type static so exclude them + if (!isStatic) + return this.store.query('credential-library', { + credential_store_id, + }); + }) ); const credentialLibraries = this.store.peekAll('credential-library'); return { diff --git a/ui/admin/app/routes/scopes/scope/targets/target/credential-sources.js b/ui/admin/app/routes/scopes/scope/targets/target/credential-sources.js index d53fbedcb..c4dc5ff37 100644 --- a/ui/admin/app/routes/scopes/scope/targets/target/credential-sources.js +++ b/ui/admin/app/routes/scopes/scope/targets/target/credential-sources.js @@ -13,14 +13,17 @@ export default class ScopesScopeTargetsTargetCredentialSourcesRoute extends Rout * @return {Promise{[CredentialLibraryModel]}} */ beforeModel() { - const { application_credential_source_ids: credential_libraries } = + const { application_credential_source_ids: sourceIDFragments } = this.modelFor('scopes.scope.targets.target'); return all( - credential_libraries.map((credential_library) => - this.store.findRecord('credential-library', credential_library.value, { - reload: true, - }) - ) + sourceIDFragments.map(({ value }) => { + const isStoreOrLibrary = !value.includes('cred'); + if (isStoreOrLibrary) { + return this.store.findRecord('credential-library', value, { + reload: true, + }); + } + }) ); } diff --git a/ui/admin/app/styles/app.scss b/ui/admin/app/styles/app.scss index 871a18607..0836c7c5b 100644 --- a/ui/admin/app/styles/app.scss +++ b/ui/admin/app/styles/app.scss @@ -128,15 +128,15 @@ &.loading { &::after { - animation: gradient 1s linear infinite; - background: repeating-linear-gradient( - to right, - var(--subtle), - var(--subtle), - var(--info), - var(--subtle), - var(--subtle) - ); + // animation: gradient 1s linear infinite; + // background: repeating-linear-gradient( + // to right, + // var(--subtle), + // var(--subtle), + // var(--info), + // var(--subtle), + // var(--subtle) + // ); background-position: -100% 0; background-size: 200% auto; content: ' '; diff --git a/ui/admin/app/templates/scopes/scope/credential-stores/index.hbs b/ui/admin/app/templates/scopes/scope/credential-stores/index.hbs index 49e297ebd..775acad74 100644 --- a/ui/admin/app/templates/scopes/scope/credential-stores/index.hbs +++ b/ui/admin/app/templates/scopes/scope/credential-stores/index.hbs @@ -42,7 +42,7 @@ {{#each @model as |credentialStore|}} - {{#if (can 'read model' credentialStore)}} + {{#if (can 'read credential-store' credentialStore)}}