From 287f67496649638bee0bdc02d8c4d7384a2f9315 Mon Sep 17 00:00:00 2001 From: samuelFain <65926551+samuelFain@users.noreply.github.com> Date: Wed, 8 Nov 2023 13:58:06 -0700 Subject: [PATCH] [Versa Director] Updade request headers (#30666) * Update request headers * ruff updates and improvements * Update docker image * Update release notes * Update headers for UTs * Update docker image * Fix warning in input_data.py * Update Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.py Co-authored-by: Jasmine Beilin <71636766+JasBeilin@users.noreply.github.com> * Explicitly added xml headers in requested commands * Updated UT --------- Co-authored-by: Jasmine Beilin <71636766+JasBeilin@users.noreply.github.com> --- .../VersaDirector/VersaDirector.py | 312 +++++++++--------- .../VersaDirector/VersaDirector.yml | 4 +- .../VersaDirector/VersaDirector_test.py | 34 +- .../VersaDirector/test_data/input_data.py | 7 +- Packs/VersaDirector/ReleaseNotes/1_0_6.md | 7 + Packs/VersaDirector/pack_metadata.json | 2 +- 6 files changed, 195 insertions(+), 171 deletions(-) create mode 100644 Packs/VersaDirector/ReleaseNotes/1_0_6.md diff --git a/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.py b/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.py index 45624fee6b36..3a979ba9a72b 100644 --- a/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.py +++ b/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.py @@ -1,6 +1,6 @@ import demistomock as demisto from CommonServerPython import * # noqa #! pylint: disable=unused-wildcard-import -from typing import Dict, Any, Optional +from typing import Any import urllib3 # Disable insecure warnings @@ -67,7 +67,7 @@ def __init__( self.client_secret_param = client_secret_param self.use_basic_auth_param = use_basic_auth_param - # HEADING: """ CLIENT HELPER FUNCTIONS """ + # """ CLIENT HELPER FUNCTIONS """ def _create_access_policy_rule_request_body( self, @@ -260,7 +260,7 @@ def _create_custom_url_category_request_body( return request_body - # HEADING: """ REQUEST FUNCTIONS """ + # """ REQUEST FUNCTIONS """ def test_organization_name_request(self, organization_name: str): try: @@ -340,7 +340,7 @@ def auth_credentials_request(self, access_token: str, auth_client_name: str, tok return response - def appliance_list_request(self, offset: Optional[int] = None, limit: Optional[int] = None): + def appliance_list_request(self, offset: int | None = None, limit: int | None = None): params = assign_params(offset=offset, limit=limit) response = self._http_request( @@ -352,7 +352,7 @@ def appliance_list_request(self, offset: Optional[int] = None, limit: Optional[i return response - def organization_list_request(self, offset: Optional[int] = None, limit: Optional[int] = None): + def organization_list_request(self, offset: int | None = None, limit: int | None = None): params = assign_params(limit=limit, offset=offset) response = self._http_request( @@ -365,7 +365,7 @@ def organization_list_request(self, offset: Optional[int] = None, limit: Optiona return response def appliances_list_by_organization_request( - self, organization: str, offset: Optional[int] = None, limit: Optional[int] = None + self, organization: str, offset: int | None = None, limit: int | None = None ): params = assign_params(offset=offset, limit=limit) @@ -379,7 +379,7 @@ def appliances_list_by_organization_request( return response def appliances_group_list_by_organization_request( - self, organization: str, offset: Optional[int] = None, limit: Optional[int] = None + self, organization: str, offset: int | None = None, limit: int | None = None ): params = assign_params(organization_name=organization, offset=offset, limit=limit) response = self._http_request( @@ -395,8 +395,8 @@ def appliances_list_by_device_group_request( self, device_group: str, template_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) @@ -411,10 +411,10 @@ def appliances_list_by_device_group_request( def template_list_by_organization_request( self, - organization: Optional[str] = None, - type: Optional[list] = None, - offset: Optional[int] = None, - limit: Optional[int] = None, + organization: str | None = None, + type: list | None = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(organization=organization, type=type, offset=offset, limit=limit) @@ -427,10 +427,11 @@ def template_list_by_organization_request( return response - def template_list_by_datastore_request(self, organization: str, offset: Optional[int] = None, limit: Optional[int] = None): + def template_list_by_datastore_request(self, organization: str, offset: int | None = None, limit: int | None = None): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers['Accept'] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{organization}-DataStore/config/orgs/org", @@ -443,10 +444,10 @@ def template_list_by_datastore_request(self, organization: str, offset: Optional def application_service_template_list_request( self, - organization: Optional[str] = None, - keyword: Optional[str] = None, - offset: Optional[int] = None, - limit: Optional[int] = None, + organization: str | None = None, + keyword: str | None = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(organization=organization, searchKeyword=keyword, offset=offset, limit=limit) response = self._http_request( @@ -491,13 +492,14 @@ def template_custom_url_category_list_request( self, organization: str, template_name: str, - url_category_name: Optional[str] = None, - offset: Optional[int] = None, - limit: Optional[int] = None, + url_category_name: str | None = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(url_category_name=url_category_name, offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"/api/config/devices/template/{template_name}/config/orgs/org-services/{organization}" @@ -594,9 +596,9 @@ def appliance_custom_url_category_list_request( self, organization: str, appliance_name: str, - url_category_name: Optional[str] = None, - offset: Optional[int] = None, - limit: Optional[int] = None, + url_category_name: str | None = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) @@ -609,6 +611,7 @@ def appliance_custom_url_category_list_request( headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request("GET", url_suffix=suffix, params=params, headers=headers, resp_type="xml") return response @@ -697,12 +700,13 @@ def template_access_policy_list_request( self, organization: str, template_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{template_name}/config/orgs/org-services/{organization}" @@ -718,12 +722,13 @@ def template_access_policy_rule_list_request( organization: str, template_name: str, access_policy_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{template_name}/config/orgs/org-services/{organization}" @@ -834,12 +839,13 @@ def appliance_access_policy_list_request( self, organization: str, appliance_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/device/{appliance_name}/config/orgs/org-services/{organization}" @@ -856,12 +862,13 @@ def appliance_access_policy_rule_list_request( organization: str, appliance_name: str, access_policy_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/device/{appliance_name}/config/orgs/org-services/{organization}" @@ -972,12 +979,13 @@ def template_sdwan_policy_list_request( self, organization: str, template_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{template_name}/config/orgs/org-services/{organization}" @@ -993,12 +1001,13 @@ def template_sdwan_policy_rule_request( organization: str, template_name: str, sdwan_policy_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{template_name}/config/orgs/org-services/{organization}" @@ -1130,12 +1139,13 @@ def appliance_sdwan_policy_list_request( self, organization: str, appliance_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/device/{appliance_name}/config/orgs/org-services/{organization}" @@ -1151,12 +1161,13 @@ def appliance_sdwan_policy_rule_list_request( organization: str, appliance_name: str, sdwan_policy_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/device/{appliance_name}/config/orgs/org-services/{organization}" @@ -1287,12 +1298,13 @@ def template_address_object_list_request( self, organization: str, template_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{template_name}/config/orgs/org-services/" @@ -1369,12 +1381,13 @@ def appliance_address_object_list_request( self, organization: str, appliance_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/device/{appliance_name}/config/orgs/org-services/{organization}" @@ -1451,12 +1464,13 @@ def template_user_defined_application_list_request( self, organization: str, template_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{template_name}/config/orgs/org-services/{organization}" @@ -1472,12 +1486,13 @@ def appliance_user_defined_application_list_request( self, organization: str, appliance_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/device/{appliance_name}/config/orgs/org-services/{organization}" @@ -1493,12 +1508,13 @@ def template_user_modified_application_list_request( self, organization: str, template_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/template/{template_name}/config/orgs/org-services/{organization}" @@ -1514,12 +1530,13 @@ def appliance_user_modified_application_list_request( self, organization: str, appliance_name: str, - offset: Optional[int] = None, - limit: Optional[int] = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(offset=offset, limit=limit) headers = self._headers headers["Content-Type"] = "application/xml" + headers["Accept"] = "application/xml" response = self._http_request( "GET", url_suffix=f"api/config/devices/device/{appliance_name}/config/orgs/org-services/{organization}" @@ -1533,11 +1550,11 @@ def appliance_user_modified_application_list_request( def predefined_application_list_request( self, - family: Optional[str] = None, - risk: Optional[int] = None, - tags: Optional[list] = None, - offset: Optional[int] = None, - limit: Optional[int] = None, + family: str | None = None, + risk: int | None = None, + tags: list | None = None, + offset: int | None = None, + limit: int | None = None, ): params = assign_params(family=family, risk=risk, tags=tags, offset=offset, limit=limit) response = self._http_request( @@ -1552,10 +1569,10 @@ def predefined_application_list_request( return response -# HEADING: """ HELPER FUNCTIONS """ +# """ HELPER FUNCTIONS """ -def set_offset(page: Optional[int], page_size: Optional[int]): +def set_offset(page: int | None, page_size: int | None): """Determine offset according to 'page' and 'page_size' arguments :type page: ``Optional[int]`` @@ -1575,7 +1592,7 @@ def set_offset(page: Optional[int], page_size: Optional[int]): raise DemistoException(message="'page' or 'page_size' arguments are invalid.") -def check_limit(limit: Optional[int]): +def check_limit(limit: int | None): """Given 'limit' as an argument, check its validity :type limit: ``int`` @@ -1587,7 +1604,7 @@ def check_limit(limit: Optional[int]): raise DemistoException("Please provide a positive value for 'limit' argument.") -def set_organization(organization_args: Optional[str], organization_params: Optional[str]): +def set_organization(organization_args: str | None, organization_params: str | None): """Given two choices for default organization name (arguments or parameters), check if organization name exists. :type organization_args: ``str`` @@ -1694,7 +1711,8 @@ def create_client_header( if username and password: credentials = f"{username}:{password}" auth_header = f"Basic {b64_encode(credentials)}" - return (username, password), {"Authorization": auth_header} + return (username, password), {"Authorization": auth_header, 'Accept': 'application/json', + 'Content-Type': 'application/json'} else: return_error("Basic Authentication method chosen but Username or Password parameters are missing.") @@ -1705,7 +1723,8 @@ def create_client_header( case_context = all([client_id, client_secret, access_token]) if case_auth_token or case_context: - return None, {"Authorization": f"Bearer {access_token}"} + return None, {"Authorization": f"Bearer {access_token}", 'Accept': 'application/json', + 'Content-Type': 'application/json'} else: raise DemistoException( @@ -1840,10 +1859,10 @@ def get_sdwan_policy_rule_args_with_possible_custom_rule_json(args: dict[str, An } -# HEADING: """ COMMAND FUNCTIONS """ +# """ COMMAND FUNCTIONS """ -def handle_auth_token_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def handle_auth_token_command(client: Client, args: dict[str, Any]) -> CommandResults: """Creates Auth Clients and Auth tokens. The function will first determine whether Client ID and Client Secret were passed as parameters (default) or arguments, @@ -1957,15 +1976,14 @@ def handle_auth_token_command(client: Client, args: Dict[str, Any]) -> CommandRe return command_results -def auth_test_command(client: Client, args: Dict[str, Any]): +def auth_test_command(client: Client, args: dict[str, Any]): # test connectivity with chosen authentication method message = test_connectivity(client) - if message == "ok": - if headers := client._headers: - if "Bearer" in headers.get("Authorization"): - message = "Auth Token " - else: - message = "Basic " + if message == "ok" and (headers := client._headers): + if "Bearer" in headers.get("Authorization"): + message = "Auth Token " + else: + message = "Basic " # test organization name if provided if organization_name := client.organization_params: @@ -1974,7 +1992,7 @@ def auth_test_command(client: Client, args: Dict[str, Any]): return CommandResults(readable_output=message + "Authentication method connectivity verified.") -def appliance_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_list_command(client: Client, args: dict[str, Any]) -> CommandResults: page = arg_to_number(args.get("page")) page_size = arg_to_number(args.get("page_size")) limit = arg_to_number(args.get("limit", 25)) @@ -1998,7 +2016,7 @@ def appliance_list_command(client: Client, args: Dict[str, Any]) -> CommandResul return command_results -def organization_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def organization_list_command(client: Client, args: dict[str, Any]) -> CommandResults: page = arg_to_number(args.get("page")) page_size = arg_to_number(args.get("page_size")) limit = arg_to_number(args.get("limit")) @@ -2030,7 +2048,7 @@ def organization_list_command(client: Client, args: Dict[str, Any]) -> CommandRe return command_results -def appliances_list_by_organization_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliances_list_by_organization_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization", None) page = arg_to_number(args.get("page")) page_size = arg_to_number(args.get("page_size", 0)) @@ -2058,7 +2076,7 @@ def appliances_list_by_organization_command(client: Client, args: Dict[str, Any] return command_results -def appliances_group_list_by_organization_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliances_group_list_by_organization_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization", None) page = arg_to_number(args.get("page")) page_size = arg_to_number(args.get("page_size")) @@ -2091,7 +2109,7 @@ def appliances_group_list_by_organization_command(client: Client, args: Dict[str return command_results -def appliances_list_by_device_group_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliances_list_by_device_group_command(client: Client, args: dict[str, Any]) -> CommandResults: device_group = args.get("device_group", "") template_name = args.get("template_name", "") page = arg_to_number(args.get("page")) @@ -2130,7 +2148,7 @@ def appliances_list_by_device_group_command(client: Client, args: Dict[str, Any] return command_results -def template_list_by_organization_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_list_by_organization_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") type = args.get("type", "MAIN") page = arg_to_number(args.get("page")) @@ -2165,7 +2183,7 @@ def template_list_by_organization_command(client: Client, args: Dict[str, Any]) return command_results -def template_list_by_datastore_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_list_by_datastore_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") page = arg_to_number(args.get("page")) page_size = arg_to_number(args.get("page_size")) @@ -2177,7 +2195,7 @@ def template_list_by_datastore_command(client: Client, args: Dict[str, Any]) -> organization = set_organization(organization_args, client.organization_params) response = client.template_list_by_datastore_request(organization, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".DataStoreTemplate", @@ -2200,7 +2218,7 @@ def template_list_by_datastore_command(client: Client, args: Dict[str, Any]) -> return command_results -def application_service_template_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def application_service_template_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") keyword = args.get("keyword") page = arg_to_number(args.get("page")) @@ -2241,7 +2259,7 @@ def application_service_template_list_command(client: Client, args: Dict[str, An timeout=DEFAULT_TIMEOUT, requires_polling_arg=False, ) -def template_change_commit_command(args: Dict[str, Any], client: Client) -> PollResult: +def template_change_commit_command(args: dict[str, Any], client: Client) -> PollResult: template_name = args.get("template_name", "") appliances = argToList(args.get("appliances")) mode = args.get("mode", "") @@ -2287,7 +2305,7 @@ def template_change_commit_command(args: Dict[str, Any], client: Client) -> Poll ) -def template_custom_url_category_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_custom_url_category_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") url_category_name = args.get("url_category_name") @@ -2301,7 +2319,7 @@ def template_custom_url_category_list_command(client: Client, args: Dict[str, An organization = set_organization(organization_args, client.organization_params) response = client.template_custom_url_category_list_request(organization, template_name, url_category_name, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateCustomUrlCategory", @@ -2318,7 +2336,7 @@ def template_custom_url_category_list_command(client: Client, args: Dict[str, An return command_results -def template_custom_url_category_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_custom_url_category_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization", "") template_name = args.get("template_name", "") url_category_name = args.get("url_category_name", "") @@ -2356,7 +2374,7 @@ def template_custom_url_category_create_command(client: Client, args: Dict[str, return command_results -def template_custom_url_category_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_custom_url_category_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") url_category_name = args.get("url_category_name", "") @@ -2388,7 +2406,7 @@ def template_custom_url_category_edit_command(client: Client, args: Dict[str, An return command_results -def template_custom_url_category_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_custom_url_category_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") url_category_name = args.get("url_category_name", "") @@ -2408,7 +2426,7 @@ def template_custom_url_category_delete_command(client: Client, args: Dict[str, return command_results -def appliance_custom_url_category_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_custom_url_category_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") url_category_name = args.get("url_category_name", "") @@ -2422,7 +2440,7 @@ def appliance_custom_url_category_list_command(client: Client, args: Dict[str, A organization = set_organization(organization_args, client.organization_params) response = client.appliance_custom_url_category_list_request(organization, appliance_name, url_category_name, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceCustomUrlCategory", @@ -2440,7 +2458,7 @@ def appliance_custom_url_category_list_command(client: Client, args: Dict[str, A return command_results -def appliance_custom_url_category_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_custom_url_category_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") url_category_name = args.get("url_category_name", "") @@ -2482,7 +2500,7 @@ def appliance_custom_url_category_create_command(client: Client, args: Dict[str, return command_results -def appliance_custom_url_category_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_custom_url_category_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") url_category_name = args.get("url_category_name", "") @@ -2514,7 +2532,7 @@ def appliance_custom_url_category_edit_command(client: Client, args: Dict[str, A return command_results -def appliance_custom_url_category_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_custom_url_category_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") url_category_name = args.get("url_category_name", "") @@ -2534,7 +2552,7 @@ def appliance_custom_url_category_delete_command(client: Client, args: Dict[str, return command_results -def template_access_policy_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_access_policy_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") page = arg_to_number(args.get("page")) @@ -2547,7 +2565,7 @@ def template_access_policy_list_command(client: Client, args: Dict[str, Any]) -> organization = set_organization(organization_args, client.organization_params) response = client.template_access_policy_list_request(organization, template_name, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateAccessPolicy", @@ -2564,7 +2582,7 @@ def template_access_policy_list_command(client: Client, args: Dict[str, Any]) -> return command_results -def template_access_policy_rule_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_access_policy_rule_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2578,7 +2596,7 @@ def template_access_policy_rule_list_command(client: Client, args: Dict[str, Any organization = set_organization(organization_args, client.organization_params) response = client.template_access_policy_rule_list_request(organization, template_name, access_policy_name, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateAccessPolicyRule", @@ -2595,7 +2613,7 @@ def template_access_policy_rule_list_command(client: Client, args: Dict[str, Any return command_results -def template_access_policy_rule_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_access_policy_rule_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization", "") template_name = args.get("template_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2625,7 +2643,7 @@ def template_access_policy_rule_create_command(client: Client, args: Dict[str, A return command_results -def template_access_policy_rule_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_access_policy_rule_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization", "") template_name = args.get("template_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2645,7 +2663,7 @@ def template_access_policy_rule_edit_command(client: Client, args: Dict[str, Any return command_results -def template_access_policy_rule_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_access_policy_rule_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2662,7 +2680,7 @@ def template_access_policy_rule_delete_command(client: Client, args: Dict[str, A return command_results -def appliance_access_policy_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_access_policy_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") page = arg_to_number(args.get("page")) @@ -2675,7 +2693,7 @@ def appliance_access_policy_list_command(client: Client, args: Dict[str, Any]) - organization = set_organization(organization_args, client.organization_params) response = client.appliance_access_policy_list_request(organization, appliance_name, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceAccessPolicy", @@ -2692,7 +2710,7 @@ def appliance_access_policy_list_command(client: Client, args: Dict[str, Any]) - return command_results -def appliance_access_policy_rule_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_access_policy_rule_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2706,7 +2724,7 @@ def appliance_access_policy_rule_list_command(client: Client, args: Dict[str, An organization = set_organization(organization_args, client.organization_params) response = client.appliance_access_policy_rule_list_request(organization, appliance_name, access_policy_name, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceAccessPolicyRule", @@ -2723,7 +2741,7 @@ def appliance_access_policy_rule_list_command(client: Client, args: Dict[str, An return command_results -def appliance_access_policy_rule_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_access_policy_rule_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization", "") appliance_name = args.get("appliance_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2753,7 +2771,7 @@ def appliance_access_policy_rule_create_command(client: Client, args: Dict[str, return command_results -def appliance_access_policy_rule_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_access_policy_rule_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization", "") appliance_name = args.get("appliance_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2773,7 +2791,7 @@ def appliance_access_policy_rule_edit_command(client: Client, args: Dict[str, An return command_results -def appliance_access_policy_rule_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_access_policy_rule_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") access_policy_name = args.get("access_policy_name", "") @@ -2790,7 +2808,7 @@ def appliance_access_policy_rule_delete_command(client: Client, args: Dict[str, return command_results -def template_sdwan_policy_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_sdwan_policy_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") page = arg_to_number(args.get("page")) @@ -2803,7 +2821,7 @@ def template_sdwan_policy_list_command(client: Client, args: Dict[str, Any]) -> organization = set_organization(organization_args, client.organization_params) response = client.template_sdwan_policy_list_request(organization, template_name, offset, limit) - response = json.loads(xml2json((response.content))) + response = json.loads(xml2json(response.content)) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateSdwanPolicy", @@ -2820,7 +2838,7 @@ def template_sdwan_policy_list_command(client: Client, args: Dict[str, Any]) -> return command_results -def template_sdwan_policy_rule_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_sdwan_policy_rule_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -2834,7 +2852,7 @@ def template_sdwan_policy_rule_list_command(client: Client, args: Dict[str, Any] organization = set_organization(organization_args, client.organization_params) response = client.template_sdwan_policy_rule_request(organization, template_name, sdwan_policy_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection").get("rule") + response = json.loads(xml2json(response.content)).get("collection").get("rule") command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateSdwanPolicyRule", @@ -2852,7 +2870,7 @@ def template_sdwan_policy_rule_list_command(client: Client, args: Dict[str, Any] return command_results -def template_sdwan_policy_rule_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_sdwan_policy_rule_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -2882,7 +2900,7 @@ def template_sdwan_policy_rule_create_command(client: Client, args: Dict[str, An return command_results -def template_sdwan_policy_rule_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_sdwan_policy_rule_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -2902,7 +2920,7 @@ def template_sdwan_policy_rule_edit_command(client: Client, args: Dict[str, Any] return command_results -def template_sdwan_policy_rule_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_sdwan_policy_rule_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -2924,7 +2942,7 @@ def template_sdwan_policy_rule_delete_command(client: Client, args: Dict[str, An return command_results -def appliance_sdwan_policy_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_sdwan_policy_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") page = arg_to_number(args.get("page")) @@ -2937,7 +2955,7 @@ def appliance_sdwan_policy_list_command(client: Client, args: Dict[str, Any]) -> organization = set_organization(organization_args, client.organization_params) response = client.appliance_sdwan_policy_list_request(organization, appliance_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("sdwan-policy-group") + response = json.loads(xml2json(response.content)).get("collection", {}).get("sdwan-policy-group") command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceSdwanPolicy", @@ -2954,7 +2972,7 @@ def appliance_sdwan_policy_list_command(client: Client, args: Dict[str, Any]) -> return command_results -def appliance_sdwan_policy_rule_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_sdwan_policy_rule_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -2968,7 +2986,7 @@ def appliance_sdwan_policy_rule_list_command(client: Client, args: Dict[str, Any organization = set_organization(organization_args, client.organization_params) response = client.appliance_sdwan_policy_rule_list_request(organization, appliance_name, sdwan_policy_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("rule", {}) + response = json.loads(xml2json(response.content)).get("collection", {}).get("rule", {}) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceSdwanPolicyRule", outputs=response, @@ -2985,7 +3003,7 @@ def appliance_sdwan_policy_rule_list_command(client: Client, args: Dict[str, Any return command_results -def appliance_sdwan_policy_rule_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_sdwan_policy_rule_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -3014,7 +3032,7 @@ def appliance_sdwan_policy_rule_create_command(client: Client, args: Dict[str, A return command_results -def appliance_sdwan_policy_rule_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_sdwan_policy_rule_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -3033,7 +3051,7 @@ def appliance_sdwan_policy_rule_edit_command(client: Client, args: Dict[str, Any return command_results -def appliance_sdwan_policy_rule_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_sdwan_policy_rule_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") sdwan_policy_name = args.get("sdwan_policy_name", "") @@ -3049,7 +3067,7 @@ def appliance_sdwan_policy_rule_delete_command(client: Client, args: Dict[str, A return command_results -def template_address_object_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_address_object_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") page = arg_to_number(args.get("page")) @@ -3062,7 +3080,7 @@ def template_address_object_list_command(client: Client, args: Dict[str, Any]) - organization = set_organization(organization_args, client.organization_params) response = client.template_address_object_list_request(organization, template_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("address", {}) + response = json.loads(xml2json(response.content)).get("collection", {}).get("address", {}) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateAddressObject", outputs=response, @@ -3089,7 +3107,7 @@ def template_address_object_list_command(client: Client, args: Dict[str, Any]) - return command_results -def template_address_object_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_address_object_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") object_name = args.get("object_name", "") @@ -3127,7 +3145,7 @@ def template_address_object_create_command(client: Client, args: Dict[str, Any]) return command_results -def template_address_object_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_address_object_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") object_name = args.get("object_name", "") @@ -3155,7 +3173,7 @@ def template_address_object_edit_command(client: Client, args: Dict[str, Any]) - return command_results -def template_address_object_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_address_object_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") object_name = args.get("object_name", "") @@ -3175,7 +3193,7 @@ def template_address_object_delete_command(client: Client, args: Dict[str, Any]) return command_results -def appliance_address_object_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_address_object_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") page = arg_to_number(args.get("page")) @@ -3188,7 +3206,7 @@ def appliance_address_object_list_command(client: Client, args: Dict[str, Any]) organization = set_organization(organization_args, client.organization_params) response = client.appliance_address_object_list_request(organization, appliance_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("address", {}) + response = json.loads(xml2json(response.content)).get("collection", {}).get("address", {}) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceAddressObject", outputs=response, @@ -3215,7 +3233,7 @@ def appliance_address_object_list_command(client: Client, args: Dict[str, Any]) return command_results -def appliance_address_object_create_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_address_object_create_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") object_name = args.get("object_name", "") @@ -3253,7 +3271,7 @@ def appliance_address_object_create_command(client: Client, args: Dict[str, Any] return command_results -def appliance_address_object_edit_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_address_object_edit_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") object_name = args.get("object_name", "") @@ -3281,7 +3299,7 @@ def appliance_address_object_edit_command(client: Client, args: Dict[str, Any]) return command_results -def appliance_address_object_delete_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_address_object_delete_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") object_name = args.get("object_name", "") @@ -3297,7 +3315,7 @@ def appliance_address_object_delete_command(client: Client, args: Dict[str, Any] return command_results -def template_user_defined_application_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_user_defined_application_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") page = arg_to_number(args.get("page")) @@ -3310,7 +3328,7 @@ def template_user_defined_application_list_command(client: Client, args: Dict[st organization = set_organization(organization_args, client.organization_params) response = client.template_user_defined_application_list_request(organization, template_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("user-defined-application", {}) + response = json.loads(xml2json(response.content)).get("collection", {}).get("user-defined-application", {}) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateUserDefinedApplication", outputs=response, @@ -3327,7 +3345,7 @@ def template_user_defined_application_list_command(client: Client, args: Dict[st return command_results -def appliance_user_defined_application_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_user_defined_application_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") page = arg_to_number(args.get("page")) @@ -3341,7 +3359,7 @@ def appliance_user_defined_application_list_command(client: Client, args: Dict[s response = client.appliance_user_defined_application_list_request(organization, appliance_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("user-defined-application", {}) + response = json.loads(xml2json(response.content)).get("collection", {}).get("user-defined-application", {}) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceUserDefinedApplication", outputs=response, @@ -3358,7 +3376,7 @@ def appliance_user_defined_application_list_command(client: Client, args: Dict[s return command_results -def template_user_modified_application_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def template_user_modified_application_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") template_name = args.get("template_name", "") page = arg_to_number(args.get("page")) @@ -3371,7 +3389,7 @@ def template_user_modified_application_list_command(client: Client, args: Dict[s organization = set_organization(organization_args, client.organization_params) response = client.template_user_modified_application_list_request(organization, template_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("app-specific-option-list", {}) + response = json.loads(xml2json(response.content)).get("collection", {}).get("app-specific-option-list", {}) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".TemplateUserModifiedApplication", outputs=response, @@ -3394,7 +3412,7 @@ def template_user_modified_application_list_command(client: Client, args: Dict[s return command_results -def appliance_user_modified_application_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def appliance_user_modified_application_list_command(client: Client, args: dict[str, Any]) -> CommandResults: organization_args = args.get("organization") appliance_name = args.get("appliance_name", "") page = arg_to_number(args.get("page")) @@ -3408,7 +3426,7 @@ def appliance_user_modified_application_list_command(client: Client, args: Dict[ response = client.appliance_user_modified_application_list_request(organization, appliance_name, offset, limit) - response = json.loads(xml2json((response.content))).get("collection", {}).get("app-specific-option-list", {}) + response = json.loads(xml2json(response.content)).get("collection", {}).get("app-specific-option-list", {}) command_results = CommandResults( outputs_prefix=VENDOR_NAME + ".ApplianceUserModifiedApplication", outputs=response, @@ -3431,7 +3449,7 @@ def appliance_user_modified_application_list_command(client: Client, args: Dict[ return command_results -def predefined_application_list_command(client: Client, args: Dict[str, Any]) -> CommandResults: +def predefined_application_list_command(client: Client, args: dict[str, Any]) -> CommandResults: family = args.get("family") risks = arg_to_number(args.get("risks")) tags = argToList(args.get("tags")) @@ -3566,19 +3584,18 @@ def test_module( ) # test organization name if provided - if client: - if organization_name := client.organization_params: - client.test_organization_name_request(organization_name) + if client and (organization_name := client.organization_params): + client.test_organization_name_request(organization_name) return message -# HEADING: """ MAIN FUNCTION """ +# """ MAIN FUNCTION """ def main() -> None: - params: Dict[str, Any] = demisto.params() - args: Dict[str, Any] = demisto.args() + params: dict[str, Any] = demisto.params() + args: dict[str, Any] = demisto.args() verify_certificate: bool = not params.get("insecure", False) proxy = params.get("proxy", False) use_basic_auth = params.get("use_basic_auth", False) @@ -3630,9 +3647,8 @@ def main() -> None: ) # check auth token validity and if a refresh token is needed to obtain new auth token - if not use_basic_auth: - if new_token := check_and_update_token(client, client_id, client_secret, context): - client._headers = {"Authorization": f"Bearer {new_token}"} + if not use_basic_auth and (new_token := check_and_update_token(client, client_id, client_secret, context)): + client._headers["Authorization"] = f"Bearer {new_token}" commands = { "vd-auth-start": handle_auth_token_command, diff --git a/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.yml b/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.yml index 34a0bc399a1d..ae2e20d1db71 100644 --- a/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.yml +++ b/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector.yml @@ -52,7 +52,7 @@ configuration: required: false - displaypassword: Auth Token additionalinfo: The Auth Token parameter is used for Auth authentication.\nBy default, an Auth Token passed as a parameter takes priority over an Auth Token saved in the integration context.\nIf a Refresh Token is available, a new Auth Token is generated when an existing Auth Token expires, and it is then updated in the integration context. - name: credentials_access_token + name: credentials_access_token required: false hiddenusername: true type: 9 @@ -1776,7 +1776,7 @@ script: runonce: false type: python subtype: python3 - dockerimage: demisto/python3:3.10.12.67728 + dockerimage: demisto/python3:3.10.13.80014 fromversion: 6.5.0 tests: - No tests (auto formatted) diff --git a/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector_test.py b/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector_test.py index c0f84559c4e7..b28656bc23d7 100644 --- a/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector_test.py +++ b/Packs/VersaDirector/Integrations/VersaDirector/VersaDirector_test.py @@ -262,7 +262,7 @@ def __init__(self) -> None: "GET", url_suffix="api/config/devices/template/org_name-DataStore/config/orgs/org", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -316,7 +316,7 @@ def __init__(self) -> None: url_suffix="/api/config/devices/template/temp_name/config/orgs/org-services" + "/org_name/url-filtering/user-defined-url-categories/url-category", params={"offset": 0}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -457,7 +457,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/template/template_name/config/orgs/org-services" + "/org_name/security/access-policies/access-policy-group", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -492,7 +492,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/template/template_name/config/orgs/org-services/org_name/security/access-policies" + "/access-policy-group/access_policy_name/rules/access-policy", params={"offset": 0}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -603,7 +603,7 @@ def __init__(self) -> None: + "/org_name/url-filtering/user-defined-url-categories/url-category" + suffix, params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -711,7 +711,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/device/appliance_name/config/orgs/org-services" + "/org_name/security/access-policies/access-policy-group", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, ok_codes=(200, 201), resp_type="xml", ) @@ -748,7 +748,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/device/appliance_name/config/orgs/org-services/org_name/security/access-policies" + "/access-policy-group/access_policy_name/rules/access-policy", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -856,7 +856,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/template/template_name/config/orgs/" + "org-services/org_name/sd-wan/policies/sdwan-policy-group", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -892,7 +892,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/template/template_name/config/orgs/org-services/" + "organization/sd-wan/policies/sdwan-policy-group/sdwan_policy_name/rules/rule", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -1008,7 +1008,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/device/appliance_name/config/orgs/org-services" + "/organization/sd-wan/policies/sdwan-policy-group", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -1043,7 +1043,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/device/appliance_name/config/orgs/org-services/" + "organization/sd-wan/policies/sdwan-policy-group/sdwan_policy_name/rules/rule", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -1159,7 +1159,7 @@ def __init__(self) -> None: "GET", url_suffix="api/config/devices/template/template_name/config/orgs/org-services/organization/objects/addresses/address", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -1322,7 +1322,7 @@ def __init__(self) -> None: "GET", url_suffix="api/config/devices/device/appliance_name/config/orgs/org-services/organization/objects/addresses/address", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ) @@ -1486,7 +1486,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/template/template_name/config/orgs/org-services/org_name/" + "application-identification/user-defined-applications/user-defined-application", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ok_codes=(200, 201, 204), ) @@ -1521,7 +1521,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/device/appliance_name/config/orgs/org-services/org_name/" + "application-identification/user-defined-applications/user-defined-application", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ok_codes=(200, 201), ) @@ -1556,7 +1556,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/template/template_name/config/orgs/org-services/org_name/" + "application-identification/application-specific-options/app-specific-option-list", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ok_codes=(200, 201), ) @@ -1591,7 +1591,7 @@ def __init__(self) -> None: url_suffix="api/config/devices/device/appliance_name/config/orgs/org-services/org_name/" + "application-identification/application-specific-options/app-specific-option-list", params={}, - headers={"Content-Type": "application/xml"}, + headers={"Content-Type": "application/xml", "Accept": "application/xml"}, resp_type="xml", ok_codes=(200, 201), ) diff --git a/Packs/VersaDirector/Integrations/VersaDirector/test_data/input_data.py b/Packs/VersaDirector/Integrations/VersaDirector/test_data/input_data.py index a44b0a452d35..8c46e066af18 100644 --- a/Packs/VersaDirector/Integrations/VersaDirector/test_data/input_data.py +++ b/Packs/VersaDirector/Integrations/VersaDirector/test_data/input_data.py @@ -250,7 +250,8 @@ "", "", "", - (("username", "password"), {"Authorization": "Basic dXNlcm5hbWU6cGFzc3dvcmQ="}), + (("username", "password"), {"Authorization": "Basic dXNlcm5hbWU6cGFzc3dvcmQ=", + 'Accept': 'application/json', 'Content-Type': 'application/json'}), ) case_auth_token_only = ( "", @@ -259,7 +260,7 @@ "", "", "access_token", - (None, {"Authorization": "Bearer access_token"}), + (None, {"Authorization": "Bearer access_token", 'Accept': 'application/json', 'Content-Type': 'application/json'}), ) case_context_args_already_created = ( "", @@ -268,6 +269,6 @@ "client_id", "client_secret", "access_token", - (None, {"Authorization": "Bearer access_token"}), + (None, {"Authorization": "Bearer access_token", 'Accept': 'application/json', 'Content-Type': 'application/json'}), ) create_client_header_args = [case_basic_auth, case_auth_token_only, case_context_args_already_created] diff --git a/Packs/VersaDirector/ReleaseNotes/1_0_6.md b/Packs/VersaDirector/ReleaseNotes/1_0_6.md new file mode 100644 index 000000000000..a8b570f05f45 --- /dev/null +++ b/Packs/VersaDirector/ReleaseNotes/1_0_6.md @@ -0,0 +1,7 @@ + +#### Integrations + +##### Versa Director + +- Updated the HTTP request headers to explicitly accept the 'application/json' response format instead of relying on the default behavior of accepting any response format. +- Updated the Docker image to: *demisto/python3:3.10.13.80014*. diff --git a/Packs/VersaDirector/pack_metadata.json b/Packs/VersaDirector/pack_metadata.json index 93b6c3ccc553..0f3692cc35f3 100644 --- a/Packs/VersaDirector/pack_metadata.json +++ b/Packs/VersaDirector/pack_metadata.json @@ -2,7 +2,7 @@ "name": "VersaDirector", "description": "Versa Director is a virtualization and service creation platform that simplifies the design, automation, and delivery of SASE services. Versa Director provides the essential management, monitoring and orchestration capabilities needed to deliver all of the networking and security capabilities within Versa SASE.", "support": "xsoar", - "currentVersion": "1.0.5", + "currentVersion": "1.0.6", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "",