From cb8d892e744200e3383b6ce3e2c8a196ab232d45 Mon Sep 17 00:00:00 2001 From: Sudhir Verma Date: Tue, 2 Jan 2024 18:23:37 +0530 Subject: [PATCH] Added Two download buttons in Defence and vulnerability report (#505) --- .../AssessmentReport/index.tsx | 213 +++++++++++------- src/pages/FuzzingModel/DefenceData.tsx | 173 ++++++++++---- .../FuzzingModel/sections/DefenseSummary.tsx | 8 +- src/utils/fatch_json_report.ts | 7 + 4 files changed, 271 insertions(+), 130 deletions(-) diff --git a/src/pages/BesVersionHistory/AssessmentReport/index.tsx b/src/pages/BesVersionHistory/AssessmentReport/index.tsx index 97633f33..d6233099 100644 --- a/src/pages/BesVersionHistory/AssessmentReport/index.tsx +++ b/src/pages/BesVersionHistory/AssessmentReport/index.tsx @@ -18,15 +18,26 @@ export const verifyLink = async (link: any, setLinkStatus: any) => { const response = await fetchJsonReport(link); try { let data = JSON.parse(response); - //console.log(data); - setLinkStatus(data); + if (link.toLocaleLowerCase().endsWith(".pdf")) { + setLinkStatus(true); + } else { + setLinkStatus(data); + } return true; } catch (err) { - setLinkStatus({}); + if (link.toLocaleLowerCase().endsWith(".pdf")) { + setLinkStatus(false); + } else { + setLinkStatus({}); + } return false; } } catch (error) { - setLinkStatus({}); + if (link.toLocaleLowerCase().endsWith(".pdf")) { + setLinkStatus(false); + } else { + setLinkStatus({}); + } return false; } }; @@ -34,15 +45,15 @@ export const verifyLink = async (link: any, setLinkStatus: any) => { const CheckLink = ({ version, name, report }: any) => { const [linkStatus, setLinkStatus]: any = React.useState({}); let reportNameMap = ""; - if(report === "Criticality Score"){ + if (report === "Criticality Score") { reportNameMap = "Criticality Score"; - }else if(report === "Vulnerabilities"){ + } else if (report === "Vulnerabilities") { reportNameMap = "Codeql"; - }else if(report === "License Compliance"){ + } else if (report === "License Compliance") { reportNameMap = "Fossology"; - }else if(report === "Dependencies"){ + } else if (report === "Dependencies") { reportNameMap = "SBOM"; - }else if(report === "ScoreCard"){ + } else if (report === "ScoreCard") { reportNameMap = "Scorecard"; } @@ -53,7 +64,7 @@ const CheckLink = ({ version, name, report }: any) => { } }, [version]); let linkStatusLength: number = Object.values(linkStatus).length; - if (report === "Criticality Score" && linkStatusLength !== 0){ + if (report === "Criticality Score" && linkStatusLength !== 0) { return ( {linkStatus.criticality_score} @@ -64,7 +75,7 @@ const CheckLink = ({ version, name, report }: any) => { const myObject = { pathname: pathName, state: linkStatus } as { pathname: string; }; - + if (report === "ScoreCard" && linkStatusLength !== 0) { return {linkStatus.score}; } @@ -73,26 +84,28 @@ const CheckLink = ({ version, name, report }: any) => { } if (report === "License Compliance" && linkStatusLength !== 0) { let uniqueLicenses: any = []; - for(let i=0; i{linkStatus.packages.length}; } - + return ( -- @@ -101,43 +114,75 @@ const CheckLink = ({ version, name, report }: any) => { }; const GetHeadings = ({ receivedValue }: any) => { //const [fieldInfo, setfieldInfo]: any = React.useState({}); - if(receivedValue === "License Compliance"){ - return(<> Unique Licenses - - info - - ); - }else if(receivedValue === "Dependencies"){ - return(<> Dependencies(SBOM) - - info - - ); - - }else if(receivedValue === "ScoreCard"){ - return(<> {receivedValue} - - info - - ); - - }else if(receivedValue === "Criticality Score"){ - return(<> {receivedValue} - - info - - ); - - }else if(receivedValue === "Vulnerabilities"){ - return(<> SAST Risks - - info - - ); - }else{ - return(receivedValue); - } -} + if (receivedValue === "License Compliance") { + return ( + <> + {" "} + Unique Licenses + + info + + + ); + } else if (receivedValue === "Dependencies") { + return ( + <> + {" "} + Dependencies(SBOM) + + info + + + ); + } else if (receivedValue === "ScoreCard") { + return ( + <> + {" "} + {receivedValue} + + info + + + ); + } else if (receivedValue === "Criticality Score") { + return ( + <> + {" "} + {receivedValue} + + info + + + ); + } else if (receivedValue === "Vulnerabilities") { + return ( + <> + {" "} + SAST Risks + + info + + + ); + } else { + return receivedValue; + } +}; function AssessmentReport({ title, name, version, ...other }: any) { const report: string[] = [ "ScoreCard", @@ -147,41 +192,49 @@ function AssessmentReport({ title, name, version, ...other }: any) { "Dependencies" ]; return ( - - - - + + {report.map((value, index) => { - return ( - <> + return ( + <> - - - - + + + - - + + - + - + - - + + - - ); - })} - - + + ); + })} + ); } diff --git a/src/pages/FuzzingModel/DefenceData.tsx b/src/pages/FuzzingModel/DefenceData.tsx index 3b07ae52..c2b5f0f9 100644 --- a/src/pages/FuzzingModel/DefenceData.tsx +++ b/src/pages/FuzzingModel/DefenceData.tsx @@ -1,11 +1,18 @@ import React, { useState } from "react"; -import { Card, CircularProgress } from "@mui/material"; -import MKBox from "../../components/MKBox"; +import { Card, CircularProgress, Grid } from "@mui/material"; import MKTypography from "../../components/MKTypography"; import DefenceReport from "./DefenceReport"; +import MKButton from "../../components/MKButton"; +import { verifyLink } from "../BesVersionHistory/AssessmentReport"; +import { besecureMlAssessmentDataStore } from "../../dataStore"; +import { NavLink, useLocation } from "react-router-dom"; -function reportDisplay(loading: any, report: any) { +function reportDisplay(report: any) { + return ; +} + +function loadingCircular(loading: any) { if (loading) { return ( ); - } else { - return ; } } -export default function DefenceData({ report }: any) { +export default function DefenceData({ report, reportName }: any) { let [loading, setLoading] = useState(true); + const location = useLocation(); + const selectedFuzz: any = location.state.selectedFuzz; + + const [defenceReport, setDefenceReport]: any = React.useState(false); + const [vulnerabilityReport, setvulnerabilityReport]: any = + React.useState(false); + + let defenceReportLink = `${besecureMlAssessmentDataStore}/${selectedFuzz.name}/fuzz-test/${reportName}/DefenceReport.pdf`; + let vulnerabilityReportLink = `${besecureMlAssessmentDataStore}/${selectedFuzz.name}/fuzz-test/${reportName}/VulnerabilityReport.pdf`; React.useEffect(() => { + verifyLink(defenceReportLink, setDefenceReport); + verifyLink(vulnerabilityReportLink, setvulnerabilityReport); try { setTimeout(setLoading, 6000); - } catch(e) { + } catch (e) { // ignore } }, []); const reportLength = Object.values(report).length; return ( - - + {loading ? ( + + {" "} + {loadingCircular(loading)} + + ) : ( + + + - - {reportLength > 0 ? ( - reportDisplay(loading, report) - ) : ( - - Not Available - - )} - - - + + {reportLength > 0 ? ( + reportDisplay(report) + ) : ( + + Not Available + + )} + + + + + {defenceReport ? ( + + + Defense Report + + + ) : ( + + Defense Report + + )} + + {vulnerabilityReport ? ( + + + Vulnerability Report + + + ) : ( + + Vulnerability Report + + )} + + + )} + ); } diff --git a/src/pages/FuzzingModel/sections/DefenseSummary.tsx b/src/pages/FuzzingModel/sections/DefenseSummary.tsx index 1c85ae97..f8dcd02c 100644 --- a/src/pages/FuzzingModel/sections/DefenseSummary.tsx +++ b/src/pages/FuzzingModel/sections/DefenseSummary.tsx @@ -130,16 +130,16 @@ function DefenseSummary() { - + - + - + - + diff --git a/src/utils/fatch_json_report.ts b/src/utils/fatch_json_report.ts index 88146fbe..85cda189 100644 --- a/src/utils/fatch_json_report.ts +++ b/src/utils/fatch_json_report.ts @@ -11,6 +11,13 @@ export function fetchJsonReport(url: string): Promise { }); response.on("end", () => { + if (url.toLocaleLowerCase().endsWith(".pdf")) { + let regex = /404: Not Found/gm; + if (regex.test(data)) { + resolve(data); + } + resolve('{"pdfFile":true}'); + } resolve(data); }); })