diff --git a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/VulnReports/ViewBasedReportJobDetails.tsx b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/VulnReports/ViewBasedReportJobDetails.tsx index 6ec571be37781..44464fcde22da 100644 --- a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/VulnReports/ViewBasedReportJobDetails.tsx +++ b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/VulnReports/ViewBasedReportJobDetails.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import type { ReactElement } from 'react'; import { Chip, ChipGroup, @@ -11,7 +12,8 @@ import { Title, } from '@patternfly/react-core'; -import { ViewBasedReportSnapshot } from 'services/ReportsService.types'; +import useFeatureFlags from 'hooks/useFeatureFlags'; +import type { ViewBasedReportSnapshot } from 'services/ReportsService.types'; import VulnerabilitySeverityIconText from 'Components/PatternFly/IconText/VulnerabilitySeverityIconText'; import { getSearchFilterFromSearchString } from 'utils/searchUtils'; @@ -20,6 +22,52 @@ export type ViewBasedReportJobDetailsProps = { }; function ViewBasedReportJobDetails({ reportSnapshot }: ViewBasedReportJobDetailsProps) { + // TODO Analyze pro and con of redundancy with ReportParametersDedtails component. + const { isFeatureFlagEnabled } = useFeatureFlags(); + const optionalColumnsDescriptions: ReactElement[] = []; + if (isFeatureFlagEnabled('ROX_SCANNER_V4') && reportSnapshot.vulnReportFilters.includeNvdCvss) { + optionalColumnsDescriptions.push( + NVDCVSS + ); + } + if ( + isFeatureFlagEnabled('ROX_SCANNER_V4') && + reportSnapshot.vulnReportFilters.includeEpssProbability + ) { + optionalColumnsDescriptions.push( + + EPSS Probability Percentage + + ); + } + /* + if ( + isFeatureFlagEnabled('ROX_SCANNER_V4') && + reportSnapshot.vulnReportFilters.includeAdvisory + ) { + optionalColumnsDescriptions.push( + + Advisory Name and Advisory Link + + ); + } + */ + /* + // Ross CISA KEV includeKnownExploit? + // Probably for 4.9 because optional columns might not be up to date for view-based reports. + if ( + isFeatureFlagEnabled('ROX_SCANNER_V4') && + isFeatureFlagEnabled('ROX_WHATEVER') && + formValues.reportParameters.includeKnownExploit + ) { + optionalColumnsDescriptions.push( + + Known exploit + + ); + } + */ + // @TODO: We need to separate the "CVE Severity" and "CVEs discovered since" filters from the rest of the filters. // The relevant search terms are called "Severity" and "CVE Discovered Time". const query = getSearchFilterFromSearchString(reportSnapshot.vulnReportFilters.query); @@ -108,17 +156,12 @@ function ViewBasedReportJobDetails({ reportSnapshot }: ViewBasedReportJobDetails CVEs discovered since All time - - Optional columns - - - {reportSnapshot.vulnReportFilters.includeNvdCvss &&
NVD CVSS
} - {reportSnapshot.vulnReportFilters.includeEpssProbability && ( -
EPSS probability
- )} -
-
-
+ {optionalColumnsDescriptions.length !== 0 && ( + + Optional columns + {optionalColumnsDescriptions} + + )} ); diff --git a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/components/ReportParametersDetails.tsx b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/components/ReportParametersDetails.tsx index 087869ee3af07..c43f222967ec9 100644 --- a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/components/ReportParametersDetails.tsx +++ b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/components/ReportParametersDetails.tsx @@ -1,3 +1,5 @@ +import React from 'react'; +import type { ReactElement } from 'react'; import { DescriptionList, DescriptionListDescription, @@ -7,7 +9,6 @@ import { FlexItem, Title, } from '@patternfly/react-core'; -import React, { ReactElement } from 'react'; import { ReportFormValues } from 'Containers/Vulnerabilities/VulnerablityReporting/forms/useReportFormValues'; import { fixabilityLabels } from 'constants/reportConstants'; @@ -29,14 +30,43 @@ function ReportParametersDetails({ formValues, }: ReportParametersDetailsProps): ReactElement { const { isFeatureFlagEnabled } = useFeatureFlags(); - const isIncludeAdvisoryEnabled = isFeatureFlagEnabled('ROX_SCANNER_V4'); - const hasIncludeAdvisory = - isIncludeAdvisoryEnabled && formValues.reportParameters.includeAdvisory; - const isIncludeEpssProbabilityEnabled = isFeatureFlagEnabled('ROX_SCANNER_V4'); - const hasIncludeEpssProbability = - isIncludeEpssProbabilityEnabled && formValues.reportParameters.includeEpssProbability; - const isIncludeNvdCvssEnabled = isFeatureFlagEnabled('ROX_SCANNER_V4'); - const hasIncludeNvdCvss = isIncludeNvdCvssEnabled && formValues.reportParameters.includeNvdCvss; + const optionalColumnsDescriptions: ReactElement[] = []; + if (isFeatureFlagEnabled('ROX_SCANNER_V4') && formValues.reportParameters.includeNvdCvss) { + optionalColumnsDescriptions.push( + NVDCVSS + ); + } + if ( + isFeatureFlagEnabled('ROX_SCANNER_V4') && + formValues.reportParameters.includeEpssProbability + ) { + optionalColumnsDescriptions.push( + + EPSS Probability Percentage + + ); + } + if (isFeatureFlagEnabled('ROX_SCANNER_V4') && formValues.reportParameters.includeAdvisory) { + optionalColumnsDescriptions.push( + + Advisory Name and Advisory Link + + ); + } + /* + // Ross CISA KEV includeKnownExploit? + if ( + isFeatureFlagEnabled('ROX_SCANNER_V4') && + isFeatureFlagEnabled('ROX_WHATEVER') && + formValues.reportParameters.includeKnownExploit + ) { + optionalColumnsDescriptions.push( + + Known exploit + + ); + } + */ const cveSeverities = formValues.reportParameters.cveSeverities.length !== 0 ? ( @@ -136,22 +166,10 @@ function ReportParametersDetails({ Discovered At Reference - {(hasIncludeNvdCvss || hasIncludeEpssProbability || hasIncludeAdvisory) && ( + {optionalColumnsDescriptions.length !== 0 && ( Optional columns - {hasIncludeNvdCvss && ( - NVDCVSS - )} - {hasIncludeEpssProbability && ( - - EPSS Probability Percentage - - )} - {hasIncludeAdvisory && ( - - Advisory Name and Advisory Link - - )} + {optionalColumnsDescriptions} )} diff --git a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/forms/ReportParametersForm.tsx b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/forms/ReportParametersForm.tsx index 75aafce6aa7b2..a47ade99cfb7d 100644 --- a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/forms/ReportParametersForm.tsx +++ b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/forms/ReportParametersForm.tsx @@ -1,4 +1,5 @@ -import React, { ChangeEvent, FormEvent, ReactElement } from 'react'; +import React from 'react'; +import type { ChangeEvent, FormEvent, ReactElement } from 'react'; import { Checkbox, DatePicker, @@ -13,7 +14,7 @@ import { TextInput, Title, } from '@patternfly/react-core'; -import { FormikProps } from 'formik'; +import type { FormikProps } from 'formik'; import { cloneDeep } from 'lodash'; import { @@ -31,8 +32,8 @@ import SelectSingle from 'Components/SelectSingle/SelectSingle'; import VulnerabilitySeverityIconText from 'Components/PatternFly/IconText/VulnerabilitySeverityIconText'; import FormLabelGroup from 'Components/PatternFly/FormLabelGroup'; import useFeatureFlags from 'hooks/useFeatureFlags'; -import { CollectionSlim } from 'services/CollectionsService'; -import { NotifierConfiguration } from 'services/ReportsService.types'; +import type { CollectionSlim } from 'services/CollectionsService'; +import type { NotifierConfiguration } from 'services/ReportsService.types'; import CollectionSelection from './CollectionSelection'; export type ReportParametersFormProps = { @@ -42,9 +43,54 @@ export type ReportParametersFormProps = { function ReportParametersForm({ title, formik }: ReportParametersFormProps): ReactElement { const { isFeatureFlagEnabled } = useFeatureFlags(); - const isIncludeAdvisoryEnabled = isFeatureFlagEnabled('ROX_SCANNER_V4'); - const isIncludeEpssProbabilityEnabled = isFeatureFlagEnabled('ROX_SCANNER_V4'); - const isIncludeNvdCvssEnabled = isFeatureFlagEnabled('ROX_SCANNER_V4'); + const optionalColumnsCheckboxes: ReactElement[] = []; + if (isFeatureFlagEnabled('ROX_SCANNER_V4')) { + optionalColumnsCheckboxes.push( + + ); + } + if (isFeatureFlagEnabled('ROX_SCANNER_V4')) { + optionalColumnsCheckboxes.push( + + ); + } + if (isFeatureFlagEnabled('ROX_SCANNER_V4')) { + optionalColumnsCheckboxes.push( + + ); + } + /* + // Ross CISA KEV includeKnownExploit? + if (isFeatureFlagEnabled('ROX_SCANNER_V4') && isFeatureFlagEnabled('ROX_WHATEVER')) { + optionalColumnsCheckboxes.push( + + ); + } + */ const handleTextChange = (fieldName: string) => @@ -291,34 +337,9 @@ function ReportParametersForm({ title, formik }: ReportParametersFormProps): Rea /> )} - {(isIncludeNvdCvssEnabled || - isIncludeEpssProbabilityEnabled || - isIncludeAdvisoryEnabled) && ( + {optionalColumnsCheckboxes.length !== 0 && ( - {isIncludeNvdCvssEnabled && ( - - )} - {isIncludeEpssProbabilityEnabled && ( - - )} - {isIncludeAdvisoryEnabled && ( - - )} + {optionalColumnsCheckboxes} )} { imageType: [], includeAdvisory: false, includeEpssProbability: false, + // Ross CISA KEV includeKnownExploit? includeNvdCvss: false, cvesDiscoveredSince: 'ALL_VULN', cvesDiscoveredStartDate: undefined, @@ -103,6 +104,7 @@ describe('utils', () => { imageType: [], includeAdvisory: false, includeEpssProbability: false, + // Ross CISA KEV includeKnownExploit? includeNvdCvss: false, cvesDiscoveredSince: 'SINCE_LAST_REPORT', cvesDiscoveredStartDate: undefined, @@ -123,6 +125,7 @@ describe('utils', () => { imageType: [], includeAdvisory: false, includeEpssProbability: false, + // Ross CISA KEV includeKnownExploit? includeNvdCvss: false, cvesDiscoveredSince: 'START_DATE', cvesDiscoveredStartDate: '2023-10-02', diff --git a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/utils.ts b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/utils.ts index 56b82e03b05f8..079ad97651efd 100644 --- a/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/utils.ts +++ b/ui/apps/platform/src/Containers/Vulnerabilities/VulnerablityReporting/utils.ts @@ -60,6 +60,7 @@ export function getReportConfigurationFromFormValues( imageTypes: reportParameters.imageType, includeAdvisory: reportParameters.includeAdvisory, includeEpssProbability: reportParameters.includeEpssProbability, + // Ross CISA KEV includeKnownExploit? includeNvdCvss: reportParameters.includeNvdCvss, }; let vulnReportFilters: VulnerabilityReportFilters; @@ -191,6 +192,7 @@ export function getReportFormValuesFromConfiguration( cvesDiscoveredStartDate, includeAdvisory: vulnReportFilters.includeAdvisory, includeEpssProbability: vulnReportFilters.includeEpssProbability, + // Ross CISA KEV includeKnownExploit? includeNvdCvss: vulnReportFilters.includeNvdCvss, reportScope: { id: resourceScope.collectionScope.collectionId,