mirror of
https://github.com/hashicorp/vault.git
synced 2025-11-13 14:51:34 +01:00
* Ui/transform enable (#9647) * Show Transform on engines list if enterprise * Add box-radio component * Add is-disabled styling for box-radio and fix tooltip styling when position: above * Add KMIP and Transform to possible features on has feature helper * Sidebranch: Transform Secret Engine Initial setup (#9625) * WIP // list transforms, console.logs and all * setup LIST transformations ajax request and draft out options-for-backend options * change from plural to singluar and add transform to secret-edit * create two transform edit components * modify transform model with new attrs * add adapterFor to connect transform adapter to transform-edit-form component * setup Allowed roles searchSelect component to search over new transform/role adapter and model. * clean up for PR * clean up linting errors * restructure adapter call, now it works. * remove console * setup template model for SearchSelect component * add props to form field and search select for styling Co-authored-by: Chelsea Shaw <chelshaw.dev@gmail.com> * Ui/transform language fixes (#9666) * Update casing and wording on Transform list route. Use generic list item for transformations * Add back js file for transformation-edit * Set up transform for tabs * Ui/create edit transformation fixes (#9668) * add conditional for masking vs tweak source based on type, and update text for create transformation * change order * fix error with stringArray * setup the edit/delete transformation view * clean up toolbar links * setup serializer to change response of mask character from keycode to character * change styling of label and sub-text size, confirmed with design * temp fix on templates vs template * add clickable list item * add space between template list * setup styling and structure for the rest of the show transformation. TODO: turn into components. * create transform-show-transformation component * add attachCapabilities to transform model and update transform-transformation-itme list accordingly * clean up liniting errors * address pr comments * remove leftover * clean up * Sidebranch: UI transform create and edit clean up (#9778) * clean up some of the TODOs * setup edit view with read only attributes for name and template * setup initial selected for search select component * fixes * hide templates form field for now * set selectLimit for search select component * hide power select if the select limit is greater than or equal to the selectedOptions length * clean up failing linting * address pr comments * Ui/fix list roles transformation (#9788) * Update search-select to pass backend to query if exists * Update role and template adapters * cleanup * Fix replace with static string * Ui/transform cleanup 2 (#9789) * amend encode/decode commands for now until design gets back with more details * restrict character count on masking input field * clean up selectLimit * show backend instead of transform in cli copy command * Show KMIP un-selectable if enterprise but no ADP module (#9780) * New component transform-edit-base * Duplicate RoleEdit as TransformEditBase and swap in all transform components * Roll back role-edit changes * Update to transform edit base * Remove extraeneous set backend type on transform components * formatting * Revert search-select changes * Update template/templates data on transformation (#9838) Co-authored-by: Angel Garbarino <Monkeychip@users.noreply.github.com>
119 lines
3.1 KiB
JavaScript
119 lines
3.1 KiB
JavaScript
import { inject as service } from '@ember/service';
|
|
import { computed } from '@ember/object';
|
|
import Component from '@ember/component';
|
|
import { task } from 'ember-concurrency';
|
|
import { methods } from 'vault/helpers/mountable-auth-methods';
|
|
import { engines, KMIP, TRANSFORM } from 'vault/helpers/mountable-secret-engines';
|
|
|
|
const METHODS = methods();
|
|
const ENGINES = engines();
|
|
|
|
export default Component.extend({
|
|
store: service(),
|
|
wizard: service(),
|
|
flashMessages: service(),
|
|
version: service(),
|
|
|
|
/*
|
|
* @param Function
|
|
* @public
|
|
*
|
|
* Optional param to call a function upon successfully mounting a backend
|
|
*
|
|
*/
|
|
onMountSuccess() {},
|
|
/*
|
|
* @param String
|
|
* @public
|
|
* the type of backend we want to mount
|
|
* defaults to `auth`
|
|
*
|
|
*/
|
|
mountType: 'auth',
|
|
|
|
/*
|
|
*
|
|
* @param DS.Model
|
|
* @private
|
|
* Ember Data model corresponding to the `mountType`.
|
|
* Created and set during `init`
|
|
*
|
|
*/
|
|
mountModel: null,
|
|
|
|
showEnable: false,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
const type = this.mountType;
|
|
const modelType = type === 'secret' ? 'secret-engine' : 'auth-method';
|
|
const model = this.store.createRecord(modelType);
|
|
this.set('mountModel', model);
|
|
},
|
|
|
|
mountTypes: computed('mountType', function() {
|
|
return this.mountType === 'secret' ? this.engines : METHODS;
|
|
}),
|
|
|
|
engines: computed('version.features[]', function() {
|
|
if (this.get('version.isEnterprise')) {
|
|
return ENGINES.concat([KMIP, TRANSFORM]);
|
|
}
|
|
return ENGINES;
|
|
}),
|
|
|
|
willDestroy() {
|
|
// if unsaved, we want to unload so it doesn't show up in the auth mount list
|
|
this.get('mountModel').rollbackAttributes();
|
|
},
|
|
|
|
checkPathChange(type) {
|
|
let mount = this.mountModel;
|
|
let currentPath = mount.path;
|
|
let list = this.mountTypes;
|
|
// if the current path matches a type (meaning the user hasn't altered it),
|
|
// change it here to match the new type
|
|
let isUnchanged = list.findBy('type', currentPath);
|
|
if (!currentPath || isUnchanged) {
|
|
mount.set('path', type);
|
|
}
|
|
},
|
|
|
|
mountBackend: task(function*() {
|
|
const mountModel = this.mountModel;
|
|
const { type, path } = mountModel.getProperties('type', 'path');
|
|
try {
|
|
yield mountModel.save();
|
|
} catch (err) {
|
|
// err will display via model state
|
|
return;
|
|
}
|
|
|
|
let mountType = this.mountType;
|
|
mountType = mountType === 'secret' ? `${mountType}s engine` : `${mountType} method`;
|
|
this.flashMessages.success(`Successfully mounted the ${type} ${mountType} at ${path}.`);
|
|
yield this.onMountSuccess(type, path);
|
|
return;
|
|
})
|
|
.drop()
|
|
.withTestWaiter(),
|
|
|
|
actions: {
|
|
onTypeChange(path, value) {
|
|
if (path === 'type') {
|
|
this.wizard.set('componentState', value);
|
|
this.checkPathChange(value);
|
|
}
|
|
},
|
|
|
|
toggleShowEnable(value) {
|
|
this.set('showEnable', value);
|
|
if (value === true && this.wizard.featureState === 'idle') {
|
|
this.wizard.transitionFeatureMachine(this.wizard.featureState, 'CONTINUE', this.mountModel.type);
|
|
} else {
|
|
this.wizard.transitionFeatureMachine(this.wizard.featureState, 'RESET', this.mountModel.type);
|
|
}
|
|
},
|
|
},
|
|
});
|