binalyze-air-sdk 1.0.1__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.1.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.1.dist-info/METADATA +0 -635
- binalyze_air_sdk-1.0.1.dist-info/RECORD +0 -82
- {binalyze_air_sdk-1.0.1.dist-info → binalyze_air_sdk-1.0.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
"""
|
2
|
+
Notifications API models for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Optional, List, Dict, Any, Union
|
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 NotificationLevel(str, Enum):
|
14
|
+
"""Notification severity levels."""
|
15
|
+
INFO = "info"
|
16
|
+
WARNING = "warning"
|
17
|
+
ERROR = "error"
|
18
|
+
SUCCESS = "success"
|
19
|
+
|
20
|
+
|
21
|
+
class NotificationType(str, Enum):
|
22
|
+
"""Notification types."""
|
23
|
+
TASK_COMPLETED = "task-completed"
|
24
|
+
TASK_FAILED = "task-failed"
|
25
|
+
FLAG_CREATED = "flag-created"
|
26
|
+
FLAG_UPDATED = "flag-updated"
|
27
|
+
FLAG_DELETED = "flag-deleted"
|
28
|
+
ASSET_CREATED = "asset-created"
|
29
|
+
ASSET_REGISTERED = "asset-registered"
|
30
|
+
ASSET_REGISTER_FAILED = "asset-register-failed"
|
31
|
+
ASSET_RE_REGISTERED = "asset-re-registered"
|
32
|
+
ASSET_RE_REGISTER_FAILED = "asset-re-register-failed"
|
33
|
+
CASE_CREATED = "case-created"
|
34
|
+
CASE_COMMENT_ADDED = "case-comment-added"
|
35
|
+
POLICY_EXECUTED = "policy-executed"
|
36
|
+
SYSTEM_UPDATE = "system-update"
|
37
|
+
ALERT = "alert"
|
38
|
+
UPDATE_CHECK_FAILED = "update-check-failed"
|
39
|
+
NATS_PORT_DISABLED = "nats-port-disabled"
|
40
|
+
LDAP_SYNC_AUTH_FAILED = "ldap-sync-auth-failed"
|
41
|
+
CLOUD_SYNC_FAILED = "cloud-sync-failed"
|
42
|
+
REMOTE_BACKUP_DELETION_FAILED = "remote-backup-deletion-failed"
|
43
|
+
TASK_CANCELLED_AS_CASE_CLOSED = "task-cancelled-as-case-closed"
|
44
|
+
FINDING_EXCLUSION_CREATED = "finding-exclusion-created"
|
45
|
+
FINDING_EXCLUSION_UPDATED = "finding-exclusion-updated"
|
46
|
+
FINDING_EXCLUSION_DELETED = "finding-exclusion-deleted"
|
47
|
+
TASK_COMMENT_ADDED = "task-comment-added"
|
48
|
+
NEW_VERSION_RELEASED = "new-version-released"
|
49
|
+
UPDATE_SCHEDULED = "update-scheduled"
|
50
|
+
UPDATE_COMPLETED = "update-completed"
|
51
|
+
UPDATE_FAILED = "update-failed"
|
52
|
+
|
53
|
+
|
54
|
+
class Notification(AIRBaseModel):
|
55
|
+
"""Notification model."""
|
56
|
+
|
57
|
+
id: Union[int, str] = Field(alias="_id")
|
58
|
+
is_read: bool = Field(alias="isRead")
|
59
|
+
level: NotificationLevel
|
60
|
+
type: NotificationType
|
61
|
+
organization_ids: List[int] = Field(alias="organizationIds")
|
62
|
+
data: Dict[str, Any] = {}
|
63
|
+
created_at: datetime = Field(alias="createdAt")
|
64
|
+
updated_at: datetime = Field(alias="updatedAt")
|
65
|
+
created_by: Optional[str] = Field(default=None, alias="createdBy")
|
66
|
+
title: Optional[str] = None
|
67
|
+
message: Optional[str] = None
|
68
|
+
action_url: Optional[str] = Field(default=None, alias="actionUrl")
|
69
|
+
expires_at: Optional[datetime] = Field(default=None, alias="expiresAt")
|
70
|
+
|
71
|
+
|
72
|
+
class NotificationsList(AIRBaseModel):
|
73
|
+
"""Paginated notifications list response."""
|
74
|
+
|
75
|
+
entities: List[Notification]
|
76
|
+
current_page: int = Field(alias="currentPage")
|
77
|
+
page_size: int = Field(alias="pageSize")
|
78
|
+
total_entity_count: int = Field(alias="totalEntityCount")
|
79
|
+
total_page_count: int = Field(alias="totalPageCount")
|
80
|
+
|
81
|
+
|
82
|
+
class NotificationsFilter(Filter):
|
83
|
+
"""Filter for notifications queries."""
|
84
|
+
|
85
|
+
# Pagination
|
86
|
+
page_number: Optional[int] = Field(default=None, alias="pageNumber")
|
87
|
+
page_size: Optional[int] = Field(default=None, alias="pageSize")
|
88
|
+
sort_by: Optional[str] = Field(default=None, alias="sortBy")
|
89
|
+
sort_type: Optional[str] = Field(default=None, alias="sortType") # ASC, DESC
|
90
|
+
|
91
|
+
# Notification-specific filters
|
92
|
+
is_read: Optional[bool] = Field(default=None, alias="isRead")
|
93
|
+
level: Optional[NotificationLevel] = None
|
94
|
+
type: Optional[NotificationType] = None
|
95
|
+
organization_ids: Optional[Union[int, List[int]]] = Field(default=None, alias="organizationIds")
|
96
|
+
|
97
|
+
def to_params(self) -> Dict[str, Any]:
|
98
|
+
"""Convert filter to query parameters."""
|
99
|
+
params = {}
|
100
|
+
|
101
|
+
# Pagination parameters (not in filter namespace)
|
102
|
+
if self.page_number is not None:
|
103
|
+
params["pageNumber"] = self.page_number
|
104
|
+
if self.page_size is not None:
|
105
|
+
params["pageSize"] = self.page_size
|
106
|
+
if self.sort_by is not None:
|
107
|
+
params["sortBy"] = self.sort_by
|
108
|
+
if self.sort_type is not None:
|
109
|
+
params["sortType"] = self.sort_type
|
110
|
+
|
111
|
+
# Filter parameters (with filter[] namespace)
|
112
|
+
if self.is_read is not None:
|
113
|
+
params["filter[isRead]"] = "true" if self.is_read else "false"
|
114
|
+
if self.level is not None:
|
115
|
+
params["filter[level]"] = self.level.value if hasattr(self.level, 'value') else str(self.level)
|
116
|
+
if self.type is not None:
|
117
|
+
params["filter[type]"] = self.type.value if hasattr(self.type, 'value') else str(self.type)
|
118
|
+
if self.organization_ids is not None:
|
119
|
+
if isinstance(self.organization_ids, list):
|
120
|
+
params["filter[organizationIds]"] = ",".join([str(x) for x in self.organization_ids])
|
121
|
+
else:
|
122
|
+
params["filter[organizationIds]"] = str(self.organization_ids)
|
123
|
+
|
124
|
+
return params
|
125
|
+
|
126
|
+
|
127
|
+
class MarkAsReadRequest(AIRBaseModel):
|
128
|
+
"""Request model for marking notifications as read."""
|
129
|
+
|
130
|
+
notification_ids: Optional[List[Union[int, str]]] = None
|
131
|
+
all_notifications: bool = False
|
132
|
+
|
133
|
+
|
134
|
+
class DeleteNotificationsRequest(AIRBaseModel):
|
135
|
+
"""Request model for deleting notifications."""
|
136
|
+
|
137
|
+
notification_ids: Optional[List[Union[int, str]]] = None
|
138
|
+
all_notifications: bool = False
|