Skip to content

Commit 28afd03

Browse files
committed
Move VulnerabilitySource to audit.py for shared usage
1 parent 4cb93f3 commit 28afd03

File tree

3 files changed

+36
-30
lines changed

3 files changed

+36
-30
lines changed

exasol/toolbox/tools/security.py

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
from functools import partial
1919
from inspect import cleandoc
2020
from pathlib import Path
21-
from typing import Optional
2221

2322
import typer
2423

24+
from exasol.toolbox.util.dependencies.audit import VulnerabilitySource
25+
2526
stdout = print
2627
stderr = partial(print, file=sys.stderr)
2728

@@ -104,32 +105,6 @@ def from_maven(report: str) -> Iterable[Issue]:
104105
)
105106

106107

107-
class VulnerabilitySource(str, Enum):
108-
CVE = "CVE"
109-
CWE = "CWE"
110-
GHSA = "GHSA"
111-
PYSEC = "PYSEC"
112-
113-
@classmethod
114-
def from_prefix(cls, name: str) -> VulnerabilitySource | None:
115-
for el in cls:
116-
if name.upper().startswith(el.value):
117-
return el
118-
return None
119-
120-
def get_link(self, package: str, vuln_id: str) -> str:
121-
if self == VulnerabilitySource.CWE:
122-
cwe_id = vuln_id.upper().replace(f"{VulnerabilitySource.CWE.value}-", "")
123-
return f"https://cwe.mitre.org/data/definitions/{cwe_id}.html"
124-
125-
map_link = {
126-
VulnerabilitySource.CVE: "https://nvd.nist.gov/vuln/detail/{vuln_id}",
127-
VulnerabilitySource.GHSA: "https://github.com/advisories/{vuln_id}",
128-
VulnerabilitySource.PYSEC: "https://github.com/pypa/advisory-database/blob/main/vulns/{package}/{vuln_id}.yaml",
129-
}
130-
return map_link[self].format(package=package, vuln_id=vuln_id)
131-
132-
133108
def identify_pypi_references(
134109
references: list[str], package_name: str
135110
) -> tuple[list[str], list[str], list[str]]:

exasol/toolbox/util/dependencies/audit.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import subprocess # nosec
55
import tempfile
66
from dataclasses import dataclass
7+
from enum import Enum
78
from pathlib import Path
89
from re import search
910
from typing import (
@@ -34,6 +35,32 @@ def __init__(self, subprocess_output: subprocess.CompletedProcess) -> None:
3435
self.stderr = subprocess_output.stderr
3536

3637

38+
class VulnerabilitySource(str, Enum):
39+
CVE = "CVE"
40+
CWE = "CWE"
41+
GHSA = "GHSA"
42+
PYSEC = "PYSEC"
43+
44+
@classmethod
45+
def from_prefix(cls, name: str) -> VulnerabilitySource | None:
46+
for el in cls:
47+
if name.upper().startswith(el.value):
48+
return el
49+
return None
50+
51+
def get_link(self, package: str, vuln_id: str) -> str:
52+
if self == VulnerabilitySource.CWE:
53+
cwe_id = vuln_id.upper().replace(f"{VulnerabilitySource.CWE.value}-", "")
54+
return f"https://cwe.mitre.org/data/definitions/{cwe_id}.html"
55+
56+
map_link = {
57+
VulnerabilitySource.CVE: "https://nvd.nist.gov/vuln/detail/{vuln_id}",
58+
VulnerabilitySource.GHSA: "https://github.com/advisories/{vuln_id}",
59+
VulnerabilitySource.PYSEC: "https://github.com/pypa/advisory-database/blob/main/vulns/{package}/{vuln_id}.yaml",
60+
}
61+
return map_link[self].format(package=package, vuln_id=vuln_id)
62+
63+
3764
class Vulnerability(Package):
3865
id: str
3966
aliases: list[str]

test/unit/security_test.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from unittest import mock
88

99
import pytest
10+
import toolbox.util.dependencies.audit
1011

1112
from exasol.toolbox.tools import security
1213

@@ -335,14 +336,17 @@ def test_from_json(json_input, expected):
335336
[
336337
pytest.param("DUMMY", None, id="without_a_matching_prefix_returns_none"),
337338
pytest.param(
338-
f"{security.VulnerabilitySource.CWE.value.lower()}-1234",
339-
security.VulnerabilitySource.CWE,
339+
f"{toolbox.util.dependencies.audit.VulnerabilitySource.CWE.value.lower()}-1234",
340+
toolbox.util.dependencies.audit.VulnerabilitySource.CWE,
340341
id="with_matching_prefix_returns_vulnerability_source",
341342
),
342343
],
343344
)
344345
def test_from_prefix(prefix: str, expected):
345-
assert security.VulnerabilitySource.from_prefix(prefix) == expected
346+
assert (
347+
toolbox.util.dependencies.audit.VulnerabilitySource.from_prefix(prefix)
348+
== expected
349+
)
346350

347351

348352
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)