Skip to content

Commit a87d060

Browse files
committed
feat: add column for policy in security modal
1 parent f111df9 commit a87d060

File tree

19 files changed

+72
-94
lines changed

19 files changed

+72
-94
lines changed

package-lock.json

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@devtron-labs/devtron-fe-common-lib",
3-
"version": "0.3.15",
3+
"version": "0.3.15-beta-1",
44
"description": "Supporting common component library",
55
"type": "module",
66
"main": "dist/index.js",
@@ -83,18 +83,18 @@
8383
"react-dom": "^17.0.2",
8484
"react-draggable": "^4.4.5",
8585
"react-ga4": "^1.4.1",
86+
"react-keybind": "^0.9.4",
8687
"react-mde": "^11.5.0",
8788
"react-router": "^5.3.0",
8889
"react-router-dom": "^5.3.0",
8990
"react-select": "5.8.0",
90-
"react-keybind": "^0.9.4",
9191
"rxjs": "^7.8.1",
9292
"yaml": "^2.4.1"
9393
},
9494
"dependencies": {
9595
"@types/react-dates": "^21.8.6",
9696
"ansi_up": "^5.2.1",
97-
"dayjs": "^1.11.12",
97+
"dayjs": "^1.11.13",
9898
"fast-json-patch": "^3.1.1",
9999
"jsonpath-plus": "^9.0.0",
100100
"react-dates": "^21.8.0",

src/Common/Types.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -639,12 +639,6 @@ export interface VulnerabilityType {
639639
url?: string
640640
}
641641

642-
export interface ScanVulnerabilitiesTableProps {
643-
vulnerabilities: VulnerabilityType[]
644-
hidePolicy?: boolean
645-
shouldStick?: boolean
646-
}
647-
648642
export interface MaterialInfo {
649643
revision: string
650644
modifiedTime: string | Date

src/Shared/Components/ImageCardAccordion/ImageCardAccordion.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ const ImageCardAccordion = ({
4444
isSecurityModuleInstalled,
4545
artifactId,
4646
applicationId,
47+
environmentId,
4748
changesCard,
4849
isScanned,
4950
isScanEnabled,
@@ -73,6 +74,7 @@ const ImageCardAccordion = ({
7374
isScanEnabled={isScanEnabled}
7475
artifactId={artifactId}
7576
applicationId={applicationId}
77+
environmentId={environmentId}
7678
setVulnerabilityCount={setVulnerabilityCount}
7779
SecurityModalSidebar={SecurityModalSidebar}
7880
getSecurityScan={getSecurityScan}

src/Shared/Components/ImageCardAccordion/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export interface ImageCardAccordionProps extends MaterialSecurityInfoType {
2323
isSecurityModuleInstalled: boolean
2424
artifactId: number
2525
applicationId: number
26+
environmentId: number
2627
changesCard: ReactNode
2728
isScanned: boolean
2829
isScanEnabled: boolean

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const SecurityModal: React.FC<SecurityModalPropsType> = ({
4141
isHelmApp = false,
4242
isSecurityScanV2Enabled = false,
4343
isExternalCI = false,
44+
hidePolicy = false,
4445
}) => {
4546
const [state, setState] = useState<SecurityModalStateType>(DEFAULT_SECURITY_MODAL_STATE)
4647

@@ -108,7 +109,8 @@ const SecurityModal: React.FC<SecurityModalPropsType> = ({
108109

109110
/* NOTE: if detailView is active show data gathered from that */
110111
const { headers, rows, defaultSortIndex, hasExpandableRows } =
111-
selectedDetailViewData || getTableData(data, state.category, state.subCategory, setDetailViewData)
112+
selectedDetailViewData ||
113+
getTableData(data, state.category, state.subCategory, setDetailViewData, hidePolicy)
112114

113115
const { entities, lastScanTimeString, scanToolId } =
114116
selectedDetailViewData || getInfoCardData(data, state.category, state.subCategory)

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
} from '../types'
3434
import { OpenDetailViewButton } from '../components'
3535

36-
export const getCodeScanVulnerabilities = (data: CodeScan['vulnerability']) => ({
36+
export const getCodeScanVulnerabilities = (data: CodeScan['vulnerability'], hidePolicy: boolean) => ({
3737
headers: [
3838
{ headerText: 'cve id', isSortable: false, width: 150 },
3939
{
@@ -46,6 +46,7 @@ export const getCodeScanVulnerabilities = (data: CodeScan['vulnerability']) => (
4646
{ headerText: 'package', isSortable: true, width: 143.33 },
4747
{ headerText: 'current version', isSortable: false, width: 143.33 },
4848
{ headerText: 'fixed in version', isSortable: false, width: 143.33 },
49+
!hidePolicy && { headerText: 'policy', isSortable: false, width: 143.33 },
4950
],
5051
rows: !data?.list?.length
5152
? null
@@ -87,6 +88,14 @@ export const getCodeScanVulnerabilities = (data: CodeScan['vulnerability']) => (
8788
component: null,
8889
cellContent: element.fixedInVersion,
8990
},
91+
!hidePolicy && {
92+
component: (
93+
<span className={`security-policy--${element.permission?.toLowerCase()}`}>
94+
{element.permission}
95+
</span>
96+
),
97+
cellContent: element.permission,
98+
},
9099
],
91100
})),
92101
defaultSortIndex: 1,
@@ -376,10 +385,11 @@ export const getCodeScanTableData = (
376385
data: CodeScan,
377386
subCategory: SecurityModalStateType['subCategory'],
378387
setDetailViewData: OpenDetailViewButtonProps['setDetailViewData'],
388+
hidePolicy: boolean,
379389
): TablePropsType => {
380390
switch (subCategory) {
381391
case SUB_CATEGORIES.VULNERABILITIES:
382-
return getCodeScanVulnerabilities(data[subCategory])
392+
return getCodeScanVulnerabilities(data[subCategory], hidePolicy)
383393
case SUB_CATEGORIES.LICENSE:
384394
return getCodeScanLicense(data[subCategory])
385395
case SUB_CATEGORIES.MISCONFIGURATIONS:

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const getVulnerabilitiesDetailBaseData = (element: ImageScanVulnerabilityListTyp
5151
const getGroupedVulnerabilitiesDetailData = (
5252
element: ImageScanVulnerabilityListType,
5353
setDetailViewData: OpenDetailViewButtonProps['setDetailViewData'],
54+
hidePolicy: boolean,
5455
) => {
5556
const list = !element?.list?.length ? null : groupByTarget(element.list)
5657

@@ -81,7 +82,7 @@ const getGroupedVulnerabilitiesDetailData = (
8182
summary: child.summary,
8283
}),
8384
titlePrefix: 'Source',
84-
...getCodeScanVulnerabilities(child),
85+
...getCodeScanVulnerabilities(child, hidePolicy),
8586
}}
8687
setDetailViewData={setDetailViewData}
8788
>
@@ -102,15 +103,16 @@ const getGroupedVulnerabilitiesDetailData = (
102103
const getVulnerabilitiesDetailData = (
103104
element: ImageScanVulnerabilityListType,
104105
setDetailViewData: OpenDetailViewButtonProps['setDetailViewData'],
106+
hidePolicy: boolean,
105107
) => {
106108
const shouldGroupByTarget = element.list.every((item) => !!item.target)
107109
if (!shouldGroupByTarget) {
108110
return {
109111
...getVulnerabilitiesDetailBaseData(element),
110-
...getCodeScanVulnerabilities(element),
112+
...getCodeScanVulnerabilities(element, hidePolicy),
111113
}
112114
}
113-
return getGroupedVulnerabilitiesDetailData(element, setDetailViewData)
115+
return getGroupedVulnerabilitiesDetailData(element, setDetailViewData, hidePolicy)
114116
}
115117

116118
const getImageScanProgressingState = (status: StatusType['status']) => {
@@ -147,6 +149,7 @@ const getTimeString = (timeString: string, status: StatusType['status']) => {
147149
const getVulnerabilitiesData = (
148150
data: ImageScan['vulnerability'],
149151
setDetailViewData: OpenDetailViewButtonProps['setDetailViewData'],
152+
hidePolicy: boolean,
150153
) => ({
151154
headers: [
152155
{ headerText: 'image', isSortable: false, width: 256 },
@@ -162,7 +165,7 @@ const getVulnerabilitiesData = (
162165
{
163166
component: (
164167
<OpenDetailViewButton
165-
detailViewData={getVulnerabilitiesDetailData(element, setDetailViewData)}
168+
detailViewData={getVulnerabilitiesDetailData(element, setDetailViewData, hidePolicy)}
166169
setDetailViewData={setDetailViewData}
167170
>
168171
<span className="cb-5 fw-4 cursor">{element.image}</span>
@@ -292,10 +295,11 @@ export const getImageScanTableData = (
292295
data: ImageScan,
293296
subCategory: SecurityModalStateType['subCategory'],
294297
setDetailViewData: OpenDetailViewButtonProps['setDetailViewData'],
298+
hidePolicy: boolean,
295299
): TablePropsType => {
296300
switch (subCategory) {
297301
case SUB_CATEGORIES.VULNERABILITIES:
298-
return getVulnerabilitiesData(data[subCategory], setDetailViewData)
302+
return getVulnerabilitiesData(data[subCategory], setDetailViewData, hidePolicy)
299303
case SUB_CATEGORIES.LICENSE:
300304
return getLicenseData(data[subCategory], setDetailViewData)
301305
default:

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ export const getTableData = (
1818
category: SecurityModalStateType['category'],
1919
subCategory: SecurityModalStateType['subCategory'],
2020
setDetailViewData: OpenDetailViewButtonProps['setDetailViewData'],
21+
hidePolicy: boolean,
2122
): TablePropsType => {
2223
switch (category) {
2324
case CATEGORIES.IMAGE_SCAN:
24-
return getImageScanTableData(data[category], subCategory, setDetailViewData)
25+
return getImageScanTableData(data[category], subCategory, setDetailViewData, hidePolicy)
2526
case CATEGORIES.CODE_SCAN:
26-
return getCodeScanTableData(data[category], subCategory, setDetailViewData)
27+
return getCodeScanTableData(data[category], subCategory, setDetailViewData, hidePolicy)
2728
case CATEGORIES.KUBERNETES_MANIFEST:
2829
return getKubernetesManifestTableData(data[category], subCategory, setDetailViewData)
2930
default:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const getExecutionDetails = async (
2626
package: cve.package,
2727
version: cve.currentVersion,
2828
fixedVersion: cve.fixedVersion,
29-
policy: cve.permission,
29+
permission: cve.permission,
3030
})) || [],
3131
}
3232
return { ...response, result: parseExecutionDetailResponse(parsedResult) }

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ export interface CodeScanVulnerabilityType {
148148
package: string
149149
currentVersion: string
150150
fixedInVersion: string
151+
permission?: string
151152
}
152153

153154
export interface ImageScanVulnerabilityType extends CodeScanVulnerabilityType {
@@ -256,6 +257,7 @@ interface SecurityModalBaseProps extends Partial<Pick<SidebarPropsType, 'isExter
256257
isHelmApp?: boolean
257258
isResourceScan?: boolean
258259
isSecurityScanV2Enabled: boolean
260+
hidePolicy?: boolean
259261
}
260262

261263
export type SecurityModalPropsType = SecurityModalBaseProps

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export const parseExecutionDetailResponse = (scanResult): ApiResponseResultType
136136
currentVersion: vulnerability?.version,
137137
fixedInVersion: vulnerability?.fixedVersion,
138138
severity: getSeverityFromVulnerabilitySeverity(vulnerability?.severity),
139+
permission: vulnerability?.permission,
139140
})),
140141
scanToolName: scanResult.scanToolId === SCAN_TOOL_ID_TRIVY ? 'TRIVY' : 'CLAIR',
141142
StartedOn:

src/Shared/Components/Security/SecuritySummaryCard/SecuritySummaryCard.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const SecuritySummaryCard = ({
1313
SecurityModalSidebar,
1414
responseData,
1515
isSecurityScanV2Enabled,
16+
hidePolicy = false,
1617
}: SecuritySummaryCardProps) => {
1718
const [showSecurityModal, setShowSecurityModal] = useState<boolean>(false)
1819
const { critical = 0, high = 0, medium = 0, low = 0, unknown = 0 } = severityCount
@@ -66,6 +67,7 @@ const SecuritySummaryCard = ({
6667
isLoading={false} // Loading and error are handled on parent components
6768
error={null}
6869
responseData={responseData}
70+
hidePolicy={hidePolicy}
6971
/>
7072
)}
7173
</>

src/Shared/Components/Security/SecuritySummaryCard/types.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ export type SecuritySummaryCardProps = {
99
isHelmApp?: boolean
1010
isSecurityScanV2Enabled: boolean
1111
responseData: ApiResponseResultType
12+
hidePolicy?: boolean
1213
} & Pick<ImageCardAccordionProps, 'SecurityModalSidebar'>

0 commit comments

Comments
 (0)