From a828218f94c08c9fcf49e6c0434295ef8f43596b Mon Sep 17 00:00:00 2001 From: SeaBlooms Date: Wed, 20 Nov 2024 21:11:17 -0700 Subject: [PATCH] add parameter functions --- examples/examples.py | 9 ++++++ jupiterone/client.py | 63 +++++++++++++++++++++++++++++++++++++++++ jupiterone/constants.py | 36 +++++++++++++++++++++++ 3 files changed, 108 insertions(+) diff --git a/examples/examples.py b/examples/examples.py index 20ee0a7..1f065e8 100644 --- a/examples/examples.py +++ b/examples/examples.py @@ -461,3 +461,12 @@ r = j1.get_integration_instance_details(instance_id="") print("get_integration_instance_details()") print(json.dumps(r, indent=1)) + +r = j1.get_parameter_details(name="ParameterName") +print(json.dumps(r, indent=1)) + +r = j1.list_account_parameters() +print(json.dumps(r, indent=1)) + +r = j1.create_update_parameter(name="ParameterName", value="stored_value", secret=False) +print(json.dumps(r, indent=1)) diff --git a/jupiterone/client.py b/jupiterone/client.py index 1585808..1fdcdb6 100644 --- a/jupiterone/client.py +++ b/jupiterone/client.py @@ -12,6 +12,7 @@ import requests from requests.adapters import HTTPAdapter, Retry from retrying import retry +from typing import Union, List from jupiterone.errors import ( JupiterOneClientError, @@ -53,6 +54,9 @@ INTEGRATION_INSTANCES, INTEGRATION_INSTANCE, UPDATE_INTEGRATION_INSTANCE, + PARAMETER, + PARAMETER_LIST, + UPSERT_PARAMETER, ) @@ -1199,4 +1203,63 @@ def get_compliance_framework_item_details(self, item_id: str = None): } response = self._execute_query(COMPLIANCE_FRAMEWORK_ITEM, variables=variables) + return response + + def get_parameter_details(self, name: str = None): + """Fetch Details of a configured Parameter in J1 account + + """ + variables = { + "name": name + } + + response = self._execute_query(PARAMETER, variables=variables) + return response + + def list_account_parameters(self): + """Fetch List of all configured Account Parameters in J1 account + + """ + results = [] + + data = { + "query": PARAMETER_LIST, + "flags": { + "variableResultSize": True + } + } + + r = requests.post(url=self.graphql_url, headers=self.headers, json=data, verify=True).json() + results.extend(r['data']['parameterList']['items']) + + while r['data']['parameterList']['pageInfo']['hasNextPage'] == True: + cursor = r['data']['parameterList']['pageInfo']['endCursor'] + + # cursor query until last page fetched + data = { + "query": PARAMETER_LIST, + "variables": { + "cursor": cursor + }, + "flags": { + "variableResultSize": True + } + } + + r = requests.post(url=self.graphql_url, headers=self.headers, json=data, verify=True).json() + results.extend(r['data']['parameterList']['items']) + + return results + + def create_update_parameter(self, name: str = None, value: Union[str, int, bool, list] = None, secret: bool = False): + """Create or Update Account Parameter in J1 account + + """ + variables = { + "name": name, + "value": value, + "secret": secret + } + + response = self._execute_query(UPSERT_PARAMETER, variables=variables) return response \ No newline at end of file diff --git a/jupiterone/constants.py b/jupiterone/constants.py index 5cbeb9a..2232c4a 100644 --- a/jupiterone/constants.py +++ b/jupiterone/constants.py @@ -1194,3 +1194,39 @@ __typename } """ + +# PARAMETERS +PARAMETER = """ + query Query($name: String!) { + parameter(name: $name) { + name + value + secret + lastUpdatedOn + } + } +""" +PARAMETER_LIST = """ + query Query($limit: Int, $cursor: String) { + parameterList(limit: $limit, cursor: $cursor) { + items { + name + value + secret + lastUpdatedOn + } + pageInfo { + endCursor + hasNextPage + } + } + } +""" +UPSERT_PARAMETER = """ + mutation UpsertParameter($name: String!, $value: ParameterValue!, $secret: Boolean) { + setParameter(name: $name, value: $value, secret: $secret) { + success + __typename + } + } +"""