binalyze-air-sdk 1.0.2__py3-none-any.whl → 1.0.3__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 -77
- binalyze_air/apis/__init__.py +67 -27
- binalyze_air/apis/acquisitions.py +107 -0
- binalyze_air/apis/api_tokens.py +49 -0
- binalyze_air/apis/assets.py +161 -0
- binalyze_air/apis/audit_logs.py +26 -0
- binalyze_air/apis/{authentication.py → auth.py} +29 -27
- binalyze_air/apis/auto_asset_tags.py +79 -75
- binalyze_air/apis/backup.py +177 -0
- binalyze_air/apis/baseline.py +46 -0
- binalyze_air/apis/cases.py +225 -0
- binalyze_air/apis/cloud_forensics.py +116 -0
- binalyze_air/apis/event_subscription.py +96 -96
- binalyze_air/apis/evidence.py +249 -53
- binalyze_air/apis/interact.py +153 -36
- binalyze_air/apis/investigation_hub.py +234 -0
- binalyze_air/apis/license.py +104 -0
- binalyze_air/apis/logger.py +83 -0
- binalyze_air/apis/multipart_upload.py +201 -0
- binalyze_air/apis/notifications.py +115 -0
- binalyze_air/apis/organizations.py +267 -0
- binalyze_air/apis/params.py +44 -39
- binalyze_air/apis/policies.py +186 -0
- binalyze_air/apis/preset_filters.py +79 -0
- binalyze_air/apis/recent_activities.py +71 -0
- binalyze_air/apis/relay_server.py +104 -0
- binalyze_air/apis/settings.py +395 -27
- binalyze_air/apis/tasks.py +80 -0
- binalyze_air/apis/triage.py +197 -0
- binalyze_air/apis/user_management.py +183 -74
- binalyze_air/apis/webhook_executions.py +50 -0
- binalyze_air/apis/webhooks.py +322 -230
- binalyze_air/base.py +207 -133
- binalyze_air/client.py +217 -1337
- binalyze_air/commands/__init__.py +175 -145
- binalyze_air/commands/acquisitions.py +661 -387
- binalyze_air/commands/api_tokens.py +55 -0
- binalyze_air/commands/assets.py +324 -362
- binalyze_air/commands/{authentication.py → auth.py} +36 -36
- binalyze_air/commands/auto_asset_tags.py +230 -230
- binalyze_air/commands/backup.py +47 -0
- binalyze_air/commands/baseline.py +32 -396
- binalyze_air/commands/cases.py +609 -602
- binalyze_air/commands/cloud_forensics.py +88 -0
- binalyze_air/commands/event_subscription.py +101 -101
- binalyze_air/commands/evidences.py +918 -988
- binalyze_air/commands/interact.py +172 -58
- binalyze_air/commands/investigation_hub.py +315 -0
- binalyze_air/commands/license.py +183 -0
- binalyze_air/commands/logger.py +126 -0
- binalyze_air/commands/multipart_upload.py +363 -0
- binalyze_air/commands/notifications.py +45 -0
- binalyze_air/commands/organizations.py +200 -221
- binalyze_air/commands/policies.py +175 -203
- binalyze_air/commands/preset_filters.py +55 -0
- binalyze_air/commands/recent_activities.py +32 -0
- binalyze_air/commands/relay_server.py +144 -0
- binalyze_air/commands/settings.py +431 -29
- binalyze_air/commands/tasks.py +95 -56
- binalyze_air/commands/triage.py +224 -360
- binalyze_air/commands/user_management.py +351 -126
- binalyze_air/commands/webhook_executions.py +77 -0
- binalyze_air/config.py +244 -244
- binalyze_air/exceptions.py +49 -49
- binalyze_air/http_client.py +426 -305
- binalyze_air/models/__init__.py +287 -285
- binalyze_air/models/acquisitions.py +365 -250
- binalyze_air/models/api_tokens.py +73 -0
- binalyze_air/models/assets.py +438 -438
- binalyze_air/models/audit.py +247 -272
- binalyze_air/models/audit_logs.py +14 -0
- binalyze_air/models/{authentication.py → auth.py} +69 -69
- binalyze_air/models/auto_asset_tags.py +227 -116
- binalyze_air/models/backup.py +138 -0
- binalyze_air/models/baseline.py +231 -231
- binalyze_air/models/cases.py +275 -275
- binalyze_air/models/cloud_forensics.py +145 -0
- binalyze_air/models/event_subscription.py +170 -171
- binalyze_air/models/evidence.py +65 -65
- binalyze_air/models/evidences.py +367 -348
- binalyze_air/models/interact.py +266 -135
- binalyze_air/models/investigation_hub.py +265 -0
- binalyze_air/models/license.py +150 -0
- binalyze_air/models/logger.py +83 -0
- binalyze_air/models/multipart_upload.py +352 -0
- binalyze_air/models/notifications.py +138 -0
- binalyze_air/models/organizations.py +293 -293
- binalyze_air/models/params.py +153 -127
- binalyze_air/models/policies.py +260 -249
- binalyze_air/models/preset_filters.py +79 -0
- binalyze_air/models/recent_activities.py +70 -0
- binalyze_air/models/relay_server.py +121 -0
- binalyze_air/models/settings.py +538 -84
- binalyze_air/models/tasks.py +215 -149
- binalyze_air/models/triage.py +141 -142
- binalyze_air/models/user_management.py +200 -97
- binalyze_air/models/webhook_executions.py +33 -0
- binalyze_air/queries/__init__.py +121 -133
- binalyze_air/queries/acquisitions.py +155 -155
- binalyze_air/queries/api_tokens.py +46 -0
- binalyze_air/queries/assets.py +186 -105
- binalyze_air/queries/audit.py +400 -416
- binalyze_air/queries/{authentication.py → auth.py} +55 -55
- binalyze_air/queries/auto_asset_tags.py +59 -59
- binalyze_air/queries/backup.py +66 -0
- binalyze_air/queries/baseline.py +21 -185
- binalyze_air/queries/cases.py +292 -292
- binalyze_air/queries/cloud_forensics.py +137 -0
- binalyze_air/queries/event_subscription.py +54 -54
- binalyze_air/queries/evidence.py +139 -139
- binalyze_air/queries/evidences.py +279 -279
- binalyze_air/queries/interact.py +140 -28
- binalyze_air/queries/investigation_hub.py +329 -0
- binalyze_air/queries/license.py +85 -0
- binalyze_air/queries/logger.py +58 -0
- binalyze_air/queries/multipart_upload.py +180 -0
- binalyze_air/queries/notifications.py +71 -0
- binalyze_air/queries/organizations.py +222 -222
- binalyze_air/queries/params.py +154 -115
- binalyze_air/queries/policies.py +149 -149
- binalyze_air/queries/preset_filters.py +60 -0
- binalyze_air/queries/recent_activities.py +44 -0
- binalyze_air/queries/relay_server.py +42 -0
- binalyze_air/queries/settings.py +533 -20
- binalyze_air/queries/tasks.py +125 -81
- binalyze_air/queries/triage.py +230 -230
- binalyze_air/queries/user_management.py +193 -83
- binalyze_air/queries/webhook_executions.py +39 -0
- binalyze_air_sdk-1.0.3.dist-info/METADATA +752 -0
- binalyze_air_sdk-1.0.3.dist-info/RECORD +132 -0
- {binalyze_air_sdk-1.0.2.dist-info → binalyze_air_sdk-1.0.3.dist-info}/WHEEL +1 -1
- binalyze_air/apis/endpoints.py +0 -22
- binalyze_air/apis/evidences.py +0 -216
- binalyze_air/apis/users.py +0 -68
- binalyze_air/commands/users.py +0 -101
- binalyze_air/models/endpoints.py +0 -76
- binalyze_air/models/users.py +0 -82
- binalyze_air/queries/endpoints.py +0 -25
- binalyze_air/queries/users.py +0 -69
- binalyze_air_sdk-1.0.2.dist-info/METADATA +0 -706
- binalyze_air_sdk-1.0.2.dist-info/RECORD +0 -82
- {binalyze_air_sdk-1.0.2.dist-info → binalyze_air_sdk-1.0.3.dist-info}/top_level.txt +0 -0
binalyze_air/models/baseline.py
CHANGED
@@ -1,232 +1,232 @@
|
|
1
|
-
"""
|
2
|
-
Baseline-related data models for the Binalyze AIR SDK.
|
3
|
-
"""
|
4
|
-
|
5
|
-
from typing import List, Optional, Dict, Any
|
6
|
-
from datetime import datetime
|
7
|
-
from enum import Enum
|
8
|
-
from pydantic import Field
|
9
|
-
|
10
|
-
from ..base import AIRBaseModel, Filter
|
11
|
-
|
12
|
-
|
13
|
-
class BaselineStatus(str, Enum):
|
14
|
-
"""Baseline status."""
|
15
|
-
ACTIVE = "active"
|
16
|
-
INACTIVE = "inactive"
|
17
|
-
CREATING = "creating"
|
18
|
-
FAILED = "failed"
|
19
|
-
|
20
|
-
|
21
|
-
class BaselineType(str, Enum):
|
22
|
-
"""Baseline type."""
|
23
|
-
SYSTEM = "system"
|
24
|
-
SECURITY = "security"
|
25
|
-
CUSTOM = "custom"
|
26
|
-
COMPLIANCE = "compliance"
|
27
|
-
|
28
|
-
|
29
|
-
class ComparisonStatus(str, Enum):
|
30
|
-
"""Comparison status."""
|
31
|
-
PENDING = "pending"
|
32
|
-
RUNNING = "running"
|
33
|
-
COMPLETED = "completed"
|
34
|
-
FAILED = "failed"
|
35
|
-
|
36
|
-
|
37
|
-
class ChangeType(str, Enum):
|
38
|
-
"""Type of change detected."""
|
39
|
-
ADDED = "added"
|
40
|
-
REMOVED = "removed"
|
41
|
-
MODIFIED = "modified"
|
42
|
-
MOVED = "moved"
|
43
|
-
|
44
|
-
|
45
|
-
class BaselineItem(AIRBaseModel):
|
46
|
-
"""Individual baseline item."""
|
47
|
-
|
48
|
-
id: str
|
49
|
-
path: str
|
50
|
-
item_type: str # file, registry, service, process, etc.
|
51
|
-
hash: Optional[str] = None
|
52
|
-
size: Optional[int] = None
|
53
|
-
permissions: Optional[str] = None
|
54
|
-
owner: Optional[str] = None
|
55
|
-
created_at: Optional[datetime] = None
|
56
|
-
modified_at: Optional[datetime] = None
|
57
|
-
attributes: Dict[str, Any] = {}
|
58
|
-
metadata: Dict[str, Any] = {}
|
59
|
-
|
60
|
-
|
61
|
-
class Baseline(AIRBaseModel):
|
62
|
-
"""Baseline model."""
|
63
|
-
|
64
|
-
id: str = Field(alias="_id")
|
65
|
-
name: str
|
66
|
-
description: Optional[str] = None
|
67
|
-
type: BaselineType
|
68
|
-
status: BaselineStatus = BaselineStatus.CREATING
|
69
|
-
endpoint_id: str = Field(alias="endpointId")
|
70
|
-
endpoint_name: str = Field(alias="endpointName")
|
71
|
-
organization_id: int = Field(default=0, alias="organizationId")
|
72
|
-
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
73
|
-
updated_at: Optional[datetime] = Field(default=None, alias="updatedAt")
|
74
|
-
created_by: str = Field(alias="createdBy")
|
75
|
-
item_count: int = Field(default=0, alias="itemCount")
|
76
|
-
file_count: int = Field(default=0, alias="fileCount")
|
77
|
-
registry_count: int = Field(default=0, alias="registryCount")
|
78
|
-
service_count: int = Field(default=0, alias="serviceCount")
|
79
|
-
process_count: int = Field(default=0, alias="processCount")
|
80
|
-
network_connection_count: int = Field(default=0, alias="networkConnectionCount")
|
81
|
-
tags: List[str] = []
|
82
|
-
profile_id: Optional[str] = Field(default=None, alias="profileId")
|
83
|
-
profile_name: Optional[str] = Field(default=None, alias="profileName")
|
84
|
-
last_comparison: Optional[datetime] = Field(default=None, alias="lastComparison")
|
85
|
-
comparison_count: int = Field(default=0, alias="comparisonCount")
|
86
|
-
|
87
|
-
|
88
|
-
class BaselineProfile(AIRBaseModel):
|
89
|
-
"""Baseline profile model."""
|
90
|
-
|
91
|
-
id: str = Field(alias="_id")
|
92
|
-
name: str
|
93
|
-
description: Optional[str] = None
|
94
|
-
organization_id: int = Field(default=0, alias="organizationId")
|
95
|
-
include_files: bool = Field(default=True, alias="includeFiles")
|
96
|
-
include_registry: bool = Field(default=True, alias="includeRegistry")
|
97
|
-
include_services: bool = Field(default=True, alias="includeServices")
|
98
|
-
include_processes: bool = Field(default=False, alias="includeProcesses")
|
99
|
-
include_network: bool = Field(default=False, alias="includeNetwork")
|
100
|
-
file_patterns: List[str] = Field(default=[], alias="filePatterns")
|
101
|
-
exclude_patterns: List[str] = Field(default=[], alias="excludePatterns")
|
102
|
-
registry_keys: List[str] = Field(default=[], alias="registryKeys")
|
103
|
-
custom_checks: List[Dict[str, Any]] = Field(default=[], alias="customChecks")
|
104
|
-
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
105
|
-
updated_at: Optional[datetime] = Field(default=None, alias="updatedAt")
|
106
|
-
created_by: str = Field(alias="createdBy")
|
107
|
-
is_default: bool = Field(default=False, alias="isDefault")
|
108
|
-
usage_count: int = Field(default=0, alias="usageCount")
|
109
|
-
|
110
|
-
|
111
|
-
class BaselineChange(AIRBaseModel):
|
112
|
-
"""Baseline change detection model."""
|
113
|
-
|
114
|
-
id: str = Field(alias="_id")
|
115
|
-
comparison_id: str = Field(alias="comparisonId")
|
116
|
-
change_type: ChangeType = Field(alias="changeType")
|
117
|
-
item_type: str = Field(alias="itemType")
|
118
|
-
path: str
|
119
|
-
old_value: Optional[Dict[str, Any]] = Field(default=None, alias="oldValue")
|
120
|
-
new_value: Optional[Dict[str, Any]] = Field(default=None, alias="newValue")
|
121
|
-
severity: str = "medium" # low, medium, high, critical
|
122
|
-
category: str
|
123
|
-
description: str
|
124
|
-
detected_at: datetime = Field(alias="detectedAt")
|
125
|
-
risk_score: float = Field(default=0.0, alias="riskScore")
|
126
|
-
|
127
|
-
|
128
|
-
class BaselineComparison(AIRBaseModel):
|
129
|
-
"""Baseline comparison result model."""
|
130
|
-
|
131
|
-
id: str = Field(alias="_id")
|
132
|
-
baseline_id: str = Field(alias="baselineId")
|
133
|
-
baseline_name: str = Field(alias="baselineName")
|
134
|
-
endpoint_id: str = Field(alias="endpointId")
|
135
|
-
endpoint_name: str = Field(alias="endpointName")
|
136
|
-
status: ComparisonStatus
|
137
|
-
started_at: Optional[datetime] = Field(default=None, alias="startedAt")
|
138
|
-
completed_at: Optional[datetime] = Field(default=None, alias="completedAt")
|
139
|
-
duration: Optional[int] = None # seconds
|
140
|
-
total_changes: int = Field(default=0, alias="totalChanges")
|
141
|
-
added_items: int = Field(default=0, alias="addedItems")
|
142
|
-
removed_items: int = Field(default=0, alias="removedItems")
|
143
|
-
modified_items: int = Field(default=0, alias="modifiedItems")
|
144
|
-
moved_items: int = Field(default=0, alias="movedItems")
|
145
|
-
high_risk_changes: int = Field(default=0, alias="highRiskChanges")
|
146
|
-
medium_risk_changes: int = Field(default=0, alias="mediumRiskChanges")
|
147
|
-
low_risk_changes: int = Field(default=0, alias="lowRiskChanges")
|
148
|
-
changes: List[BaselineChange] = []
|
149
|
-
organization_id: int = Field(default=0, alias="organizationId")
|
150
|
-
triggered_by: str = Field(alias="triggeredBy")
|
151
|
-
error_message: Optional[str] = Field(default=None, alias="errorMessage")
|
152
|
-
|
153
|
-
|
154
|
-
class BaselineSchedule(AIRBaseModel):
|
155
|
-
"""Baseline comparison schedule model."""
|
156
|
-
|
157
|
-
id: str = Field(alias="_id")
|
158
|
-
baseline_id: str = Field(alias="baselineId")
|
159
|
-
name: str
|
160
|
-
enabled: bool = True
|
161
|
-
frequency: str # daily, weekly, monthly
|
162
|
-
time_of_day: str = Field(alias="timeOfDay") # HH:MM format
|
163
|
-
day_of_week: Optional[int] = Field(default=None, alias="dayOfWeek") # 0-6, Monday=0
|
164
|
-
day_of_month: Optional[int] = Field(default=None, alias="dayOfMonth") # 1-31
|
165
|
-
next_run: Optional[datetime] = Field(default=None, alias="nextRun")
|
166
|
-
last_run: Optional[datetime] = Field(default=None, alias="lastRun")
|
167
|
-
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
168
|
-
created_by: str = Field(alias="createdBy")
|
169
|
-
notification_enabled: bool = Field(default=True, alias="notificationEnabled")
|
170
|
-
notification_threshold: int = Field(default=10, alias="notificationThreshold") # minimum changes to notify
|
171
|
-
|
172
|
-
|
173
|
-
class BaselineFilter(Filter):
|
174
|
-
"""Filter for baseline queries."""
|
175
|
-
|
176
|
-
name: Optional[str] = None
|
177
|
-
type: Optional[List[BaselineType]] = None
|
178
|
-
status: Optional[List[BaselineStatus]] = None
|
179
|
-
endpoint_id: Optional[str] = None
|
180
|
-
endpoint_name: Optional[str] = None
|
181
|
-
created_by: Optional[str] = None
|
182
|
-
tags: Optional[List[str]] = None
|
183
|
-
profile_id: Optional[str] = None
|
184
|
-
has_recent_comparison: Optional[bool] = None
|
185
|
-
|
186
|
-
|
187
|
-
class CreateBaselineRequest(AIRBaseModel):
|
188
|
-
"""Request model for creating a baseline."""
|
189
|
-
|
190
|
-
name: str
|
191
|
-
description: Optional[str] = None
|
192
|
-
type: BaselineType = BaselineType.SYSTEM
|
193
|
-
endpoint_id: str
|
194
|
-
profile_id: Optional[str] = None
|
195
|
-
tags: List[str] = []
|
196
|
-
organization_id: int = 0
|
197
|
-
|
198
|
-
|
199
|
-
class UpdateBaselineRequest(AIRBaseModel):
|
200
|
-
"""Request model for updating a baseline."""
|
201
|
-
|
202
|
-
name: Optional[str] = None
|
203
|
-
description: Optional[str] = None
|
204
|
-
status: Optional[BaselineStatus] = None
|
205
|
-
tags: Optional[List[str]] = None
|
206
|
-
|
207
|
-
|
208
|
-
class CreateBaselineProfileRequest(AIRBaseModel):
|
209
|
-
"""Request model for creating a baseline profile."""
|
210
|
-
|
211
|
-
name: str
|
212
|
-
description: Optional[str] = None
|
213
|
-
include_files: bool = True
|
214
|
-
include_registry: bool = True
|
215
|
-
include_services: bool = True
|
216
|
-
include_processes: bool = False
|
217
|
-
include_network: bool = False
|
218
|
-
file_patterns: List[str] = []
|
219
|
-
exclude_patterns: List[str] = []
|
220
|
-
registry_keys: List[str] = []
|
221
|
-
custom_checks: List[Dict[str, Any]] = []
|
222
|
-
organization_id: int = 0
|
223
|
-
|
224
|
-
|
225
|
-
class CompareBaselineRequest(AIRBaseModel):
|
226
|
-
"""Request model for comparing baselines."""
|
227
|
-
|
228
|
-
baseline_id: str
|
229
|
-
endpoint_ids: Optional[List[str]] = None # If None, use baseline's endpoint
|
230
|
-
profile_id: Optional[str] = None # Override baseline's profile
|
231
|
-
include_low_risk: bool = True
|
1
|
+
"""
|
2
|
+
Baseline-related data models for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import List, Optional, Dict, Any
|
6
|
+
from datetime import datetime
|
7
|
+
from enum import Enum
|
8
|
+
from pydantic import Field
|
9
|
+
|
10
|
+
from ..base import AIRBaseModel, Filter
|
11
|
+
|
12
|
+
|
13
|
+
class BaselineStatus(str, Enum):
|
14
|
+
"""Baseline status."""
|
15
|
+
ACTIVE = "active"
|
16
|
+
INACTIVE = "inactive"
|
17
|
+
CREATING = "creating"
|
18
|
+
FAILED = "failed"
|
19
|
+
|
20
|
+
|
21
|
+
class BaselineType(str, Enum):
|
22
|
+
"""Baseline type."""
|
23
|
+
SYSTEM = "system"
|
24
|
+
SECURITY = "security"
|
25
|
+
CUSTOM = "custom"
|
26
|
+
COMPLIANCE = "compliance"
|
27
|
+
|
28
|
+
|
29
|
+
class ComparisonStatus(str, Enum):
|
30
|
+
"""Comparison status."""
|
31
|
+
PENDING = "pending"
|
32
|
+
RUNNING = "running"
|
33
|
+
COMPLETED = "completed"
|
34
|
+
FAILED = "failed"
|
35
|
+
|
36
|
+
|
37
|
+
class ChangeType(str, Enum):
|
38
|
+
"""Type of change detected."""
|
39
|
+
ADDED = "added"
|
40
|
+
REMOVED = "removed"
|
41
|
+
MODIFIED = "modified"
|
42
|
+
MOVED = "moved"
|
43
|
+
|
44
|
+
|
45
|
+
class BaselineItem(AIRBaseModel):
|
46
|
+
"""Individual baseline item."""
|
47
|
+
|
48
|
+
id: str
|
49
|
+
path: str
|
50
|
+
item_type: str # file, registry, service, process, etc.
|
51
|
+
hash: Optional[str] = None
|
52
|
+
size: Optional[int] = None
|
53
|
+
permissions: Optional[str] = None
|
54
|
+
owner: Optional[str] = None
|
55
|
+
created_at: Optional[datetime] = None
|
56
|
+
modified_at: Optional[datetime] = None
|
57
|
+
attributes: Dict[str, Any] = {}
|
58
|
+
metadata: Dict[str, Any] = {}
|
59
|
+
|
60
|
+
|
61
|
+
class Baseline(AIRBaseModel):
|
62
|
+
"""Baseline model."""
|
63
|
+
|
64
|
+
id: str = Field(alias="_id")
|
65
|
+
name: str
|
66
|
+
description: Optional[str] = None
|
67
|
+
type: BaselineType
|
68
|
+
status: BaselineStatus = BaselineStatus.CREATING
|
69
|
+
endpoint_id: str = Field(alias="endpointId")
|
70
|
+
endpoint_name: str = Field(alias="endpointName")
|
71
|
+
organization_id: int = Field(default=0, alias="organizationId")
|
72
|
+
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
73
|
+
updated_at: Optional[datetime] = Field(default=None, alias="updatedAt")
|
74
|
+
created_by: str = Field(alias="createdBy")
|
75
|
+
item_count: int = Field(default=0, alias="itemCount")
|
76
|
+
file_count: int = Field(default=0, alias="fileCount")
|
77
|
+
registry_count: int = Field(default=0, alias="registryCount")
|
78
|
+
service_count: int = Field(default=0, alias="serviceCount")
|
79
|
+
process_count: int = Field(default=0, alias="processCount")
|
80
|
+
network_connection_count: int = Field(default=0, alias="networkConnectionCount")
|
81
|
+
tags: List[str] = []
|
82
|
+
profile_id: Optional[str] = Field(default=None, alias="profileId")
|
83
|
+
profile_name: Optional[str] = Field(default=None, alias="profileName")
|
84
|
+
last_comparison: Optional[datetime] = Field(default=None, alias="lastComparison")
|
85
|
+
comparison_count: int = Field(default=0, alias="comparisonCount")
|
86
|
+
|
87
|
+
|
88
|
+
class BaselineProfile(AIRBaseModel):
|
89
|
+
"""Baseline profile model."""
|
90
|
+
|
91
|
+
id: str = Field(alias="_id")
|
92
|
+
name: str
|
93
|
+
description: Optional[str] = None
|
94
|
+
organization_id: int = Field(default=0, alias="organizationId")
|
95
|
+
include_files: bool = Field(default=True, alias="includeFiles")
|
96
|
+
include_registry: bool = Field(default=True, alias="includeRegistry")
|
97
|
+
include_services: bool = Field(default=True, alias="includeServices")
|
98
|
+
include_processes: bool = Field(default=False, alias="includeProcesses")
|
99
|
+
include_network: bool = Field(default=False, alias="includeNetwork")
|
100
|
+
file_patterns: List[str] = Field(default=[], alias="filePatterns")
|
101
|
+
exclude_patterns: List[str] = Field(default=[], alias="excludePatterns")
|
102
|
+
registry_keys: List[str] = Field(default=[], alias="registryKeys")
|
103
|
+
custom_checks: List[Dict[str, Any]] = Field(default=[], alias="customChecks")
|
104
|
+
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
105
|
+
updated_at: Optional[datetime] = Field(default=None, alias="updatedAt")
|
106
|
+
created_by: str = Field(alias="createdBy")
|
107
|
+
is_default: bool = Field(default=False, alias="isDefault")
|
108
|
+
usage_count: int = Field(default=0, alias="usageCount")
|
109
|
+
|
110
|
+
|
111
|
+
class BaselineChange(AIRBaseModel):
|
112
|
+
"""Baseline change detection model."""
|
113
|
+
|
114
|
+
id: str = Field(alias="_id")
|
115
|
+
comparison_id: str = Field(alias="comparisonId")
|
116
|
+
change_type: ChangeType = Field(alias="changeType")
|
117
|
+
item_type: str = Field(alias="itemType")
|
118
|
+
path: str
|
119
|
+
old_value: Optional[Dict[str, Any]] = Field(default=None, alias="oldValue")
|
120
|
+
new_value: Optional[Dict[str, Any]] = Field(default=None, alias="newValue")
|
121
|
+
severity: str = "medium" # low, medium, high, critical
|
122
|
+
category: str
|
123
|
+
description: str
|
124
|
+
detected_at: datetime = Field(alias="detectedAt")
|
125
|
+
risk_score: float = Field(default=0.0, alias="riskScore")
|
126
|
+
|
127
|
+
|
128
|
+
class BaselineComparison(AIRBaseModel):
|
129
|
+
"""Baseline comparison result model."""
|
130
|
+
|
131
|
+
id: str = Field(alias="_id")
|
132
|
+
baseline_id: str = Field(alias="baselineId")
|
133
|
+
baseline_name: str = Field(alias="baselineName")
|
134
|
+
endpoint_id: str = Field(alias="endpointId")
|
135
|
+
endpoint_name: str = Field(alias="endpointName")
|
136
|
+
status: ComparisonStatus
|
137
|
+
started_at: Optional[datetime] = Field(default=None, alias="startedAt")
|
138
|
+
completed_at: Optional[datetime] = Field(default=None, alias="completedAt")
|
139
|
+
duration: Optional[int] = None # seconds
|
140
|
+
total_changes: int = Field(default=0, alias="totalChanges")
|
141
|
+
added_items: int = Field(default=0, alias="addedItems")
|
142
|
+
removed_items: int = Field(default=0, alias="removedItems")
|
143
|
+
modified_items: int = Field(default=0, alias="modifiedItems")
|
144
|
+
moved_items: int = Field(default=0, alias="movedItems")
|
145
|
+
high_risk_changes: int = Field(default=0, alias="highRiskChanges")
|
146
|
+
medium_risk_changes: int = Field(default=0, alias="mediumRiskChanges")
|
147
|
+
low_risk_changes: int = Field(default=0, alias="lowRiskChanges")
|
148
|
+
changes: List[BaselineChange] = []
|
149
|
+
organization_id: int = Field(default=0, alias="organizationId")
|
150
|
+
triggered_by: str = Field(alias="triggeredBy")
|
151
|
+
error_message: Optional[str] = Field(default=None, alias="errorMessage")
|
152
|
+
|
153
|
+
|
154
|
+
class BaselineSchedule(AIRBaseModel):
|
155
|
+
"""Baseline comparison schedule model."""
|
156
|
+
|
157
|
+
id: str = Field(alias="_id")
|
158
|
+
baseline_id: str = Field(alias="baselineId")
|
159
|
+
name: str
|
160
|
+
enabled: bool = True
|
161
|
+
frequency: str # daily, weekly, monthly
|
162
|
+
time_of_day: str = Field(alias="timeOfDay") # HH:MM format
|
163
|
+
day_of_week: Optional[int] = Field(default=None, alias="dayOfWeek") # 0-6, Monday=0
|
164
|
+
day_of_month: Optional[int] = Field(default=None, alias="dayOfMonth") # 1-31
|
165
|
+
next_run: Optional[datetime] = Field(default=None, alias="nextRun")
|
166
|
+
last_run: Optional[datetime] = Field(default=None, alias="lastRun")
|
167
|
+
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
168
|
+
created_by: str = Field(alias="createdBy")
|
169
|
+
notification_enabled: bool = Field(default=True, alias="notificationEnabled")
|
170
|
+
notification_threshold: int = Field(default=10, alias="notificationThreshold") # minimum changes to notify
|
171
|
+
|
172
|
+
|
173
|
+
class BaselineFilter(Filter):
|
174
|
+
"""Filter for baseline queries."""
|
175
|
+
|
176
|
+
name: Optional[str] = None
|
177
|
+
type: Optional[List[BaselineType]] = None
|
178
|
+
status: Optional[List[BaselineStatus]] = None
|
179
|
+
endpoint_id: Optional[str] = None
|
180
|
+
endpoint_name: Optional[str] = None
|
181
|
+
created_by: Optional[str] = None
|
182
|
+
tags: Optional[List[str]] = None
|
183
|
+
profile_id: Optional[str] = None
|
184
|
+
has_recent_comparison: Optional[bool] = None
|
185
|
+
|
186
|
+
|
187
|
+
class CreateBaselineRequest(AIRBaseModel):
|
188
|
+
"""Request model for creating a baseline."""
|
189
|
+
|
190
|
+
name: str
|
191
|
+
description: Optional[str] = None
|
192
|
+
type: BaselineType = BaselineType.SYSTEM
|
193
|
+
endpoint_id: str
|
194
|
+
profile_id: Optional[str] = None
|
195
|
+
tags: List[str] = []
|
196
|
+
organization_id: int = 0
|
197
|
+
|
198
|
+
|
199
|
+
class UpdateBaselineRequest(AIRBaseModel):
|
200
|
+
"""Request model for updating a baseline."""
|
201
|
+
|
202
|
+
name: Optional[str] = None
|
203
|
+
description: Optional[str] = None
|
204
|
+
status: Optional[BaselineStatus] = None
|
205
|
+
tags: Optional[List[str]] = None
|
206
|
+
|
207
|
+
|
208
|
+
class CreateBaselineProfileRequest(AIRBaseModel):
|
209
|
+
"""Request model for creating a baseline profile."""
|
210
|
+
|
211
|
+
name: str
|
212
|
+
description: Optional[str] = None
|
213
|
+
include_files: bool = True
|
214
|
+
include_registry: bool = True
|
215
|
+
include_services: bool = True
|
216
|
+
include_processes: bool = False
|
217
|
+
include_network: bool = False
|
218
|
+
file_patterns: List[str] = []
|
219
|
+
exclude_patterns: List[str] = []
|
220
|
+
registry_keys: List[str] = []
|
221
|
+
custom_checks: List[Dict[str, Any]] = []
|
222
|
+
organization_id: int = 0
|
223
|
+
|
224
|
+
|
225
|
+
class CompareBaselineRequest(AIRBaseModel):
|
226
|
+
"""Request model for comparing baselines."""
|
227
|
+
|
228
|
+
baseline_id: str
|
229
|
+
endpoint_ids: Optional[List[str]] = None # If None, use baseline's endpoint
|
230
|
+
profile_id: Optional[str] = None # Override baseline's profile
|
231
|
+
include_low_risk: bool = True
|
232
232
|
generate_report: bool = True
|