Skip to content

SOAR server needs some updates to support proxy #177

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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