Files
vault/ui/lib/core/addon/components/masked-input.hbs
Angel Garbarino 66e78db425 Mask obfuscated Secret sync create/edit fields (#27348)
* wip not working on edit view

* changelog

* vercel and fix tests

* need conditional to not break all the things:

* create test coverage and add for other obfustcaed fonts, still missing one.

* Update 27348.txt

* remove meep

* comment

* test coverage
2024-06-18 14:20:22 -06:00

104 lines
3.1 KiB
Handlebars

{{!
Copyright (c) HashiCorp, Inc.
SPDX-License-Identifier: BUSL-1.1
~}}
<div
class="masked-input {{if @displayOnly 'display-only'}} {{if @allowCopy 'allow-copy'}}"
data-test-masked-input
data-test-field
...attributes
>
{{#if @displayOnly}}
{{#if this.showValue}}
{{! Show minus icon if there is no value }}
{{#if (eq @value "")}}
<Icon class="masked-value" @name="minus" />
{{else}}
<pre class="masked-value display-only is-word-break">{{@value}}</pre>
{{/if}}
{{else}}
<pre class="masked-value display-only masked-font">***********</pre>
{{/if}}
{{else}}
<Textarea
id={{this.textareaId}}
name={{@name}}
@value={{@value}}
class="input masked-value {{unless this.showValue 'masked-font'}}"
rows={{1}}
wrap="off"
spellcheck="false"
aria-label={{or @name "masked input"}}
{{on "change" this.onChange}}
{{on "keyup" (fn this.handleKeyUp @name)}}
data-test-textarea={{or @name ""}}
/>
{{/if}}
{{#if @allowCopy}}
<Hds::Copy::Button
@text="Copy"
@isIconOnly={{true}}
@textToCopy={{this.copyValue}}
@onError={{(fn (set-flash-message "Clipboard copy failed. The Clipboard API requires a secure context." "danger"))}}
class="transparent has-padding-xxs"
data-test-copy-button={{or this.copyValue true}}
/>
{{/if}}
{{#if @allowDownload}}
<Hds::Button
@text="Download secret value"
@icon="download"
@isIconOnly={{true}}
@color="tertiary"
class="has-padding-xxs"
data-test-download-icon
{{on "click" (fn (mut this.modalOpen) true)}}
/>
{{/if}}
<Hds::Button
@text={{if this.showValue "hide value" "show value"}}
@icon={{if this.showValue "eye-off" "eye"}}
@isIconOnly={{true}}
@color="tertiary"
class="has-padding-xxs"
data-test-button="toggle-masked"
{{on "click" this.toggleMask}}
/>
</div>
{{! CONFIRM DOWNLOAD MODAL }}
{{#if this.modalOpen}}
<Hds::Modal @color="warning" id="confirm-download-modal" @onClose={{fn (mut this.modalOpen) false}} as |M|>
<M.Header @icon="alert-triangle">
Download secret value?
</M.Header>
<M.Body>
This download is
<strong>unencrypted</strong>. Are you sure you want to download this secret data as plaintext?
<div class="has-top-margin-m">
<Hds::Form::Toggle::Field
checked={{this.stringifyDownload}}
{{on "change" this.toggleStringifyDownload}}
data-test-stringify-toggle
as |F|
>
<F.Label>Stringify secret value</F.Label>
<F.HelperText>Preserve formatting for JSON values.</F.HelperText>
</Hds::Form::Toggle::Field>
</div>
</M.Body>
<M.Footer as |F|>
<Hds::ButtonSet>
<DownloadButton
@filename={{or @name "secret-value"}}
@data={{@value}}
@stringify={{this.stringifyDownload}}
@onSuccess={{fn (mut this.modalOpen) false}}
/>
<Hds::Button @text="Cancel" @color="secondary" {{on "click" F.close}} />
</Hds::ButtonSet>
</M.Footer>
</Hds::Modal>
{{/if}}