Skip to content

Commit 1e82336

Browse files
ozgengreenbonebot
authored andcommitted
add: add get_report_vulns GMP request
Implement the get_report_vulns GMP request command. Add unit tests to verify required arguments, filters, pagination handling, and details output.
1 parent 67751b0 commit 1e82336

5 files changed

Lines changed: 149 additions & 0 deletions

File tree

gvm/protocols/gmp/_gmpnext.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
ReportOperatingSystems,
2828
ReportPorts,
2929
ReportTlsCertificates,
30+
ReportVulns,
3031
Tasks,
3132
)
3233
from .requests.v224 import HostsOrdering
@@ -1234,3 +1235,33 @@ def get_report_errors(
12341235
details=details,
12351236
)
12361237
)
1238+
1239+
def get_report_vulns(
1240+
self,
1241+
report_id: EntityID,
1242+
*,
1243+
filter_string: str | None = None,
1244+
filter_id: str | None = None,
1245+
ignore_pagination: bool | None = None,
1246+
details: bool | None = True,
1247+
) -> T:
1248+
"""Request vulnerabilities of a single report.
1249+
1250+
Args:
1251+
report_id: UUID of an existing report.
1252+
filter_string: Filter term to use to filter results in the report
1253+
filter_id: UUID of filter to use to filter results in the report
1254+
ignore_pagination: Whether to ignore the filter terms "first" and
1255+
"rows".
1256+
details: Request additional report vulnerability information details.
1257+
Defaults to True.
1258+
"""
1259+
return self._send_request_and_transform_response(
1260+
ReportVulns.get_report_vulns(
1261+
report_id=report_id,
1262+
filter_string=filter_string,
1263+
filter_id=filter_id,
1264+
ignore_pagination=ignore_pagination,
1265+
details=details,
1266+
)
1267+
)

gvm/protocols/gmp/requests/next/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
from gvm.protocols.gmp.requests.next._report_tls_certificates import (
3939
ReportTlsCertificates,
4040
)
41+
from gvm.protocols.gmp.requests.next._report_vulns import (
42+
ReportVulns,
43+
)
4144
from gvm.protocols.gmp.requests.next._tasks import Tasks
4245

4346
from .._entity_id import EntityID
@@ -168,6 +171,7 @@
168171
"ReportOperatingSystems",
169172
"ReportPorts",
170173
"ReportTlsCertificates",
174+
"ReportVulns",
171175
"Reports",
172176
"ResourceNames",
173177
"ResourceType",
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from gvm.errors import RequiredArgument
2+
from gvm.protocols.core import Request
3+
from gvm.protocols.gmp.requests import EntityID
4+
from gvm.utils import to_bool
5+
from gvm.xml import XmlCommand
6+
7+
8+
class ReportVulns:
9+
@classmethod
10+
def get_report_vulns(
11+
cls,
12+
report_id: EntityID,
13+
*,
14+
filter_string: str | None = None,
15+
filter_id: str | None = None,
16+
ignore_pagination: bool | None = None,
17+
details: bool | None = True,
18+
) -> Request:
19+
"""Request vulnerabilities of a single report.
20+
21+
Args:
22+
report_id: UUID of an existing report.
23+
filter_string: Filter term to use to filter results in the report
24+
filter_id: UUID of filter to use to filter results in the report
25+
ignore_pagination: Whether to ignore the filter terms "first" and
26+
"rows".
27+
details: Request additional report vulnerability information details.
28+
Defaults to True.
29+
"""
30+
cmd = XmlCommand("get_report_vulns")
31+
32+
if not report_id:
33+
raise RequiredArgument(
34+
function=cls.get_report_vulns.__name__, argument="report_id"
35+
)
36+
37+
cmd.set_attribute("report_id", str(report_id))
38+
39+
cmd.add_filter(filter_string, filter_id)
40+
41+
if ignore_pagination is not None:
42+
cmd.set_attribute("ignore_pagination", to_bool(ignore_pagination))
43+
44+
cmd.set_attribute("details", to_bool(details))
45+
46+
return cmd
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# SPDX-FileCopyrightText: 2026 Greenbone AG
2+
#
3+
# SPDX-License-Identifier: GPL-3.0-or-later
4+
#
5+
6+
from gvm.errors import RequiredArgument
7+
8+
9+
class GmpGetReportVulnsTestMixin:
10+
def test_get_report_vulns_without_id(self):
11+
with self.assertRaises(RequiredArgument):
12+
self.gmp.get_report_vulns(None)
13+
14+
with self.assertRaises(RequiredArgument):
15+
self.gmp.get_report_vulns("")
16+
17+
def test_get_report_vulns_with_filter_string(self):
18+
self.gmp.get_report_vulns(report_id="r1", filter_string="name=foo")
19+
20+
self.connection.send.has_been_called_with(
21+
b'<get_report_vulns report_id="r1" filter="name=foo" details="1"/>'
22+
)
23+
24+
def test_get_report_vulns_with_filter_id(self):
25+
self.gmp.get_report_vulns(report_id="r1", filter_id="f1")
26+
27+
self.connection.send.has_been_called_with(
28+
b'<get_report_vulns report_id="r1" filt_id="f1" details="1"/>'
29+
)
30+
31+
def test_get_report_vulns_with_ignore_pagination(self):
32+
self.gmp.get_report_vulns(report_id="r1", ignore_pagination=True)
33+
34+
self.connection.send.has_been_called_with(
35+
b'<get_report_vulns report_id="r1" ignore_pagination="1" details="1"/>'
36+
)
37+
38+
self.gmp.get_report_vulns(report_id="r1", ignore_pagination=False)
39+
40+
self.connection.send.has_been_called_with(
41+
b'<get_report_vulns report_id="r1" ignore_pagination="0" details="1"/>'
42+
)
43+
44+
def test_get_report_vulns_with_details(self):
45+
self.gmp.get_report_vulns(report_id="r1", details=True)
46+
47+
self.connection.send.has_been_called_with(
48+
b'<get_report_vulns report_id="r1" details="1"/>'
49+
)
50+
51+
self.gmp.get_report_vulns(report_id="r1", details=False)
52+
53+
self.connection.send.has_been_called_with(
54+
b'<get_report_vulns report_id="r1" details="0"/>'
55+
)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# SPDX-FileCopyrightText: 2026 Greenbone AG
2+
#
3+
# SPDX-License-Identifier: GPL-3.0-or-later
4+
#
5+
6+
from ...gmpnext import GMPTestCase
7+
from .report_vulns.test_get_report_vulns import (
8+
GmpGetReportVulnsTestMixin,
9+
)
10+
11+
12+
class GmpGetReportVulnsTestCase(GmpGetReportVulnsTestMixin, GMPTestCase):
13+
pass

0 commit comments

Comments
 (0)