mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-25 06:15:01 +00:00
96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
*/
|
|
|
|
import Route from '@ember/routing/route';
|
|
import { inject as service } from '@ember/service';
|
|
import { hash } from 'rsvp';
|
|
import { normalizePath } from 'vault/utils/path-encoding-helpers';
|
|
import { breadcrumbsForSecret } from 'kv/utils/kv-breadcrumbs';
|
|
import { pathIsDirectory } from 'kv/utils/kv-breadcrumbs';
|
|
|
|
export default class KvSecretsListRoute extends Route {
|
|
@service store;
|
|
@service router;
|
|
@service secretMountPath;
|
|
|
|
queryParams = {
|
|
pageFilter: {
|
|
refreshModel: true,
|
|
},
|
|
page: {
|
|
refreshModel: true,
|
|
},
|
|
};
|
|
|
|
async fetchMetadata(backend, pathToSecret, params) {
|
|
return await this.store
|
|
.lazyPaginatedQuery('kv/metadata', {
|
|
backend,
|
|
responsePath: 'data.keys',
|
|
page: Number(params.page) || 1,
|
|
pageFilter: params.pageFilter,
|
|
pathToSecret,
|
|
})
|
|
.catch((err) => {
|
|
if (err.httpStatus === 403) {
|
|
return 403;
|
|
}
|
|
if (err.httpStatus === 404) {
|
|
return [];
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
}
|
|
|
|
getPathToSecret(pathParam) {
|
|
if (!pathParam) return '';
|
|
// links and routing assumes pathToParam includes trailing slash
|
|
return pathIsDirectory(pathParam) ? normalizePath(pathParam) : normalizePath(`${pathParam}/`);
|
|
}
|
|
|
|
model(params) {
|
|
const { pageFilter, path_to_secret } = params;
|
|
const pathToSecret = this.getPathToSecret(path_to_secret);
|
|
const backend = this.secretMountPath.currentPath;
|
|
const filterValue = pathToSecret ? (pageFilter ? pathToSecret + pageFilter : pathToSecret) : pageFilter;
|
|
return hash({
|
|
secrets: this.fetchMetadata(backend, pathToSecret, params),
|
|
backend,
|
|
pathToSecret,
|
|
filterValue,
|
|
pageFilter,
|
|
});
|
|
}
|
|
|
|
setupController(controller, resolvedModel) {
|
|
super.setupController(controller, resolvedModel);
|
|
// renders alert inline error for overview card
|
|
resolvedModel.failedDirectoryQuery =
|
|
resolvedModel.secrets === 403 && pathIsDirectory(resolvedModel.pathToSecret);
|
|
|
|
let breadcrumbsArray = [{ label: 'secrets', route: 'secrets', linkExternal: true }];
|
|
// if on top level don't link the engine breadcrumb label, but if within a directory, do link back to top level.
|
|
if (this.routeName === 'list') {
|
|
breadcrumbsArray.push({ label: resolvedModel.backend });
|
|
} else {
|
|
breadcrumbsArray = [
|
|
...breadcrumbsArray,
|
|
{ label: resolvedModel.backend, route: 'list' },
|
|
...breadcrumbsForSecret(resolvedModel.pathToSecret, true),
|
|
];
|
|
}
|
|
|
|
controller.set('breadcrumbs', breadcrumbsArray);
|
|
}
|
|
|
|
resetController(controller, isExiting) {
|
|
if (isExiting) {
|
|
controller.set('pageFilter', null);
|
|
controller.set('page', null);
|
|
}
|
|
}
|
|
}
|