Skip to content

Add: New GMP version 22.8 with agent installers #1243

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/api/gmp.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ gmpv224
gmpv225
gmpv226
gmpv227
gmpv228
```
157 changes: 157 additions & 0 deletions docs/api/gmpv228.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
(gmpv228)=

# GMP v22.8

```{eval-rst}
.. automodule:: gvm.protocols.gmp._gmp228
```

## Protocol

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.GMPv228
:members:
:inherited-members:
```

## Enums

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.AlertCondition
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.AlertEvent
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.AlertMethod
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.AliveTest
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.CredentialFormat
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.CredentialType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.EntityType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.FeedType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.FilterType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.HostsOrdering
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.HelpFormat
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.InfoType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.PermissionSubjectType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.PortRangeType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.ReportFormatType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.ResourceType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.ScannerType
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.SnmpAuthAlgorithm
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.SnmpPrivacyAlgorithm
:members:
:undoc-members:
:no-index:
```

```{eval-rst}
.. autoclass:: gvm.protocols.gmp.requests.v228.TicketStatus
:members:
:undoc-members:
:no-index:
```
5 changes: 4 additions & 1 deletion gvm/protocols/gmp/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,22 @@
dynamically selects the supported GMP protocol of the remote manager daemon.

If you need to use a specific GMP version, you can use the :class:`GMPv224`,
:class:`GMPv225`, :class:`GMPv226` or :class:`GMPv227` classes.
:class:`GMPv225`, :class:`GMPv226`, :class:`GMPv227` or :class:`GMPv228` classes.

* :class:`GMP` - Dynamically select supported GMP protocol of the remote manager daemon.
* :class:`GMPv224` - GMP version 22.4
* :class:`GMPv225` - GMP version 22.5
* :class:`GMPv226` - GMP version 22.6
* :class:`GMPv227` - GMP version 22.7
* :class:`GMPv228` - GMP version 22.8
"""

from ._gmp import GMP
from ._gmp224 import GMPv224
from ._gmp225 import GMPv225
from ._gmp226 import GMPv226
from ._gmp227 import GMPv227
from ._gmp228 import GMPv228

Gmp = GMP # for backwards compatibility

Expand All @@ -33,4 +35,5 @@
"GMPv225",
"GMPv226",
"GMPv227",
"GMPv228",
)
16 changes: 11 additions & 5 deletions gvm/protocols/gmp/_gmp.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@
from ._gmp225 import GMPv225
from ._gmp226 import GMPv226
from ._gmp227 import GMPv227
from ._gmp228 import GMPv228
from .requests import Version

SUPPORTED_GMP_VERSIONS = Union[GMPv224[T], GMPv225[T], GMPv226[T], GMPv227[T]]
_SUPPORTED_GMP_VERSION_STRINGS = ["22.4", "22.5", "22.6", "22.7"]
SUPPORTED_GMP_VERSIONS = Union[
GMPv224[T], GMPv225[T], GMPv226[T], GMPv227[T], GMPv228[T]
]
_SUPPORTED_GMP_VERSION_STRINGS = ["22.4", "22.5", "22.6", "22.7", "22.8"]


class GMP(GvmProtocol[T]):
Expand All @@ -38,7 +41,8 @@ class GMP(GvmProtocol[T]):
# gvm.protocols.gmp.GMPv224,
# gvm.protocols.gmp.GMPv225,
# gvm.protocols.gmp.GMPv226,
# or gvm.protocols.gmp.GMPv227
# gvm.protocols.gmp.GMPv227,
# or gvm.protocols.gmp.GMPv228
# depending on the supported GMP version of the remote manager daemon
resp = gmp.get_tasks()
"""
Expand Down Expand Up @@ -93,9 +97,11 @@ def determine_supported_gmp(self) -> SUPPORTED_GMP_VERSIONS:
gmp_class = GMPv225
elif major_version == 22 and minor_version == 6:
gmp_class = GMPv226
elif major_version == 22 and minor_version >= 7:
elif major_version == 22 and minor_version == 7:
gmp_class = GMPv227
if minor_version > 7:
elif major_version == 22 and minor_version >= 8:
gmp_class = GMPv228
if minor_version > 8:
warnings.warn(
"Remote manager daemon uses a newer GMP version than "
f"supported by python-gvm {__version__}. Please update to "
Expand Down
76 changes: 76 additions & 0 deletions gvm/protocols/gmp/_gmp228.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# SPDX-FileCopyrightText: 2025 Greenbone AG
#
# SPDX-License-Identifier: GPL-3.0-or-later

from typing import Optional

from gvm.protocols.gmp.requests import EntityID

from .._protocol import T
from ._gmp227 import GMPv227
from .requests.v228 import AgentInstallers


class GMPv228(GMPv227[T]):
"""
A class implementing the Greenbone Management Protocol (GMP) version 22.8

Example:

.. code-block:: python

from gvm.protocols.gmp import GMPv228 as GMP

with GMP(connection) as gmp:
resp = gmp.get_tasks()
"""

@staticmethod
def get_protocol_version() -> tuple[int, int]:
return (22, 8)

def get_agent_installers(
self,
*,
filter_string: Optional[str] = None,
filter_id: Optional[EntityID] = None,
trash: Optional[bool] = None,
details: Optional[bool] = None,
) -> T:
"""Request a list of agent installers

Args:
filter_string: Filter term to use for the query
filter_id: UUID of an existing filter to use for the query
trash: Whether to get the trashcan agent installers instead
details: Whether to include extra details like tasks using this
scanner
"""
return self._send_request_and_transform_response(
AgentInstallers.get_agent_installers(
filter_string=filter_string,
filter_id=filter_id,
trash=trash,
details=details,
)
)

def get_agent_installer(self, agent_installer_id: EntityID) -> T:
"""Request a single agent installer

Args:
agent_installer_id: UUID of an existing agent installer
"""
return self._send_request_and_transform_response(
AgentInstallers.get_agent_installer(agent_installer_id)
)

def get_agent_installer_file(self, agent_installer_id: EntityID) -> T:
"""Request a single agent installer file

Args:
agent_installer_id: UUID of an existing agent installer
"""
return self._send_request_and_transform_response(
AgentInstallers.get_agent_installer_file(agent_installer_id)
)
Loading
Loading