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.
Files changed (142) hide show
  1. binalyze_air/__init__.py +77 -77
  2. binalyze_air/apis/__init__.py +67 -27
  3. binalyze_air/apis/acquisitions.py +107 -0
  4. binalyze_air/apis/api_tokens.py +49 -0
  5. binalyze_air/apis/assets.py +161 -0
  6. binalyze_air/apis/audit_logs.py +26 -0
  7. binalyze_air/apis/{authentication.py → auth.py} +29 -27
  8. binalyze_air/apis/auto_asset_tags.py +79 -75
  9. binalyze_air/apis/backup.py +177 -0
  10. binalyze_air/apis/baseline.py +46 -0
  11. binalyze_air/apis/cases.py +225 -0
  12. binalyze_air/apis/cloud_forensics.py +116 -0
  13. binalyze_air/apis/event_subscription.py +96 -96
  14. binalyze_air/apis/evidence.py +249 -53
  15. binalyze_air/apis/interact.py +153 -36
  16. binalyze_air/apis/investigation_hub.py +234 -0
  17. binalyze_air/apis/license.py +104 -0
  18. binalyze_air/apis/logger.py +83 -0
  19. binalyze_air/apis/multipart_upload.py +201 -0
  20. binalyze_air/apis/notifications.py +115 -0
  21. binalyze_air/apis/organizations.py +267 -0
  22. binalyze_air/apis/params.py +44 -39
  23. binalyze_air/apis/policies.py +186 -0
  24. binalyze_air/apis/preset_filters.py +79 -0
  25. binalyze_air/apis/recent_activities.py +71 -0
  26. binalyze_air/apis/relay_server.py +104 -0
  27. binalyze_air/apis/settings.py +395 -27
  28. binalyze_air/apis/tasks.py +80 -0
  29. binalyze_air/apis/triage.py +197 -0
  30. binalyze_air/apis/user_management.py +183 -74
  31. binalyze_air/apis/webhook_executions.py +50 -0
  32. binalyze_air/apis/webhooks.py +322 -230
  33. binalyze_air/base.py +207 -133
  34. binalyze_air/client.py +217 -1337
  35. binalyze_air/commands/__init__.py +175 -145
  36. binalyze_air/commands/acquisitions.py +661 -387
  37. binalyze_air/commands/api_tokens.py +55 -0
  38. binalyze_air/commands/assets.py +324 -362
  39. binalyze_air/commands/{authentication.py → auth.py} +36 -36
  40. binalyze_air/commands/auto_asset_tags.py +230 -230
  41. binalyze_air/commands/backup.py +47 -0
  42. binalyze_air/commands/baseline.py +32 -396
  43. binalyze_air/commands/cases.py +609 -602
  44. binalyze_air/commands/cloud_forensics.py +88 -0
  45. binalyze_air/commands/event_subscription.py +101 -101
  46. binalyze_air/commands/evidences.py +918 -988
  47. binalyze_air/commands/interact.py +172 -58
  48. binalyze_air/commands/investigation_hub.py +315 -0
  49. binalyze_air/commands/license.py +183 -0
  50. binalyze_air/commands/logger.py +126 -0
  51. binalyze_air/commands/multipart_upload.py +363 -0
  52. binalyze_air/commands/notifications.py +45 -0
  53. binalyze_air/commands/organizations.py +200 -221
  54. binalyze_air/commands/policies.py +175 -203
  55. binalyze_air/commands/preset_filters.py +55 -0
  56. binalyze_air/commands/recent_activities.py +32 -0
  57. binalyze_air/commands/relay_server.py +144 -0
  58. binalyze_air/commands/settings.py +431 -29
  59. binalyze_air/commands/tasks.py +95 -56
  60. binalyze_air/commands/triage.py +224 -360
  61. binalyze_air/commands/user_management.py +351 -126
  62. binalyze_air/commands/webhook_executions.py +77 -0
  63. binalyze_air/config.py +244 -244
  64. binalyze_air/exceptions.py +49 -49
  65. binalyze_air/http_client.py +426 -305
  66. binalyze_air/models/__init__.py +287 -285
  67. binalyze_air/models/acquisitions.py +365 -250
  68. binalyze_air/models/api_tokens.py +73 -0
  69. binalyze_air/models/assets.py +438 -438
  70. binalyze_air/models/audit.py +247 -272
  71. binalyze_air/models/audit_logs.py +14 -0
  72. binalyze_air/models/{authentication.py → auth.py} +69 -69
  73. binalyze_air/models/auto_asset_tags.py +227 -116
  74. binalyze_air/models/backup.py +138 -0
  75. binalyze_air/models/baseline.py +231 -231
  76. binalyze_air/models/cases.py +275 -275
  77. binalyze_air/models/cloud_forensics.py +145 -0
  78. binalyze_air/models/event_subscription.py +170 -171
  79. binalyze_air/models/evidence.py +65 -65
  80. binalyze_air/models/evidences.py +367 -348
  81. binalyze_air/models/interact.py +266 -135
  82. binalyze_air/models/investigation_hub.py +265 -0
  83. binalyze_air/models/license.py +150 -0
  84. binalyze_air/models/logger.py +83 -0
  85. binalyze_air/models/multipart_upload.py +352 -0
  86. binalyze_air/models/notifications.py +138 -0
  87. binalyze_air/models/organizations.py +293 -293
  88. binalyze_air/models/params.py +153 -127
  89. binalyze_air/models/policies.py +260 -249
  90. binalyze_air/models/preset_filters.py +79 -0
  91. binalyze_air/models/recent_activities.py +70 -0
  92. binalyze_air/models/relay_server.py +121 -0
  93. binalyze_air/models/settings.py +538 -84
  94. binalyze_air/models/tasks.py +215 -149
  95. binalyze_air/models/triage.py +141 -142
  96. binalyze_air/models/user_management.py +200 -97
  97. binalyze_air/models/webhook_executions.py +33 -0
  98. binalyze_air/queries/__init__.py +121 -133
  99. binalyze_air/queries/acquisitions.py +155 -155
  100. binalyze_air/queries/api_tokens.py +46 -0
  101. binalyze_air/queries/assets.py +186 -105
  102. binalyze_air/queries/audit.py +400 -416
  103. binalyze_air/queries/{authentication.py → auth.py} +55 -55
  104. binalyze_air/queries/auto_asset_tags.py +59 -59
  105. binalyze_air/queries/backup.py +66 -0
  106. binalyze_air/queries/baseline.py +21 -185
  107. binalyze_air/queries/cases.py +292 -292
  108. binalyze_air/queries/cloud_forensics.py +137 -0
  109. binalyze_air/queries/event_subscription.py +54 -54
  110. binalyze_air/queries/evidence.py +139 -139
  111. binalyze_air/queries/evidences.py +279 -279
  112. binalyze_air/queries/interact.py +140 -28
  113. binalyze_air/queries/investigation_hub.py +329 -0
  114. binalyze_air/queries/license.py +85 -0
  115. binalyze_air/queries/logger.py +58 -0
  116. binalyze_air/queries/multipart_upload.py +180 -0
  117. binalyze_air/queries/notifications.py +71 -0
  118. binalyze_air/queries/organizations.py +222 -222
  119. binalyze_air/queries/params.py +154 -115
  120. binalyze_air/queries/policies.py +149 -149
  121. binalyze_air/queries/preset_filters.py +60 -0
  122. binalyze_air/queries/recent_activities.py +44 -0
  123. binalyze_air/queries/relay_server.py +42 -0
  124. binalyze_air/queries/settings.py +533 -20
  125. binalyze_air/queries/tasks.py +125 -81
  126. binalyze_air/queries/triage.py +230 -230
  127. binalyze_air/queries/user_management.py +193 -83
  128. binalyze_air/queries/webhook_executions.py +39 -0
  129. binalyze_air_sdk-1.0.3.dist-info/METADATA +752 -0
  130. binalyze_air_sdk-1.0.3.dist-info/RECORD +132 -0
  131. {binalyze_air_sdk-1.0.2.dist-info → binalyze_air_sdk-1.0.3.dist-info}/WHEEL +1 -1
  132. binalyze_air/apis/endpoints.py +0 -22
  133. binalyze_air/apis/evidences.py +0 -216
  134. binalyze_air/apis/users.py +0 -68
  135. binalyze_air/commands/users.py +0 -101
  136. binalyze_air/models/endpoints.py +0 -76
  137. binalyze_air/models/users.py +0 -82
  138. binalyze_air/queries/endpoints.py +0 -25
  139. binalyze_air/queries/users.py +0 -69
  140. binalyze_air_sdk-1.0.2.dist-info/METADATA +0 -706
  141. binalyze_air_sdk-1.0.2.dist-info/RECORD +0 -82
  142. {binalyze_air_sdk-1.0.2.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