func NewElasticsearchClient()

in compliance/elasticsearch.go [27:62]


func NewElasticsearchClient() (*Elasticsearch, error) {
	config := elasticsearch.Config{
		Addresses: []string{
			elasticPackageGetEnv("ELASTICSEARCH_HOST"),
		},
		Username: elasticPackageGetEnv("ELASTICSEARCH_USERNAME"),
		Password: elasticPackageGetEnv("ELASTICSEARCH_PASSWORD"),
	}

	if caCert := elasticPackageGetEnv("CA_CERT"); caCert != "" {
		certPool, err := x509.SystemCertPool()
		if err != nil {
			return nil, fmt.Errorf("failed to get system certificate pool: %w", err)
		}
		pem, err := os.ReadFile(caCert)
		if err != nil {
			return nil, fmt.Errorf("failed to read certificate \"%s\": %w", caCert, err)
		}
		if ok := certPool.AppendCertsFromPEM(pem); !ok {
			return nil, fmt.Errorf("no certs were appended from \"%s\"", caCert)
		}
		config.Transport = &http.Transport{
			TLSClientConfig: &tls.Config{
				RootCAs: certPool,
			},
		}
	}
	client, err := elasticsearch.NewClient(config)
	if err != nil {
		return nil, err
	}

	return &Elasticsearch{
		client: client,
	}, nil
}