diff --git a/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx b/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx index f98820d193..1efe1cc4eb 100644 --- a/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx +++ b/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx @@ -1,6 +1,6 @@ /** software/os/:id */ -import React, { useCallback, useContext } from "react"; +import React, { useCallback, useContext, useState } from "react"; import { useQuery } from "react-query"; import { useErrorHandler } from "react-error-boundary"; import { InjectedRouter, RouteComponentProps } from "react-router"; @@ -169,6 +169,11 @@ const SoftwareOSDetailsPage = ({ includeNoTeam: true, }); + // Track whether we need to fetch all vulnerabilities + const [maxVulnerabilities, setMaxVulnerabilities] = useState< + number | undefined + >(0); + const { data: { os_version: osVersionDetails, counts_updated_at } = {}, isLoading, @@ -184,6 +189,7 @@ const SoftwareOSDetailsPage = ({ scope: "osVersionDetails", os_version_id: osVersionIdFromURL, teamId: teamIdForApi, + max_vulnerabilities: maxVulnerabilities, }, ], ({ queryKey }) => osVersionsAPI.getOSVersion(queryKey[0]), @@ -200,6 +206,19 @@ const SoftwareOSDetailsPage = ({ handlePageError(error); } }, + onSuccess: (data) => { + const { + os_version: { platform, vulnerabilities_count }, + } = data; + if ( + !isLinuxLike(platform) && + vulnerabilities_count && + vulnerabilities_count > 0 && + maxVulnerabilities === 0 + ) { + setMaxVulnerabilities(undefined); + } + }, } ); diff --git a/frontend/services/entities/operating_systems.ts b/frontend/services/entities/operating_systems.ts index 2d989990fe..969829d79e 100644 --- a/frontend/services/entities/operating_systems.ts +++ b/frontend/services/entities/operating_systems.ts @@ -42,6 +42,7 @@ export interface IOSVersionsResponse { interface IGetOsVersionOptions { os_version_id: number; teamId?: number; + max_vulnerabilities?: number; } export interface IGetOsVersionQueryKey extends IGetOsVersionOptions { @@ -94,11 +95,12 @@ export const getOSVersions = ({ const getOSVersion = ({ os_version_id, teamId, + max_vulnerabilities, }: IGetOsVersionOptions): Promise => { const endpoint = endpoints.OS_VERSION(os_version_id); const queryString = buildQueryStringFromParams({ team_id: teamId, - max_vulnerabilities: 3, // Limit CVEs to first 3, use vulnerabilities_count for total + max_vulnerabilities, }); const path = queryString ? `${endpoint}?${queryString}` : endpoint;