Skip to content

Commit 9342186

Browse files
authored
Merge pull request #39 from CraigBryan/feat/fix_integration_config_updating
Fixed unsafe dictionary accesses in the `update_integration_instance_config_value`
2 parents 43ca985 + 1e0f6d2 commit 9342186

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

jupiterone/client.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@
55

66
import json
77
from warnings import warn
8-
from typing import Dict, List
8+
from typing import Dict, List, Union
99
from datetime import datetime
1010
import time
1111

1212
import re
1313
import requests
1414
from requests.adapters import HTTPAdapter, Retry
1515
from retrying import retry
16-
from typing import Union, List
1716

1817
from jupiterone.errors import (
1918
JupiterOneClientError,
@@ -703,7 +702,10 @@ def update_integration_instance_config_value(
703702
instance_config["data"]["integrationInstance"]["config"] = config_dict
704703

705704
# remove externalId to not include in update payload
706-
del instance_config["data"]["integrationInstance"]["config"]["externalId"]
705+
if "externalId" in instance_config["data"]["integrationInstance"]["config"]:
706+
del instance_config["data"]["integrationInstance"]["config"][
707+
"externalId"
708+
]
707709

708710
# prepare variables GraphQL payload for updating config
709711
instance_details = instance_config["data"]["integrationInstance"]
@@ -726,12 +728,18 @@ def update_integration_instance_config_value(
726728
}
727729

728730
# remove problem fields from previous response
729-
del variables["update"]["pollingIntervalCronExpression"]["__typename"]
731+
if variables["update"].get("pollingIntervalCronExpression") is not None:
732+
if "__typename" in ["update"]["pollingIntervalCronExpression"]:
733+
del variables["update"]["pollingIntervalCronExpression"][
734+
"__typename"
735+
]
730736

731-
for ingestion_source in instance_details["ingestionSourcesOverrides"]:
732-
ingestion_source.pop(
733-
"__typename", None
734-
) # Removes key if it exists, ignores if not
737+
ingestion_sources = instance_details.get("ingestionSourcesOverrides", None)
738+
if ingestion_sources is not None:
739+
for ingestion_source in instance_details["ingestionSourcesOverrides"]:
740+
ingestion_source.pop(
741+
"__typename", None
742+
) # Removes key if it exists, ignores if not
735743

736744
response = self._execute_query(
737745
UPDATE_INTEGRATION_INSTANCE, variables=variables

0 commit comments

Comments
 (0)