Skip to content

Commit 198e488

Browse files
authored
Merge pull request #2072 from devtron-labs/feat/check-cve-list
feat: extract cve list and filters from vulnerability exposure
2 parents 673dcbb + e8f7f4e commit 198e488

File tree

5 files changed

+118
-84
lines changed

5 files changed

+118
-84
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import {
2+
DEFAULT_BASE_PAGE_SIZE,
3+
GenericFilterEmptyState,
4+
noop,
5+
Pagination,
6+
SortableTableHeaderCell,
7+
SortingOrder,
8+
} from '@devtron-labs/devtron-fe-common-lib'
9+
import { ExposureListProps } from '../security.types'
10+
11+
const ExposureList = ({
12+
appListResponse,
13+
areFiltersApplied,
14+
clearExposureListFilters,
15+
offset,
16+
pageSize,
17+
changePage,
18+
changePageSize,
19+
}: ExposureListProps) => {
20+
const appListLength = appListResponse.result.scanList.length
21+
if (!appListLength && areFiltersApplied) {
22+
return (
23+
<div className="dc__position-rel" style={{ height: 'calc(100vh - 200px)' }}>
24+
<GenericFilterEmptyState handleClearFilters={clearExposureListFilters} />
25+
</div>
26+
)
27+
}
28+
return appListLength ? (
29+
<>
30+
<div className="w-100">
31+
<div className="fs-12 fw-6 lh-20 cn-7 pl-20 pr-20 dc__border-bottom px-20 vulnerability-exp-table-row h-36">
32+
<SortableTableHeaderCell
33+
title="NAME"
34+
isSortable={false}
35+
isSorted
36+
triggerSorting={noop}
37+
disabled={false}
38+
sortOrder={SortingOrder.ASC}
39+
/>
40+
<SortableTableHeaderCell
41+
title="ENVIRONMENT"
42+
isSortable={false}
43+
isSorted
44+
triggerSorting={noop}
45+
disabled
46+
sortOrder={SortingOrder.ASC}
47+
/>
48+
<SortableTableHeaderCell
49+
title="POLICY"
50+
isSortable={false}
51+
isSorted
52+
triggerSorting={noop}
53+
disabled
54+
sortOrder={SortingOrder.ASC}
55+
/>
56+
</div>
57+
{appListResponse.result.scanList.map((cve) => (
58+
<div
59+
key={`${cve.appName}-${cve.envName}`}
60+
className="dc__border-bottom-n1 dc__hover-n50 vulnerability-exp-table-row px-20 h-44 dc__align-items-center fs-13 lh-20 cn-9"
61+
>
62+
<span>{cve.appName}</span>
63+
<span>{cve.envName}</span>
64+
<span>
65+
<span className={`security-tab__cell-policy--${cve.policy}`}>
66+
{cve.policy.toUpperCase()}
67+
</span>
68+
</span>
69+
</div>
70+
))}
71+
</div>
72+
{appListLength > DEFAULT_BASE_PAGE_SIZE && (
73+
<Pagination
74+
rootClassName="flex dc__content-space px-20"
75+
size={appListLength}
76+
pageSize={pageSize}
77+
offset={offset}
78+
changePage={changePage}
79+
changePageSize={changePageSize}
80+
/>
81+
)}
82+
</>
83+
) : null
84+
}
85+
86+
export default ExposureList

src/components/security/VulnerabilityExposure.tsx renamed to src/components/security/AddCVEPolicy/VulnerabilityExposure.tsx

Lines changed: 17 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -17,35 +17,30 @@
1717
import { useMemo, useState } from 'react'
1818
import {
1919
Progressing,
20-
DEFAULT_BASE_PAGE_SIZE,
21-
GenericFilterEmptyState,
22-
Pagination,
2320
SearchBar,
2421
FilterSelectPicker,
2522
useAsync,
2623
useUrlFilters,
2724
SelectPickerOptionType,
2825
ErrorScreenManager,
2926
FilterChips,
30-
SortableTableHeaderCell,
31-
noop,
32-
SortingOrder,
3327
FeatureTitleWithInfo,
3428
getCVEUrlFromCVEName,
3529
Button,
3630
ComponentSizeType,
3731
ButtonComponentType,
3832
} from '@devtron-labs/devtron-fe-common-lib'
39-
import { getCVEControlList, getVulnerabilityFilterData } from './security.service'
33+
import { getCVEControlList, getVulnerabilityFilterData } from '../security.service'
4034
import {
4135
CVEControlListPayload,
42-
ExposureListProps,
36+
ExposureListContainerProps,
4337
VulnerabilityExposureFilterKeys,
4438
VulnerabilityExposureUrlFiltersType,
45-
} from './security.types'
46-
import { parseVulnerabilityExposureSearchParams } from './security.util'
39+
} from '../security.types'
40+
import { parseVulnerabilityExposureSearchParams } from '../security.util'
41+
import ExposureList from './ExposureList'
4742

