Skip to content

Commit a3969e1

Browse files
committed
add host-store's whitelist endpoints
1 parent cd4d4be commit a3969e1

File tree

3 files changed

+142
-1
lines changed

3 files changed

+142
-1
lines changed

privx_api/enums.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ class HostStoreEnum:
5353
SETTINGS = "HOST_STORE.SETTINGS"
5454
STATUS = "HOST_STORE.STATUS"
5555
TAGS = "HOST_STORE.TAGS"
56+
WHITELISTS = "HOST_STORE.WHITELISTS"
57+
WHITELIST_SEARCH = "HOST_STORE.WHITELIST_SEARCH"
58+
WHITELIST_EVALUATE = "HOST_STORE.WHITELIST_EVALUATE"
59+
WHITELIST = "HOST_STORE.WHITELIST"
5660

5761
urls = {
5862
DEPLOY: "/host-store/api/v1/hosts/deploy",
@@ -66,6 +70,10 @@ class HostStoreEnum:
6670
SETTINGS: "/host-store/api/v1/settings/default_service_options",
6771
STATUS: "/host-store/api/v1/status",
6872
TAGS: "/host-store/api/v1/hosts/tags",
73+
WHITELISTS: "/host-store/api/v1/whitelists",
74+
WHITELIST: "/host-store/api/v1/whitelists/{whitelist_id}",
75+
WHITELIST_SEARCH: "/host-store/api/v1/whitelists/search",
76+
WHITELIST_EVALUATE: "/host-store/api/v1/whitelists/evaluate",
6977
}
7078

7179

privx_api/host_store.py

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,3 +217,136 @@ def get_default_service_options(self) -> PrivXAPIResponse:
217217
UrlEnum.HOST_STORE.SETTINGS,
218218
)
219219
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)
220+
221+
def get_command_restriction_whitelists(
222+
self,
223+
offset: Optional[int] = None,
224+
limit: Optional[int] = None,
225+
query: Optional[str] = None,
226+
sort_dir: Optional[str] = None,
227+
) -> PrivXAPIResponse:
228+
"""
229+
Get all whitelists.
230+
231+
Returns:
232+
PrivXAPIResponse
233+
"""
234+
search_params = self._get_search_params(
235+
offset=offset,
236+
limit=limit,
237+
query=query,
238+
sortdir=sort_dir,
239+
)
240+
response_status, data = self._http_get(
241+
UrlEnum.HOST_STORE.WHITELISTS,
242+
query_params=search_params,
243+
)
244+
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)
245+
246+
def create_command_restriction_whitelist(self, whitelist: dict) -> PrivXAPIResponse:
247+
"""
248+
Create a whitelist, see required fields from API docs.
249+
250+
Returns:
251+
PrivXAPIResponse
252+
"""
253+
response_status, data = self._http_post(
254+
UrlEnum.HOST_STORE.WHITELISTS,
255+
body=whitelist,
256+
)
257+
return PrivXAPIResponse(response_status, HTTPStatus.CREATED, data)
258+
259+
def get_command_restriction_whitelist(self, whitelist_id: str) -> PrivXAPIResponse:
260+
"""
261+
Get a whitelist by id.
262+
263+
Returns:
264+
PrivXAPIResponse
265+
"""
266+
response_status, data = self._http_get(
267+
UrlEnum.HOST_STORE.WHITELIST,
268+
path_params={"whitelist_id": whitelist_id},
269+
)
270+
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)
271+
272+
def delete_command_restriction_whitelist(
273+
self, whitelist_id: str
274+
) -> PrivXAPIResponse:
275+
"""
276+
Remove a whitelist by id.
277+
278+
Returns:
279+
PrivXAPIResponse
280+
"""
281+
response_status, data = self._http_delete(
282+
UrlEnum.HOST_STORE.WHITELIST,
283+
path_params={"whitelist_id": whitelist_id},
284+
)
285+
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)
286+
287+
def update_command_restriction_whitelist(
288+
self, whitelist_id: str, whitelist: dict
289+
) -> PrivXAPIResponse:
290+
"""
291+
Update a whitelist by id, see required fields from API docs.
292+
293+
Returns:
294+
PrivXAPIResponse
295+
"""
296+
response_status, data = self._http_put(
297+
UrlEnum.HOST_STORE.WHITELIST,
298+
path_params={"whitelist_id": whitelist_id},
299+
body=whitelist,
300+
)
301+
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)
302+
303+
def search_command_restriction_whitelists(
304+
self,
305+
offset: Optional[int] = None,
306+
limit: Optional[int] = None,
307+
sort_key: Optional[str] = None,
308+
sort_dir: Optional[str] = None,
309+
search_payload: Optional[dict] = None,
310+
) -> PrivXAPIResponse:
311+
"""
312+
Search for whitelists, more granular search could be done
313+
via "keywords" body param
314+
search_payload = {
315+
"keywords": "common_whitelist,allow_all_cmds",
316+
}
317+
318+
Returns:
319+
PrivXAPIResponse
320+
"""
321+
search_params = self._get_search_params(
322+
offset=offset,
323+
limit=limit,
324+
sortkey=sort_key,
325+
sortdir=sort_dir,
326+
)
327+
328+
response_status, data = self._http_post(
329+
UrlEnum.HOST_STORE.WHITELIST_SEARCH,
330+
query_params=search_params,
331+
body=get_value(search_payload, dict()),
332+
)
333+
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)
334+
335+
def eval_commands_against_whitelist(
336+
self, whitelist: dict, rshell_variant: str, cmds: [str]
337+
) -> PrivXAPIResponse:
338+
"""
339+
Evaluate commands against the whitelist,see required fields from API docs.
340+
341+
Returns:
342+
PrivXAPIResponse
343+
"""
344+
response_status, data = self._http_post(
345+
UrlEnum.HOST_STORE.WHITELIST_EVALUATE,
346+
body={
347+
"whitelist": whitelist,
348+
"rshell_variant": rshell_variant,
349+
"commands": cmds,
350+
},
351+
)
352+
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
setup(
66
name="privx_api",
7-
version="38.0.0",
7+
version="39.0.0",
88
packages=["privx_api"],
99
license="Apache Licence 2.0",
1010
url="https://github.com/SSHcom/privx-sdk-for-python",

0 commit comments

Comments
 (0)