Disables ability to edit vault ID on the UI side.

This commit is contained in:
Lila
2022-05-16 16:36:40 -04:00
parent 40279bc6c0
commit 78220cad82
2 changed files with 49 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
/* eslint-disable react/jsx-no-useless-fragment */ /* eslint-disable react/jsx-no-useless-fragment */
import React, { useState } from 'react'; import React, { useState } from 'react';
import { useLocation } from 'react-router-dom';
import { useField, useFormikContext } from 'formik'; import { useField, useFormikContext } from 'formik';
import { shape, string } from 'prop-types'; import { shape, string } from 'prop-types';
import styled from 'styled-components'; import styled from 'styled-components';
@@ -31,6 +32,7 @@ function CredentialInput({
fieldOptions, fieldOptions,
isFieldGroupValid, isFieldGroupValid,
credentialKind, credentialKind,
isVaultIdDisabled,
...rest ...rest
}) { }) {
const [fileName, setFileName] = useState(''); const [fileName, setFileName] = useState('');
@@ -148,6 +150,7 @@ function CredentialInput({
onChange={(value, event) => { onChange={(value, event) => {
subFormField.onChange(event); subFormField.onChange(event);
}} }}
isDisabled={isVaultIdDisabled}
validated={isValid ? 'default' : 'error'} validated={isValid ? 'default' : 'error'}
/> />
); );
@@ -167,6 +170,7 @@ CredentialInput.defaultProps = {
function CredentialField({ credentialType, fieldOptions }) { function CredentialField({ credentialType, fieldOptions }) {
const { values: formikValues } = useFormikContext(); const { values: formikValues } = useFormikContext();
const location = useLocation();
const requiredFields = credentialType?.inputs?.required || []; const requiredFields = credentialType?.inputs?.required || [];
const isRequired = requiredFields.includes(fieldOptions.id); const isRequired = requiredFields.includes(fieldOptions.id);
const validateField = () => { const validateField = () => {
@@ -242,6 +246,15 @@ function CredentialField({ credentialType, fieldOptions }) {
<BecomeMethodField fieldOptions={fieldOptions} isRequired={isRequired} /> <BecomeMethodField fieldOptions={fieldOptions} isRequired={isRequired} />
); );
} }
let disabled = false;
if (
credentialType.kind === 'vault' &&
location.pathname.endsWith('edit') &&
fieldOptions.id === 'vault_id'
) {
disabled = true;
}
return ( return (
<CredentialPluginField <CredentialPluginField
fieldOptions={fieldOptions} fieldOptions={fieldOptions}
@@ -251,6 +264,7 @@ function CredentialField({ credentialType, fieldOptions }) {
<CredentialInput <CredentialInput
isFieldGroupValid={isValid} isFieldGroupValid={isValid}
fieldOptions={fieldOptions} fieldOptions={fieldOptions}
isVaultIdDisabled={disabled}
/> />
</CredentialPluginField> </CredentialPluginField>
); );

View File

@@ -13,6 +13,12 @@ const fieldOptions = {
secret: true, secret: true,
}; };
jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'),
useLocation: () => ({
pathname: '/credentials/3/edit',
}),
}));
describe('<CredentialField />', () => { describe('<CredentialField />', () => {
let wrapper; let wrapper;
test('renders correctly without initial value', () => { test('renders correctly without initial value', () => {
@@ -113,4 +119,33 @@ describe('<CredentialField />', () => {
expect(wrapper.find('TextInput').props().value).toBe(''); expect(wrapper.find('TextInput').props().value).toBe('');
expect(wrapper.find('TextInput').props().placeholder).toBe('ENCRYPTED'); expect(wrapper.find('TextInput').props().placeholder).toBe('ENCRYPTED');
}); });
test('Should check to see if the ability to edit vault ID is disabled after creation.', () => {
const vaultCredential = credentialTypes.find((type) => type.id === 3);
const vaultFieldOptions = {
id: 'vault_id',
label: 'Vault Identifier',
type: 'string',
secret: true,
};
wrapper = mountWithContexts(
<Formik
initialValues={{
passwordPrompts: {},
inputs: {
password: 'password',
vault_id: 'vault_id',
},
}}
>
{() => (
<CredentialField
fieldOptions={vaultFieldOptions}
credentialType={vaultCredential}
/>
)}
</Formik>
);
expect(wrapper.find('CredentialInput').props().isDisabled).toBe(true);
expect(wrapper.find('KeyIcon').length).toBe(1);
});
}); });