google/mcp-security

SOAR server needs some updates to support proxy

Open

#177 opened on 2025年9月4日

GitHub で見る
 (2 comments) (0 reactions) (0 assignees)Python (124 forks)auto 404
2025-nov-sprintenhancementgood first issue

Repository metrics

Stars
 (504 stars)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド