import React from "react"; import { formatSeverity } from "utilities/helpers"; import { ISoftwareVulnerability } from "interfaces/software"; import paths from "router/paths"; import HeaderCell from "components/TableContainer/DataTable/HeaderCell/HeaderCell"; import TextCell from "components/TableContainer/DataTable/TextCell"; import TooltipWrapper from "components/TooltipWrapper"; import { HumanTimeDiffWithDateTip } from "components/HumanTimeDiffWithDateTip"; import PremiumFeatureIconWithTooltip from "components/PremiumFeatureIconWithTooltip"; import ProbabilityOfExploit from "components/ProbabilityOfExploit/ProbabilityOfExploit"; import ViewAllHostsLink from "components/ViewAllHostsLink"; import LinkCell from "components/TableContainer/DataTable/LinkCell"; interface IHeaderProps { column: { title: string; isSortedDesc: boolean; }; } interface ICellProps { cell: { value: number | string | string[]; }; row: { original: ISoftwareVulnerability; index: number; }; } interface ITextCellProps extends ICellProps { cell: { value: string | number; }; } interface IDataColumn { title: string; Header: ((props: IHeaderProps) => JSX.Element) | string; accessor: string; Cell: (props: ITextCellProps) => JSX.Element; disableHidden?: boolean; disableSortBy?: boolean; sortType?: string; } const generateTableConfig = ( isPremiumTier: boolean, isSandboxMode: boolean ): IDataColumn[] => { const tableHeaders: IDataColumn[] = [ { title: "Vunerability", accessor: "cve", disableSortBy: true, Header: "Vulnerability", Cell: ({ cell: { value } }: ITextCellProps) => { const cveName = value.toString(); return ( ); }, }, ]; const premiumHeaders: IDataColumn[] = [ { title: "Severity", accessor: "cvss_score", disableSortBy: false, Header: (headerProps: IHeaderProps): JSX.Element => { const titleWithToolTip = ( The worst case impact across different environments (CVSS base score). } > Severity ); return ( <> {isSandboxMode && } ); }, Cell: ({ cell: { value } }: ITextCellProps): JSX.Element => ( ), }, { title: "Probability of exploit", accessor: "epss_probability", disableSortBy: false, Header: (headerProps: IHeaderProps): JSX.Element => { const titleWithToolTip = ( The probability that this vulnerability will be exploited in the next 30 days (EPSS probability).
This data is reported by FIRST.org. } > Probability of exploit
); return ( <> {isSandboxMode && } ); }, Cell: (cellProps: ICellProps): JSX.Element => ( ), }, { title: "Published", accessor: "cve_published", disableSortBy: false, Header: (headerProps: IHeaderProps): JSX.Element => { const titleWithToolTip = ( The date this vulnerability was published in the National Vulnerability Database (NVD). } > Published ); return ( <> {isSandboxMode && } ); }, Cell: ({ cell: { value } }: ITextCellProps): JSX.Element => { const valString = typeof value === "number" ? value.toString() : value; return ( ); }, }, { title: "Detected", accessor: "created_at", disableSortBy: false, Header: (headerProps: IHeaderProps): JSX.Element => { return ( <> {isSandboxMode && } ); }, Cell: (cellProps: ICellProps): JSX.Element => { const createdAt = cellProps.row.original.created_at || ""; return ( ); }, }, { title: "", Header: "", accessor: "linkToFilteredHosts", disableSortBy: true, Cell: (cellProps: ICellProps) => { return ( <> {cellProps.row.original && ( )} ); }, }, ]; return isPremiumTier ? tableHeaders.concat(premiumHeaders) : tableHeaders; }; export default generateTableConfig;