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,84 @@
|
|
1
|
+
"""
|
2
|
+
Settings API models for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Optional, Dict, Any
|
6
|
+
from datetime import datetime
|
7
|
+
from enum import Enum
|
8
|
+
from pydantic import Field
|
9
|
+
|
10
|
+
from ..base import AIRBaseModel
|
11
|
+
|
12
|
+
|
13
|
+
class BannerType(str, Enum):
|
14
|
+
"""Banner types."""
|
15
|
+
INFO = "info"
|
16
|
+
WARNING = "warning"
|
17
|
+
ERROR = "error"
|
18
|
+
SUCCESS = "success"
|
19
|
+
MAINTENANCE = "maintenance"
|
20
|
+
|
21
|
+
|
22
|
+
class BannerPosition(str, Enum):
|
23
|
+
"""Banner display positions."""
|
24
|
+
TOP = "top"
|
25
|
+
BOTTOM = "bottom"
|
26
|
+
CENTER = "center"
|
27
|
+
|
28
|
+
|
29
|
+
class BannerSettings(AIRBaseModel):
|
30
|
+
"""Banner settings model."""
|
31
|
+
|
32
|
+
id: Optional[str] = None
|
33
|
+
enabled: bool = False
|
34
|
+
title: Optional[str] = None
|
35
|
+
message: str
|
36
|
+
banner_type: BannerType = BannerType.INFO
|
37
|
+
position: BannerPosition = BannerPosition.TOP
|
38
|
+
dismissible: bool = True
|
39
|
+
auto_dismiss: bool = False
|
40
|
+
auto_dismiss_timeout: Optional[int] = None # seconds
|
41
|
+
show_from: Optional[datetime] = None
|
42
|
+
show_until: Optional[datetime] = None
|
43
|
+
background_color: Optional[str] = None
|
44
|
+
text_color: Optional[str] = None
|
45
|
+
border_color: Optional[str] = None
|
46
|
+
icon: Optional[str] = None
|
47
|
+
link_url: Optional[str] = None
|
48
|
+
link_text: Optional[str] = None
|
49
|
+
target_roles: Optional[list[str]] = None
|
50
|
+
target_organizations: Optional[list[int]] = None
|
51
|
+
created_by: Optional[str] = None
|
52
|
+
created_at: Optional[datetime] = None
|
53
|
+
updated_at: Optional[datetime] = None
|
54
|
+
organization_id: Optional[int] = None
|
55
|
+
|
56
|
+
|
57
|
+
class UpdateBannerSettingsRequest(AIRBaseModel):
|
58
|
+
"""Request model for updating banner settings with proper API field mapping."""
|
59
|
+
|
60
|
+
enabled: Optional[bool] = None
|
61
|
+
title: Optional[str] = None
|
62
|
+
message: Optional[str] = None
|
63
|
+
# API expects these exact field names - use aliases to map from Python names to API names
|
64
|
+
users_can_dismiss: Optional[bool] = Field(default=None, alias="usersCanDismiss")
|
65
|
+
color: Optional[str] = None # API expects: general, info, maintenance, warning, alert
|
66
|
+
display_time_type: Optional[str] = Field(default=None, alias="displayTimeType") # always or scheduled
|
67
|
+
schedule_times: Optional[Dict[str, Any]] = Field(default=None, alias="scheduleTimes")
|
68
|
+
|
69
|
+
# Legacy/additional fields (may not be used by current API)
|
70
|
+
banner_type: Optional[BannerType] = None
|
71
|
+
position: Optional[BannerPosition] = None
|
72
|
+
dismissible: Optional[bool] = None
|
73
|
+
auto_dismiss: Optional[bool] = None
|
74
|
+
auto_dismiss_timeout: Optional[int] = None
|
75
|
+
show_from: Optional[datetime] = None
|
76
|
+
show_until: Optional[datetime] = None
|
77
|
+
background_color: Optional[str] = None
|
78
|
+
text_color: Optional[str] = None
|
79
|
+
border_color: Optional[str] = None
|
80
|
+
icon: Optional[str] = None
|
81
|
+
link_url: Optional[str] = None
|
82
|
+
link_text: Optional[str] = None
|
83
|
+
target_roles: Optional[list[str]] = None
|
84
|
+
target_organizations: Optional[list[int]] = None
|
@@ -0,0 +1,149 @@
|
|
1
|
+
"""
|
2
|
+
Task-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 TaskStatus(str, Enum):
|
14
|
+
"""Task status."""
|
15
|
+
PENDING = "pending"
|
16
|
+
RUNNING = "running"
|
17
|
+
COMPLETED = "completed"
|
18
|
+
FAILED = "failed"
|
19
|
+
CANCELLED = "cancelled"
|
20
|
+
|
21
|
+
|
22
|
+
class TaskType(str, Enum):
|
23
|
+
"""Task type."""
|
24
|
+
ACQUISITION = "acquisition"
|
25
|
+
TRIAGE = "triage"
|
26
|
+
ISOLATION = "isolation"
|
27
|
+
REBOOT = "reboot"
|
28
|
+
SHUTDOWN = "shutdown"
|
29
|
+
IMAGE_ACQUISITION = "image-acquisition"
|
30
|
+
|
31
|
+
|
32
|
+
class NetworkCaptureConfig(AIRBaseModel):
|
33
|
+
"""Network capture configuration."""
|
34
|
+
|
35
|
+
enabled: bool = False
|
36
|
+
duration: int = 60
|
37
|
+
pcap: Optional[Dict[str, bool]] = None
|
38
|
+
network_flow: Optional[Dict[str, bool]] = Field(default=None, alias="networkFlow")
|
39
|
+
|
40
|
+
|
41
|
+
class PlatformEvidenceConfig(AIRBaseModel):
|
42
|
+
"""Platform-specific evidence configuration."""
|
43
|
+
|
44
|
+
evidence_types: List[str] = Field(default=[], alias="evidenceTypes")
|
45
|
+
custom: List[Any] = []
|
46
|
+
network_capture: Optional[NetworkCaptureConfig] = Field(default=None, alias="networkCapture")
|
47
|
+
|
48
|
+
|
49
|
+
class SaveLocationConfig(AIRBaseModel):
|
50
|
+
"""Save location configuration."""
|
51
|
+
|
52
|
+
location: str
|
53
|
+
path: str
|
54
|
+
use_most_free_volume: bool = Field(default=False, alias="useMostFreeVolume")
|
55
|
+
volume: str = ""
|
56
|
+
tmp: str = ""
|
57
|
+
|
58
|
+
|
59
|
+
class CompressionConfig(AIRBaseModel):
|
60
|
+
"""Compression configuration."""
|
61
|
+
|
62
|
+
enabled: bool = False
|
63
|
+
encryption: Optional[Dict[str, Any]] = None
|
64
|
+
|
65
|
+
|
66
|
+
class TaskConfig(AIRBaseModel):
|
67
|
+
"""Task configuration."""
|
68
|
+
|
69
|
+
choice: Optional[str] = None
|
70
|
+
save_to: Optional[Dict[str, SaveLocationConfig]] = Field(default=None, alias="saveTo")
|
71
|
+
cpu: Optional[Dict[str, int]] = None
|
72
|
+
compression: Optional[CompressionConfig] = None
|
73
|
+
|
74
|
+
|
75
|
+
class DroneConfig(AIRBaseModel):
|
76
|
+
"""Drone (analysis) configuration."""
|
77
|
+
|
78
|
+
min_score: int = Field(default=0, alias="minScore")
|
79
|
+
auto_pilot: bool = Field(default=False, alias="autoPilot")
|
80
|
+
enabled: bool = False
|
81
|
+
analyzers: List[str] = []
|
82
|
+
keywords: List[str] = []
|
83
|
+
|
84
|
+
|
85
|
+
class TaskData(AIRBaseModel):
|
86
|
+
"""Task data containing configuration."""
|
87
|
+
|
88
|
+
profile_id: Optional[str] = Field(default=None, alias="profileId")
|
89
|
+
profile_name: Optional[str] = Field(default=None, alias="profileName")
|
90
|
+
windows: Optional[PlatformEvidenceConfig] = None
|
91
|
+
linux: Optional[PlatformEvidenceConfig] = None
|
92
|
+
config: Optional[TaskConfig] = None
|
93
|
+
drone: Optional[DroneConfig] = None
|
94
|
+
|
95
|
+
|
96
|
+
class TaskAssignment(AIRBaseModel):
|
97
|
+
"""Task assignment model representing a task assigned to a specific endpoint."""
|
98
|
+
|
99
|
+
id: str = Field(alias="_id")
|
100
|
+
task_id: str = Field(alias="taskId")
|
101
|
+
name: str
|
102
|
+
type: str
|
103
|
+
endpoint_id: str = Field(alias="endpointId")
|
104
|
+
endpoint_name: str = Field(alias="endpointName")
|
105
|
+
organization_id: int = Field(default=0, alias="organizationId")
|
106
|
+
status: str
|
107
|
+
recurrence: Optional[str] = None
|
108
|
+
progress: int = 0
|
109
|
+
duration: Optional[int] = None
|
110
|
+
durations: Optional[Dict[str, int]] = None
|
111
|
+
case_ids: List[str] = Field(default=[], alias="caseIds")
|
112
|
+
metadata: Optional[Dict[str, Any]] = None
|
113
|
+
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
114
|
+
created_by: Optional[str] = Field(default=None, alias="createdBy")
|
115
|
+
updated_at: Optional[datetime] = Field(default=None, alias="updatedAt")
|
116
|
+
response: Optional[Dict[str, Any]] = None
|
117
|
+
|
118
|
+
|
119
|
+
class Task(AIRBaseModel):
|
120
|
+
"""Task model with proper field aliases for API mapping."""
|
121
|
+
|
122
|
+
id: str = Field(alias="_id")
|
123
|
+
source: Optional[str] = None
|
124
|
+
total_assigned_endpoints: int = Field(default=0, alias="totalAssignedEndpoints")
|
125
|
+
total_completed_endpoints: int = Field(default=0, alias="totalCompletedEndpoints")
|
126
|
+
total_failed_endpoints: int = Field(default=0, alias="totalFailedEndpoints")
|
127
|
+
total_cancelled_endpoints: int = Field(default=0, alias="totalCancelledEndpoints")
|
128
|
+
is_scheduled: bool = Field(default=False, alias="isScheduled")
|
129
|
+
name: str
|
130
|
+
type: str
|
131
|
+
organization_id: int = Field(default=0, alias="organizationId")
|
132
|
+
status: str
|
133
|
+
created_by: str = Field(alias="createdBy")
|
134
|
+
base_task_id: Optional[str] = Field(default=None, alias="baseTaskId")
|
135
|
+
start_date: Optional[datetime] = Field(default=None, alias="startDate")
|
136
|
+
recurrence: Optional[str] = None
|
137
|
+
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
138
|
+
updated_at: Optional[datetime] = Field(default=None, alias="updatedAt")
|
139
|
+
data: Optional[TaskData] = None
|
140
|
+
|
141
|
+
|
142
|
+
class TaskFilter(Filter):
|
143
|
+
"""Filter for task queries."""
|
144
|
+
|
145
|
+
name: Optional[str] = None
|
146
|
+
type: Optional[List[str]] = None
|
147
|
+
status: Optional[List[str]] = None
|
148
|
+
created_by: Optional[str] = None
|
149
|
+
is_scheduled: Optional[bool] = None
|
@@ -0,0 +1,143 @@
|
|
1
|
+
"""
|
2
|
+
Triage-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
|
+
|
9
|
+
from ..base import AIRBaseModel, Filter
|
10
|
+
|
11
|
+
|
12
|
+
class TriageStatus(str, Enum):
|
13
|
+
"""Triage status."""
|
14
|
+
PENDING = "pending"
|
15
|
+
PROCESSING = "processing"
|
16
|
+
COMPLETED = "completed"
|
17
|
+
FAILED = "failed"
|
18
|
+
|
19
|
+
|
20
|
+
class TriageSeverity(str, Enum):
|
21
|
+
"""Triage severity level."""
|
22
|
+
LOW = "low"
|
23
|
+
MEDIUM = "medium"
|
24
|
+
HIGH = "high"
|
25
|
+
CRITICAL = "critical"
|
26
|
+
|
27
|
+
|
28
|
+
class TriageRuleType(str, Enum):
|
29
|
+
"""Triage rule type."""
|
30
|
+
YARA = "yara"
|
31
|
+
SIGMA = "sigma"
|
32
|
+
OSQUERY = "osquery"
|
33
|
+
REGEX = "regex"
|
34
|
+
HASH = "hash"
|
35
|
+
CUSTOM = "custom"
|
36
|
+
|
37
|
+
|
38
|
+
class TriageTag(AIRBaseModel):
|
39
|
+
"""Triage tag model."""
|
40
|
+
|
41
|
+
id: str
|
42
|
+
name: str
|
43
|
+
description: Optional[str] = None
|
44
|
+
color: str = "#3498db"
|
45
|
+
created_at: Optional[datetime] = None
|
46
|
+
created_by: str
|
47
|
+
organization_id: int = 0
|
48
|
+
usage_count: int = 0
|
49
|
+
|
50
|
+
|
51
|
+
class TriageRule(AIRBaseModel):
|
52
|
+
"""Triage rule model."""
|
53
|
+
|
54
|
+
id: str
|
55
|
+
name: str
|
56
|
+
description: Optional[str] = None
|
57
|
+
type: TriageRuleType
|
58
|
+
rule_content: str
|
59
|
+
enabled: bool = True
|
60
|
+
severity: TriageSeverity = TriageSeverity.MEDIUM
|
61
|
+
tags: List[str] = []
|
62
|
+
search_in: Optional[str] = None
|
63
|
+
organization_id: int = 0
|
64
|
+
organization_ids: List[int] = []
|
65
|
+
created_at: Optional[datetime] = None
|
66
|
+
updated_at: Optional[datetime] = None
|
67
|
+
created_by: str
|
68
|
+
updated_by: Optional[str] = None
|
69
|
+
match_count: int = 0
|
70
|
+
last_match: Optional[datetime] = None
|
71
|
+
deletable: Optional[bool] = None
|
72
|
+
|
73
|
+
|
74
|
+
class TriageProfile(AIRBaseModel):
|
75
|
+
"""Triage profile model."""
|
76
|
+
|
77
|
+
id: str
|
78
|
+
name: str
|
79
|
+
description: Optional[str] = None
|
80
|
+
rules: List[str] = [] # Rule IDs
|
81
|
+
auto_apply: bool = False
|
82
|
+
organization_id: int = 0
|
83
|
+
created_at: Optional[datetime] = None
|
84
|
+
updated_at: Optional[datetime] = None
|
85
|
+
created_by: str
|
86
|
+
updated_by: Optional[str] = None
|
87
|
+
usage_count: int = 0
|
88
|
+
|
89
|
+
|
90
|
+
class TriageFilter(Filter):
|
91
|
+
"""Filter for triage queries."""
|
92
|
+
|
93
|
+
rule_name: Optional[str] = None
|
94
|
+
rule_type: Optional[List[TriageRuleType]] = None
|
95
|
+
severity: Optional[List[TriageSeverity]] = None
|
96
|
+
status: Optional[List[TriageStatus]] = None
|
97
|
+
tags: Optional[List[str]] = None
|
98
|
+
endpoint_id: Optional[str] = None
|
99
|
+
task_id: Optional[str] = None
|
100
|
+
created_by: Optional[str] = None
|
101
|
+
enabled: Optional[bool] = None
|
102
|
+
|
103
|
+
|
104
|
+
class CreateTriageRuleRequest(AIRBaseModel):
|
105
|
+
"""Request model for creating a triage rule."""
|
106
|
+
|
107
|
+
name: str
|
108
|
+
description: Optional[str] = None
|
109
|
+
type: TriageRuleType
|
110
|
+
rule_content: str
|
111
|
+
severity: TriageSeverity = TriageSeverity.MEDIUM
|
112
|
+
tags: List[str] = []
|
113
|
+
organization_id: int = 0
|
114
|
+
|
115
|
+
|
116
|
+
class UpdateTriageRuleRequest(AIRBaseModel):
|
117
|
+
"""Request model for updating a triage rule."""
|
118
|
+
|
119
|
+
name: Optional[str] = None
|
120
|
+
description: Optional[str] = None
|
121
|
+
rule_content: Optional[str] = None
|
122
|
+
enabled: Optional[bool] = None
|
123
|
+
severity: Optional[TriageSeverity] = None
|
124
|
+
tags: Optional[List[str]] = None
|
125
|
+
|
126
|
+
|
127
|
+
class CreateTriageTagRequest(AIRBaseModel):
|
128
|
+
"""Request model for creating a triage tag."""
|
129
|
+
|
130
|
+
name: str
|
131
|
+
description: Optional[str] = None
|
132
|
+
color: str = "#3498db"
|
133
|
+
organization_id: int = 0
|
134
|
+
|
135
|
+
|
136
|
+
class CreateTriageProfileRequest(AIRBaseModel):
|
137
|
+
"""Request model for creating a triage profile."""
|
138
|
+
|
139
|
+
name: str
|
140
|
+
description: Optional[str] = None
|
141
|
+
rules: List[str] = [] # Rule IDs
|
142
|
+
auto_apply: bool = False
|
143
|
+
organization_id: int = 0
|
@@ -0,0 +1,97 @@
|
|
1
|
+
"""
|
2
|
+
User Management-related data models for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Optional, List, Dict, Any
|
6
|
+
from datetime import datetime
|
7
|
+
|
8
|
+
from ..base import AIRBaseModel, Filter
|
9
|
+
|
10
|
+
|
11
|
+
class UserManagementUser(AIRBaseModel):
|
12
|
+
"""User management user model."""
|
13
|
+
|
14
|
+
id: str
|
15
|
+
username: str
|
16
|
+
email: str
|
17
|
+
firstName: Optional[str] = None
|
18
|
+
lastName: Optional[str] = None
|
19
|
+
organizationId: int
|
20
|
+
role: Optional[str] = None
|
21
|
+
isActive: bool = True
|
22
|
+
createdAt: Optional[datetime] = None
|
23
|
+
updatedAt: Optional[datetime] = None
|
24
|
+
|
25
|
+
|
26
|
+
class CreateUserRequest(AIRBaseModel):
|
27
|
+
"""Create user request model."""
|
28
|
+
|
29
|
+
username: str
|
30
|
+
email: str
|
31
|
+
password: str
|
32
|
+
firstName: Optional[str] = None
|
33
|
+
lastName: Optional[str] = None
|
34
|
+
organizationId: int
|
35
|
+
role: Optional[str] = None
|
36
|
+
|
37
|
+
|
38
|
+
class UpdateUserRequest(AIRBaseModel):
|
39
|
+
"""Update user request model."""
|
40
|
+
|
41
|
+
username: Optional[str] = None
|
42
|
+
email: Optional[str] = None
|
43
|
+
firstName: Optional[str] = None
|
44
|
+
lastName: Optional[str] = None
|
45
|
+
role: Optional[str] = None
|
46
|
+
isActive: Optional[bool] = None
|
47
|
+
|
48
|
+
|
49
|
+
class AIUser(AIRBaseModel):
|
50
|
+
"""AI user model."""
|
51
|
+
|
52
|
+
id: str
|
53
|
+
name: str
|
54
|
+
description: Optional[str] = None
|
55
|
+
capabilities: List[str] = []
|
56
|
+
organizationId: int
|
57
|
+
isActive: bool = True
|
58
|
+
|
59
|
+
|
60
|
+
class CreateAIUserRequest(AIRBaseModel):
|
61
|
+
"""Create AI user request model."""
|
62
|
+
|
63
|
+
name: str
|
64
|
+
description: Optional[str] = None
|
65
|
+
capabilities: List[str] = []
|
66
|
+
organizationId: int
|
67
|
+
|
68
|
+
|
69
|
+
class APIUser(AIRBaseModel):
|
70
|
+
"""API user model."""
|
71
|
+
|
72
|
+
id: str
|
73
|
+
name: str
|
74
|
+
description: Optional[str] = None
|
75
|
+
permissions: List[str] = []
|
76
|
+
organizationId: int
|
77
|
+
apiKey: Optional[str] = None
|
78
|
+
isActive: bool = True
|
79
|
+
|
80
|
+
|
81
|
+
class CreateAPIUserRequest(AIRBaseModel):
|
82
|
+
"""Create API user request model."""
|
83
|
+
|
84
|
+
name: str
|
85
|
+
description: Optional[str] = None
|
86
|
+
permissions: List[str] = []
|
87
|
+
organizationId: int
|
88
|
+
|
89
|
+
|
90
|
+
class UserFilter(Filter):
|
91
|
+
"""Filter for user queries."""
|
92
|
+
|
93
|
+
username: Optional[str] = None
|
94
|
+
email: Optional[str] = None
|
95
|
+
role: Optional[str] = None
|
96
|
+
organizationId: Optional[int] = None
|
97
|
+
isActive: Optional[bool] = None
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"""
|
2
|
+
Users-related data models for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Optional, List, Dict, Any, Union
|
6
|
+
from datetime import datetime
|
7
|
+
from pydantic import Field
|
8
|
+
|
9
|
+
from ..base import AIRBaseModel, Filter
|
10
|
+
|
11
|
+
|
12
|
+
class User(AIRBaseModel):
|
13
|
+
"""User model."""
|
14
|
+
|
15
|
+
id: str = Field(alias="_id")
|
16
|
+
username: str
|
17
|
+
email: str
|
18
|
+
organization_ids: Optional[Union[List[int], str]] = Field(default=None, alias="organizationIds")
|
19
|
+
strategy: Optional[str] = None
|
20
|
+
profile: Optional[Dict[str, str]] = None
|
21
|
+
tfa_enabled: Optional[bool] = Field(default=False, alias="tfaEnabled")
|
22
|
+
first_name: Optional[str] = Field(default=None, alias="firstName")
|
23
|
+
last_name: Optional[str] = Field(default=None, alias="lastName")
|
24
|
+
organization_id: Optional[int] = Field(default=None, alias="organizationId")
|
25
|
+
role: Optional[str] = None
|
26
|
+
is_active: bool = Field(default=True, alias="isActive")
|
27
|
+
created_at: Optional[datetime] = Field(default=None, alias="createdAt")
|
28
|
+
updated_at: Optional[datetime] = Field(default=None, alias="updatedAt")
|
29
|
+
|
30
|
+
|
31
|
+
class CreateUserRequest(AIRBaseModel):
|
32
|
+
"""Create user request model."""
|
33
|
+
|
34
|
+
username: str
|
35
|
+
email: str
|
36
|
+
password: str
|
37
|
+
firstName: Optional[str] = None
|
38
|
+
lastName: Optional[str] = None
|
39
|
+
organizationId: int
|
40
|
+
role: Optional[str] = None
|
41
|
+
|
42
|
+
|
43
|
+
class UpdateUserRequest(AIRBaseModel):
|
44
|
+
"""Update user request model."""
|
45
|
+
|
46
|
+
username: Optional[str] = None
|
47
|
+
email: Optional[str] = None
|
48
|
+
firstName: Optional[str] = None
|
49
|
+
lastName: Optional[str] = None
|
50
|
+
role: Optional[str] = None
|
51
|
+
isActive: Optional[bool] = None
|
52
|
+
|
53
|
+
|
54
|
+
class APIUser(AIRBaseModel):
|
55
|
+
"""API user model."""
|
56
|
+
|
57
|
+
id: str
|
58
|
+
name: str
|
59
|
+
description: Optional[str] = None
|
60
|
+
permissions: List[str] = []
|
61
|
+
organizationId: int
|
62
|
+
apiKey: Optional[str] = None
|
63
|
+
isActive: bool = True
|
64
|
+
|
65
|
+
|
66
|
+
class CreateAPIUserRequest(AIRBaseModel):
|
67
|
+
"""Create API user request model."""
|
68
|
+
|
69
|
+
name: str
|
70
|
+
description: Optional[str] = None
|
71
|
+
permissions: List[str] = []
|
72
|
+
organizationId: int
|
73
|
+
|
74
|
+
|
75
|
+
class UserFilter(Filter):
|
76
|
+
"""Filter for user queries."""
|
77
|
+
|
78
|
+
username: Optional[str] = None
|
79
|
+
email: Optional[str] = None
|
80
|
+
role: Optional[str] = None
|
81
|
+
organizationId: Optional[int] = None
|
82
|
+
isActive: Optional[bool] = None
|
@@ -0,0 +1,134 @@
|
|
1
|
+
"""
|
2
|
+
Query implementations for the Binalyze AIR SDK (CQRS pattern).
|
3
|
+
"""
|
4
|
+
|
5
|
+
from .assets import (
|
6
|
+
ListAssetsQuery,
|
7
|
+
GetAssetQuery,
|
8
|
+
GetAssetTasksQuery,
|
9
|
+
)
|
10
|
+
from .cases import (
|
11
|
+
ListCasesQuery,
|
12
|
+
GetCaseQuery,
|
13
|
+
GetCaseActivitiesQuery,
|
14
|
+
GetCaseEndpointsQuery,
|
15
|
+
GetCaseTasksQuery,
|
16
|
+
GetCaseUsersQuery,
|
17
|
+
CheckCaseNameQuery,
|
18
|
+
)
|
19
|
+
from .tasks import (
|
20
|
+
ListTasksQuery,
|
21
|
+
GetTaskQuery,
|
22
|
+
)
|
23
|
+
from .acquisitions import (
|
24
|
+
ListAcquisitionProfilesQuery,
|
25
|
+
GetAcquisitionProfileQuery,
|
26
|
+
)
|
27
|
+
from .policies import (
|
28
|
+
ListPoliciesQuery,
|
29
|
+
GetPolicyQuery,
|
30
|
+
GetPolicyAssignmentsQuery,
|
31
|
+
GetPolicyExecutionsQuery,
|
32
|
+
)
|
33
|
+
from .organizations import (
|
34
|
+
ListOrganizationsQuery,
|
35
|
+
GetOrganizationQuery,
|
36
|
+
GetOrganizationUsersQuery,
|
37
|
+
GetOrganizationRolesQuery,
|
38
|
+
GetOrganizationLicensesQuery,
|
39
|
+
GetOrganizationSettingsQuery,
|
40
|
+
)
|
41
|
+
from .triage import (
|
42
|
+
ListTriageRulesQuery,
|
43
|
+
GetTriageRuleQuery,
|
44
|
+
GetTriageResultsQuery,
|
45
|
+
GetTriageMatchesQuery,
|
46
|
+
ListTriageTagsQuery,
|
47
|
+
ListTriageProfilesQuery,
|
48
|
+
GetTriageProfileQuery,
|
49
|
+
)
|
50
|
+
from .audit import (
|
51
|
+
ListAuditLogsQuery,
|
52
|
+
GetAuditLogQuery,
|
53
|
+
GetAuditSummaryQuery,
|
54
|
+
GetUserActivityQuery,
|
55
|
+
GetSystemEventsQuery,
|
56
|
+
GetAuditRetentionPolicyQuery,
|
57
|
+
ExportAuditLogsQuery,
|
58
|
+
)
|
59
|
+
from .baseline import (
|
60
|
+
ListBaselinesQuery,
|
61
|
+
GetBaselineQuery,
|
62
|
+
GetBaselineComparisonsQuery,
|
63
|
+
GetBaselineComparisonQuery,
|
64
|
+
ListBaselineProfilesQuery,
|
65
|
+
GetBaselineProfileQuery,
|
66
|
+
GetBaselineSchedulesQuery,
|
67
|
+
)
|
68
|
+
|
69
|
+
# TODO: Add imports when implementing other endpoints
|
70
|
+
|
71
|
+
__all__ = [
|
72
|
+
# Asset queries
|
73
|
+
"ListAssetsQuery",
|
74
|
+
"GetAssetQuery",
|
75
|
+
"GetAssetTasksQuery",
|
76
|
+
|
77
|
+
# Case queries
|
78
|
+
"ListCasesQuery",
|
79
|
+
"GetCaseQuery",
|
80
|
+
"GetCaseActivitiesQuery",
|
81
|
+
"GetCaseEndpointsQuery",
|
82
|
+
"GetCaseTasksQuery",
|
83
|
+
"GetCaseUsersQuery",
|
84
|
+
"CheckCaseNameQuery",
|
85
|
+
|
86
|
+
# Task queries
|
87
|
+
"ListTasksQuery",
|
88
|
+
"GetTaskQuery",
|
89
|
+
|
90
|
+
# Acquisition queries
|
91
|
+
"ListAcquisitionProfilesQuery",
|
92
|
+
"GetAcquisitionProfileQuery",
|
93
|
+
|
94
|
+
# Policy queries
|
95
|
+
"ListPoliciesQuery",
|
96
|
+
"GetPolicyQuery",
|
97
|
+
"GetPolicyAssignmentsQuery",
|
98
|
+
"GetPolicyExecutionsQuery",
|
99
|
+
|
100
|
+
# Organization queries
|
101
|
+
"ListOrganizationsQuery",
|
102
|
+
"GetOrganizationQuery",
|
103
|
+
"GetOrganizationUsersQuery",
|
104
|
+
"GetOrganizationRolesQuery",
|
105
|
+
"GetOrganizationLicensesQuery",
|
106
|
+
"GetOrganizationSettingsQuery",
|
107
|
+
|
108
|
+
# Triage queries
|
109
|
+
"ListTriageRulesQuery",
|
110
|
+
"GetTriageRuleQuery",
|
111
|
+
"GetTriageResultsQuery",
|
112
|
+
"GetTriageMatchesQuery",
|
113
|
+
"ListTriageTagsQuery",
|
114
|
+
"ListTriageProfilesQuery",
|
115
|
+
"GetTriageProfileQuery",
|
116
|
+
|
117
|
+
# Audit queries
|
118
|
+
"ListAuditLogsQuery",
|
119
|
+
"GetAuditLogQuery",
|
120
|
+
"GetAuditSummaryQuery",
|
121
|
+
"GetUserActivityQuery",
|
122
|
+
"GetSystemEventsQuery",
|
123
|
+
"GetAuditRetentionPolicyQuery",
|
124
|
+
"ExportAuditLogsQuery",
|
125
|
+
|
126
|
+
# Baseline queries
|
127
|
+
"ListBaselinesQuery",
|
128
|
+
"GetBaselineQuery",
|
129
|
+
"GetBaselineComparisonsQuery",
|
130
|
+
"GetBaselineComparisonQuery",
|
131
|
+
"ListBaselineProfilesQuery",
|
132
|
+
"GetBaselineProfileQuery",
|
133
|
+
"GetBaselineSchedulesQuery",
|
134
|
+
]
|