Skip to content

Commit 54ba538

Browse files
committed
fetch secret to check URL with new IP address validation on edit of an existing provider
1 parent 96e1e9e commit 54ba538

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

packages/forklift-console-plugin/src/modules/Providers/modals/EditProviderURL/VSphereEditURLModal.tsx

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import React from 'react';
22
import { ForkliftTrans, useForkliftTranslation } from 'src/utils/i18n';
33

4-
import { ProviderModel } from '@kubev2v/types';
4+
import { IoK8sApiCoreV1Secret, ProviderModel } from '@kubev2v/types';
5+
import { useK8sWatchResource } from '@openshift-console/dynamic-plugin-sdk';
56
import { ModalVariant } from '@patternfly/react-core';
67

78
import { validateEsxiURL, validateVCenterURL } from '../../utils/validators';
@@ -16,12 +17,20 @@ export const VSphereEditURLModal: React.FC<EditProviderURLModalProps> = (props)
1617

1718
let validationHook: ValidationHookType;
1819

20+
const [secret] = useK8sWatchResource<IoK8sApiCoreV1Secret>({
21+
groupVersionKind: { version: 'v1', kind: 'Secret' },
22+
namespaced: true,
23+
namespace: provider?.spec?.secret?.namespace,
24+
name: provider?.spec?.secret?.name,
25+
});
26+
1927
// VCenter of ESXi
2028
const sdkEndpoint = provider?.spec?.settings?.['sdkEndpoint'] || '';
2129
if (sdkEndpoint === 'esxi') {
2230
validationHook = validateEsxiURL;
2331
} else {
24-
validationHook = validateVCenterURL;
32+
validationHook = () =>
33+
validateVCenterURL(provider?.spec?.url, secret?.data?.insecureSkipVerify);
2534
}
2635

2736
const ModalBody = (

packages/forklift-console-plugin/src/modules/Providers/utils/validators/provider/vsphere/validateVCenterURL.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import { IoK8sApiCoreV1Secret } from '@kubev2v/types';
2-
31
import { safeBase64Decode } from '../../../helpers';
42
import { validateIpv4, validateURL, ValidationMsg } from '../../common';
53

6-
export const validateVCenterURL = (url: string, secret?: IoK8sApiCoreV1Secret): ValidationMsg => {
4+
export const validateVCenterURL = (url: string, insecureSkipVerify?: string): ValidationMsg => {
75
// For a newly opened form where the field is not set yet, set the validation type to default.
86
if (url === undefined) {
97
return {
@@ -21,7 +19,6 @@ export const validateVCenterURL = (url: string, secret?: IoK8sApiCoreV1Secret):
2119
const isValidURL = validateURL(trimmedUrl);
2220
const urlObject = getUrlObject(url);
2321
const urlHostname = urlObject?.hostname;
24-
const insecureSkipVerify = secret?.data?.insecureSkipVerify;
2522
const isSecure = !insecureSkipVerify || safeBase64Decode(insecureSkipVerify) === 'false';
2623

2724
if (trimmedUrl === '') {
@@ -44,7 +41,7 @@ export const validateVCenterURL = (url: string, secret?: IoK8sApiCoreV1Secret):
4441
if (isValidIpAddress) {
4542
return {
4643
type: 'warning',
47-
msg: 'The URL is not a fully qualified domain name (FQDN). If the certificate does not match the URL, the connection might fail.',
44+
msg: 'The URL is not a fully qualified domain name (FQDN). If the certificate is not skipped and does not match the URL, the connection might fail.',
4845
};
4946
}
5047
}

packages/forklift-console-plugin/src/modules/Providers/utils/validators/provider/vsphere/vsphereProviderValidator.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ export function vsphereProviderValidator(
2424
}
2525

2626
if (
27-
subType === 'vcenter' ? validateVCenterURL(url, secret).type === 'error' : !validateURL(url)
27+
subType === 'vcenter'
28+
? validateVCenterURL(url, secret?.data?.insecureSkipVerify).type === 'error'
29+
: !validateURL(url)
2830
) {
2931
return { type: 'error', msg: 'invalid URL' };
3032
}

packages/forklift-console-plugin/src/modules/Providers/views/create/components/VCenterProviderCreateForm.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export const VCenterProviderCreateForm: React.FC<VCenterProviderCreateFormProps>
3333

3434
const initialState = {
3535
validation: {
36-
url: validateVCenterURL(url, secret),
36+
url: validateVCenterURL(url, secret?.data?.insecureSkipVerify),
3737
vddkInitImage: validateVDDKImage(vddkInitImage),
3838
},
3939
};
@@ -42,7 +42,10 @@ export const VCenterProviderCreateForm: React.FC<VCenterProviderCreateFormProps>
4242
useEffect(() => {
4343
dispatch({
4444
type: 'SET_FIELD_VALIDATED',
45-
payload: { field: 'url', validationState: validateVCenterURL(url, secret) },
45+
payload: {
46+
field: 'url',
47+
validationState: validateVCenterURL(url, secret?.data?.insecureSkipVerify),
48+
},
4649
});
4750
}, [secret]);
4851

@@ -127,7 +130,7 @@ export const VCenterProviderCreateForm: React.FC<VCenterProviderCreateFormProps>
127130

128131
if (id === 'url') {
129132
// Validate URL - VCenter of ESXi
130-
const validationState = validateVCenterURL(trimmedValue, secret);
133+
const validationState = validateVCenterURL(trimmedValue, secret?.data?.insecureSkipVerify);
131134

132135
dispatch({ type: 'SET_FIELD_VALIDATED', payload: { field: 'url', validationState } });
133136

0 commit comments

Comments
 (0)