added vaultKVUsePrefix on hashicorp vault secret (#929)
* added vaultKVUsePrefix on hashicorp vault secret * consolidate if, use ParseBool * added handling of empty string + test Co-authored-by: Phil Kedy <phil.kedy@gmail.com> Co-authored-by: Artur Souza <artursouza.ms@outlook.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									8e6b36ecdf
								
							
						
					
					
						commit
						79109c5fe3
					
				| 
						 | 
				
			
			@ -18,6 +18,7 @@ import (
 | 
			
		|||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"github.com/dapr/components-contrib/secretstores"
 | 
			
		||||
	"github.com/dapr/kit/logger"
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +36,7 @@ const (
 | 
			
		|||
	componentVaultToken          string = "vaultToken"
 | 
			
		||||
	componentVaultTokenMountPath string = "vaultTokenMountPath"
 | 
			
		||||
	componentVaultKVPrefix       string = "vaultKVPrefix"
 | 
			
		||||
	componentVaultKVUsePrefix    string = "vaultKVUsePrefix"
 | 
			
		||||
	defaultVaultKVPrefix         string = "dapr"
 | 
			
		||||
	vaultHTTPHeader              string = "X-Vault-Token"
 | 
			
		||||
	vaultHTTPRequestHeader       string = "X-Vault-Request"
 | 
			
		||||
| 
						 | 
				
			
			@ -107,8 +109,20 @@ func (v *vaultSecretStore) Init(metadata secretstores.Metadata) error {
 | 
			
		|||
		return fmt.Errorf("token mount path and token both set")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	vaultKVUsePrefix := props[componentVaultKVUsePrefix]
 | 
			
		||||
	vaultKVPrefix := props[componentVaultKVPrefix]
 | 
			
		||||
	if vaultKVPrefix == "" {
 | 
			
		||||
	convertedVaultKVUsePrefix := true
 | 
			
		||||
	if vaultKVUsePrefix != "" {
 | 
			
		||||
		if v, err := strconv.ParseBool(vaultKVUsePrefix); err == nil {
 | 
			
		||||
			convertedVaultKVUsePrefix = v
 | 
			
		||||
		} else if err != nil {
 | 
			
		||||
			return fmt.Errorf("unable to convert Use Prefix to boolean")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !convertedVaultKVUsePrefix {
 | 
			
		||||
		vaultKVPrefix = ""
 | 
			
		||||
	} else if vaultKVPrefix == "" {
 | 
			
		||||
		vaultKVPrefix = defaultVaultKVPrefix
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,6 +97,81 @@ func TestVaultTLSConfig(t *testing.T) {
 | 
			
		|||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestVaultTokenPrefix(t *testing.T) {
 | 
			
		||||
	t.Run("default value of vaultKVUsePrefix is true to emulate previous behaviour", func(t *testing.T) {
 | 
			
		||||
		properties := map[string]string{
 | 
			
		||||
			"vaultTokenMountPath": expectedTokMountPath,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		m := secretstores.Metadata{
 | 
			
		||||
			Properties: properties,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		target := &vaultSecretStore{
 | 
			
		||||
			client: nil,
 | 
			
		||||
			logger: nil,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// This call will throw an error on Windows systems because of the of
 | 
			
		||||
		// the call x509.SystemCertPool() because system root pool is not
 | 
			
		||||
		// available on Windows so ignore the error for when the tests are run
 | 
			
		||||
		// on the Windows platform during CI
 | 
			
		||||
		_ = target.Init(m)
 | 
			
		||||
 | 
			
		||||
		assert.Equal(t, defaultVaultKVPrefix, target.vaultKVPrefix)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	t.Run("if vaultKVUsePrefix is false ignore vaultKVPrefix", func(t *testing.T) {
 | 
			
		||||
		properties := map[string]string{
 | 
			
		||||
			"vaultKVPrefix":       "myCustomString",
 | 
			
		||||
			"vaultKVUsePrefix":    "false",
 | 
			
		||||
			"vaultTokenMountPath": expectedTokMountPath,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		m := secretstores.Metadata{
 | 
			
		||||
			Properties: properties,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		target := &vaultSecretStore{
 | 
			
		||||
			client: nil,
 | 
			
		||||
			logger: nil,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// This call will throw an error on Windows systems because of the of
 | 
			
		||||
		// the call x509.SystemCertPool() because system root pool is not
 | 
			
		||||
		// available on Windows so ignore the error for when the tests are run
 | 
			
		||||
		// on the Windows platform during CI
 | 
			
		||||
		_ = target.Init(m)
 | 
			
		||||
 | 
			
		||||
		assert.Equal(t, "", target.vaultKVPrefix)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	t.Run("if vaultKVUsePrefix is not castable to bool return error", func(t *testing.T) {
 | 
			
		||||
		properties := map[string]string{
 | 
			
		||||
			"vaultKVPrefix":       "myCustomString",
 | 
			
		||||
			"vaultKVUsePrefix":    "invalidSetting",
 | 
			
		||||
			"vaultTokenMountPath": expectedTokMountPath,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		m := secretstores.Metadata{
 | 
			
		||||
			Properties: properties,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		target := &vaultSecretStore{
 | 
			
		||||
			client: nil,
 | 
			
		||||
			logger: nil,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// This call will throw an error on Windows systems because of the of
 | 
			
		||||
		// the call x509.SystemCertPool() because system root pool is not
 | 
			
		||||
		// available on Windows so ignore the error for when the tests are run
 | 
			
		||||
		// on the Windows platform during CI
 | 
			
		||||
		err := target.Init(m)
 | 
			
		||||
 | 
			
		||||
		assert.NotNil(t, err)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestVaultTokenMountPathOrVaultTokenRequired(t *testing.T) {
 | 
			
		||||
	t.Run("without vaultTokenMount or vaultToken", func(t *testing.T) {
 | 
			
		||||
		properties := map[string]string{}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue