These changes unblocked the reporting user but the proxy will need to come from config (rather than be hard coded):
diff --git a/server/secops-soar/secops_soar_mcp/http_client.py b/server/secops-soar/secops_soar_mcp/http_client.py
index 1c03768..9530406 100644
--- a/server/secops-soar/secops_soar_mcp/http_client.py
+++ b/server/secops-soar/secops_soar_mcp/http_client.py
@@ -29,10 +29,12 @@ class HttpClient:
self.base_url = base_url
self.app_key = app_key
self._session = None
+ self.proxy = "http://<proxy:port>"
def _get_session(self) -> aiohttp.ClientSession:
if self._session is None:
self._session = aiohttp.ClientSession()
+ # self._session = aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False))
return self._session
async def _get_headers(self):
@@ -58,7 +60,7 @@ class HttpClient:
headers = await self._get_headers()
try:
async with self._get_session().get(
- self.base_url + endpoint, params=params, headers=headers
+ self.base_url + endpoint, params=params, headers=headers, proxy=self.proxy
) as response:
response.raise_for_status() # Raise an exception for 4xx/5xx responses
return await response.json()
@@ -87,16 +89,29 @@ class HttpClient:
headers = await self._get_headers()
try:
async with self._get_session().post(
- self.base_url + endpoint, json=req, params=params, headers=headers
+ self.base_url + endpoint, json=req, params=params, headers=headers, proxy=self.proxy
) as response:
+ if response.status == 500:
+ # For 500 errors, try to get the error message from the response
+ try:
+ error_data = await response.json()
+ logger.error("Server error (500) for endpoint %s: %s", endpoint, error_data)
+ return {"error": f"Server error (500): {error_data}"}
+ except:
+ error_text = await response.text()
+ logger.error("Server error (500) for endpoint %s: %s", endpoint, error_text)
+ return {"error": f"Server error (500): {error_text}"}
+
response.raise_for_status()
data = await response.content.read()
decoded_data = data.decode("utf-8")
return json.loads(decoded_data)
except aiohttp.ClientResponseError as e:
- logger.debug("HTTP error occurred: %s", e)
+ logger.error("HTTP error occurred for endpoint %s: %s", endpoint, e)
+ return {"error": f"HTTP error: {e}"}
except Exception as e:
- logger.debug("An error occurred: %s", e)
+ logger.error("An error occurred for endpoint %s: %s", endpoint, e)
+ return {"error": f"Unexpected error: {e}"}
return None
async def patch(
@@ -118,7 +133,7 @@ class HttpClient:
headers = await self._get_headers()
try:
async with self._get_session().patch(
- self.base_url + endpoint, json=req, params=params, headers=headers
+ self.base_url + endpoint, json=req, params=params, headers=headers, proxy=self.proxy
) as response:
response.raise_for_status()
return await response.json()
These changes unblocked the reporting user but the proxy will need to come from config (rather than be hard coded):