Skip to content

SOAR server needs some updates to support proxy #177

@dandye

Description

@dandye

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()

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions