Skip to content

Commit 07ad467

Browse files
committed
Update and clean importer, replace existing tests with 3 new tests #971
Reference: #971 Signed-off-by: John M. Horan <johnmhoran@gmail.com>
1 parent 74398a9 commit 07ad467

5 files changed

Lines changed: 136 additions & 244 deletions

File tree

vulnerabilities/importers/apache_httpd.py

Lines changed: 21 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,14 @@
88
#
99

1010
import asyncio
11-
import datetime
1211
import urllib
1312

14-
import dateparser
1513
import requests
1614
from bs4 import BeautifulSoup
1715
from packageurl import PackageURL
16+
from univers.version_constraint import VersionConstraint
1817
from univers.version_range import GenericVersionRange
1918
from univers.versions import SemverVersion
20-
from univers.version_constraint import VersionConstraint
2119

2220
from vulnerabilities.importer import AdvisoryData
2321
from vulnerabilities.importer import AffectedPackage
@@ -27,13 +25,12 @@
2725
from vulnerabilities.package_managers import GitHubTagsAPI
2826
from vulnerabilities.severity_systems import APACHE_HTTPD
2927

30-
# from vulnerabilities.utils import nearest_patched_package
31-
3228

3329
class ApacheHTTPDImporter(Importer):
3430

3531
base_url = "https://httpd.apache.org/security/json/"
3632
spdx_license_expression = "Apache-2.0"
33+
license_url = "https://www.apache.org/licenses/"
3734

3835
# For now, don't use the GH API
3936
# def set_api(self):
@@ -55,7 +52,6 @@ def advisory_data(self):
5552
yield self.to_advisory(data)
5653

5754
def to_advisory(self, data):
58-
# cve = data["CVE_data_meta"]["ID"]
5955
alias = data["CVE_data_meta"]["ID"]
6056
descriptions = data["description"]["description_data"]
6157
description = None
@@ -78,9 +74,7 @@ def to_advisory(self, data):
7874
)
7975
break
8076
reference = Reference(
81-
# reference_id=cve,
8277
reference_id=alias,
83-
# url=urllib.parse.urljoin(self.base_url, f"{cve}.json"),
8478
url=urllib.parse.urljoin(self.base_url, f"{alias}.json"),
8579
severities=severities,
8680
)
@@ -91,72 +85,11 @@ def to_advisory(self, data):
9185
for version_data in products["version"]["version_data"]:
9286
versions_data.append(version_data)
9387

94-
# print("\n\n==> versions_data = {}\n".format(versions_data))
95-
for version in versions_data:
96-
# print("\n\tversion = {}\n".format(version))
97-
import json
98-
99-
# print("\n\tversion = \n{}\n".format(json.dumps(version, indent=2)))
100-
10188
affected_version_range = self.to_version_ranges(versions_data)
10289

103-
# fixed_version = []
104-
# date_published = ""
105-
106-
# for entry in data["timeline"]:
107-
# value = entry["value"]
108-
# # if "released" in entry["value"]:
109-
# if "released" in value:
110-
# # fixed_version.append(entry["value"])
111-
# fixed_version.append(value.split(" ")[0])
112-
# date_published = get_published_date(entry["time"])
113-
114-
# affected_packages = []
115-
# fixed_packages = []
116-
117-
# for version in versions_data:
118-
# affected_package = AffectedPackage(
119-
# package=PackageURL(
120-
# type="generic",
121-
# name="apache_httpd",
122-
# ),
123-
# # affected_version_range=affected_version_range,
124-
# affected_version_range=version.get("version_value", "ERROR!!"),
125-
# fixed_version=fixed_version[0],
126-
# # fixed_version="to come",
127-
# )
128-
# affected_packages.append(affected_package)
129-
130-
# for version_range in fixed_version_ranges:
131-
# fixed_packages.extend(
132-
# [
133-
# PackageURL(type="apache", name="httpd", version=version)
134-
# for version in self.version_api.get("apache/httpd").valid_versions
135-
# if SemverVersion(version) in version_range
136-
# ]
137-
# )
138-
139-
# for version_range in affected_version_ranges:
140-
# affected_packages.extend(
141-
# [
142-
# PackageURL(type="apache", name="httpd", version=version)
143-
# for version in self.version_api.get("apache/httpd").valid_versions
144-
# if SemverVersion(version) in version_range
145-
# ]
146-
# )
147-
14890
return AdvisoryData(
149-
# vulnerability_id=cve,
15091
aliases=[alias],
15192
summary=description,
152-
# affected_packages=nearest_patched_package(affected_packages, fixed_packages),
153-
# affected_packages=AffectedPackage(
154-
# package=PackageURL(
155-
# type="apache",
156-
# name="httpd",
157-
# ),
158-
# affected_version_range=affected_version_range
159-
# )
16093
affected_packages=[
16194
AffectedPackage(
16295
package=PackageURL(
@@ -174,23 +107,30 @@ def to_version_ranges(self, versions_data):
174107
for version_data in versions_data:
175108
version_value = version_data["version_value"]
176109
range_expression = version_data["version_affected"]
110+
177111
if range_expression == ">=" or range_expression == "!<":
178-
constraints.append(VersionConstraint(
179-
comparator=">=",
180-
version=SemverVersion(version_value),
181-
))
112+
constraints.append(
113+
VersionConstraint(
114+
comparator=">=",
115+
version=SemverVersion(version_value),
116+
)
117+
)
182118

183119
if range_expression == "<=":
184-
constraints.append(VersionConstraint(
185-
comparator="<=",
186-
version=SemverVersion(version_value),
187-
))
120+
constraints.append(
121+
VersionConstraint(
122+
comparator="<=",
123+
version=SemverVersion(version_value),
124+
)
125+
)
188126

189127
if range_expression == "=" or range_expression == "?=":
190-
constraints.append(VersionConstraint(
191-
comparator="=",
192-
version=SemverVersion(version_value),
193-
))
128+
constraints.append(
129+
VersionConstraint(
130+
comparator="=",
131+
version=SemverVersion(version_value),
132+
)
133+
)
194134

195135
return GenericVersionRange(constraints=constraints)
196136

@@ -207,20 +147,6 @@ def fetch_links(url):
207147
return links
208148

209149

210-
# From osv.py
211-
# def get_published_date(raw_data):
212-
# published = raw_data.get("published")
213-
# return published and dateparser.parse(date_string=published)
214-
215-
216-
def get_published_date(published):
217-
# return published and dateparser.parse(date_string=published)
218-
# above gives result like this: "date_published": "2021-12-20T00:00:00"
219-
# so does this:
220-
published = datetime.datetime.strptime(published, "%Y-%m-%d")
221-
return published
222-
223-
224150
ignore_tags = {
225151
"AGB_BEFORE_AAA_CHANGES",
226152
"APACHE_1_2b1",

vulnerabilities/tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def no_rmtree(monkeypatch):
2525
# Step 2: Run test for importer only if it is activated (pytestmark = pytest.mark.skipif(...))
2626
# Step 3: Migrate all the tests
2727
collect_ignore = [
28-
# "test_apache_httpd.py",
28+
"test_apache_httpd.py",
2929
"test_apache_kafka.py",
3030
"test_apache_tomcat.py",
3131
"test_api.py",

0 commit comments

Comments
 (0)