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_