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,44 @@
|
|
1
|
+
"""
|
2
|
+
Recent Activities queries for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Optional
|
6
|
+
|
7
|
+
from ..base import Query
|
8
|
+
from ..models.recent_activities import RecentActivitiesList, RecentActivitiesFilter
|
9
|
+
from ..http_client import HTTPClient
|
10
|
+
|
11
|
+
|
12
|
+
class GetRecentActivitiesQuery(Query[RecentActivitiesList]):
|
13
|
+
"""Query to get recent activities."""
|
14
|
+
|
15
|
+
def __init__(self, http_client: HTTPClient, filter_params: Optional[RecentActivitiesFilter] = None):
|
16
|
+
self.http_client = http_client
|
17
|
+
self.filter_params = filter_params or RecentActivitiesFilter()
|
18
|
+
|
19
|
+
def execute(self) -> RecentActivitiesList:
|
20
|
+
"""Execute the query to get recent activities."""
|
21
|
+
params = {}
|
22
|
+
|
23
|
+
# Add filter parameters
|
24
|
+
if self.filter_params.organization_id is not None:
|
25
|
+
params['filter[organizationId]'] = str(self.filter_params.organization_id)
|
26
|
+
if self.filter_params.type:
|
27
|
+
params['filter[type]'] = self.filter_params.type
|
28
|
+
if self.filter_params.username:
|
29
|
+
params['filter[username]'] = self.filter_params.username
|
30
|
+
if self.filter_params.search_term:
|
31
|
+
params['filter[searchTerm]'] = self.filter_params.search_term
|
32
|
+
|
33
|
+
# Add pagination parameters
|
34
|
+
if self.filter_params.page_size:
|
35
|
+
params['pageSize'] = str(self.filter_params.page_size)
|
36
|
+
if self.filter_params.page_number:
|
37
|
+
params['pageNumber'] = str(self.filter_params.page_number)
|
38
|
+
if self.filter_params.sort_by:
|
39
|
+
params['sortBy'] = self.filter_params.sort_by
|
40
|
+
if self.filter_params.sort_type:
|
41
|
+
params['sortType'] = self.filter_params.sort_type
|
42
|
+
|
43
|
+
response = self.http_client.get('/recent-activities', params=params)
|
44
|
+
return RecentActivitiesList(**response['result'])
|
@@ -0,0 +1,42 @@
|
|
1
|
+
"""
|
2
|
+
Relay Server queries for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Optional
|
6
|
+
|
7
|
+
from ..base import Query
|
8
|
+
from ..models.relay_server import RelayServer, RelayServersList, RelayServersFilter
|
9
|
+
from ..http_client import HTTPClient
|
10
|
+
|
11
|
+
|
12
|
+
class GetRelayServersQuery(Query[RelayServersList]):
|
13
|
+
"""Query to get relay servers."""
|
14
|
+
|
15
|
+
def __init__(self, http_client: HTTPClient, filter_params: Optional[RelayServersFilter] = None):
|
16
|
+
self.http_client = http_client
|
17
|
+
self.filter_params = filter_params or RelayServersFilter()
|
18
|
+
|
19
|
+
def execute(self) -> RelayServersList:
|
20
|
+
"""Execute the query to get relay servers."""
|
21
|
+
# Use the filter's to_params() method to ensure proper parameter formatting
|
22
|
+
# including required organizationId parameter
|
23
|
+
params = self.filter_params.to_params()
|
24
|
+
|
25
|
+
response = self.http_client.get('/relay-servers', params=params)
|
26
|
+
return RelayServersList(**response['result'])
|
27
|
+
|
28
|
+
|
29
|
+
class GetRelayServerByIdQuery(Query[Optional[RelayServer]]):
|
30
|
+
"""Query to get a specific relay server by ID."""
|
31
|
+
|
32
|
+
def __init__(self, http_client: HTTPClient, server_id: str):
|
33
|
+
self.http_client = http_client
|
34
|
+
self.server_id = server_id
|
35
|
+
|
36
|
+
def execute(self) -> Optional[RelayServer]:
|
37
|
+
"""Execute the query to get a relay server by ID."""
|
38
|
+
try:
|
39
|
+
response = self.http_client.get(f'/relay-servers/{self.server_id}')
|
40
|
+
return RelayServer(**response['result'])
|
41
|
+
except Exception:
|
42
|
+
return None
|
binalyze_air/queries/settings.py
CHANGED
@@ -1,20 +1,533 @@
|
|
1
|
-
"""
|
2
|
-
Settings queries for the Binalyze AIR SDK.
|
3
|
-
"""
|
4
|
-
|
5
|
-
from
|
6
|
-
from ..
|
7
|
-
from ..
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
1
|
+
"""
|
2
|
+
Settings queries for the Binalyze AIR SDK.
|
3
|
+
"""
|
4
|
+
|
5
|
+
from typing import Dict, Any, Union, Optional
|
6
|
+
from ..base import Query
|
7
|
+
from ..models.settings import (
|
8
|
+
BannerSettings, AllSettings, UpdateProxySettingsRequest,
|
9
|
+
ValidateProxySettingsRequest, UpdateActiveDirectorySettingsRequest,
|
10
|
+
ValidateActiveDirectorySettingsRequest, UpdateSMTPSettingsRequest,
|
11
|
+
ValidateSMTPSettingsRequest, UpdateConsoleAddressSettingsRequest,
|
12
|
+
ValidateConsoleAddressSettingsRequest, UpdatePolicySettingsRequest,
|
13
|
+
UpdateEnforceTFASettingsRequest, UpdateAutoAssetTaggingSettingsRequest,
|
14
|
+
UpdateInteractSettingsRequest, UpdateRFC3161SettingsRequest,
|
15
|
+
UpdateResponderSettingsRequest, UpdateLocardSettingsRequest,
|
16
|
+
UpdateUninstallationPasswordProtectionSettingsRequest,
|
17
|
+
UpdateSyslogSettingsRequest, ValidateSyslogSettingsRequest,
|
18
|
+
UpdateBackupRestoreSettingsRequest, ValidateBackupSftpSettingsRequest,
|
19
|
+
UpdateSslSettingsRequest, ValidateSslSettingsRequest,
|
20
|
+
UpdateSingleSignOnSettingsRequest
|
21
|
+
)
|
22
|
+
from ..http_client import HTTPClient
|
23
|
+
|
24
|
+
|
25
|
+
class GetSettingsQuery(Query[AllSettings]):
|
26
|
+
"""Query to get all system settings."""
|
27
|
+
|
28
|
+
def __init__(self, http_client: HTTPClient):
|
29
|
+
self.http_client = http_client
|
30
|
+
|
31
|
+
def execute(self) -> AllSettings:
|
32
|
+
"""Execute the query to get all settings."""
|
33
|
+
response = self.http_client.get("settings")
|
34
|
+
|
35
|
+
return AllSettings(**response.get("result", {}))
|
36
|
+
|
37
|
+
|
38
|
+
class GetBannerSettingsQuery(Query[BannerSettings]):
|
39
|
+
"""Query to get banner settings."""
|
40
|
+
|
41
|
+
def __init__(self, http_client: HTTPClient):
|
42
|
+
self.http_client = http_client
|
43
|
+
|
44
|
+
def execute(self) -> BannerSettings:
|
45
|
+
"""Execute the query to get banner settings."""
|
46
|
+
response = self.http_client.get("settings/banner")
|
47
|
+
|
48
|
+
return BannerSettings(**response.get("result", {}))
|
49
|
+
|
50
|
+
|
51
|
+
class UpdateProxySettingsQuery:
|
52
|
+
"""Query for updating proxy settings."""
|
53
|
+
|
54
|
+
def __init__(self, request: Union[UpdateProxySettingsRequest, Dict[str, Any]]):
|
55
|
+
"""Initialize proxy settings update query.
|
56
|
+
|
57
|
+
Args:
|
58
|
+
request: Proxy settings request data
|
59
|
+
"""
|
60
|
+
if isinstance(request, dict):
|
61
|
+
self._request = UpdateProxySettingsRequest(**request)
|
62
|
+
else:
|
63
|
+
self._request = request
|
64
|
+
|
65
|
+
def build_form_data(self) -> Dict[str, Any]:
|
66
|
+
"""Build form data for proxy settings update.
|
67
|
+
|
68
|
+
Returns:
|
69
|
+
Dictionary of form data
|
70
|
+
"""
|
71
|
+
form_data = {
|
72
|
+
'enabled': str(self._request.enabled).lower(),
|
73
|
+
}
|
74
|
+
|
75
|
+
if self._request.address:
|
76
|
+
form_data['address'] = self._request.address
|
77
|
+
if self._request.port:
|
78
|
+
form_data['port'] = str(self._request.port)
|
79
|
+
if self._request.username:
|
80
|
+
form_data['username'] = self._request.username
|
81
|
+
if self._request.password:
|
82
|
+
form_data['password'] = self._request.password
|
83
|
+
if self._request.cert_type:
|
84
|
+
# Handle both enum and string values - FIXED
|
85
|
+
if hasattr(self._request.cert_type, 'value'):
|
86
|
+
form_data['certType'] = self._request.cert_type.value
|
87
|
+
else:
|
88
|
+
form_data['certType'] = self._request.cert_type
|
89
|
+
if self._request.cert_password:
|
90
|
+
form_data['certPassword'] = self._request.cert_password
|
91
|
+
|
92
|
+
return form_data
|
93
|
+
|
94
|
+
def build_files(self) -> Optional[Dict[str, Any]]:
|
95
|
+
"""Build files data for proxy settings update.
|
96
|
+
|
97
|
+
Returns:
|
98
|
+
Dictionary of files data or None
|
99
|
+
"""
|
100
|
+
if self._request.cert:
|
101
|
+
return {'cert': ('cert.pem', self._request.cert, 'application/x-pem-file')}
|
102
|
+
return None
|
103
|
+
|
104
|
+
|
105
|
+
class ValidateProxySettingsQuery:
|
106
|
+
"""Query for validating proxy settings."""
|
107
|
+
|
108
|
+
def __init__(self, request: Union[ValidateProxySettingsRequest, Dict[str, Any]]):
|
109
|
+
"""Initialize proxy settings validation query.
|
110
|
+
|
111
|
+
Args:
|
112
|
+
request: Proxy settings validation request data
|
113
|
+
"""
|
114
|
+
if isinstance(request, dict):
|
115
|
+
self._request = ValidateProxySettingsRequest(**request)
|
116
|
+
else:
|
117
|
+
self._request = request
|
118
|
+
|
119
|
+
def build_form_data(self) -> Dict[str, Any]:
|
120
|
+
"""Build form data for proxy settings validation.
|
121
|
+
|
122
|
+
Returns:
|
123
|
+
Dictionary of form data
|
124
|
+
"""
|
125
|
+
form_data = {
|
126
|
+
'enabled': str(self._request.enabled).lower(),
|
127
|
+
}
|
128
|
+
|
129
|
+
if self._request.address:
|
130
|
+
form_data['address'] = self._request.address
|
131
|
+
if self._request.port:
|
132
|
+
form_data['port'] = str(self._request.port)
|
133
|
+
if self._request.username:
|
134
|
+
form_data['username'] = self._request.username
|
135
|
+
if self._request.password:
|
136
|
+
form_data['password'] = self._request.password
|
137
|
+
if self._request.cert_type:
|
138
|
+
# Handle both enum and string values - FIXED
|
139
|
+
if hasattr(self._request.cert_type, 'value'):
|
140
|
+
form_data['certType'] = self._request.cert_type.value
|
141
|
+
else:
|
142
|
+
form_data['certType'] = self._request.cert_type
|
143
|
+
if self._request.cert_password:
|
144
|
+
form_data['certPassword'] = self._request.cert_password
|
145
|
+
|
146
|
+
return form_data
|
147
|
+
|
148
|
+
def build_files(self) -> Optional[Dict[str, Any]]:
|
149
|
+
"""Build files data for proxy settings validation.
|
150
|
+
|
151
|
+
Returns:
|
152
|
+
Dictionary of files data or None
|
153
|
+
"""
|
154
|
+
if self._request.cert:
|
155
|
+
return {'cert': ('cert.pem', self._request.cert, 'application/x-pem-file')}
|
156
|
+
return None
|
157
|
+
|
158
|
+
|
159
|
+
class UpdateActiveDirectorySettingsQuery:
|
160
|
+
"""Query for updating Active Directory settings."""
|
161
|
+
|
162
|
+
def __init__(self, request: Union[UpdateActiveDirectorySettingsRequest, Dict[str, Any]]):
|
163
|
+
"""Initialize Active Directory settings update query.
|
164
|
+
|
165
|
+
Args:
|
166
|
+
request: Active Directory settings request data
|
167
|
+
"""
|
168
|
+
if isinstance(request, dict):
|
169
|
+
self._request = UpdateActiveDirectorySettingsRequest(**request)
|
170
|
+
else:
|
171
|
+
self._request = request
|
172
|
+
|
173
|
+
def build_body(self) -> Dict[str, Any]:
|
174
|
+
"""Build request body for Active Directory settings update.
|
175
|
+
|
176
|
+
Returns:
|
177
|
+
Dictionary of request body data
|
178
|
+
"""
|
179
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
180
|
+
|
181
|
+
|
182
|
+
class ValidateActiveDirectorySettingsQuery:
|
183
|
+
"""Query for validating Active Directory settings."""
|
184
|
+
|
185
|
+
def __init__(self, request: Union[ValidateActiveDirectorySettingsRequest, Dict[str, Any]]):
|
186
|
+
"""Initialize Active Directory settings validation query.
|
187
|
+
|
188
|
+
Args:
|
189
|
+
request: Active Directory settings validation request data
|
190
|
+
"""
|
191
|
+
if isinstance(request, dict):
|
192
|
+
self._request = ValidateActiveDirectorySettingsRequest(**request)
|
193
|
+
else:
|
194
|
+
self._request = request
|
195
|
+
|
196
|
+
def build_body(self) -> Dict[str, Any]:
|
197
|
+
"""Build request body for Active Directory settings validation.
|
198
|
+
|
199
|
+
Returns:
|
200
|
+
Dictionary of request body data
|
201
|
+
"""
|
202
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
203
|
+
|
204
|
+
|
205
|
+
class UpdateSMTPSettingsQuery:
|
206
|
+
"""Query for updating SMTP settings."""
|
207
|
+
|
208
|
+
def __init__(self, request: Union[UpdateSMTPSettingsRequest, Dict[str, Any]]):
|
209
|
+
"""Initialize SMTP settings update query.
|
210
|
+
|
211
|
+
Args:
|
212
|
+
request: SMTP settings request data
|
213
|
+
"""
|
214
|
+
if isinstance(request, dict):
|
215
|
+
self._request = UpdateSMTPSettingsRequest(**request)
|
216
|
+
else:
|
217
|
+
self._request = request
|
218
|
+
|
219
|
+
def build_body(self) -> Dict[str, Any]:
|
220
|
+
"""Build request body for SMTP settings update.
|
221
|
+
|
222
|
+
Returns:
|
223
|
+
Dictionary of request body data
|
224
|
+
"""
|
225
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
226
|
+
|
227
|
+
|
228
|
+
class ValidateSMTPSettingsQuery:
|
229
|
+
"""Query for validating SMTP settings."""
|
230
|
+
|
231
|
+
def __init__(self, request: Union[ValidateSMTPSettingsRequest, Dict[str, Any]]):
|
232
|
+
"""Initialize SMTP settings validation query.
|
233
|
+
|
234
|
+
Args:
|
235
|
+
request: SMTP settings validation request data
|
236
|
+
"""
|
237
|
+
if isinstance(request, dict):
|
238
|
+
self._request = ValidateSMTPSettingsRequest(**request)
|
239
|
+
else:
|
240
|
+
self._request = request
|
241
|
+
|
242
|
+
def build_body(self) -> Dict[str, Any]:
|
243
|
+
"""Build request body for SMTP settings validation.
|
244
|
+
|
245
|
+
Returns:
|
246
|
+
Dictionary of request body data
|
247
|
+
"""
|
248
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
249
|
+
|
250
|
+
|
251
|
+
class UpdateConsoleAddressSettingsQuery:
|
252
|
+
"""Query for updating console address settings."""
|
253
|
+
|
254
|
+
def __init__(self, request: Union[UpdateConsoleAddressSettingsRequest, Dict[str, Any]]):
|
255
|
+
"""Initialize console address settings update query.
|
256
|
+
|
257
|
+
Args:
|
258
|
+
request: Console address settings request data
|
259
|
+
"""
|
260
|
+
if isinstance(request, dict):
|
261
|
+
self._request = UpdateConsoleAddressSettingsRequest(**request)
|
262
|
+
else:
|
263
|
+
self._request = request
|
264
|
+
|
265
|
+
def build_form_data(self) -> Dict[str, Any]:
|
266
|
+
"""Build form data for console address settings update.
|
267
|
+
|
268
|
+
Returns:
|
269
|
+
Dictionary of form data
|
270
|
+
"""
|
271
|
+
form_data = {
|
272
|
+
'consoleAddress': self._request.console_address,
|
273
|
+
}
|
274
|
+
|
275
|
+
if self._request.cert_type:
|
276
|
+
form_data['certType'] = self._request.cert_type
|
277
|
+
if self._request.cert_password:
|
278
|
+
form_data['certPassword'] = self._request.cert_password
|
279
|
+
|
280
|
+
return form_data
|
281
|
+
|
282
|
+
def build_files(self) -> Optional[Dict[str, Any]]:
|
283
|
+
"""Build files data for console address settings update.
|
284
|
+
|
285
|
+
Returns:
|
286
|
+
Dictionary of files data or None
|
287
|
+
"""
|
288
|
+
files = {}
|
289
|
+
if self._request.cert:
|
290
|
+
files['cert'] = ('cert.pem', self._request.cert, 'application/x-pem-file')
|
291
|
+
if self._request.key:
|
292
|
+
files['key'] = ('key.pem', self._request.key, 'application/x-pem-file')
|
293
|
+
return files if files else None
|
294
|
+
|
295
|
+
|
296
|
+
class ValidateConsoleAddressSettingsQuery:
|
297
|
+
"""Query for validating console address settings."""
|
298
|
+
|
299
|
+
def __init__(self, request: Union[ValidateConsoleAddressSettingsRequest, Dict[str, Any]]):
|
300
|
+
"""Initialize console address settings validation query.
|
301
|
+
|
302
|
+
Args:
|
303
|
+
request: Console address settings validation request data
|
304
|
+
"""
|
305
|
+
if isinstance(request, dict):
|
306
|
+
self._request = ValidateConsoleAddressSettingsRequest(**request)
|
307
|
+
else:
|
308
|
+
self._request = request
|
309
|
+
|
310
|
+
def build_body(self) -> Dict[str, Any]:
|
311
|
+
"""Build request body for console address settings validation.
|
312
|
+
|
313
|
+
Returns:
|
314
|
+
Dictionary of request body data
|
315
|
+
"""
|
316
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
317
|
+
|
318
|
+
|
319
|
+
# Simple JSON-based settings queries (most have the same pattern)
|
320
|
+
class UpdatePolicySettingsQuery:
|
321
|
+
"""Query for updating policy settings."""
|
322
|
+
|
323
|
+
def __init__(self, request: Union[UpdatePolicySettingsRequest, Dict[str, Any]]):
|
324
|
+
if isinstance(request, dict):
|
325
|
+
self._request = UpdatePolicySettingsRequest(**request)
|
326
|
+
else:
|
327
|
+
self._request = request
|
328
|
+
|
329
|
+
def build_body(self) -> Dict[str, Any]:
|
330
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
331
|
+
|
332
|
+
|
333
|
+
class UpdateEnforceTFASettingsQuery:
|
334
|
+
"""Query for updating enforce TFA settings."""
|
335
|
+
|
336
|
+
def __init__(self, request: Union[UpdateEnforceTFASettingsRequest, Dict[str, Any]]):
|
337
|
+
if isinstance(request, dict):
|
338
|
+
self._request = UpdateEnforceTFASettingsRequest(**request)
|
339
|
+
else:
|
340
|
+
self._request = request
|
341
|
+
|
342
|
+
def build_body(self) -> Dict[str, Any]:
|
343
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
344
|
+
|
345
|
+
|
346
|
+
class UpdateAutoAssetTaggingSettingsQuery:
|
347
|
+
"""Query for updating auto asset tagging settings."""
|
348
|
+
|
349
|
+
def __init__(self, request: Union[UpdateAutoAssetTaggingSettingsRequest, Dict[str, Any]]):
|
350
|
+
if isinstance(request, dict):
|
351
|
+
self._request = UpdateAutoAssetTaggingSettingsRequest(**request)
|
352
|
+
else:
|
353
|
+
self._request = request
|
354
|
+
|
355
|
+
def build_body(self) -> Dict[str, Any]:
|
356
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
357
|
+
|
358
|
+
|
359
|
+
class UpdateInteractSettingsQuery:
|
360
|
+
"""Query for updating InterACT settings."""
|
361
|
+
|
362
|
+
def __init__(self, request: Union[UpdateInteractSettingsRequest, Dict[str, Any]]):
|
363
|
+
if isinstance(request, dict):
|
364
|
+
self._request = UpdateInteractSettingsRequest(**request)
|
365
|
+
else:
|
366
|
+
self._request = request
|
367
|
+
|
368
|
+
def build_body(self) -> Dict[str, Any]:
|
369
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
370
|
+
|
371
|
+
|
372
|
+
class UpdateRFC3161SettingsQuery:
|
373
|
+
"""Query for updating RFC3161 settings."""
|
374
|
+
|
375
|
+
def __init__(self, request: Union[UpdateRFC3161SettingsRequest, Dict[str, Any]]):
|
376
|
+
if isinstance(request, dict):
|
377
|
+
self._request = UpdateRFC3161SettingsRequest(**request)
|
378
|
+
else:
|
379
|
+
self._request = request
|
380
|
+
|
381
|
+
def build_body(self) -> Dict[str, Any]:
|
382
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
383
|
+
|
384
|
+
|
385
|
+
class UpdateResponderSettingsQuery:
|
386
|
+
"""Query for updating responder/agent settings."""
|
387
|
+
|
388
|
+
def __init__(self, request: Union[UpdateResponderSettingsRequest, Dict[str, Any]]):
|
389
|
+
if isinstance(request, dict):
|
390
|
+
self._request = UpdateResponderSettingsRequest(**request)
|
391
|
+
else:
|
392
|
+
self._request = request
|
393
|
+
|
394
|
+
def build_body(self) -> Dict[str, Any]:
|
395
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
396
|
+
|
397
|
+
|
398
|
+
class UpdateLocardSettingsQuery:
|
399
|
+
"""Query for updating Locard settings."""
|
400
|
+
|
401
|
+
def __init__(self, request: Union[UpdateLocardSettingsRequest, Dict[str, Any]]):
|
402
|
+
if isinstance(request, dict):
|
403
|
+
self._request = UpdateLocardSettingsRequest(**request)
|
404
|
+
else:
|
405
|
+
self._request = request
|
406
|
+
|
407
|
+
def build_body(self) -> Dict[str, Any]:
|
408
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
409
|
+
|
410
|
+
|
411
|
+
class UpdateUninstallationPasswordProtectionSettingsQuery:
|
412
|
+
"""Query for updating uninstallation password protection settings."""
|
413
|
+
|
414
|
+
def __init__(self, request: Union[UpdateUninstallationPasswordProtectionSettingsRequest, Dict[str, Any]]):
|
415
|
+
if isinstance(request, dict):
|
416
|
+
self._request = UpdateUninstallationPasswordProtectionSettingsRequest(**request)
|
417
|
+
else:
|
418
|
+
self._request = request
|
419
|
+
|
420
|
+
def build_body(self) -> Dict[str, Any]:
|
421
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
422
|
+
|
423
|
+
# ADD THE REMAINING 9 QUERIES FOR SETTINGS API
|
424
|
+
|
425
|
+
class UpdateSyslogSettingsQuery:
|
426
|
+
"""Query for updating syslog settings."""
|
427
|
+
|
428
|
+
def __init__(self, request: Union[UpdateSyslogSettingsRequest, Dict[str, Any]]):
|
429
|
+
if isinstance(request, dict):
|
430
|
+
self._request = UpdateSyslogSettingsRequest(**request)
|
431
|
+
else:
|
432
|
+
self._request = request
|
433
|
+
|
434
|
+
def build_body(self) -> Dict[str, Any]:
|
435
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
436
|
+
|
437
|
+
class ValidateSyslogSettingsQuery:
|
438
|
+
"""Query for validating syslog settings."""
|
439
|
+
|
440
|
+
def __init__(self, request: Union[ValidateSyslogSettingsRequest, Dict[str, Any]]):
|
441
|
+
if isinstance(request, dict):
|
442
|
+
self._request = ValidateSyslogSettingsRequest(**request)
|
443
|
+
else:
|
444
|
+
self._request = request
|
445
|
+
|
446
|
+
def build_body(self) -> Dict[str, Any]:
|
447
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
448
|
+
|
449
|
+
class UpdateBackupRestoreSettingsQuery:
|
450
|
+
"""Query for updating backup restore settings."""
|
451
|
+
|
452
|
+
def __init__(self, request: Union[UpdateBackupRestoreSettingsRequest, Dict[str, Any]]):
|
453
|
+
if isinstance(request, dict):
|
454
|
+
self._request = UpdateBackupRestoreSettingsRequest(**request)
|
455
|
+
else:
|
456
|
+
self._request = request
|
457
|
+
|
458
|
+
def build_body(self) -> Dict[str, Any]:
|
459
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
460
|
+
|
461
|
+
class ValidateBackupSftpSettingsQuery:
|
462
|
+
"""Query for validating backup SFTP settings."""
|
463
|
+
|
464
|
+
def __init__(self, request: Union[ValidateBackupSftpSettingsRequest, Dict[str, Any]]):
|
465
|
+
if isinstance(request, dict):
|
466
|
+
self._request = ValidateBackupSftpSettingsRequest(**request)
|
467
|
+
else:
|
468
|
+
self._request = request
|
469
|
+
|
470
|
+
def build_body(self) -> Dict[str, Any]:
|
471
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
472
|
+
|
473
|
+
class UpdateSslSettingsQuery:
|
474
|
+
"""Query for updating SSL settings."""
|
475
|
+
|
476
|
+
def __init__(self, request: Union[UpdateSslSettingsRequest, Dict[str, Any]], cert_file: Optional[bytes] = None, key_file: Optional[bytes] = None):
|
477
|
+
if isinstance(request, dict):
|
478
|
+
self._request = UpdateSslSettingsRequest(**request)
|
479
|
+
else:
|
480
|
+
self._request = request
|
481
|
+
self._cert_file = cert_file
|
482
|
+
self._key_file = key_file
|
483
|
+
|
484
|
+
def build_body(self) -> Dict[str, Any]:
|
485
|
+
"""Build form data for SSL settings"""
|
486
|
+
form_data = self._request.model_dump(exclude_none=True, by_alias=True)
|
487
|
+
if self._cert_file:
|
488
|
+
form_data['cert'] = self._cert_file
|
489
|
+
if self._key_file:
|
490
|
+
form_data['key'] = self._key_file
|
491
|
+
return form_data
|
492
|
+
|
493
|
+
class ValidateSslSettingsQuery:
|
494
|
+
"""Query for validating SSL settings."""
|
495
|
+
|
496
|
+
def __init__(self, request: Union[ValidateSslSettingsRequest, Dict[str, Any]], cert_file: Optional[bytes] = None, key_file: Optional[bytes] = None):
|
497
|
+
if isinstance(request, dict):
|
498
|
+
self._request = ValidateSslSettingsRequest(**request)
|
499
|
+
else:
|
500
|
+
self._request = request
|
501
|
+
self._cert_file = cert_file
|
502
|
+
self._key_file = key_file
|
503
|
+
|
504
|
+
def build_body(self) -> Dict[str, Any]:
|
505
|
+
"""Build form data for SSL validation"""
|
506
|
+
form_data = self._request.model_dump(exclude_none=True, by_alias=True)
|
507
|
+
if self._cert_file:
|
508
|
+
form_data['cert'] = self._cert_file
|
509
|
+
if self._key_file:
|
510
|
+
form_data['key'] = self._key_file
|
511
|
+
return form_data
|
512
|
+
|
513
|
+
class UpdateSingleSignOnSettingsQuery:
|
514
|
+
"""Query for updating single sign-on settings."""
|
515
|
+
|
516
|
+
def __init__(self, request: Union[UpdateSingleSignOnSettingsRequest, Dict[str, Any]]):
|
517
|
+
if isinstance(request, dict):
|
518
|
+
self._request = UpdateSingleSignOnSettingsRequest(**request)
|
519
|
+
else:
|
520
|
+
self._request = request
|
521
|
+
|
522
|
+
def build_body(self) -> Dict[str, Any]:
|
523
|
+
return self._request.model_dump(exclude_none=True, by_alias=True)
|
524
|
+
|
525
|
+
class GetSsoCallbackUrlQuery:
|
526
|
+
"""Query for getting SSO callback URL by type."""
|
527
|
+
|
528
|
+
def __init__(self, sso_type: str):
|
529
|
+
self._sso_type = sso_type
|
530
|
+
|
531
|
+
def get_sso_type(self) -> str:
|
532
|
+
"""Get the SSO type (azure or okta)"""
|
533
|
+
return self._sso_type
|