#2912 - Actioning review comments. Identifiers have been removed from AbstractActions, _legacy folder has been deleted and correction to IPV4Address type hints

This commit is contained in:
Charlie Crane
2025-01-13 16:12:16 +00:00
parent a0a5f2ca38
commit 3cca3d4a5c
12 changed files with 17 additions and 1270 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@ from pydantic import BaseModel, ConfigDict
from primaite.interface.request import RequestFormat from primaite.interface.request import RequestFormat
class AbstractAction(BaseModel): class AbstractAction(BaseModel, ABC):
"""Base class for actions.""" """Base class for actions."""
config: "AbstractAction.ConfigSchema" config: "AbstractAction.ConfigSchema"

View File

@@ -1,7 +1,7 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK # © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from __future__ import annotations from __future__ import annotations
from ipaddress import IPv4Address from abc import ABC
from typing import List from typing import List
from pydantic import field_validator from pydantic import field_validator
@@ -9,7 +9,7 @@ from pydantic import field_validator
from primaite.game.agent.actions.manager import AbstractAction from primaite.game.agent.actions.manager import AbstractAction
from primaite.interface.request import RequestFormat from primaite.interface.request import RequestFormat
from primaite.utils.validation.ip_protocol import protocol_validator from primaite.utils.validation.ip_protocol import protocol_validator
from primaite.utils.validation.ipv4_address import ipv4_validator from primaite.utils.validation.ipv4_address import ipv4_validator, IPV4Address
from primaite.utils.validation.port import port_validator from primaite.utils.validation.port import port_validator
__all__ = ( __all__ = (
@@ -20,7 +20,7 @@ __all__ = (
) )
class ACLAddRuleAbstractAction(AbstractAction, identifier="acl_add_rule_abstract_action"): class ACLAddRuleAbstractAction(AbstractAction, ABC):
"""Base abstract class for ACL add rule actions.""" """Base abstract class for ACL add rule actions."""
config: ConfigSchema = "ACLAddRuleAbstractAction.ConfigSchema" config: ConfigSchema = "ACLAddRuleAbstractAction.ConfigSchema"
@@ -28,11 +28,11 @@ class ACLAddRuleAbstractAction(AbstractAction, identifier="acl_add_rule_abstract
class ConfigSchema(AbstractAction.ConfigSchema): class ConfigSchema(AbstractAction.ConfigSchema):
"""Configuration Schema base for ACL add rule abstract actions.""" """Configuration Schema base for ACL add rule abstract actions."""
src_ip: IPv4Address src_ip: IPV4Address
protocol_name: str protocol_name: str
permission: str permission: str
position: int position: int
dst_ip: IPv4Address dst_ip: IPV4Address
src_port: int src_port: int
dst_port: int dst_port: int
src_wildcard: int src_wildcard: int

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK # © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar from typing import ClassVar
from primaite.game.agent.actions.abstract import AbstractAction from primaite.game.agent.actions.abstract import AbstractAction
@@ -14,7 +15,7 @@ __all__ = (
) )
class NodeApplicationAbstractAction(AbstractAction, identifier="node_application_abstract_action"): class NodeApplicationAbstractAction(AbstractAction, ABC):
""" """
Base class for application actions. Base class for application actions.

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK # © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar from typing import ClassVar
from primaite.game.agent.actions.manager import AbstractAction from primaite.game.agent.actions.manager import AbstractAction
@@ -16,7 +17,7 @@ __all__ = (
) )
class NodeFileAbstractAction(AbstractAction, identifier="node_file_abstract_action"): class NodeFileAbstractAction(AbstractAction, ABC):
"""Abstract base class for file actions. """Abstract base class for file actions.
Any action which applies to a file and uses node_name, folder_name, and file_name as its Any action which applies to a file and uses node_name, folder_name, and file_name as its

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK # © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar from typing import ClassVar
from primaite.game.agent.actions.manager import AbstractAction from primaite.game.agent.actions.manager import AbstractAction
@@ -13,7 +14,7 @@ __all__ = (
) )
class NodeFolderAbstractAction(AbstractAction, identifier="node_folder_abstract"): class NodeFolderAbstractAction(AbstractAction, ABC):
""" """
Base class for folder actions. Base class for folder actions.

