src/components/vulnerabilities/VulnerabilityDescriptionPanel.jsx
import CvssScore from "components/badges/CvssScore";
import RiskBadge from "components/badges/RiskBadge";
import ProjectBadge from "components/projects/ProjectBadge";
import TargetBadge from "components/target/TargetBadge";
import EmptyField from "components/ui/EmptyField";
import ExternalLink from "components/ui/ExternalLink";
import TimestampsSection from "components/ui/TimestampsSection";
import UserLink from "components/users/Link";
import ReactMarkdown from "react-markdown";
import { Link } from "react-router-dom";
import VulnerabilityCategorySpan from "./categories/Span";
import CvssAbbr from "./CvssAbbr";
import VulnerabilityStatusBadge from "./StatusBadge";
const VulnerabilityDescriptionPanel = ({ vulnerability }) => {
return <div className="grid grid-two">
<div>
<h4>Description</h4>
{vulnerability.description ? <ReactMarkdown>{vulnerability.description}</ReactMarkdown> : <EmptyField />}
<h4>Proof of concept</h4>
{vulnerability.proof_of_concept ? <ReactMarkdown>{vulnerability.proof_of_concept}</ReactMarkdown> : <EmptyField />}
<h4>Impact</h4>
{vulnerability.impact ? <ReactMarkdown>{vulnerability.impact}</ReactMarkdown> : <EmptyField />}
<h4>Category</h4>
<p><VulnerabilityCategorySpan name={vulnerability.category_name} parentName={vulnerability.parent_category_name} /></p>
<h4>Properties</h4>
<dl>
<dt>Status</dt>
<dd><VulnerabilityStatusBadge vulnerability={vulnerability} /></dd>
<dt>Risk</dt>
<dd><RiskBadge risk={vulnerability.risk} /></dd>
{vulnerability.cvss_score && <>
<dt><CvssAbbr /> score</dt>
<dd><CvssScore score={vulnerability.cvss_score} /></dd>
</>}
{vulnerability.cvss_vector && <>
<dt>CVSS vector</dt>
<dd><ExternalLink
href={`https://www.first.org/cvss/calculator/3.0#${vulnerability.cvss_vector}`}>{vulnerability.cvss_vector}</ExternalLink>
</dd>
</>}
{vulnerability.owasp_vector && <>
<dt>OWASP vector</dt>
<dd>{vulnerability.owasp_vector}
</dd>
</>}
{vulnerability.owasp_overall && <>
<dt>OWASP overall score</dt>
<dd>{vulnerability.owasp_overall}
</dd>
</>}
{vulnerability.owasp_likehood && <>
<dt>OWASP likehood score</dt>
<dd>{vulnerability.owasp_likehood}
</dd>
</>}
{vulnerability.owasp_impact && <>
<dt>OWASP impact score</dt>
<dd>{vulnerability.owasp_impact}
</dd>
</>}
</dl>
</div>
<div>
<h4>Relations</h4>
<dl>
{!vulnerability.is_template && <>
<dt>Project</dt>
<dd>{vulnerability.project_id ?
<ProjectBadge project={{ id: vulnerability.project_id, name: vulnerability.project_name }} /> : '-'}</dd>
</>}
{vulnerability.target_id !== null && vulnerability.target_id !== 0 && <>
<dt>Affected target</dt>
<dd><Link to={`/targets/${vulnerability.target_id}`}><TargetBadge name={vulnerability.target_name}>{vulnerability.target_id ? `${vulnerability.target_name} (${vulnerability.target_kind})` : "-"}</TargetBadge></Link></dd>
</>}
<dt>Created by</dt>
<dd><UserLink userId={vulnerability.creator_uid}>{vulnerability.creator_full_name}</UserLink></dd>
</dl>
<TimestampsSection entity={vulnerability} />
</div>
</div>
}
export default VulnerabilityDescriptionPanel;