mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-02 03:27:54 +00:00
UI: LDAP Hierarchical Library names (#29293)
* refactor crumbs * add subdirectory library route and hierarchical nav * update library breadcrumbs; * fix role popup menus * add getter to library model for full path * cleanup model getters * add changelog * add bug fix note * add transition after deleting * fix function definition * update adapter test * add test coverage * fix crumb typo
This commit is contained in:
@@ -16,6 +16,7 @@ import type Transition from '@ember/routing/transition';
|
||||
import type { Breadcrumb } from 'vault/vault/app-types';
|
||||
import { LdapLibraryCheckOutCredentials } from 'vault/vault/adapters/ldap/library';
|
||||
import type AdapterError from 'ember-data/adapter'; // eslint-disable-line ember/use-ember-data-rfc-395-imports
|
||||
import { ldapBreadcrumbs, libraryRoutes } from 'ldap/utils/ldap-breadcrumbs';
|
||||
|
||||
interface LdapLibraryCheckOutController extends Controller {
|
||||
breadcrumbs: Array<Breadcrumb>;
|
||||
@@ -45,12 +46,14 @@ export default class LdapLibraryCheckOutRoute extends Route {
|
||||
transition: Transition
|
||||
) {
|
||||
super.setupController(controller, resolvedModel, transition);
|
||||
|
||||
const library = this.modelFor('libraries.library') as LdapLibraryModel;
|
||||
const routeParams = (childResource: string) => {
|
||||
return [library.backend, childResource];
|
||||
};
|
||||
controller.breadcrumbs = [
|
||||
{ label: library.backend, route: 'overview' },
|
||||
{ label: 'Libraries', route: 'libraries' },
|
||||
{ label: library.name, route: 'libraries.library' },
|
||||
...ldapBreadcrumbs(library.name, routeParams, libraryRoutes),
|
||||
{ label: 'Check-Out' },
|
||||
];
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import type LdapLibraryModel from 'vault/models/ldap/library';
|
||||
import type Controller from '@ember/controller';
|
||||
import type Transition from '@ember/routing/transition';
|
||||
import type { Breadcrumb } from 'vault/vault/app-types';
|
||||
import { ldapBreadcrumbs, libraryRoutes } from 'ldap/utils/ldap-breadcrumbs';
|
||||
|
||||
interface LdapLibraryDetailsController extends Controller {
|
||||
breadcrumbs: Array<Breadcrumb>;
|
||||
@@ -23,10 +24,14 @@ export default class LdapLibraryDetailsRoute extends Route {
|
||||
) {
|
||||
super.setupController(controller, resolvedModel, transition);
|
||||
|
||||
const routeParams = (childResource: string) => {
|
||||
return [resolvedModel.backend, childResource];
|
||||
};
|
||||
|
||||
controller.breadcrumbs = [
|
||||
{ label: resolvedModel.backend, route: 'overview' },
|
||||
{ label: 'Libraries', route: 'libraries' },
|
||||
{ label: resolvedModel.name },
|
||||
...ldapBreadcrumbs(resolvedModel.name, routeParams, libraryRoutes, true),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import type LdapLibraryModel from 'vault/models/ldap/library';
|
||||
import type Controller from '@ember/controller';
|
||||
import type Transition from '@ember/routing/transition';
|
||||
import type { Breadcrumb } from 'vault/vault/app-types';
|
||||
import { ldapBreadcrumbs, libraryRoutes } from 'ldap/utils/ldap-breadcrumbs';
|
||||
|
||||
interface LdapLibraryEditController extends Controller {
|
||||
breadcrumbs: Array<Breadcrumb>;
|
||||
@@ -23,10 +24,13 @@ export default class LdapLibraryEditRoute extends Route {
|
||||
) {
|
||||
super.setupController(controller, resolvedModel, transition);
|
||||
|
||||
const routeParams = (childResource: string) => {
|
||||
return [resolvedModel.backend, childResource];
|
||||
};
|
||||
controller.breadcrumbs = [
|
||||
{ label: resolvedModel.backend, route: 'overview' },
|
||||
{ label: 'Libraries', route: 'libraries' },
|
||||
{ label: resolvedModel.name, route: 'libraries.library.details' },
|
||||
...ldapBreadcrumbs(resolvedModel.name, routeParams, libraryRoutes),
|
||||
{ label: 'Edit' },
|
||||
];
|
||||
}
|
||||
|
||||
60
ui/lib/ldap/addon/routes/libraries/subdirectory.ts
Normal file
60
ui/lib/ldap/addon/routes/libraries/subdirectory.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* 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 type Store from '@ember-data/store';
|
||||
import type SecretMountPath from 'vault/services/secret-mount-path';
|
||||
import type Transition from '@ember/routing/transition';
|
||||
import type LdapLibraryModel from 'vault/models/ldap/library';
|
||||
import type SecretEngineModel from 'vault/models/secret-engine';
|
||||
import type Controller from '@ember/controller';
|
||||
import type { Breadcrumb } from 'vault/vault/app-types';
|
||||
import { ldapBreadcrumbs, libraryRoutes } from 'ldap/utils/ldap-breadcrumbs';
|
||||
|
||||
interface RouteModel {
|
||||
backendModel: SecretEngineModel;
|
||||
path_to_library: string;
|
||||
libraries: Array<LdapLibraryModel>;
|
||||
}
|
||||
interface RouteController extends Controller {
|
||||
breadcrumbs: Array<Breadcrumb>;
|
||||
model: RouteModel;
|
||||
}
|
||||
interface RouteParams {
|
||||
path_to_library?: string;
|
||||
}
|
||||
|
||||
export default class LdapLibrariesSubdirectoryRoute extends Route {
|
||||
@service declare readonly store: Store;
|
||||
@service declare readonly secretMountPath: SecretMountPath;
|
||||
|
||||
model(params: RouteParams) {
|
||||
const backendModel = this.modelFor('application') as SecretEngineModel;
|
||||
const { path_to_library } = params;
|
||||
return hash({
|
||||
backendModel,
|
||||
path_to_library,
|
||||
libraries: this.store.query('ldap/library', { backend: backendModel.id, path_to_library }),
|
||||
});
|
||||
}
|
||||
|
||||
setupController(controller: RouteController, resolvedModel: RouteModel, transition: Transition) {
|
||||
super.setupController(controller, resolvedModel, transition);
|
||||
|
||||
const routeParams = (childResource: string) => {
|
||||
return [resolvedModel.backendModel.id, childResource];
|
||||
};
|
||||
|
||||
controller.breadcrumbs = [
|
||||
{ label: 'Secrets', route: 'secrets', linkExternal: true },
|
||||
{ label: resolvedModel.backendModel.id, route: 'overview' },
|
||||
{ label: 'Libraries', route: 'libraries' },
|
||||
...ldapBreadcrumbs(resolvedModel.path_to_library, routeParams, libraryRoutes, true),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user