View File

@@ -1,4 +1,5 @@
# © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK # © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
from abc import ABC
from typing import ClassVar from typing import ClassVar
from primaite.game.agent.actions.manager import AbstractAction from primaite.game.agent.actions.manager import AbstractAction
@@ -7,7 +8,7 @@ from primaite.interface.request import RequestFormat
__all__ = ("HostNICEnableAction", "HostNICDisableAction") __all__ = ("HostNICEnableAction", "HostNICDisableAction")
class HostNICAbstractAction(AbstractAction, identifier="host_nic_abstract"): class HostNICAbstractAction(AbstractAction, ABC):
""" """
Abstract base class for NIC actions. Abstract base class for NIC actions.

View File

@@ -127,9 +127,6 @@ class ActionManager:
:return: The constructed ActionManager. :return: The constructed ActionManager.
:rtype: ActionManager :rtype: ActionManager
""" """
if "ip_list" not in cfg["options"]:
cfg["options"]["ip_list"] = []
obj = cls( obj = cls(
actions=cfg["action_list"], actions=cfg["action_list"],
**cfg["options"], **cfg["options"],

View File

@@ -207,10 +207,6 @@ class SoftwareManager:
:param session_id: The Session ID from which the payload originates. Optional. :param session_id: The Session ID from which the payload originates. Optional.
:return: True if the payload was successfully sent, False otherwise. :return: True if the payload was successfully sent, False otherwise.
""" """
print(payload)
print(dest_ip_address)
print(src_port)
print(session_id)
return self.session_manager.receive_payload_from_software_manager( return self.session_manager.receive_payload_from_software_manager(
payload=payload, payload=payload,
dst_ip_address=dest_ip_address, dst_ip_address=dest_ip_address,

View File

@@ -31,7 +31,7 @@ def ipv4_validator(v: Any) -> IPv4Address:
IPV4Address: Final[Annotated] = Annotated[IPv4Address, BeforeValidator(ipv4_validator)] IPV4Address: Final[Annotated] = Annotated[IPv4Address, BeforeValidator(ipv4_validator)]
""" """
IPv4Address with with IPv4Address with with pre-validation and auto-conversion from str using ipv4_validator.. IPv4Address with pre-validation and auto-conversion from str using ipv4_validator..
This type is essentially an IPv4Address from the standard library's ipaddress module, This type is essentially an IPv4Address from the standard library's ipaddress module,
but with added validation logic. If you use this custom type, the ipv4_validator function but with added validation logic. If you use this custom type, the ipv4_validator function

View File

@@ -5,7 +5,7 @@ import pytest
from primaite.game.agent.actions import ( from primaite.game.agent.actions import (
ActionManager, ActionManager,
do_nothingAction, DoNothingAction,
NodeServiceDisableAction, NodeServiceDisableAction,
NodeServiceEnableAction, NodeServiceEnableAction,
NodeServicePauseAction, NodeServicePauseAction,

View File

@@ -81,7 +81,7 @@ class TestWebpageUnavailabilitySticky:
reward = WebpageUnavailablePenalty(config=schema) reward = WebpageUnavailablePenalty(config=schema)
# no response codes yet, reward is 0 # no response codes yet, reward is 0
action, params, request = "DO_NOTHING", {}, ["do_nothing"] action, params, request = "do_nothing", {}, ["do_nothing"]
response = RequestResponse(status="success", data={}) response = RequestResponse(status="success", data={})
browser_history = [] browser_history = []
state = {"network": {"nodes": {"computer": {"applications": {"WebBrowser": {"history": browser_history}}}}}} state = {"network": {"nodes": {"computer": {"applications": {"WebBrowser": {"history": browser_history}}}}}}