forked from kyma-project/kyma
/
secret-provider.go
61 lines (50 loc) · 1.72 KB
/
secret-provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package azurevault
import (
"strings"
)
// SecretProviderInterface exposes functions to interact with azure-vault client
type SecretProviderInterface interface {
GetSecret(secretName string) (string, error)
GetCertificate(certName string) (string, error)
GetKey(keyName string) (string, error)
}
// SecretProvider provides functions to interact with azure-vault client
// Implements SecretProviderInterface
type SecretProvider struct {
client azureKeyvaultInterface
}
// NewSecretProvider .
func NewSecretProvider(azureClientID string, azureClientSecret string, vaultURL string) *SecretProvider {
return &SecretProvider{
client: getAzureKeyvaultClient(azureClientID, azureClientSecret, vaultURL),
}
}
// GetSecret parses the object returned by azure-vault client and returns its value converted to string
func (sp *SecretProvider) GetSecret(secretName string) (string, error) {
secretBundle, err := sp.client.GetSecret(secretName)
if err != nil {
return "", err
}
secret := removeNewLines(useString(secretBundle.Value))
return secret, nil
}
// GetCertificate .
func (sp *SecretProvider) GetCertificate(certName string) (string, error) {
return "", nil //todo
}
// GetKey .
func (sp *SecretProvider) GetKey(keyName string) (string, error) {
return "", nil //todo
}
func useString(s *string) string {
if s == nil {
return ""
}
return *s
}
// We do that for two reasons:
// - Multiline string values can be used in yaml files with special syntax, but we don't support it (our templates are static).
// - K8s Helm client converts newline characters to spaces (in overrides), which breaks yaml deployments for secretes (base64 tokens contain spaces).
func removeNewLines(s string) string {
return strings.Replace(s, "\n", "", -1)
}