diff --git a/surfsense_backend/app/connectors/elasticsearch_connector.py b/surfsense_backend/app/connectors/elasticsearch_connector.py index 0ef536d69..4a5ceb2b1 100644 --- a/surfsense_backend/app/connectors/elasticsearch_connector.py +++ b/surfsense_backend/app/connectors/elasticsearch_connector.py @@ -4,7 +4,11 @@ from collections.abc import AsyncGenerator from typing import Any from elasticsearch import AsyncElasticsearch -from elasticsearch.exceptions import AuthenticationException, ConnectionError + +try: + from elasticsearch.exceptions import AuthenticationException +except ImportError: + AuthenticationException = Exception try: from elastic_transport import ( @@ -87,13 +91,9 @@ class ElasticsearchConnector: ) return True - # Updated exception handling for better version compatibility except (ConnectionError, TransportConnectionError, TlsError, ApiError) as e: logger.error(f"Failed to connect to Elasticsearch: {e}") return False - except AuthenticationException as e: - logger.error(f"Authentication failed for Elasticsearch: {e}") - return False except Exception as e: logger.error(f"Unexpected error connecting to Elasticsearch: {e}") return False diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/elasticsearch-connector/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/elasticsearch-connector/page.tsx index 0c0df63d6..bf56a4068 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/elasticsearch-connector/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/elasticsearch-connector/page.tsx @@ -64,10 +64,10 @@ const elasticsearchConnectorFormSchema = z .refine( (data) => { if (data.auth_method === "basic") { - return data.username && data.password; + return Boolean(data.username?.trim() && data.password?.trim()); } if (data.auth_method === "api_key") { - return data.api_key; + return Boolean(data.api_key?.trim()); } return true; }, @@ -109,10 +109,11 @@ export default function ElasticsearchConnectorPage() { }); const stringToArray = (str: string): string[] => { - return str + const items = str .split(",") .map((item) => item.trim()) .filter((item) => item.length > 0); + return Array.from(new Set(items)); }; // Handle form submission @@ -254,6 +255,8 @@ export default function ElasticsearchConnectorPage() { Elasticsearch Endpoint URL @@ -366,7 +369,7 @@ export default function ElasticsearchConnectorPage() { Username - + @@ -380,7 +383,12 @@ export default function ElasticsearchConnectorPage() { Password - + @@ -398,7 +406,12 @@ export default function ElasticsearchConnectorPage() { API Key - + Enter your Elasticsearch API key (base64 encoded). This will be