#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:
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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"],
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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}}}}}}
|
||||||
|
|||||||
Reference in New Issue
Block a user