Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions privx_api/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@ class HostStoreEnum:
SETTINGS = "HOST_STORE.SETTINGS"
STATUS = "HOST_STORE.STATUS"
TAGS = "HOST_STORE.TAGS"
WHITELISTS = "HOST_STORE.WHITELISTS"
WHITELIST_SEARCH = "HOST_STORE.WHITELIST_SEARCH"
WHITELIST_EVALUATE = "HOST_STORE.WHITELIST_EVALUATE"
WHITELIST = "HOST_STORE.WHITELIST"

urls = {
DEPLOY: "/host-store/api/v1/hosts/deploy",
Expand All @@ -66,6 +70,10 @@ class HostStoreEnum:
SETTINGS: "/host-store/api/v1/settings/default_service_options",
STATUS: "/host-store/api/v1/status",
TAGS: "/host-store/api/v1/hosts/tags",
WHITELISTS: "/host-store/api/v1/whitelists",
WHITELIST: "/host-store/api/v1/whitelists/{whitelist_id}",
WHITELIST_SEARCH: "/host-store/api/v1/whitelists/search",
WHITELIST_EVALUATE: "/host-store/api/v1/whitelists/evaluate",
}


Expand Down
133 changes: 133 additions & 0 deletions privx_api/host_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,136 @@ def get_default_service_options(self) -> PrivXAPIResponse:
UrlEnum.HOST_STORE.SETTINGS,
)
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)

def get_command_restriction_whitelists(
self,
offset: Optional[int] = None,
limit: Optional[int] = None,
query: Optional[str] = None,
sort_dir: Optional[str] = None,
) -> PrivXAPIResponse:
"""
Get all whitelists.

Returns:
PrivXAPIResponse
"""
search_params = self._get_search_params(
offset=offset,
limit=limit,
query=query,
sortdir=sort_dir,
)
response_status, data = self._http_get(
UrlEnum.HOST_STORE.WHITELISTS,
query_params=search_params,
)
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)

def create_command_restriction_whitelist(self, whitelist: dict) -> PrivXAPIResponse:
"""
Create a whitelist, see required fields from API docs.

Returns:
PrivXAPIResponse
"""
response_status, data = self._http_post(
UrlEnum.HOST_STORE.WHITELISTS,
body=whitelist,
)
return PrivXAPIResponse(response_status, HTTPStatus.CREATED, data)

def get_command_restriction_whitelist(self, whitelist_id: str) -> PrivXAPIResponse:
"""
Get a whitelist by id.

Returns:
PrivXAPIResponse
"""
response_status, data = self._http_get(
UrlEnum.HOST_STORE.WHITELIST,
path_params={"whitelist_id": whitelist_id},
)
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)

def delete_command_restriction_whitelist(
self, whitelist_id: str
) -> PrivXAPIResponse:
"""
Remove a whitelist by id.

Returns:
PrivXAPIResponse
"""
response_status, data = self._http_delete(
UrlEnum.HOST_STORE.WHITELIST,
path_params={"whitelist_id": whitelist_id},
)
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)

def update_command_restriction_whitelist(
self, whitelist_id: str, whitelist: dict
) -> PrivXAPIResponse:
"""
Update a whitelist by id, see required fields from API docs.

Returns:
PrivXAPIResponse
"""
response_status, data = self._http_put(
UrlEnum.HOST_STORE.WHITELIST,
path_params={"whitelist_id": whitelist_id},
body=whitelist,
)
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)

def search_command_restriction_whitelists(
self,
offset: Optional[int] = None,
limit: Optional[int] = None,
sort_key: Optional[str] = None,
sort_dir: Optional[str] = None,
search_payload: Optional[dict] = None,
) -> PrivXAPIResponse:
"""
Search for whitelists, more granular search could be done
via "keywords" body param
search_payload = {
"keywords": "common_whitelist,allow_all_cmds",
}

Returns:
PrivXAPIResponse
"""
search_params = self._get_search_params(
offset=offset,
limit=limit,
sortkey=sort_key,
sortdir=sort_dir,
)

response_status, data = self._http_post(
UrlEnum.HOST_STORE.WHITELIST_SEARCH,
query_params=search_params,
body=get_value(search_payload, dict()),
)
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)

def eval_commands_against_whitelist(
self, whitelist: dict, rshell_variant: str, cmds: [str]
) -> PrivXAPIResponse:
"""
Evaluate commands against the whitelist,see required fields from API docs.

Returns:
PrivXAPIResponse
"""
response_status, data = self._http_post(
UrlEnum.HOST_STORE.WHITELIST_EVALUATE,
body={
"whitelist": whitelist,
"rshell_variant": rshell_variant,
"commands": cmds,
},
)
return PrivXAPIResponse(response_status, HTTPStatus.OK, data)
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

setup(
name="privx_api",
version="38.0.0",
version="39.0.0",
packages=["privx_api"],
license="Apache Licence 2.0",
url="https://github.com/SSHcom/privx-sdk-for-python",
Expand Down