mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-19 05:31:10 +02:00
* Part 1: Upgrade HDS to 2.9.0 (#22311) * UI: HDS adoption replace <CopyButton> part 2 (#22356) * certificate-card.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * scope-form.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * fix tests caused by changing certificate-card. change hds copy button in certificate-card.hbs * json-editor.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * masked-input.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * fix error with certificate-card.hbs copy button * fix tests that deal with certificate-card.hbs * add class to hds copy buttons to maintain similar styling to curent UI * info-table-row.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * undo change that should instead by merged in from main * change tooltip copy button to white. cleanup * add extra tet for oidc scope form. edit css class for the white icon copy button * fix tests * UI: HDS adoption replace <CopyButton> part 3 (#22614) * encrypt.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * decrypt.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * datakey.hbs. replace 6 <CopyButton> with <Hds::Copy::Button> * rewrap.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * hmac.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * fix typo * add copy-close class to copy & close buttons * export.hbs: replace 2 <CopyButton> with <Hds::Copy::Button>. fix styling * sign.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * fix test caused by changing <pre> tag to <code> in export.hbs * rename class * add extra style to class needed for part 4 of copy button replacement * UI: HDS adoption replace <CopyButton> part 4 (#22749) * user-menu.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * transit-form-show.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * configure-ssh-secret.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * tool-hash.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * tool-random.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * tool-rewrap.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * tool-unwrap.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * tool-wrap.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * paths.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * code-snippet.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * cleanup css for code-snippet. add comments for getting rid of code-snippet and replacing with <Hds::Copy::Snippet * change code-snippet copy icon to gray to match original design * change code-snippet class * accounts.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * hover-copy-button.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * add.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * show.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * copy-secret-dropdown.hbs: replace 1 <CopyButton> with <Hds::Copy::Button> * change styling of 'link' copy buttons * generate-credentials.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * transform-show-transformation.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * sign.hbs: replace 2 <CopyButton> with <Hds::Copy::Button> * hide some copy buttons' icons and use original flash message * undo cleanup of scss file so that I can put cleanup all into one PR to be more organized * update code snippet copy button * UI: HDS adoption replace <CopyButton> part 5: Cleanup (#22884) * remove unecessary code-snippet.scssn class * remove copy classes from masked-input.scss * remove copy button class from text-file.scss * uninstall ember-cli-clipboard 0.16.0 since there is no longer structure <CopyButton> * remove copyright message from code-snippet.scss to avoid merge conflicts with main, where the file is deleted * replace 2 classes with one * remove unecessary class from copy button * cleanup classes * revert changes to avoid merge conflicts * remove is-block class * conditionally render private key * add more info to comment * remove HoverCopyButton * add missing selector * fix control group padding --------- Co-authored-by: clairebontempo@gmail.com <clairebontempo@gmail.com> Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com> * rename class to transparent background * remove unused test selectors * replace transit actions with Copy::Snippet * replace transfrom code blocks with code snippet component * revert extra css fiddling * misc cleanup, unused action * remove copy & close buttons from transit modals * remove is- from class naming * remove hds-copy-button class * add other grey class * more small cleanup * add -top to margin * add changelog --------- Co-authored-by: clairebontempo@gmail.com <clairebontempo@gmail.com> Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>
115 lines
3.0 KiB
JavaScript
115 lines
3.0 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Component from '@glimmer/component';
|
|
import { inject as service } from '@ember/service';
|
|
import { action } from '@ember/object';
|
|
import { tracked } from '@glimmer/tracking';
|
|
import { task } from 'ember-concurrency';
|
|
import { waitFor } from '@ember/test-waiters';
|
|
|
|
/**
|
|
* @module KeymgmtKeyEdit
|
|
* KeymgmtKeyEdit components are used to display KeyMgmt Secrets engine UI for Key items
|
|
*
|
|
* @example
|
|
* ```js
|
|
* <KeymgmtKeyEdit @model={model} @mode="show" @tab="versions" />
|
|
* ```
|
|
* @param {object} model - model is the data from the store
|
|
* @param {string} [mode=show] - mode controls which view is shown on the component
|
|
* @param {string} [tab=details] - Options are "details" or "versions" for the show mode only
|
|
*/
|
|
|
|
const LIST_ROOT_ROUTE = 'vault.cluster.secrets.backend.list-root';
|
|
const SHOW_ROUTE = 'vault.cluster.secrets.backend.show';
|
|
export default class KeymgmtKeyEdit extends Component {
|
|
@service store;
|
|
@service router;
|
|
@service flashMessages;
|
|
@tracked isDeleteModalOpen = false;
|
|
|
|
get mode() {
|
|
return this.args.mode || 'show';
|
|
}
|
|
|
|
get keyAdapter() {
|
|
return this.store.adapterFor('keymgmt/key');
|
|
}
|
|
|
|
get isMutable() {
|
|
return ['create', 'edit'].includes(this.args.mode);
|
|
}
|
|
|
|
get isCreating() {
|
|
return this.args.mode === 'create';
|
|
}
|
|
|
|
@task
|
|
@waitFor
|
|
*saveKey(evt) {
|
|
evt.preventDefault();
|
|
const { model } = this.args;
|
|
try {
|
|
yield model.save();
|
|
this.router.transitionTo(SHOW_ROUTE, model.name);
|
|
} catch (error) {
|
|
let errorMessage = error;
|
|
if (error.errors) {
|
|
// if errors come directly from API they will be in this shape
|
|
errorMessage = error.errors.join('. ');
|
|
}
|
|
this.flashMessages.danger(errorMessage);
|
|
if (!error.errors) {
|
|
// If error was custom from save, only partial fail
|
|
// so it's safe to show the key
|
|
this.router.transitionTo(SHOW_ROUTE, model.name);
|
|
}
|
|
}
|
|
}
|
|
|
|
@task
|
|
@waitFor
|
|
*removeKey() {
|
|
try {
|
|
yield this.keyAdapter.removeFromProvider(this.args.model);
|
|
yield this.args.model.reload();
|
|
this.flashMessages.success('Key has been successfully removed from provider');
|
|
} catch (error) {
|
|
this.flashMessages.danger(error.errors?.join('. '));
|
|
}
|
|
}
|
|
|
|
@action
|
|
deleteKey() {
|
|
const secret = this.args.model;
|
|
const backend = secret.backend;
|
|
secret
|
|
.destroyRecord()
|
|
.then(() => {
|
|
this.router.transitionTo(LIST_ROOT_ROUTE, backend);
|
|
})
|
|
.catch((e) => {
|
|
this.flashMessages.danger(e.errors?.join('. '));
|
|
});
|
|
}
|
|
|
|
@task
|
|
@waitFor
|
|
*rotateKey() {
|
|
const id = this.args.model.name;
|
|
const backend = this.args.model.backend;
|
|
const adapter = this.keyAdapter;
|
|
yield adapter
|
|
.rotateKey(backend, id)
|
|
.then(() => {
|
|
this.flashMessages.success(`Success: ${id} connection was rotated`);
|
|
})
|
|
.catch((e) => {
|
|
this.flashMessages.danger(e.errors);
|
|
});
|
|
}
|
|
}
|