From 81e8cfbc5f030ef691f5cba18a7f9d2b38541d85 Mon Sep 17 00:00:00 2001 From: Mohamed Nasser Date: Thu, 13 Feb 2025 18:55:47 +0100 Subject: [PATCH 1/6] Make asset classes files data fields --- src/ostorlab/assets/agent.py | 6 ++++++ src/ostorlab/assets/android_aab.py | 4 ++++ src/ostorlab/assets/android_apk.py | 4 ++++ src/ostorlab/assets/android_store.py | 2 ++ src/ostorlab/assets/api_schema.py | 5 +++++ src/ostorlab/assets/domain_name.py | 2 ++ src/ostorlab/assets/file.py | 4 ++++ src/ostorlab/assets/ios_ipa.py | 4 ++++ src/ostorlab/assets/ios_store.py | 2 ++ src/ostorlab/assets/ios_testflight.py | 2 ++ src/ostorlab/assets/ip.py | 4 ++++ src/ostorlab/assets/ipv4.py | 4 ++++ src/ostorlab/assets/ipv6.py | 4 ++++ src/ostorlab/assets/link.py | 3 +++ 14 files changed, 50 insertions(+) diff --git a/src/ostorlab/assets/agent.py b/src/ostorlab/assets/agent.py index e5e09bd07..154e02edb 100644 --- a/src/ostorlab/assets/agent.py +++ b/src/ostorlab/assets/agent.py @@ -11,6 +11,12 @@ class Agent(asset.Asset): """Agent asset.""" + key: str + version: Optional[str] = None + git_location: Optional[str] = None + docker_location: Optional[str] = None + yaml_file_location: Optional[str] = None + def __init__( self, key: str, diff --git a/src/ostorlab/assets/android_aab.py b/src/ostorlab/assets/android_aab.py index 405b99610..26c61be9a 100644 --- a/src/ostorlab/assets/android_aab.py +++ b/src/ostorlab/assets/android_aab.py @@ -11,6 +11,10 @@ class AndroidAab(asset.Asset): """Android .AAB target asset.""" + content: Optional[bytes] = None + path: Optional[str] = None + content_url: Optional[str] = None + def __init__( self, content: Optional[bytes] = None, diff --git a/src/ostorlab/assets/android_apk.py b/src/ostorlab/assets/android_apk.py index fb064cf0d..13963df13 100644 --- a/src/ostorlab/assets/android_apk.py +++ b/src/ostorlab/assets/android_apk.py @@ -11,6 +11,10 @@ class AndroidApk(asset.Asset): """Android .APK target asset.""" + content: Optional[bytes] = None + path: Optional[str] = None + content_url: Optional[str] = None + def __init__( self, content: Optional[bytes] = None, diff --git a/src/ostorlab/assets/android_store.py b/src/ostorlab/assets/android_store.py index 93249b4a9..4337dc34d 100644 --- a/src/ostorlab/assets/android_store.py +++ b/src/ostorlab/assets/android_store.py @@ -10,6 +10,8 @@ class AndroidStore(asset.Asset): """Android store package target asset.""" + package_name: str + def __init__(self, package_name: str): self.package_name = package_name diff --git a/src/ostorlab/assets/api_schema.py b/src/ostorlab/assets/api_schema.py index 2a387ecfe..e907b39c0 100644 --- a/src/ostorlab/assets/api_schema.py +++ b/src/ostorlab/assets/api_schema.py @@ -14,6 +14,11 @@ class ApiSchema(asset.Asset): """API Schema target asset.""" + endpoint_url: str + content: Optional[bytes] = None + content_url: Optional[str] = None + schema_type: Optional[str] = None + def __init__( self, endpoint_url: str, diff --git a/src/ostorlab/assets/domain_name.py b/src/ostorlab/assets/domain_name.py index e7956b40f..fa8a832c1 100644 --- a/src/ostorlab/assets/domain_name.py +++ b/src/ostorlab/assets/domain_name.py @@ -10,6 +10,8 @@ class DomainName(asset.Asset): """Domain Name target asset per RFC 1034 and 1035.""" + name: str + def __init__(self, name: str): self.name = name diff --git a/src/ostorlab/assets/file.py b/src/ostorlab/assets/file.py index a6fdea312..b78a46786 100644 --- a/src/ostorlab/assets/file.py +++ b/src/ostorlab/assets/file.py @@ -11,6 +11,10 @@ class File(asset.Asset): """File target asset.""" + content: Optional[bytes] = None + path: Optional[str] = None + content_url: Optional[str] = None + def __init__( self, content: Optional[bytes] = None, diff --git a/src/ostorlab/assets/ios_ipa.py b/src/ostorlab/assets/ios_ipa.py index aa81095da..96ee72ca0 100644 --- a/src/ostorlab/assets/ios_ipa.py +++ b/src/ostorlab/assets/ios_ipa.py @@ -11,6 +11,10 @@ class IOSIpa(asset.Asset): """IOS .IPA target asset.""" + content: Optional[bytes] = None + path: Optional[str] = None + content_url: Optional[str] = None + def __init__( self, content: Optional[bytes] = None, diff --git a/src/ostorlab/assets/ios_store.py b/src/ostorlab/assets/ios_store.py index c86444d75..fb25e07f0 100644 --- a/src/ostorlab/assets/ios_store.py +++ b/src/ostorlab/assets/ios_store.py @@ -10,6 +10,8 @@ class IOSStore(asset.Asset): """Ios bundle target asset.""" + bundle_id: str + def __init__(self, bundle_id: str): self.bundle_id = bundle_id diff --git a/src/ostorlab/assets/ios_testflight.py b/src/ostorlab/assets/ios_testflight.py index c4ff7361c..e45423573 100644 --- a/src/ostorlab/assets/ios_testflight.py +++ b/src/ostorlab/assets/ios_testflight.py @@ -10,6 +10,8 @@ class IOSTestflight(asset.Asset): """iOS testflight target asset.""" + application_url: str + def __init__(self, application_url: str): self.application_url = application_url diff --git a/src/ostorlab/assets/ip.py b/src/ostorlab/assets/ip.py index 4d6a2e64f..56c2d98b0 100644 --- a/src/ostorlab/assets/ip.py +++ b/src/ostorlab/assets/ip.py @@ -12,6 +12,10 @@ class IP(asset.Asset): """IP Address target asset.""" + host: str + version: Optional[int] = None + mask: Optional[str] = None + def __init__( self, host: str, version: Optional[int] = None, mask: Optional[str] = None ): diff --git a/src/ostorlab/assets/ipv4.py b/src/ostorlab/assets/ipv4.py index d6a3a3fe0..19fd50b2e 100644 --- a/src/ostorlab/assets/ipv4.py +++ b/src/ostorlab/assets/ipv4.py @@ -11,6 +11,10 @@ class IPv4(asset.Asset): """IPv4 Address target asset.""" + host: str + version: Optional[int] = 4 + mask: Optional[str] = None + def __init__( self, host: str, version: Optional[int] = 4, mask: Optional[str] = None ): diff --git a/src/ostorlab/assets/ipv6.py b/src/ostorlab/assets/ipv6.py index 58727beb2..f3207fe14 100644 --- a/src/ostorlab/assets/ipv6.py +++ b/src/ostorlab/assets/ipv6.py @@ -11,6 +11,10 @@ class IPv6(asset.Asset): """IPv6 Address target asset.""" + host: str + version: Optional[int] = 6 + mask: Optional[str] = None + def __init__( self, host: str, version: Optional[int] = 6, mask: Optional[str] = None ): diff --git a/src/ostorlab/assets/link.py b/src/ostorlab/assets/link.py index 55efc3321..70a2b3811 100644 --- a/src/ostorlab/assets/link.py +++ b/src/ostorlab/assets/link.py @@ -10,6 +10,9 @@ class Link(asset.Asset): """Agent asset.""" + url: str + method: str + def __init__(self, url: str, method: str): self.url = url self.method = method From 47e3e49906dedc33df7d428d1de0ab5cc3daf743 Mon Sep 17 00:00:00 2001 From: Mohamed Nasser Date: Thu, 13 Feb 2025 20:27:04 +0100 Subject: [PATCH 2/6] Fix test definitions_test.py --- tests/runtimes/definitions_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/runtimes/definitions_test.py b/tests/runtimes/definitions_test.py index 4ad825408..952e87db9 100644 --- a/tests/runtimes/definitions_test.py +++ b/tests/runtimes/definitions_test.py @@ -407,13 +407,13 @@ def testAssetGroupDefinitionFromYaml_whenYamlIsValid_returnsValidAssetGroupDefin content=b"content", path="/tests/files/fake_app.aab" ), android_aab_asset.AndroidAab( - content=b"content", path="/tests/files/fake_app_2.apk" + content=b"content", path="/tests/files/fake_app_2.aab" ), android_apk_asset.AndroidApk( - content=b"content", path="/tests/files/fake_app.aab" + content=b"content", path="/tests/files/fake_app.apk" ), android_apk_asset.AndroidApk( - content=b"content", path="/tests/files/fake_app_2.aab" + content=b"content", path="/tests/files/fake_app_2.apk" ), ios_ipa_asset.IOSIpa(content=b"content", path="/files/fake_app.ipa"), ios_ipa_asset.IOSIpa(content_url="https://cia.sketchy.com/secret_files.ipa"), From 75330789d868f96c88a8d711fe8ac0f6684f9426 Mon Sep 17 00:00:00 2001 From: Mohamed Nasser Date: Fri, 14 Feb 2025 14:28:42 +0100 Subject: [PATCH 3/6] Fix version field typing in IPv4 and IPv6 assets --- src/ostorlab/assets/ipv4.py | 6 ++---- src/ostorlab/assets/ipv6.py | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/ostorlab/assets/ipv4.py b/src/ostorlab/assets/ipv4.py index 19fd50b2e..723e636ff 100644 --- a/src/ostorlab/assets/ipv4.py +++ b/src/ostorlab/assets/ipv4.py @@ -12,12 +12,10 @@ class IPv4(asset.Asset): """IPv4 Address target asset.""" host: str - version: Optional[int] = 4 + version: int = 4 mask: Optional[str] = None - def __init__( - self, host: str, version: Optional[int] = 4, mask: Optional[str] = None - ): + def __init__(self, host: str, version: int = 4, mask: Optional[str] = None): self.host = host self.version = version self.mask = mask diff --git a/src/ostorlab/assets/ipv6.py b/src/ostorlab/assets/ipv6.py index f3207fe14..d15edf09b 100644 --- a/src/ostorlab/assets/ipv6.py +++ b/src/ostorlab/assets/ipv6.py @@ -12,12 +12,10 @@ class IPv6(asset.Asset): """IPv6 Address target asset.""" host: str - version: Optional[int] = 6 + version: int = 6 mask: Optional[str] = None - def __init__( - self, host: str, version: Optional[int] = 6, mask: Optional[str] = None - ): + def __init__(self, host: str, version: int = 6, mask: Optional[str] = None): self.host = host self.version = version self.mask = mask From 74ef100c57dc5d4956f38758ad68cde8d3c4b777 Mon Sep 17 00:00:00 2001 From: Mohamed Nasser Date: Fri, 14 Feb 2025 17:52:20 +0100 Subject: [PATCH 4/6] Remove __init__ if redundant --- src/ostorlab/assets/agent.py | 14 -------------- src/ostorlab/assets/android_aab.py | 10 ---------- src/ostorlab/assets/android_apk.py | 10 ---------- src/ostorlab/assets/android_store.py | 3 --- src/ostorlab/assets/api_schema.py | 12 ------------ src/ostorlab/assets/domain_name.py | 3 --- src/ostorlab/assets/file.py | 10 ---------- src/ostorlab/assets/ios_ipa.py | 10 ---------- src/ostorlab/assets/ios_store.py | 3 --- src/ostorlab/assets/ios_testflight.py | 3 --- src/ostorlab/assets/ipv4.py | 5 ----- src/ostorlab/assets/ipv6.py | 5 ----- src/ostorlab/assets/link.py | 4 ---- 13 files changed, 92 deletions(-) diff --git a/src/ostorlab/assets/agent.py b/src/ostorlab/assets/agent.py index 154e02edb..7cb5ee351 100644 --- a/src/ostorlab/assets/agent.py +++ b/src/ostorlab/assets/agent.py @@ -17,20 +17,6 @@ class Agent(asset.Asset): docker_location: Optional[str] = None yaml_file_location: Optional[str] = None - def __init__( - self, - key: str, - version: Optional[str] = None, - git_location: Optional[str] = None, - docker_location: Optional[str] = None, - yaml_file_location: Optional[str] = None, - ): - self.key = key - self.version = version - self.git_location = git_location - self.docker_location = docker_location - self.yaml_file_location = yaml_file_location - def __str__(self) -> str: if self.version is not None: return f"Agent {self.key}:{self.version}" diff --git a/src/ostorlab/assets/android_aab.py b/src/ostorlab/assets/android_aab.py index 26c61be9a..615480498 100644 --- a/src/ostorlab/assets/android_aab.py +++ b/src/ostorlab/assets/android_aab.py @@ -15,16 +15,6 @@ class AndroidAab(asset.Asset): path: Optional[str] = None content_url: Optional[str] = None - def __init__( - self, - content: Optional[bytes] = None, - path: Optional[str] = None, - content_url: Optional[str] = None, - ): - self.content = content - self.path = path - self.content_url = content_url - def __str__(self) -> str: str_representation = "Android AAB" if self.path is not None: diff --git a/src/ostorlab/assets/android_apk.py b/src/ostorlab/assets/android_apk.py index 13963df13..335fe0f44 100644 --- a/src/ostorlab/assets/android_apk.py +++ b/src/ostorlab/assets/android_apk.py @@ -15,16 +15,6 @@ class AndroidApk(asset.Asset): path: Optional[str] = None content_url: Optional[str] = None - def __init__( - self, - content: Optional[bytes] = None, - path: Optional[str] = None, - content_url: Optional[str] = None, - ): - self.content = content - self.path = path - self.content_url = content_url - def __str__(self) -> str: str_representation = "Android APK" if self.path is not None: diff --git a/src/ostorlab/assets/android_store.py b/src/ostorlab/assets/android_store.py index 4337dc34d..bda870238 100644 --- a/src/ostorlab/assets/android_store.py +++ b/src/ostorlab/assets/android_store.py @@ -12,9 +12,6 @@ class AndroidStore(asset.Asset): package_name: str - def __init__(self, package_name: str): - self.package_name = package_name - def __str__(self) -> str: return f"Android Store: ({self.package_name})" diff --git a/src/ostorlab/assets/api_schema.py b/src/ostorlab/assets/api_schema.py index e907b39c0..0b7401eb9 100644 --- a/src/ostorlab/assets/api_schema.py +++ b/src/ostorlab/assets/api_schema.py @@ -19,18 +19,6 @@ class ApiSchema(asset.Asset): content_url: Optional[str] = None schema_type: Optional[str] = None - def __init__( - self, - endpoint_url: str, - content: Optional[bytes] = None, - content_url: Optional[str] = None, - schema_type: Optional[str] = None, - ): - self.content = content - self.endpoint_url = endpoint_url - self.schema_type = schema_type - self.content_url = content_url - def __str__(self) -> str: str_representation = CLASS_NAME if self.schema_type is not None: diff --git a/src/ostorlab/assets/domain_name.py b/src/ostorlab/assets/domain_name.py index fa8a832c1..9826a760a 100644 --- a/src/ostorlab/assets/domain_name.py +++ b/src/ostorlab/assets/domain_name.py @@ -12,9 +12,6 @@ class DomainName(asset.Asset): name: str - def __init__(self, name: str): - self.name = name - def __str__(self) -> str: return self.name diff --git a/src/ostorlab/assets/file.py b/src/ostorlab/assets/file.py index b78a46786..8898fbe44 100644 --- a/src/ostorlab/assets/file.py +++ b/src/ostorlab/assets/file.py @@ -15,16 +15,6 @@ class File(asset.Asset): path: Optional[str] = None content_url: Optional[str] = None - def __init__( - self, - content: Optional[bytes] = None, - path: Optional[str] = None, - content_url: Optional[str] = None, - ): - self.content = content - self.path = path - self.content_url = content_url - def __str__(self) -> str: str_representation = "File" if self.path is not None: diff --git a/src/ostorlab/assets/ios_ipa.py b/src/ostorlab/assets/ios_ipa.py index 96ee72ca0..658db8868 100644 --- a/src/ostorlab/assets/ios_ipa.py +++ b/src/ostorlab/assets/ios_ipa.py @@ -15,16 +15,6 @@ class IOSIpa(asset.Asset): path: Optional[str] = None content_url: Optional[str] = None - def __init__( - self, - content: Optional[bytes] = None, - path: Optional[str] = None, - content_url: Optional[str] = None, - ): - self.content = content - self.path = path - self.content_url = content_url - def __str__(self) -> str: str_representation = "iOS" if self.path is not None: diff --git a/src/ostorlab/assets/ios_store.py b/src/ostorlab/assets/ios_store.py index fb25e07f0..38748796f 100644 --- a/src/ostorlab/assets/ios_store.py +++ b/src/ostorlab/assets/ios_store.py @@ -12,9 +12,6 @@ class IOSStore(asset.Asset): bundle_id: str - def __init__(self, bundle_id: str): - self.bundle_id = bundle_id - def __str__(self) -> str: return f"iOS Store ({self.bundle_id})" diff --git a/src/ostorlab/assets/ios_testflight.py b/src/ostorlab/assets/ios_testflight.py index e45423573..ca288a5f0 100644 --- a/src/ostorlab/assets/ios_testflight.py +++ b/src/ostorlab/assets/ios_testflight.py @@ -12,9 +12,6 @@ class IOSTestflight(asset.Asset): application_url: str - def __init__(self, application_url: str): - self.application_url = application_url - def __str__(self) -> str: return f"iOS Testflight ({self.application_url})" diff --git a/src/ostorlab/assets/ipv4.py b/src/ostorlab/assets/ipv4.py index 723e636ff..8ea1d1acf 100644 --- a/src/ostorlab/assets/ipv4.py +++ b/src/ostorlab/assets/ipv4.py @@ -15,11 +15,6 @@ class IPv4(asset.Asset): version: int = 4 mask: Optional[str] = None - def __init__(self, host: str, version: int = 4, mask: Optional[str] = None): - self.host = host - self.version = version - self.mask = mask - def __str__(self) -> str: return f"{self.host}/{self.mask}" diff --git a/src/ostorlab/assets/ipv6.py b/src/ostorlab/assets/ipv6.py index d15edf09b..84028efbf 100644 --- a/src/ostorlab/assets/ipv6.py +++ b/src/ostorlab/assets/ipv6.py @@ -15,11 +15,6 @@ class IPv6(asset.Asset): version: int = 6 mask: Optional[str] = None - def __init__(self, host: str, version: int = 6, mask: Optional[str] = None): - self.host = host - self.version = version - self.mask = mask - def __str__(self) -> str: return f"{self.host}/{self.mask}" diff --git a/src/ostorlab/assets/link.py b/src/ostorlab/assets/link.py index 70a2b3811..231a7627c 100644 --- a/src/ostorlab/assets/link.py +++ b/src/ostorlab/assets/link.py @@ -13,10 +13,6 @@ class Link(asset.Asset): url: str method: str - def __init__(self, url: str, method: str): - self.url = url - self.method = method - def __str__(self) -> str: return f"Link {self.url} with method {self.method}" From 3ecdc509375c5ef0865e322a3d3012bbd20b2a15 Mon Sep 17 00:00:00 2001 From: Mohamed Nasser Date: Mon, 17 Feb 2025 10:23:57 +0100 Subject: [PATCH 5/6] Add __post_init__ method to initialize ip version if None --- src/ostorlab/assets/ip.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/ostorlab/assets/ip.py b/src/ostorlab/assets/ip.py index 56c2d98b0..edff49f24 100644 --- a/src/ostorlab/assets/ip.py +++ b/src/ostorlab/assets/ip.py @@ -16,12 +16,9 @@ class IP(asset.Asset): version: Optional[int] = None mask: Optional[str] = None - def __init__( - self, host: str, version: Optional[int] = None, mask: Optional[str] = None - ): - self.host = host - self.version = version or ipaddress.ip_address(self.host).version - self.mask = mask + def __post_init__(self): + if self.version is None: + self.version = ipaddress.ip_address(self.host).version def __str__(self) -> str: return f"{self.host}/{self.mask}" From 4e3f442df439d94327d7f28cf9bdceeec9e6a056 Mon Sep 17 00:00:00 2001 From: Mohamed Nasser Date: Mon, 17 Feb 2025 10:26:13 +0100 Subject: [PATCH 6/6] Add __post_init__ method to initialize ip version if None --- src/ostorlab/assets/ip.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ostorlab/assets/ip.py b/src/ostorlab/assets/ip.py index edff49f24..42732f4fb 100644 --- a/src/ostorlab/assets/ip.py +++ b/src/ostorlab/assets/ip.py @@ -16,7 +16,7 @@ class IP(asset.Asset): version: Optional[int] = None mask: Optional[str] = None - def __post_init__(self): + def __post_init__(self) -> None: if self.version is None: self.version = ipaddress.ip_address(self.host).version