From 164e51b01791bafeb4b6cd520555aaca35cae83a Mon Sep 17 00:00:00 2001 From: Peter Nga Date: Wed, 3 Jul 2024 17:16:49 -0700 Subject: [PATCH 1/4] Don't verify SSL on external action passthroughs --- vocode/streaming/action/external_actions_requester.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vocode/streaming/action/external_actions_requester.py b/vocode/streaming/action/external_actions_requester.py index ff82911bd..bb31399f4 100644 --- a/vocode/streaming/action/external_actions_requester.py +++ b/vocode/streaming/action/external_actions_requester.py @@ -63,7 +63,7 @@ async def send_request( "x-vocode-signature": self._encode_payload(encoded_payload, signature_secret), } - transport = httpx.AsyncHTTPTransport(retries=2) + transport = httpx.AsyncHTTPTransport(retries=2, verify=False) async with httpx.AsyncClient( headers=headers, transport=transport, From f387d78bdc5d1da989727ae9378d2b93437d7c58 Mon Sep 17 00:00:00 2001 From: Peter Nga Date: Wed, 3 Jul 2024 18:06:14 -0700 Subject: [PATCH 2/4] Instead of explicitly setting verify to False, support specifying transport options --- vocode/streaming/action/external_actions_requester.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vocode/streaming/action/external_actions_requester.py b/vocode/streaming/action/external_actions_requester.py index bb31399f4..74fa8d915 100644 --- a/vocode/streaming/action/external_actions_requester.py +++ b/vocode/streaming/action/external_actions_requester.py @@ -52,6 +52,7 @@ async def send_request( payload: Dict[str, Any], signature_secret: str, additional_payload_values: Dict[str, Any] = {}, + transport_options: Dict[str, Any] = {"retries": 2}, ) -> ExternalActionResponse: encoded_payload = json.dumps({"payload": payload} | additional_payload_values).encode( "utf-8" @@ -63,7 +64,7 @@ async def send_request( "x-vocode-signature": self._encode_payload(encoded_payload, signature_secret), } - transport = httpx.AsyncHTTPTransport(retries=2, verify=False) + transport = httpx.AsyncHTTPTransport(**transport_options) async with httpx.AsyncClient( headers=headers, transport=transport, From 6d7fc43df3622c5947968adf7e883d265be526d1 Mon Sep 17 00:00:00 2001 From: Peter Nga Date: Wed, 3 Jul 2024 18:11:21 -0700 Subject: [PATCH 3/4] Add transport_options to test case for sending external actions --- tests/streaming/action/test_external_actions_requester.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/streaming/action/test_external_actions_requester.py b/tests/streaming/action/test_external_actions_requester.py index c9d2f8b35..b270329a2 100644 --- a/tests/streaming/action/test_external_actions_requester.py +++ b/tests/streaming/action/test_external_actions_requester.py @@ -65,6 +65,7 @@ async def test_send_request_responses( JSON_SCHEMA, base64.b64encode(os.urandom(32)).decode(), additional_payload_values={"call_id": "call_id"}, + transport_options={"retries": 3, "verify": True}, ) assert response.success is expected_success From 9592eeb619249c09ec69f877c62e63306e168468 Mon Sep 17 00:00:00 2001 From: Peter Nga Date: Thu, 4 Jul 2024 16:47:53 -0700 Subject: [PATCH 4/4] Pass AsyncHTTPTransport object instead of configuration as parameter --- tests/streaming/action/test_external_actions_requester.py | 3 ++- vocode/streaming/action/external_actions_requester.py | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/streaming/action/test_external_actions_requester.py b/tests/streaming/action/test_external_actions_requester.py index b270329a2..626d5db93 100644 --- a/tests/streaming/action/test_external_actions_requester.py +++ b/tests/streaming/action/test_external_actions_requester.py @@ -5,6 +5,7 @@ import os from typing import Any, Callable, Dict +import httpx import pytest from httpx import Request, Response from pytest_httpx import HTTPXMock @@ -65,7 +66,7 @@ async def test_send_request_responses( JSON_SCHEMA, base64.b64encode(os.urandom(32)).decode(), additional_payload_values={"call_id": "call_id"}, - transport_options={"retries": 3, "verify": True}, + transport=httpx.AsyncHTTPTransport(retries=3, verify=True), ) assert response.success is expected_success diff --git a/vocode/streaming/action/external_actions_requester.py b/vocode/streaming/action/external_actions_requester.py index 74fa8d915..658192e7b 100644 --- a/vocode/streaming/action/external_actions_requester.py +++ b/vocode/streaming/action/external_actions_requester.py @@ -52,7 +52,7 @@ async def send_request( payload: Dict[str, Any], signature_secret: str, additional_payload_values: Dict[str, Any] = {}, - transport_options: Dict[str, Any] = {"retries": 2}, + transport: httpx.AsyncHTTPTransport = httpx.AsyncHTTPTransport(retries=2), ) -> ExternalActionResponse: encoded_payload = json.dumps({"payload": payload} | additional_payload_values).encode( "utf-8" @@ -64,7 +64,6 @@ async def send_request( "x-vocode-signature": self._encode_payload(encoded_payload, signature_secret), } - transport = httpx.AsyncHTTPTransport(**transport_options) async with httpx.AsyncClient( headers=headers, transport=transport,