Skip to content

Commit

Permalink
Migrate queries/vulnerabilities.ts to use @app/client (#138)
Browse files Browse the repository at this point in the history
Signed-off-by: Hiram Chirino <[email protected]>
  • Loading branch information
chirino authored Aug 22, 2024
1 parent 813c82d commit 9a2bcc2
Show file tree
Hide file tree
Showing 12 changed files with 148 additions and 91 deletions.
17 changes: 16 additions & 1 deletion client/openapi/trustd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2385,7 +2385,7 @@ components:
sboms:
type: array
items:
$ref: '#/components/schemas/SbomStatus'
$ref: '#/components/schemas/VulnerabilitySbomStatus'
description: SBOMs claimed by this advisory to be addressed by this vulnerability.
VulnerabilityDetails:
allOf:
Expand Down Expand Up @@ -2469,6 +2469,21 @@ components:
format: date-time
description: The date (in RFC3339 format) of when the vulnerability was last withdrawn, if any.
nullable: true
VulnerabilitySbomStatus:
allOf:
- $ref: '#/components/schemas/SbomHead'
- type: object
required:
- status
properties:
status:
type: array
items:
type: string
uniqueItems: true
version:
type: string
nullable: true
VulnerabilitySummary:
allOf:
- $ref: '#/components/schemas/VulnerabilityHead'
Expand Down
27 changes: 26 additions & 1 deletion client/src/app/client/schemas.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1579,7 +1579,7 @@ export const $VulnerabilityAdvisorySummary = {
sboms: {
type: "array",
items: {
$ref: "#/components/schemas/SbomStatus",
$ref: "#/components/schemas/VulnerabilitySbomStatus",
},
description:
"SBOMs claimed by this advisory to be addressed by this vulnerability.",
Expand Down Expand Up @@ -1702,6 +1702,31 @@ CVE identifier.`,
},
} as const;

export const $VulnerabilitySbomStatus = {
allOf: [
{
$ref: "#/components/schemas/SbomHead",
},
{
type: "object",
required: ["status"],
properties: {
status: {
type: "array",
items: {
type: "string",
},
uniqueItems: true,
},
version: {
type: "string",
nullable: true,
},
},
},
],
} as const;

export const $VulnerabilitySummary = {
allOf: [
{
Expand Down
7 changes: 6 additions & 1 deletion client/src/app/client/types.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -636,7 +636,7 @@ export type VulnerabilityAdvisorySummary = VulnerabilityAdvisoryHead & {
/**
* SBOMs claimed by this advisory to be addressed by this vulnerability.
*/
sboms: Array<SbomStatus>;
sboms: Array<VulnerabilitySbomStatus>;
};

export type VulnerabilityDetails = VulnerabilityHead & {
Expand Down Expand Up @@ -693,6 +693,11 @@ export type VulnerabilityHead = {
withdrawn: string | null;
};

export type VulnerabilitySbomStatus = SbomHead & {
status: Array<string>;
version?: string | null;
};

export type VulnerabilitySummary = VulnerabilityHead & {
advisories: Array<VulnerabilityAdvisoryHead>;
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import { Table, Tbody, Td, Th, Thead, Tr } from "@patternfly/react-table";
import {
AdvisoryWithinPackage,
VulnerabilityStatus,
VulnerabilityIndex,
} from "@app/api/models";
import { getVulnerabilityById } from "@app/api/rest";
import { AdvisoryInDrawerInfo } from "@app/components/AdvisoryInDrawerInfo";
Expand All @@ -34,13 +33,15 @@ import { useLocalTableControls } from "@app/hooks/table-controls";
import { useFetchPackageById } from "@app/queries/packages";
import { useWithUiId } from "@app/utils/query-utils";
import { VulnerabilityInDrawerInfo } from "@app/components/VulnerabilityInDrawerInfo";
import {getVulnerability, VulnerabilityDetails} from "../../client";
import {client} from "../../axios-config/apiInit";

interface TableData {
vulnerabilityId: string;
advisory: AdvisoryWithinPackage;
status: VulnerabilityStatus;
context: { cpe: string };
vulnerability?: VulnerabilityIndex;
vulnerability?: VulnerabilityDetails;
}

interface VulnerabilitiesByPackageProps {
Expand All @@ -67,7 +68,7 @@ export const VulnerabilitiesByPackage: React.FC<
TableData[]
>([]);
const [vulnerabilitiesById, setVulnerabilitiesById] = React.useState<
Map<string, VulnerabilityIndex>
Map<string, VulnerabilityDetails>
>(new Map());
const [isFetchingVulnerabilities, setIsFetchingVulnerabilities] =
React.useState(false);
Expand Down Expand Up @@ -109,7 +110,7 @@ export const VulnerabilitiesByPackage: React.FC<

Promise.all(
vulnerabilities
.map((item) => getVulnerabilityById(item.vulnerabilityId))
.map(async (item) => (await getVulnerability({ client, path: { id: item.vulnerabilityId } })).data)
.map((vulnerability) => vulnerability.catch(() => null))
).then((vulnerabilities) => {
const validVulnerabilities = vulnerabilities.reduce((prev, current) => {
Expand All @@ -119,9 +120,9 @@ export const VulnerabilitiesByPackage: React.FC<
// Filter out error responses
return prev;
}
}, [] as VulnerabilityIndex[]);
}, [] as VulnerabilityDetails[]);

const vulnerabilitiesById = new Map<string, VulnerabilityIndex>();
const vulnerabilitiesById = new Map<string, VulnerabilityDetails>();
validVulnerabilities.forEach((vulnerability) =>
vulnerabilitiesById.set(vulnerability.identifier, vulnerability)
);
Expand Down
15 changes: 8 additions & 7 deletions client/src/app/pages/sbom-details/vulnerabilities-by-sbom.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
Tr,
} from "@patternfly/react-table";

import { AdvisoryWithinSbom, VulnerabilityStatus, VulnerabilityIndex } from "@app/api/models";
import { AdvisoryWithinSbom, VulnerabilityStatus } from "@app/api/models";
import { getVulnerabilityById } from "@app/api/rest";
import { AdvisoryInDrawerInfo } from "@app/components/AdvisoryInDrawerInfo";
import { FilterToolbar, FilterType } from "@app/components/FilterToolbar";
Expand All @@ -38,15 +38,16 @@ import { VulnerabilityInDrawerInfo } from "@app/components/VulnerabilityInDrawer
import { useLocalTableControls } from "@app/hooks/table-controls";
import { useFetchSBOMById } from "@app/queries/sboms";
import { useWithUiId } from "@app/utils/query-utils";
import {SbomPackage} from "@app/client";
import {getVulnerability, SbomPackage, VulnerabilityDetails} from "@app/client";
import {client} from "../../axios-config/apiInit";

interface TableData {
vulnerabilityId: string;
advisory: AdvisoryWithinSbom;
status: VulnerabilityStatus;
context: { cpe: string };
packages: SbomPackage[];
vulnerability?: VulnerabilityIndex;
vulnerability?: VulnerabilityDetails;
}

interface VulnerabilitiesBySbomProps {
Expand All @@ -73,7 +74,7 @@ export const VulnerabilitiesBySbom: React.FC<VulnerabilitiesBySbomProps> = ({
TableData[]
>([]);
const [vulnerabilitiesById, setVulnerabilitiesById] = React.useState<
Map<string, VulnerabilityIndex>
Map<string, VulnerabilityDetails>
>(new Map());
const [isFetchingVulnerabilities, setIsFetchingVulnerabilities] =
React.useState(false);
Expand Down Expand Up @@ -115,7 +116,7 @@ export const VulnerabilitiesBySbom: React.FC<VulnerabilitiesBySbomProps> = ({

Promise.all(
vulnerabilities
.map((item) => getVulnerabilityById(item.vulnerabilityId))
.map(async (item) => (await getVulnerability({ client, path: { id: item.vulnerabilityId } })).data)
.map((vulnerability) => vulnerability.catch(() => null))
).then((vulnerabilities) => {
const validVulnerabilities = vulnerabilities.reduce((prev, current) => {
Expand All @@ -125,9 +126,9 @@ export const VulnerabilitiesBySbom: React.FC<VulnerabilitiesBySbomProps> = ({
// Filter out error responses
return prev;
}
}, [] as VulnerabilityIndex[]);
}, [] as VulnerabilityDetails[]);

const vulnerabilitiesById = new Map<string, VulnerabilityIndex>();
const vulnerabilitiesById = new Map<string, VulnerabilityDetails>();
validVulnerabilities.forEach((vulnerability) =>
vulnerabilitiesById.set(vulnerability.identifier, vulnerability)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,11 @@ import {
} from "@app/components/TableControls";
import { useLocalTableControls } from "@app/hooks/table-controls";
import { formatDate } from "@app/utils/utils";
import {VulnerabilityAdvisoryHead} from "@app/client";

interface AdvisoriesByVulnerabilityProps {
variant?: TableProps["variant"];
advisories: AdvisoryWithinVulnerability[];
advisories: VulnerabilityAdvisoryHead[];
}

export const AdvisoriesByVulnerability: React.FC<
Expand All @@ -45,9 +46,9 @@ export const AdvisoriesByVulnerability: React.FC<
const [selectedRowAction, setSelectedRowAction] =
React.useState<RowAction | null>(null);
const [selectedRow, setSelectedRow] =
React.useState<AdvisoryWithinVulnerability | null>(null);
React.useState<VulnerabilityAdvisoryHead | null>(null);

const showDrawer = (action: RowAction, row: AdvisoryWithinVulnerability) => {
const showDrawer = (action: RowAction, row: VulnerabilityAdvisoryHead) => {
setSelectedRowAction(action);
setSelectedRow(row);
};
Expand Down
4 changes: 2 additions & 2 deletions client/src/app/pages/vulnerability-details/overview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ import {
StackItem,
} from "@patternfly/react-core";

import { VulnerabilityIndex } from "@app/api/models";
import { formatDate } from "@app/utils/utils";
import {VulnerabilityDetails} from "../../client";

interface OverviewProps {
vulnerability: VulnerabilityIndex;
vulnerability: VulnerabilityDetails;
}

export const Overview: React.FC<OverviewProps> = ({ vulnerability }) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
} from "@patternfly/react-table";

import {
AdvisoryWithinVulnerability,
DecomposedPurl,
VulnerabilityStatus,
} from "@app/api/models";
Expand All @@ -39,6 +38,7 @@ import {
import { useLocalTableControls } from "@app/hooks/table-controls";
import { useWithUiId } from "@app/utils/query-utils";
import { decomposePurl } from "@app/utils/utils";
import {Purl, StatusContext, VulnerabilityAdvisorySummary} from "../../client";

interface TableData {
basePurl: {
Expand All @@ -47,15 +47,29 @@ interface TableData {
};
versionRange: string;
status: VulnerabilityStatus;
context: { cpe: string };
advisory: AdvisoryWithinVulnerability;
context: StatusContext | null;
advisory: VulnerabilityAdvisorySummary;
decomposedPurl?: DecomposedPurl;
}

interface PackagesByVulnerabilityProps {
variant?: TableProps["variant"];
initialItemsPerPage?: number;
advisories: AdvisoryWithinVulnerability[];
advisories: VulnerabilityAdvisorySummary[];
}

export const ShowStatusContext = ({value}: {
value: StatusContext | null
}) => {
if (!value) {
return null;
}
let cpe = value as { cpe: string; }
if ( cpe.cpe ) {
return cpe.cpe;
}
let purl = value as { purl: Purl; }
return purl.purl;
}

export const PackagesByVulnerability: React.FC<
Expand Down Expand Up @@ -83,7 +97,7 @@ export const PackagesByVulnerability: React.FC<
basePurl: { ...basePurl },
advisory: { ...advisory },
status: status as VulnerabilityStatus,
context: { ...affectedPackage.context },
context: affectedPackage.context,
versionRange: affectedPackage.version,
decomposedPurl: decomposePurl(basePurl.purl),
};
Expand Down Expand Up @@ -256,7 +270,7 @@ export const PackagesByVulnerability: React.FC<
modifier="truncate"
{...getTdProps({ columnKey: "context" })}
>
{item.context.cpe}
<ShowStatusContext value={item.context} />
</Td>
<Td
width={10}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import { useLocalTableControls } from "@app/hooks/table-controls";
import { useWithUiId } from "@app/utils/query-utils";
import { formatDate } from "@app/utils/utils";
import { SbomInDrawerInfo } from "@app/components/SbomInDrawerInfo";
import {VulnerabilityAdvisorySummary} from "../../client";

interface SbomPackage {
uuid: string;
Expand All @@ -61,12 +62,12 @@ interface TableData {
sbomId: string;
sbom?: SBOM;
status: VulnerabilityStatus;
advisory: AdvisoryWithinVulnerability;
advisory: VulnerabilityAdvisorySummary;
}

interface SbomsByVulnerabilityProps {
variant?: TableProps["variant"];
advisories: AdvisoryWithinVulnerability[];
advisories: VulnerabilityAdvisorySummary[];
}

export const SbomsByVulnerability: React.FC<SbomsByVulnerabilityProps> = ({
Expand Down Expand Up @@ -101,7 +102,7 @@ export const SbomsByVulnerability: React.FC<SbomsByVulnerabilityProps> = ({
return sbom.status.map((status) => {
const result: TableData = {
sbomId: sbom.id,
status: status,
status: status as VulnerabilityStatus,
advisory: { ...advisory },
};
return result;
Expand Down
12 changes: 12 additions & 0 deletions client/src/app/queries/dataOf.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
import { RequestResult } from "@hey-api/client-axios";
import { AxiosError } from "axios";
import { UseQueryResult } from "@tanstack/react-query";

export const dataOf = async <Data, Error>(
promise: RequestResult<Data, Error>
) => {
return (await promise).data;
};

export const convertQuery = <TData, TError>(
q: UseQueryResult<TData, TError>
) => {
return {
isFetching: q.isLoading,
fetchError: q.error as AxiosError,
refetch: q.refetch,
};
};
Loading

0 comments on commit 9a2bcc2

Please sign in to comment.