binalyze-air-sdk 1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- binalyze_air/__init__.py +77 -0
- binalyze_air/apis/__init__.py +27 -0
- binalyze_air/apis/authentication.py +27 -0
- binalyze_air/apis/auto_asset_tags.py +75 -0
- binalyze_air/apis/endpoints.py +22 -0
- binalyze_air/apis/event_subscription.py +97 -0
- binalyze_air/apis/evidence.py +53 -0
- binalyze_air/apis/evidences.py +216 -0
- binalyze_air/apis/interact.py +36 -0
- binalyze_air/apis/params.py +40 -0
- binalyze_air/apis/settings.py +27 -0
- binalyze_air/apis/user_management.py +74 -0
- binalyze_air/apis/users.py +68 -0
- binalyze_air/apis/webhooks.py +231 -0
- binalyze_air/base.py +133 -0
- binalyze_air/client.py +1338 -0
- binalyze_air/commands/__init__.py +146 -0
- binalyze_air/commands/acquisitions.py +387 -0
- binalyze_air/commands/assets.py +363 -0
- binalyze_air/commands/authentication.py +37 -0
- binalyze_air/commands/auto_asset_tags.py +231 -0
- binalyze_air/commands/baseline.py +396 -0
- binalyze_air/commands/cases.py +603 -0
- binalyze_air/commands/event_subscription.py +102 -0
- binalyze_air/commands/evidences.py +988 -0
- binalyze_air/commands/interact.py +58 -0
- binalyze_air/commands/organizations.py +221 -0
- binalyze_air/commands/policies.py +203 -0
- binalyze_air/commands/settings.py +29 -0
- binalyze_air/commands/tasks.py +56 -0
- binalyze_air/commands/triage.py +360 -0
- binalyze_air/commands/user_management.py +126 -0
- binalyze_air/commands/users.py +101 -0
- binalyze_air/config.py +245 -0
- binalyze_air/exceptions.py +50 -0
- binalyze_air/http_client.py +306 -0
- binalyze_air/models/__init__.py +285 -0
- binalyze_air/models/acquisitions.py +251 -0
- binalyze_air/models/assets.py +439 -0
- binalyze_air/models/audit.py +273 -0
- binalyze_air/models/authentication.py +70 -0
- binalyze_air/models/auto_asset_tags.py +117 -0
- binalyze_air/models/baseline.py +232 -0
- binalyze_air/models/cases.py +276 -0
- binalyze_air/models/endpoints.py +76 -0
- binalyze_air/models/event_subscription.py +172 -0
- binalyze_air/models/evidence.py +66 -0
- binalyze_air/models/evidences.py +349 -0
- binalyze_air/models/interact.py +136 -0
- binalyze_air/models/organizations.py +294 -0
- binalyze_air/models/params.py +128 -0
- binalyze_air/models/policies.py +250 -0
- binalyze_air/models/settings.py +84 -0
- binalyze_air/models/tasks.py +149 -0
- binalyze_air/models/triage.py +143 -0
- binalyze_air/models/user_management.py +97 -0
- binalyze_air/models/users.py +82 -0
- binalyze_air/queries/__init__.py +134 -0
- binalyze_air/queries/acquisitions.py +156 -0
- binalyze_air/queries/assets.py +105 -0
- binalyze_air/queries/audit.py +417 -0
- binalyze_air/queries/authentication.py +56 -0
- binalyze_air/queries/auto_asset_tags.py +60 -0
- binalyze_air/queries/baseline.py +185 -0
- binalyze_air/queries/cases.py +293 -0
- binalyze_air/queries/endpoints.py +25 -0
- binalyze_air/queries/event_subscription.py +55 -0
- binalyze_air/queries/evidence.py +140 -0
- binalyze_air/queries/evidences.py +280 -0
- binalyze_air/queries/interact.py +28 -0
- binalyze_air/queries/organizations.py +223 -0
- binalyze_air/queries/params.py +115 -0
- binalyze_air/queries/policies.py +150 -0
- binalyze_air/queries/settings.py +20 -0
- binalyze_air/queries/tasks.py +82 -0
- binalyze_air/queries/triage.py +231 -0
- binalyze_air/queries/user_management.py +83 -0
- binalyze_air/queries/users.py +69 -0
- binalyze_air_sdk-1.0.1.dist-info/METADATA +635 -0
- binalyze_air_sdk-1.0.1.dist-info/RECORD +82 -0
- binalyze_air_sdk-1.0.1.dist-info/WHEEL +5 -0
- binalyze_air_sdk-1.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,285 @@
|
|
1
|
+
"""
|
2
|
+
Data models for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from .assets import Asset, AssetDetail, AssetTask, AssetFilter, AssetTaskFilter
|
6
|
+
from .cases import (
|
7
|
+
Case, CaseActivity, CaseEndpoint, CaseTask, User, CaseFilter, CaseActivityFilter,
|
8
|
+
CreateCaseRequest, UpdateCaseRequest, CaseStatus, CaseNote
|
9
|
+
)
|
10
|
+
from .tasks import (
|
11
|
+
Task, TaskFilter, TaskData, TaskConfig, DroneConfig, TaskStatus, TaskType
|
12
|
+
)
|
13
|
+
from .acquisitions import (
|
14
|
+
AcquisitionProfile, AcquisitionProfileDetails, AcquisitionFilter,
|
15
|
+
AcquisitionTaskRequest, ImageAcquisitionTaskRequest, CreateAcquisitionProfileRequest,
|
16
|
+
NetworkCaptureConfig, EDiscoveryPattern
|
17
|
+
)
|
18
|
+
from .policies import (
|
19
|
+
Policy, PolicyFilter, PolicyAssignment, PolicyExecution, PolicyRule, PolicyCondition, PolicyAction,
|
20
|
+
CreatePolicyRequest, UpdatePolicyRequest, AssignPolicyRequest, PolicyType, PolicyStatus
|
21
|
+
)
|
22
|
+
from .organizations import (
|
23
|
+
Organization, OrganizationUser, OrganizationRole, OrganizationFilter,
|
24
|
+
CreateOrganizationRequest, UpdateOrganizationRequest, AddUserToOrganizationRequest,
|
25
|
+
OrganizationStatus, UserRole
|
26
|
+
)
|
27
|
+
from .triage import (
|
28
|
+
TriageRule, TriageTag, TriageProfile, TriageFilter,
|
29
|
+
CreateTriageRuleRequest, UpdateTriageRuleRequest, CreateTriageTagRequest, CreateTriageProfileRequest,
|
30
|
+
TriageStatus, TriageSeverity, TriageRuleType
|
31
|
+
)
|
32
|
+
from .audit import (
|
33
|
+
AuditLog, AuditFilter, AuditSummary, AuditUserActivity, AuditSystemEvent,
|
34
|
+
AuditExportRequest, AuditRetentionPolicy, AuditLevel, AuditCategory, AuditAction,
|
35
|
+
AuditLogsFilter
|
36
|
+
)
|
37
|
+
from .baseline import (
|
38
|
+
Baseline, BaselineProfile, BaselineComparison, BaselineChange, BaselineFilter,
|
39
|
+
CreateBaselineRequest, UpdateBaselineRequest, CreateBaselineProfileRequest, CompareBaselineRequest,
|
40
|
+
BaselineStatus, BaselineType, ComparisonStatus, ChangeType
|
41
|
+
)
|
42
|
+
from .authentication import (
|
43
|
+
AuthStatus, LoginRequest, LoginResponse
|
44
|
+
)
|
45
|
+
from .user_management import (
|
46
|
+
UserManagementUser, CreateUserRequest, UpdateUserRequest,
|
47
|
+
AIUser, CreateAIUserRequest, APIUser, CreateAPIUserRequest, UserFilter
|
48
|
+
)
|
49
|
+
from .evidence import (
|
50
|
+
EvidencePPC, EvidenceReportFileInfo, EvidenceReport
|
51
|
+
)
|
52
|
+
from .auto_asset_tags import (
|
53
|
+
AutoAssetTag, CreateAutoAssetTagRequest, UpdateAutoAssetTagRequest,
|
54
|
+
StartTaggingRequest, TaggingResult, AutoAssetTagFilter
|
55
|
+
)
|
56
|
+
from .evidences import (
|
57
|
+
EvidenceRepository, AmazonS3Repository, AzureStorageRepository,
|
58
|
+
FTPSRepository, SFTPRepository, SMBRepository, RepositoryFilter,
|
59
|
+
CreateAmazonS3RepositoryRequest, UpdateAmazonS3RepositoryRequest,
|
60
|
+
CreateAzureStorageRepositoryRequest, UpdateAzureStorageRepositoryRequest,
|
61
|
+
CreateFTPSRepositoryRequest, UpdateFTPSRepositoryRequest,
|
62
|
+
CreateSFTPRepositoryRequest, UpdateSFTPRepositoryRequest,
|
63
|
+
CreateSMBRepositoryRequest, UpdateSMBRepositoryRequest,
|
64
|
+
ValidateRepositoryRequest, ValidationResult
|
65
|
+
)
|
66
|
+
from .event_subscription import (
|
67
|
+
EventSubscription, EventSubscriptionFilter, CreateEventSubscriptionRequest,
|
68
|
+
UpdateEventSubscriptionRequest, SubscriptionStatus, EventType, DeliveryMethod
|
69
|
+
)
|
70
|
+
from .interact import (
|
71
|
+
ShellInteraction, AssignShellTaskRequest, ShellTaskResponse,
|
72
|
+
InteractionType, InteractionStatus
|
73
|
+
)
|
74
|
+
from .params import (
|
75
|
+
AcquisitionArtifact, EDiscoveryPattern, AcquisitionEvidence, DroneAnalyzer,
|
76
|
+
ArtifactType, ArtifactCategory, Platform
|
77
|
+
)
|
78
|
+
from .settings import (
|
79
|
+
BannerSettings, UpdateBannerSettingsRequest, BannerType, BannerPosition
|
80
|
+
)
|
81
|
+
from .endpoints import (
|
82
|
+
EndpointTag, CreateEndpointTagRequest, UpdateEndpointTagRequest,
|
83
|
+
EndpointTagFilter, TagType, TagScope
|
84
|
+
)
|
85
|
+
|
86
|
+
# TODO: Add imports when implementing other endpoints
|
87
|
+
# from .organizations import Organization, User, Role
|
88
|
+
# from .policies import Policy
|
89
|
+
# from .triage import TriageRule, TriageTag
|
90
|
+
# from .audit import AuditLog
|
91
|
+
|
92
|
+
__all__ = [
|
93
|
+
# Assets
|
94
|
+
"Asset",
|
95
|
+
"AssetDetail",
|
96
|
+
"AssetTask",
|
97
|
+
"AssetFilter",
|
98
|
+
"AssetTaskFilter",
|
99
|
+
|
100
|
+
# Cases
|
101
|
+
"Case",
|
102
|
+
"CaseActivity",
|
103
|
+
"CaseEndpoint",
|
104
|
+
"CaseTask",
|
105
|
+
"User",
|
106
|
+
"CaseFilter",
|
107
|
+
"CaseActivityFilter",
|
108
|
+
"CreateCaseRequest",
|
109
|
+
"UpdateCaseRequest",
|
110
|
+
"CaseStatus",
|
111
|
+
"CaseNote",
|
112
|
+
|
113
|
+
# Tasks
|
114
|
+
"Task",
|
115
|
+
"TaskFilter",
|
116
|
+
"TaskData",
|
117
|
+
"TaskConfig",
|
118
|
+
"DroneConfig",
|
119
|
+
"TaskStatus",
|
120
|
+
"TaskType",
|
121
|
+
|
122
|
+
# Acquisitions
|
123
|
+
"AcquisitionProfile",
|
124
|
+
"AcquisitionProfileDetails",
|
125
|
+
"AcquisitionFilter",
|
126
|
+
"AcquisitionTaskRequest",
|
127
|
+
"ImageAcquisitionTaskRequest",
|
128
|
+
"CreateAcquisitionProfileRequest",
|
129
|
+
"NetworkCaptureConfig",
|
130
|
+
"EDiscoveryPattern",
|
131
|
+
|
132
|
+
# Policies
|
133
|
+
"Policy",
|
134
|
+
"PolicyFilter",
|
135
|
+
"PolicyAssignment",
|
136
|
+
"PolicyExecution",
|
137
|
+
"PolicyRule",
|
138
|
+
"PolicyCondition",
|
139
|
+
"PolicyAction",
|
140
|
+
"CreatePolicyRequest",
|
141
|
+
"UpdatePolicyRequest",
|
142
|
+
"AssignPolicyRequest",
|
143
|
+
"PolicyType",
|
144
|
+
"PolicyStatus",
|
145
|
+
|
146
|
+
# Organizations
|
147
|
+
"Organization",
|
148
|
+
"OrganizationUser",
|
149
|
+
"OrganizationRole",
|
150
|
+
"OrganizationFilter",
|
151
|
+
"CreateOrganizationRequest",
|
152
|
+
"UpdateOrganizationRequest",
|
153
|
+
"AddUserToOrganizationRequest",
|
154
|
+
"OrganizationStatus",
|
155
|
+
"UserRole",
|
156
|
+
|
157
|
+
# Triage
|
158
|
+
"TriageRule",
|
159
|
+
"TriageTag",
|
160
|
+
"TriageProfile",
|
161
|
+
"TriageFilter",
|
162
|
+
"CreateTriageRuleRequest",
|
163
|
+
"UpdateTriageRuleRequest",
|
164
|
+
"CreateTriageTagRequest",
|
165
|
+
"CreateTriageProfileRequest",
|
166
|
+
"TriageStatus",
|
167
|
+
"TriageSeverity",
|
168
|
+
"TriageRuleType",
|
169
|
+
|
170
|
+
# Audit
|
171
|
+
"AuditLog",
|
172
|
+
"AuditFilter",
|
173
|
+
"AuditSummary",
|
174
|
+
"AuditUserActivity",
|
175
|
+
"AuditSystemEvent",
|
176
|
+
"AuditExportRequest",
|
177
|
+
"AuditRetentionPolicy",
|
178
|
+
"AuditLevel",
|
179
|
+
"AuditCategory",
|
180
|
+
"AuditAction",
|
181
|
+
"AuditLogsFilter",
|
182
|
+
|
183
|
+
# Baseline
|
184
|
+
"Baseline",
|
185
|
+
"BaselineProfile",
|
186
|
+
"BaselineComparison",
|
187
|
+
"BaselineChange",
|
188
|
+
"BaselineFilter",
|
189
|
+
"CreateBaselineRequest",
|
190
|
+
"UpdateBaselineRequest",
|
191
|
+
"CreateBaselineProfileRequest",
|
192
|
+
"CompareBaselineRequest",
|
193
|
+
"BaselineStatus",
|
194
|
+
"BaselineType",
|
195
|
+
"ComparisonStatus",
|
196
|
+
"ChangeType",
|
197
|
+
|
198
|
+
# Authentication
|
199
|
+
"AuthStatus",
|
200
|
+
"LoginRequest",
|
201
|
+
"LoginResponse",
|
202
|
+
|
203
|
+
# User Management
|
204
|
+
"UserManagementUser",
|
205
|
+
"CreateUserRequest",
|
206
|
+
"UpdateUserRequest",
|
207
|
+
"AIUser",
|
208
|
+
"CreateAIUserRequest",
|
209
|
+
"APIUser",
|
210
|
+
"CreateAPIUserRequest",
|
211
|
+
"UserFilter",
|
212
|
+
|
213
|
+
# Evidence
|
214
|
+
"EvidencePPC",
|
215
|
+
"EvidenceReportFileInfo",
|
216
|
+
"EvidenceReport",
|
217
|
+
|
218
|
+
# Auto Asset Tags
|
219
|
+
"AutoAssetTag",
|
220
|
+
"CreateAutoAssetTagRequest",
|
221
|
+
"UpdateAutoAssetTagRequest",
|
222
|
+
"StartTaggingRequest",
|
223
|
+
"TaggingResult",
|
224
|
+
"AutoAssetTagFilter",
|
225
|
+
|
226
|
+
# Evidences/Repositories
|
227
|
+
"EvidenceRepository",
|
228
|
+
"AmazonS3Repository",
|
229
|
+
"AzureStorageRepository",
|
230
|
+
"FTPSRepository",
|
231
|
+
"SFTPRepository",
|
232
|
+
"SMBRepository",
|
233
|
+
"RepositoryFilter",
|
234
|
+
"CreateAmazonS3RepositoryRequest",
|
235
|
+
"UpdateAmazonS3RepositoryRequest",
|
236
|
+
"CreateAzureStorageRepositoryRequest",
|
237
|
+
"UpdateAzureStorageRepositoryRequest",
|
238
|
+
"CreateFTPSRepositoryRequest",
|
239
|
+
"UpdateFTPSRepositoryRequest",
|
240
|
+
"CreateSFTPRepositoryRequest",
|
241
|
+
"UpdateSFTPRepositoryRequest",
|
242
|
+
"CreateSMBRepositoryRequest",
|
243
|
+
"UpdateSMBRepositoryRequest",
|
244
|
+
"ValidateRepositoryRequest",
|
245
|
+
"ValidationResult",
|
246
|
+
|
247
|
+
# Event Subscription
|
248
|
+
"EventSubscription",
|
249
|
+
"EventSubscriptionFilter",
|
250
|
+
"CreateEventSubscriptionRequest",
|
251
|
+
"UpdateEventSubscriptionRequest",
|
252
|
+
"SubscriptionStatus",
|
253
|
+
"EventType",
|
254
|
+
"DeliveryMethod",
|
255
|
+
|
256
|
+
# Interact
|
257
|
+
"ShellInteraction",
|
258
|
+
"AssignShellTaskRequest",
|
259
|
+
"ShellTaskResponse",
|
260
|
+
"InteractionType",
|
261
|
+
"InteractionStatus",
|
262
|
+
|
263
|
+
# Params
|
264
|
+
"AcquisitionArtifact",
|
265
|
+
"EDiscoveryPattern",
|
266
|
+
"AcquisitionEvidence",
|
267
|
+
"DroneAnalyzer",
|
268
|
+
"ArtifactType",
|
269
|
+
"ArtifactCategory",
|
270
|
+
"Platform",
|
271
|
+
|
272
|
+
# Settings
|
273
|
+
"BannerSettings",
|
274
|
+
"UpdateBannerSettingsRequest",
|
275
|
+
"BannerType",
|
276
|
+
"BannerPosition",
|
277
|
+
|
278
|
+
# Endpoints
|
279
|
+
"EndpointTag",
|
280
|
+
"CreateEndpointTagRequest",
|
281
|
+
"UpdateEndpointTagRequest",
|
282
|
+
"EndpointTagFilter",
|
283
|
+
"TagType",
|
284
|
+
"TagScope",
|
285
|
+
]
|
@@ -0,0 +1,251 @@
|
|
1
|
+
"""
|
2
|
+
Acquisition-related data models for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import List, Optional, Dict, Any
|
6
|
+
from datetime import datetime
|
7
|
+
|
8
|
+
from ..base import AIRBaseModel, Filter
|
9
|
+
|
10
|
+
|
11
|
+
class NetworkCaptureConfig(AIRBaseModel):
|
12
|
+
"""Network capture configuration."""
|
13
|
+
|
14
|
+
enabled: bool = False
|
15
|
+
duration: int = 60
|
16
|
+
pcap: Dict[str, bool] = {"enabled": False}
|
17
|
+
network_flow: Dict[str, bool] = {"enabled": False}
|
18
|
+
|
19
|
+
|
20
|
+
class EDiscoveryPattern(AIRBaseModel):
|
21
|
+
"""eDiscovery pattern model."""
|
22
|
+
|
23
|
+
pattern: str
|
24
|
+
category: str
|
25
|
+
|
26
|
+
|
27
|
+
class SaveLocationConfig(AIRBaseModel):
|
28
|
+
"""Save location configuration."""
|
29
|
+
|
30
|
+
location: str
|
31
|
+
use_most_free_volume: bool = False
|
32
|
+
repository_id: Optional[str] = None
|
33
|
+
path: str
|
34
|
+
volume: Optional[str] = None
|
35
|
+
tmp: str
|
36
|
+
direct_collection: bool = False
|
37
|
+
|
38
|
+
|
39
|
+
class TaskConfig(AIRBaseModel):
|
40
|
+
"""Task configuration."""
|
41
|
+
|
42
|
+
choice: str
|
43
|
+
save_to: Dict[str, SaveLocationConfig]
|
44
|
+
cpu: Dict[str, int] = {"limit": 50}
|
45
|
+
compression: Dict[str, Any] = {
|
46
|
+
"enabled": False,
|
47
|
+
"encryption": {"enabled": False, "password": ""}
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
class DroneConfig(AIRBaseModel):
|
52
|
+
"""Drone configuration."""
|
53
|
+
|
54
|
+
auto_pilot: bool = False
|
55
|
+
enabled: bool = False
|
56
|
+
analyzers: List[str] = []
|
57
|
+
keywords: List[str] = []
|
58
|
+
|
59
|
+
|
60
|
+
class FilterConfig(AIRBaseModel):
|
61
|
+
"""Filter configuration for acquisition tasks - matches API specification exactly."""
|
62
|
+
|
63
|
+
# Basic search and identification
|
64
|
+
search_term: Optional[str] = None
|
65
|
+
name: Optional[str] = None
|
66
|
+
ip_address: Optional[str] = None
|
67
|
+
group_id: Optional[str] = None
|
68
|
+
group_full_path: Optional[str] = None
|
69
|
+
label: Optional[str] = None # NEW - Missing from API spec
|
70
|
+
|
71
|
+
# Status filters (arrays as per API)
|
72
|
+
managed_status: List[str] = []
|
73
|
+
isolation_status: List[str] = []
|
74
|
+
platform: List[str] = []
|
75
|
+
issue: Optional[str] = None # API expects string, not array
|
76
|
+
online_status: List[str] = []
|
77
|
+
|
78
|
+
# Tags and policies
|
79
|
+
tags: List[str] = []
|
80
|
+
version: Optional[str] = None
|
81
|
+
policy: Optional[str] = None
|
82
|
+
|
83
|
+
# Endpoint targeting
|
84
|
+
included_endpoint_ids: List[str] = []
|
85
|
+
excluded_endpoint_ids: List[str] = []
|
86
|
+
|
87
|
+
# Organization and case
|
88
|
+
organization_ids: List[int] = [] # Required by API
|
89
|
+
case_id: Optional[str] = None # NEW - Missing from API spec
|
90
|
+
|
91
|
+
# Date/time filters
|
92
|
+
last_seen: Optional[str] = None # NEW - Missing from API spec (ISO 8601 format)
|
93
|
+
|
94
|
+
# Cloud provider filters
|
95
|
+
aws_regions: Optional[List[str]] = None # NEW - Missing from API spec
|
96
|
+
azure_regions: Optional[List[str]] = None # NEW - Missing from API spec
|
97
|
+
|
98
|
+
|
99
|
+
class AcquisitionProfilePlatformDetails(AIRBaseModel):
|
100
|
+
"""Platform-specific acquisition profile details."""
|
101
|
+
|
102
|
+
evidence_list: List[str] = []
|
103
|
+
artifact_list: Optional[List[str]] = None
|
104
|
+
custom_content_profiles: List[Any] = []
|
105
|
+
network_capture: Optional[NetworkCaptureConfig] = None
|
106
|
+
|
107
|
+
|
108
|
+
class AcquisitionProfile(AIRBaseModel):
|
109
|
+
"""Acquisition profile model."""
|
110
|
+
|
111
|
+
id: str
|
112
|
+
name: str
|
113
|
+
organization_ids: List[int] = []
|
114
|
+
created_at: Optional[datetime] = None
|
115
|
+
updated_at: Optional[datetime] = None
|
116
|
+
created_by: str
|
117
|
+
deletable: bool = True
|
118
|
+
artifacts: List[str] = [] # Added for test compatibility
|
119
|
+
|
120
|
+
# Additional fields from API response
|
121
|
+
average_time: Optional[int] = None
|
122
|
+
last_used_at: Optional[datetime] = None
|
123
|
+
last_used_by: Optional[str] = None
|
124
|
+
has_event_log_records_evidence: Optional[bool] = None
|
125
|
+
|
126
|
+
|
127
|
+
class AcquisitionProfileDetails(AcquisitionProfile):
|
128
|
+
"""Detailed acquisition profile with platform configurations."""
|
129
|
+
|
130
|
+
windows: Optional[AcquisitionProfilePlatformDetails] = None
|
131
|
+
linux: Optional[AcquisitionProfilePlatformDetails] = None
|
132
|
+
macos: Optional[AcquisitionProfilePlatformDetails] = None
|
133
|
+
aix: Optional[AcquisitionProfilePlatformDetails] = None
|
134
|
+
e_discovery: Optional[Dict[str, List[EDiscoveryPattern]]] = None
|
135
|
+
settings: Optional[Dict[str, Any]] = None # Added for test compatibility
|
136
|
+
|
137
|
+
|
138
|
+
class EndpointVolumeConfig(AIRBaseModel):
|
139
|
+
"""Endpoint and volume configuration for disk image acquisition."""
|
140
|
+
|
141
|
+
endpoint_id: str
|
142
|
+
volumes: List[str] = []
|
143
|
+
|
144
|
+
|
145
|
+
class DiskImageOptions(AIRBaseModel):
|
146
|
+
"""Disk image options."""
|
147
|
+
|
148
|
+
chunk_size: int
|
149
|
+
chunk_count: int
|
150
|
+
start_offset: int
|
151
|
+
endpoints: List[EndpointVolumeConfig] = []
|
152
|
+
|
153
|
+
|
154
|
+
class AcquisitionTaskRequest(AIRBaseModel):
|
155
|
+
"""Acquisition task request."""
|
156
|
+
|
157
|
+
case_id: str
|
158
|
+
drone_config: DroneConfig
|
159
|
+
task_config: TaskConfig
|
160
|
+
acquisition_profile_id: str
|
161
|
+
filter: FilterConfig
|
162
|
+
|
163
|
+
|
164
|
+
class ImageAcquisitionTaskRequest(AIRBaseModel):
|
165
|
+
"""Image acquisition task request."""
|
166
|
+
|
167
|
+
case_id: Optional[str] = None
|
168
|
+
task_config: TaskConfig
|
169
|
+
disk_image_options: DiskImageOptions
|
170
|
+
filter: FilterConfig
|
171
|
+
|
172
|
+
|
173
|
+
class CreateAcquisitionProfileRequest(AIRBaseModel):
|
174
|
+
"""Create acquisition profile request."""
|
175
|
+
|
176
|
+
name: str
|
177
|
+
organization_ids: List[int] = []
|
178
|
+
windows: Optional[AcquisitionProfilePlatformDetails] = None
|
179
|
+
linux: Optional[AcquisitionProfilePlatformDetails] = None
|
180
|
+
macos: Optional[AcquisitionProfilePlatformDetails] = None
|
181
|
+
aix: Optional[AcquisitionProfilePlatformDetails] = None
|
182
|
+
e_discovery: Optional[Dict[str, List[EDiscoveryPattern]]] = None
|
183
|
+
description: Optional[str] = None # Added for test compatibility
|
184
|
+
artifacts: List[str] = [] # Added for test compatibility
|
185
|
+
|
186
|
+
|
187
|
+
# Simplified request models for testing
|
188
|
+
class CreateAcquisitionRequest(AIRBaseModel):
|
189
|
+
"""Simplified acquisition request for testing."""
|
190
|
+
|
191
|
+
filter: Dict[str, Any]
|
192
|
+
profileId: str
|
193
|
+
name: Optional[str] = None
|
194
|
+
|
195
|
+
|
196
|
+
class CreateImageAcquisitionRequest(AIRBaseModel):
|
197
|
+
"""Simplified image acquisition request for testing."""
|
198
|
+
|
199
|
+
filter: Dict[str, Any]
|
200
|
+
name: Optional[str] = None
|
201
|
+
fullDisk: bool = False
|
202
|
+
repository_id: Optional[str] = None
|
203
|
+
volumes: Optional[List[str]] = None
|
204
|
+
|
205
|
+
|
206
|
+
class AcquisitionFilter(Filter):
|
207
|
+
"""Filter for acquisition profile queries - matches API specification exactly."""
|
208
|
+
|
209
|
+
# Search and identification
|
210
|
+
search_term: Optional[str] = None
|
211
|
+
name: Optional[str] = None
|
212
|
+
|
213
|
+
# Organization parameters
|
214
|
+
organization_ids: Optional[List[int]] = None # Required by API
|
215
|
+
all_organizations: Optional[bool] = None # true/false
|
216
|
+
|
217
|
+
# Profile metadata (for backwards compatibility)
|
218
|
+
created_by: Optional[str] = None
|
219
|
+
deletable: Optional[bool] = None
|
220
|
+
|
221
|
+
def to_params(self) -> Dict[str, Any]:
|
222
|
+
"""Convert filter to API parameters."""
|
223
|
+
params = {}
|
224
|
+
|
225
|
+
# Pagination parameters (not in filter namespace) - only if set
|
226
|
+
if self.page_number is not None:
|
227
|
+
params["pageNumber"] = self.page_number
|
228
|
+
if self.page_size is not None:
|
229
|
+
params["pageSize"] = self.page_size
|
230
|
+
if self.sort_by is not None:
|
231
|
+
params["sortBy"] = self.sort_by
|
232
|
+
if self.sort_type is not None:
|
233
|
+
params["sortType"] = self.sort_type
|
234
|
+
|
235
|
+
# Add acquisition-specific filter parameters (use API field names)
|
236
|
+
if self.search_term is not None:
|
237
|
+
params["filter[searchTerm]"] = self.search_term
|
238
|
+
if self.name is not None:
|
239
|
+
params["filter[name]"] = self.name
|
240
|
+
if self.organization_ids is not None:
|
241
|
+
params["filter[organizationIds]"] = ",".join(map(str, self.organization_ids))
|
242
|
+
if self.all_organizations is not None:
|
243
|
+
params["filter[allOrganizations]"] = "true" if self.all_organizations else "false"
|
244
|
+
|
245
|
+
# Backwards compatibility fields (not in API spec but may be used)
|
246
|
+
if self.created_by is not None:
|
247
|
+
params["filter[createdBy]"] = self.created_by
|
248
|
+
if self.deletable is not None:
|
249
|
+
params["filter[deletable]"] = "true" if self.deletable else "false"
|
250
|
+
|
251
|
+
return params
|