48-
const ExposureList = ({ urlFilters }: ExposureListProps) => {
43+
const ExposureListContainer = ({ urlFilters }: ExposureListContainerProps) => {
4944
const [filtersLoading, filtersResponse, filtersError, reloadFilters] = useAsync(getVulnerabilityFilterData)
5045

5146
const {
@@ -190,77 +185,19 @@ const ExposureList = ({ urlFilters }: ExposureListProps) => {
190185
const appListLength: number = appListResponse.result.totalCount
191186
const areFiltersApplied: boolean = !!appName || !!cluster.length || !!environment.length
192187

193-
const renderList = () => {
194-
if (!appListLength && areFiltersApplied) {
195-
return (
196-
<div className="dc__position-rel" style={{ height: 'calc(100vh - 200px)' }}>
197-
<GenericFilterEmptyState handleClearFilters={clearExposureListFilters} />
198-
</div>
199-
)
200-
}
201-
return appListLength ? (
202-
<>
203-
<div className="w-100">
204-
<div className="fs-12 fw-6 lh-20 cn-7 pl-20 pr-20 dc__border-bottom px-20 vulnerability-exp-table-row h-36">
205-
<SortableTableHeaderCell
206-
title="NAME"
207-
isSortable={false}
208-
isSorted
209-
triggerSorting={noop}
210-
disabled={false}
211-
sortOrder={SortingOrder.ASC}
212-
/>
213-
<SortableTableHeaderCell
214-
title="ENVIRONMENT"
215-
isSortable={false}
216-
isSorted
217-
triggerSorting={noop}
218-
disabled
219-
sortOrder={SortingOrder.ASC}
220-
/>
221-
<SortableTableHeaderCell
222-
title="POLICY"
223-
isSortable={false}
224-
isSorted
225-
triggerSorting={noop}
226-
disabled
227-
sortOrder={SortingOrder.ASC}
228-
/>
229-
</div>
230-
{appListResponse.result.scanList.map((cve) => (
231-
<div
232-
key={`${cve.appName}-${cve.envName}`}
233-
className="dc__border-bottom-n1 dc__hover-n50 vulnerability-exp-table-row px-20 h-44 dc__align-items-center fs-13 lh-20 cn-9"
234-
>
235-
<span>{cve.appName}</span>
236-
<span>{cve.envName}</span>
237-
<span>
238-
<span className={`security-tab__cell-policy--${cve.policy}`}>
239-
{cve.policy.toUpperCase()}
240-
</span>
241-
</span>
242-
</div>
243-
))}
244-
</div>
245-
{appListLength > DEFAULT_BASE_PAGE_SIZE && (
246-
<Pagination
247-
rootClassName="flex dc__content-space px-20"
248-
size={appListLength}
249-
pageSize={pageSize}
250-
offset={offset}
251-
changePage={changePage}
252-
changePageSize={changePageSize}
253-
/>
254-
)}
255-
</>
256-
) : null
257-
}
258-
259188
return (
260189
<>
261190
{!!appListLength && renderFilters()}
262191
{!!appListLength && renderAppliedFilters()}
263-
{renderList()}
192+
<ExposureList
193+
appListResponse={appListResponse}
194+
areFiltersApplied={areFiltersApplied}
195+
clearExposureListFilters={clearExposureListFilters}
196+
offset={offset}
197+
pageSize={pageSize}
198+
changePage={changePage}
199+
changePageSize={changePageSize}
200+
/>
264201
</>
265202
)
266203
}
@@ -314,7 +251,7 @@ const VulnerabilityExposure = () => {
314251
<Button
315252
dataTestId="search-vulnerability-button"
316253
text="Search"
317-
size={ComponentSizeType.small}
254+
size={ComponentSizeType.medium}
318255
onClick={handleSearchCVEButtonClick}
319256
component={ButtonComponentType.button}
320257
/>
@@ -329,7 +266,7 @@ const VulnerabilityExposure = () => {
329266
)}
330267
</div>
331268
<div className="dc__border-bottom-n1" />
332-
{!!cveName && <ExposureList urlFilters={urlFilters} />}
269+
{!!cveName && <ExposureListContainer urlFilters={urlFilters} />}
333270
</div>
334271
)
335272
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as VulnerabilityExposure } from './VulnerabilityExposure'

src/components/security/SecurityPoliciesTab.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
* limitations under the License.
1515
*/
1616

17-
import React, { Component } from 'react'
17+
import { Component } from 'react'
1818
import { Switch, Route, Redirect, NavLink, RouteComponentProps } from 'react-router-dom'
1919
import { SecurityPolicyGlobal } from './SecurityPolicyGlobal'
2020
import { SecurityPolicyCluster } from './SecurityPolicyCluster'
2121
import { SecurityPolicyApp } from './SecurityPolicyApp'
2222
import { SecurityPolicyEnvironment } from './SecurityPolicyEnvironment'
23-
import VulnerabilityExposure from './VulnerabilityExposure'
23+
import { VulnerabilityExposure } from './AddCVEPolicy'
2424

2525
export class SecurityPoliciesTab extends Component<RouteComponentProps<{}>> {
2626
renderRouter() {

src/components/security/security.types.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Severity, SeverityCount, UseUrlFiltersReturnType } from '@devtron-labs/devtron-fe-common-lib'
17+
import { ResponseType, Severity, SeverityCount, UseUrlFiltersReturnType } from '@devtron-labs/devtron-fe-common-lib'
1818

1919
export interface SecurityPolicyClusterState {
2020
view: string
@@ -208,7 +208,7 @@ export interface VulnerabilityExposureUrlFiltersType
208208
extends Record<VulnerabilityExposureFilterKeys, string[]>,
209209
Record<VulnerabilityExposureSearchParams, string> {}
210210

211-
export interface ExposureListProps {
211+
export interface ExposureListContainerProps {
212212
urlFilters: UseUrlFiltersReturnType<never, VulnerabilityExposureUrlFiltersType>
213213
}
214214

@@ -231,3 +231,13 @@ export interface CVEControlListPayload {
231231
clusterIds: number[]
232232
envIds: number[]
233233
}
234+
235+
export interface ExposureListProps
236+
extends Pick<
237+
UseUrlFiltersReturnType<never, VulnerabilityExposureUrlFiltersType>,
238+
'offset' | 'pageSize' | 'changePage' | 'changePageSize'
239+
> {
240+
appListResponse: ResponseType<CVEControlList>
241+
areFiltersApplied: boolean
242+
clearExposureListFilters: () => void
243+
}

0 commit comments

Comments
 (0)