mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-10-29 17:52:32 +00:00
* UI: Implement overview page for KV v2 (#28162) * build json editor patch form * finish patch component and tests * add tab to each route * and path route * add overview tab to tests * update overview to use updated_time instead of created_time * redirect relevant secret.details to secret.index * compute secretState in component instead of pass as arg * add capabilities service * add error handling to fetchSubkeys adapter request * add overview tabs to test * add subtext to overview card * remaining redirects in secret edit * remove create new version from popup menu * fix breadcrumbs for overview * separate adding capabilities service * add service to kv engine * Revert "separate adding capabilities service" This reverts commit bb70b12ab7dbcde0fbd2d4d81768e5c8b1c420cc. * Revert "add service to kv engine" This reverts commit bfa880535ef7d529d7610936b2c1aae55673d23f. * update navigation test * consistently navigate to secret.index route to be explicit * finish overview navigation tests * add copyright header * update delete tests * fix nav testrs * cleanup secret edit redirects * remove redundant async/awaits * fix create test * edge case tests * secret acceptance tests * final component tests * rename kvSecretDetails external route to kvSecretOverview * add comment * UI: Add patch route and implement Page::Secret::Patch page component (sidebranch) (#28192) * add tab to each route * and path route * add overview tab to tests * update overview to use updated_time instead of created_time * redirect relevant secret.details to secret.index * compute secretState in component instead of pass as arg * add capabilities service * add error handling to fetchSubkeys adapter request * add patch route and put in page component * add patch secret action to subkeys card * fix component name * add patch capability * alphabetize computed capabilities * update links, cleanup selectors * fix more merge conflict stuff * add capabilities test * add models to patch link * add test for patch route * rename external route * add error templates * make notes about enterprise tests, filter one * remove errors, transition (redirect) instead * redirect patch routes * UI: Move fetching secret data to child route (#28198) * remove @secret from metadata details * use metadata model instead of secret in paths page * put delete back into kv/data adapter * grant access in control group test * update metadata route and permissions * remove secret from parent route, only fetch in details route * change more permissions to route perms, add tests * revert overview redirect from list view * wrap model in conditional for perms * remove redundant canReadCustomMetadata check * rename adapter method * handle overview 404 * remove comment * add customMetadata as an arg * update grantAccess in test * make version param easier to follow * VAULT-30494 handle 404 jira * refactor capabilities to return an object * update create tests * add test for default truthy capabilities * remove destroy-all-versions from kv/data adapter * UI: Add enterprise checks (#28215) * add enterprise check for subkey card * add max height and scroll to subkey card * only fetch subkeys if enterprise * remove check in overview * add test * Update ui/tests/integration/components/kv/page/kv-page-overview-test.js * fix test failures (#28222) * add assertion * add optional chaining * create/delete versioned secret in each module * wait for transition * add another waitUntil * UI: Add patch latest version to toolbar (#28223) * add patch latest version action to toolbar * make isPatchAllowed arg all encompassing * no longer need model check * use hash so both promises fire at the same time * add subkeys to policy * Update ui/lib/kv/addon/routes/secret.js * add changelog * small cleanup items! (#28229) * add conditional for enterprise checking tabs * cleanup fetchMultiplePaths method * add test * remove todo comment, ticket created and design wants to hold off * keep transition, update comments * cleanup tests, add index to breadcrumbs * add some test coverage * toggle so value is readable
79 lines
2.6 KiB
JavaScript
79 lines
2.6 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Route from '@ember/routing/route';
|
|
import { service } from '@ember/service';
|
|
import { hash } from 'rsvp';
|
|
import { action } from '@ember/object';
|
|
|
|
export default class KvSecretRoute extends Route {
|
|
@service secretMountPath;
|
|
@service store;
|
|
@service capabilities;
|
|
@service version;
|
|
|
|
fetchSecretMetadata(backend, path) {
|
|
// catch error and only return 404 which indicates the secret truly does not exist.
|
|
// control group error is handled by the metadata route
|
|
return this.store.queryRecord('kv/metadata', { backend, path }).catch((e) => {
|
|
if (e.httpStatus === 404) {
|
|
throw e;
|
|
}
|
|
return null;
|
|
});
|
|
}
|
|
|
|
fetchSubkeys(backend, path) {
|
|
if (this.version.isEnterprise) {
|
|
const adapter = this.store.adapterFor('kv/data');
|
|
// metadata will throw if the secret does not exist
|
|
// always return here so we get deletion state and relevant metadata
|
|
return adapter.fetchSubkeys(backend, path);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
isPatchAllowed(backend, path) {
|
|
if (!this.version.isEnterprise) return false;
|
|
const capabilities = {
|
|
canPatch: this.capabilities.canPatch(`${backend}/data/${path}`),
|
|
canReadSubkeys: this.capabilities.canRead(`${backend}/subkeys/${path}`),
|
|
};
|
|
return hash(capabilities).then(
|
|
({ canPatch, canReadSubkeys }) => canPatch && canReadSubkeys,
|
|
// this callback fires if either promise is rejected
|
|
// since this feature is only client-side gated we return false (instead of default to true)
|
|
// for debugging you can pass an arg to log the failure reason
|
|
() => false
|
|
);
|
|
}
|
|
|
|
model() {
|
|
const backend = this.secretMountPath.currentPath;
|
|
const { name: path } = this.paramsFor('secret');
|
|
|
|
return hash({
|
|
path,
|
|
backend,
|
|
subkeys: this.fetchSubkeys(backend, path),
|
|
metadata: this.fetchSecretMetadata(backend, path),
|
|
isPatchAllowed: this.isPatchAllowed(backend, path),
|
|
// for creating a new secret version
|
|
canUpdateSecret: this.capabilities.canUpdate(`${backend}/data/${path}`),
|
|
});
|
|
}
|
|
|
|
@action
|
|
willTransition(transition) {
|
|
// refresh the route if transitioning to secret.index (which happens after delete, undelete or destroy)
|
|
// or transitioning from editing either metadata or secret data (creating a new version)
|
|
const isToIndex = transition.to.name === 'vault.cluster.secrets.backend.kv.secret.index';
|
|
const isFromEdit = transition.from.localName === 'edit';
|
|
if (isToIndex || isFromEdit) {
|
|
this.refresh();
|
|
}
|
|
}
|
|
}
|