Skip to content

Commit 64225df

Browse files
committed
Fixed unsafe dictionary accesses in the update_integration_instance_config_value
1 parent 95760d5 commit 64225df

1 file changed

Lines changed: 18 additions & 7 deletions

File tree

jupiterone/client.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
""" Python SDK for JupiterOne GraphQL API """
2+
23
# pylint: disable=W0212,no-name-in-module
34
# see https://github.com/PyCQA/pylint/issues/409
45

56
import json
67
from warnings import warn
7-
from typing import Dict, List
8+
from typing import Dict, List, Union
89
from datetime import datetime
910
import time
1011

1112
import re
1213
import requests
1314
from requests.adapters import HTTPAdapter, Retry
1415
from retrying import retry
15-
from typing import Union, List
1616

1717
from jupiterone.errors import (
1818
JupiterOneClientError,
@@ -703,7 +703,7 @@ def update_integration_instance_config_value(self,
703703
704704
"""
705705

706-
# fetch existing instnace configuration
706+
# fetch existing instnace configuration
707707
instance_config = self.get_integration_instance_details(instance_id=instance_id)
708708
config_dict = instance_config['data']['integrationInstance']['config']
709709

@@ -714,7 +714,10 @@ def update_integration_instance_config_value(self,
714714
instance_config['data']['integrationInstance']['config'] = config_dict
715715

716716
# remove externalId to not include in update payload
717-
del instance_config['data']['integrationInstance']['config']['externalId']
717+
if "externalId" in instance_config["data"]["integrationInstance"]["config"]:
718+
del instance_config["data"]["integrationInstance"]["config"][
719+
"externalId"
720+
]
718721

719722
# prepare variables GraphQL payload for updating config
720723
instance_details = instance_config['data']['integrationInstance']
@@ -733,10 +736,18 @@ def update_integration_instance_config_value(self,
733736
}
734737

735738
# remove problem fields from previous response
736-
del variables['update']['pollingIntervalCronExpression']['__typename']
739+
if variables["update"].get("pollingIntervalCronExpression") is not None:
740+
if "__typename" in ["update"]["pollingIntervalCronExpression"]:
741+
del variables["update"]["pollingIntervalCronExpression"][
742+
"__typename"
743+
]
737744

738-
for ingestion_source in instance_details['ingestionSourcesOverrides']:
739-
ingestion_source.pop("__typename", None) # Removes key if it exists, ignores if not
745+
ingestion_sources = instance_details.get("ingestionSourcesOverrides", None)
746+
if ingestion_sources is not None:
747+
for ingestion_source in instance_details["ingestionSourcesOverrides"]:
748+
ingestion_source.pop(
749+
"__typename", None
750+
) # Removes key if it exists, ignores if not
740751

741752
response = self._execute_query(UPDATE_INTEGRATION_INSTANCE, variables=variables)
742753

0 commit comments

Comments
 (0)