google/mcp-security

SOAR server needs some updates to support proxy

Open

#177 ouverte le 4 sept. 2025

Voir sur GitHub
 (2 commentaires) (0 réactions) (0 assignés)Python (124 forks)auto 404
2025-nov-sprintenhancementgood first issue

Métriques du dépôt

Stars
 (504 stars)
Métriques de merge PR
 (Métriques PR en attente)

Description

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

Guide contributeur