Skip to content

Commit 41beab3

Browse files
authored
Merge pull request #14 from meddlin:feature/epss-cve-summary
Feature/epss-cve-summary
2 parents aa7545a + e6854b8 commit 41beab3

File tree

5 files changed

+40
-8
lines changed

5 files changed

+40
-8
lines changed

.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"args": [
2929
"lookup",
3030
"--id",
31-
"CVE-2025-11683"
31+
"CVE-2022-27225"
3232
]
3333
},
3434
{

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "cve-explorer-cli"
7-
version = "0.2.51"
7+
version = "0.2.6"
88
description = "View CVEs and related info with CLI interface"
99
readme = "README.md"
1010
requires-python = ">=3.11"

src/cve_explorer_cli/main.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,23 @@ def main():
5959
weaknesses=res['vulnerabilities'][0]['cve']['weaknesses'],
6060
severity=f"CVSS 3.1: {res_v31} ({res_v31_base}), CVSS 2.0: {res_v2} ({res_v2_base})"
6161
)
62-
62+
epss_resp = request_epss(args.id)
63+
if epss_resp != '':
64+
_epss = EPSS(
65+
cve_id=epss_resp['data'][0]['cve'],
66+
epss_value=epss_resp['data'][0]['epss'],
67+
percentile=epss_resp['data'][0]['percentile'],
68+
date=epss_resp['data'][0]['date']
69+
)
70+
custom_cve.epss_value = _epss.epss_value
71+
custom_cve.epss_percentile = _epss.percentile
72+
custom_cve.epss_date = _epss.date
73+
6374
print("\n")
6475
custom_cve.display_cve()
76+
77+
# TODO: Add a JSON pretty print for CVEs
78+
6579
elif args.command == "epss":
6680
epss_resp = request_epss(args.id)
6781
_epss = EPSS(

src/cve_explorer_cli/models/cve.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ class CVE:
7373
weaknesses: Any
7474
severity: str
7575

76+
epss_value: str
77+
epss_percentile: str
78+
epss_date: str
79+
7680
def __init__(
7781
self,
7882
id,
@@ -100,6 +104,12 @@ def display_cve(self):
100104

101105
table.add_row("CVE", f"[bold]{self.id}[/]")
102106
table.add_row("Severity", f"{self.severity}")
107+
if self.epss_value != '':
108+
table.add_row("EPSS Value", f"{self.epss_value}")
109+
if self.epss_percentile != '':
110+
table.add_row("EPSS Percentile", f"{self.epss_percentile}")
111+
if self.epss_date != '':
112+
table.add_row("EPSS Date", f"{self.epss_date}")
103113
table.add_row("Status", f"[yellow]{self.vuln_status}[/]")
104114
table.add_row("Published", self.published)
105115
table.add_row("Source", self.source_identifier)

src/cve_explorer_cli/utilities/ext_request.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@ def request_epss(cve_id: str) -> Any:
1515
Any: _description_
1616
"""
1717
res = requests.get(
18-
f'https://api.first.org/data/v1/epss?cve={cve_id.capitalize()}',
18+
f'https://api.first.org/data/v1/epss?cve={cve_id.upper()}',
1919
timeout=10
2020
)
21-
return res.json()
21+
if res.status_code == 404:
22+
print(f'HTTP 404 - request_epss({cve_id}) not found.')
23+
return ''
24+
elif res.status_code == 200:
25+
return res.json()
2226

2327
def request_cve(cve_id: str) -> Any:
2428
"""Request CVE information from First (api.first.org)
@@ -30,8 +34,12 @@ def request_cve(cve_id: str) -> Any:
3034
_type_: _description_
3135
"""
3236
res = requests.get(
33-
f'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId={cve_id.capitalize()}',
37+
f'https://services.nvd.nist.gov/rest/json/cves/2.0?cveId={cve_id.upper()}',
3438
timeout=10
3539
)
36-
response_json = res.json()
37-
return response_json
40+
if res.status_code == 404:
41+
print(f'HTTP 404 - request_cve({cve_id}) not found.')
42+
return ''
43+
elif res.status_code == 200:
44+
response_json = res.json()
45+
return response_json

0 commit comments

Comments
 (0)