Skip to content

Commit 1349f9b

Browse files
Arun JainArun Jain
authored andcommitted
feat: add support for v2 api in vulnerabilities.tsx
1 parent 7cb9f56 commit 1349f9b

File tree

8 files changed

+43
-26
lines changed

8 files changed

+43
-26
lines changed

src/Assets/Icon/ic-error.svg

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/Shared/Components/Security/SecurityModal/config/ImageScan.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import dayjs from 'dayjs'
66
import { Progressing } from '@Common/Progressing'
7-
import { ReactComponent as ICError } from '@Icons/ic-error.svg'
7+
import { ReactComponent as ICError } from '@Icons/ic-error-cross.svg'
88
import { ReactComponent as ICSuccess } from '@Icons/ic-success.svg'
99
import { ZERO_TIME_STRING, DATE_TIME_FORMATS } from '../../../../../Common/Constants'
1010
import {
@@ -118,7 +118,7 @@ const getImageScanProgressingState = (status: StatusType['status']) => {
118118
case 'Completed':
119119
return <ICSuccess className="icon-dim-16" />
120120
case 'Failed':
121-
return <ICError className="icon-dim-16" />
121+
return <ICError className="icon-dim-16 ic-error-cross-red" />
122122
case 'Progressing':
123123
return (
124124
<Progressing

src/Shared/Components/Security/SecurityModal/constants.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (c) 2024. Devtron Inc.
33
*/
44

5-
import { SCAN_TOOL_ID_TRIVY } from '@Shared/constants'
5+
import { SCAN_TOOL_ID_CLAIR, SCAN_TOOL_ID_TRIVY } from '@Shared/constants'
66
import PageNotFound from '@Images/ic-page-not-found.svg'
77
import { ReactComponent as MechanicalOperation } from '@Icons/ic-mechanical-operation.svg'
88
import { CATEGORIES, SUB_CATEGORIES, SeveritiesDTO, SortOrderEnum, EmptyStateType, StatusType } from './types'
@@ -88,4 +88,5 @@ export const SCAN_IN_PROGRESS_EMPTY_STATE: EmptyStateType = {
8888

8989
export const MAP_SCAN_TOOL_NAME_TO_SCAN_TOOL_ID: Record<StatusType['scanToolName'], number> = {
9090
TRIVY: SCAN_TOOL_ID_TRIVY,
91+
CLAIR: SCAN_TOOL_ID_CLAIR,
9192
}

src/Shared/Components/Security/SecurityModal/service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const getExecutionDetails = async (
1919
executionDetailPayload: SecurityModalPropsType['executionDetailsPayload'],
2020
): Promise<ResponseType<ApiResponseResultType>> => {
2121
// To replace url with constants in common
22-
const url = getUrlWithSearchParams('security/scan/executionDetail', executionDetailPayload)
22+
const url = getUrlWithSearchParams(ROUTES.SECURITY_SCAN_EXECUTION_DETAILS, executionDetailPayload)
2323
const response = await get(url)
2424
return { ...response, result: parseExecutionDetailResponse(response.result) }
2525
}

src/Shared/Components/Security/SecurityModal/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ export interface InfoCardPropsType {
119119
export interface StatusType {
120120
status: 'Completed' | 'Running' | 'Failed' | 'Progressing'
121121
StartedOn: string
122-
scanToolName: 'TRIVY'
122+
scanToolName: 'TRIVY' | 'CLAIR'
123123
}
124124

125125
export type DetailViewDataType = {

src/Shared/Components/Security/SecurityModal/utils.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Severity } from '@Shared/types'
88
import { VulnerabilityType } from '@Common/Types'
99
import { ZERO_TIME_STRING } from '@Common/Constants'
1010
import { ReactComponent as NoVulnerability } from '@Icons/ic-vulnerability-not-found.svg'
11+
import { SCAN_TOOL_ID_TRIVY } from '@Shared/constants'
1112
import {
1213
ApiResponseResultType,
1314
SeveritiesDTO,
@@ -136,12 +137,12 @@ export const parseExecutionDetailResponse = (scanResult): ApiResponseResultType
136137
fixedInVersion: vulnerability?.fixedVersion,
137138
severity: getSeverityFromVulnerabilitySeverity(vulnerability?.severity),
138139
})),
139-
scanToolName: 'TRIVY' /* TODO: need to create a mapping */, // this can be acc to scan tool id
140+
scanToolName: scanResult.scanToolId === SCAN_TOOL_ID_TRIVY ? 'TRIVY' : 'CLAIR',
140141
StartedOn:
141142
scanResult.executionTime && scanResult.executionTime !== ZERO_TIME_STRING
142143
? scanResult.executionTime
143144
: '--',
144-
status: 'Completed', // TODO: get status from executionDetailsApi
145+
status: scanResult.scanned ? 'Completed' : 'Progressing',
145146
},
146147
],
147148
},

