diff --git a/config/schema/search_api_opensearch.connector.standard.schema.yml b/config/schema/search_api_opensearch.connector.standard.schema.yml index c6ed981..916b048 100644 --- a/config/schema/search_api_opensearch.connector.standard.schema.yml +++ b/config/schema/search_api_opensearch.connector.standard.schema.yml @@ -5,3 +5,6 @@ plugin.plugin_configuration.opensearch_connector.standard: url: type: string label: 'The URL to the OpenSearch cluster.' + ssl_verification: + type: boolean + label: 'Whether to verify the SSL certificate of the OpenSearch cluster.' diff --git a/src/Plugin/OpenSearch/Connector/BasicAuthConnector.php b/src/Plugin/OpenSearch/Connector/BasicAuthConnector.php index 6863b1d..2a65a54 100644 --- a/src/Plugin/OpenSearch/Connector/BasicAuthConnector.php +++ b/src/Plugin/OpenSearch/Connector/BasicAuthConnector.php @@ -21,10 +21,12 @@ class BasicAuthConnector extends StandardConnector { * {@inheritdoc} */ public function getClient(): Client { + $configuration = $this->getConfiguration(); // We only support one host. return ClientBuilder::create() - ->setHosts([$this->configuration['url']]) - ->setBasicAuthentication($this->configuration['username'], $this->configuration['password']) + ->setHosts([$configuration['url']]) + ->setBasicAuthentication($configuration['username'], $configuration['password']) + ->setSSLVerification((bool) $configuration['ssl_verification']) ->setLogger($this->logger) ->build(); } @@ -44,10 +46,11 @@ class BasicAuthConnector extends StandardConnector { */ public function buildConfigurationForm(array $form, FormStateInterface $form_state): array { $form = parent::buildConfigurationForm($form, $form_state); + $configuration = $this->getConfiguration(); $form['username'] = [ '#type' => 'textfield', '#title' => $this->t('Username'), - '#default_value' => $this->configuration['username'] ?? '', + '#default_value' => $configuration['username'] ?? '', '#required' => TRUE, ]; @@ -57,7 +60,7 @@ class BasicAuthConnector extends StandardConnector { '#description' => $this->t('If this field is left blank and the HTTP username is filled out, the current password will not be changed.'), ]; - $form_state->set('previous_password', $this->configuration['password']); + $form_state->set('previous_password', $configuration['password']); return $form; } diff --git a/src/Plugin/OpenSearch/Connector/StandardConnector.php b/src/Plugin/OpenSearch/Connector/StandardConnector.php index 2a5e758..5aecbbf 100644 --- a/src/Plugin/OpenSearch/Connector/StandardConnector.php +++ b/src/Plugin/OpenSearch/Connector/StandardConnector.php @@ -81,7 +81,7 @@ class StandardConnector extends PluginBase implements OpenSearchConnectorInterfa * {@inheritdoc} */ public function getConfiguration(): array { - return $this->configuration; + return $this->configuration + $this->defaultConfiguration(); } /** @@ -95,9 +95,11 @@ class StandardConnector extends PluginBase implements OpenSearchConnectorInterfa * {@inheritdoc} */ public function getClient(): Client { + $configuration = $this->getConfiguration(); // We only support one host. return ClientBuilder::create() - ->setHosts([$this->configuration['url']]) + ->setHosts([$configuration['url']]) + ->setSSLVerification((bool) $configuration['ssl_verification']) ->setLogger($this->logger) ->build(); } @@ -108,6 +110,7 @@ class StandardConnector extends PluginBase implements OpenSearchConnectorInterfa public function defaultConfiguration(): array { return [ 'url' => '', + 'ssl_verification' => TRUE, ]; } @@ -115,13 +118,20 @@ class StandardConnector extends PluginBase implements OpenSearchConnectorInterfa * {@inheritdoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state): array { + $configuration = $this->getConfiguration(); $form['url'] = [ '#type' => 'url', '#title' => $this->t('OpenSearch URL'), '#description' => $this->t('The URL of your OpenSearch server, e.g. http://127.0.0.1:9200 or https://www.example.com:443. The port defaults to 9200 if not specified. Do not include a trailing slash.'), - '#default_value' => $this->configuration['url'] ?? '', + '#default_value' => $configuration['url'] ?? '', '#required' => TRUE, ]; + $form['ssl_verification'] = [ + '#type' => 'checkbox', + '#title' => $this->t('SSL Verification'), + '#description' => $this->t('Whether to verify the SSL certificate of the OpenSearch server. This should be enabled in production environments.'), + '#default_value' => $configuration['ssl_verification'] ?? '', + ]; return $form; } @@ -140,6 +150,7 @@ class StandardConnector extends PluginBase implements OpenSearchConnectorInterfa */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { $this->configuration['url'] = trim($form_state->getValue('url'), '/ '); + $this->configuration['ssl_verification'] = $form_state->getValue('ssl_verification'); } } diff --git a/tests/modules/search_api_opensearch_test/config/install/search_api.server.opensearch_server.yml b/tests/modules/search_api_opensearch_test/config/install/search_api.server.opensearch_server.yml index c6f5cf4..1eb24a5 100644 --- a/tests/modules/search_api_opensearch_test/config/install/search_api.server.opensearch_server.yml +++ b/tests/modules/search_api_opensearch_test/config/install/search_api.server.opensearch_server.yml @@ -11,6 +11,7 @@ backend_config: connector: standard connector_config: url: 'http://opensearch:9200' + ssl_verification: true advanced: fuzziness: auto prefix: test_