src/Shared/Components/Security/Vulnerabilities/Vulnerabilities.tsx

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
*/
1616

1717
import { useEffect } from 'react'
18-
import { EMPTY_STATE_STATUS } from '@Shared/constants'
18+
import { EMPTY_STATE_STATUS, SCAN_TOOL_ID_TRIVY } from '@Shared/constants'
19+
import { SeverityCount } from '@Shared/types'
1920
import { Progressing, useAsync } from '../../../../Common'
2021
import { ScannedByToolModal } from '../../ScannedByToolModal'
2122
import { getLastExecutionByArtifactAppEnv } from './service'
@@ -60,7 +61,11 @@ const Vulnerabilities = ({
6061
}
6162
}, [vulnerabilitiesResponse, scanResultResponse])
6263

63-
if (!isScanned) {
64+
if (
65+
!isScanned ||
66+
(vulnerabilitiesResponse && !vulnerabilitiesResponse.result.scanned) ||
67+
(scanResultResponse && !scanResultResponse?.result.scanned)
68+
) {
6469
return (
6570
<div className="security-tab-empty">
6671
<p className="security-tab-empty__title">Image was not scanned</p>
@@ -99,16 +104,33 @@ const Vulnerabilities = ({
99104
)
100105
}
101106

102-
if (vulnerabilitiesResponse.result.vulnerabilities.length === 0) {
107+
const imageScanSeverities = scanResultResponse?.result.imageScan.vulnerability?.summary.severities
108+
const severityCount: SeverityCount = isScanV2Enabled
109+
? {
110+
critical: imageScanSeverities?.CRITICAL || 0,
111+
high: imageScanSeverities?.HIGH || 0,
112+
medium: imageScanSeverities?.MEDIUM || 0,
113+
low: imageScanSeverities?.LOW || 0,
114+
unknown: imageScanSeverities?.UNKNOWN || 0,
115+
}
116+
: vulnerabilitiesResponse?.result.severityCount
117+
118+
const totalCount =
119+
severityCount.critical + severityCount.high + severityCount.low + severityCount.medium + severityCount.unknown
120+
121+
if (!totalCount) {
103122
return (
104123
<div className="security-tab-empty">
105124
<p className="security-tab-empty__title">
106125
{EMPTY_STATE_STATUS.CI_DEATILS_NO_VULNERABILITY_FOUND.TITLE}
107126
</p>
108127
<p>{EMPTY_STATE_STATUS.CI_DEATILS_NO_VULNERABILITY_FOUND.SUBTITLE}</p>
109-
<p className="security-tab-empty__subtitle">{vulnerabilitiesResponse.result.lastExecution}</p>
128+
<p className="security-tab-empty__subtitle">
129+
{vulnerabilitiesResponse?.result.lastExecution ??
130+
scanResultResponse?.result.imageScan.vulnerability.list[0].StartedOn}
131+
</p>
110132
<p className="pt-8 pb-8 pl-16 pr-16 flexbox dc__align-items-center">
111-
<ScannedByToolModal scanToolId={vulnerabilitiesResponse.result.scanToolId} />
133+
<ScannedByToolModal scanToolId={vulnerabilitiesResponse?.result.scanToolId ?? SCAN_TOOL_ID_TRIVY} />
112134
</p>
113135
</div>
114136
)
@@ -117,8 +139,8 @@ const Vulnerabilities = ({
117139
return (
118140
<div className="p-12">
119141
<SecuritySummaryCard
120-
severityCount={vulnerabilitiesResponse.result.severityCount}
121-
scanToolId={vulnerabilitiesResponse.result.scanToolId}
142+
severityCount={severityCount}
143+
scanToolId={vulnerabilitiesResponse?.result.scanToolId ?? SCAN_TOOL_ID_TRIVY}
122144
{...(isScanV2Enabled
123145
? { appDetailsPayload: { appId: applicationId, envId: environmentId, artifactId } }
124146
: { executionDetailsPayload: { appId: applicationId, envId: environmentId, artifactId } })}

src/Shared/constants.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ export const STAGE_TYPE = {
3434

3535
export const SCAN_TOOL_ID_TRIVY = 3
3636

37+
/**
38+
* @description This is only used to show mapping for clair, scan tool id for clair can be either 1 or 2
39+
* */
40+
export const SCAN_TOOL_ID_CLAIR = 2
41+
3742
export const IMAGE_SCAN_TOOL = {
3843
Clair: 'Clair',
3944
Trivy: 'Trivy',

0 commit comments

Comments
 (0)