Browse Source

Fix the first case, nested json. Test was also added

Sebastián Gómez 3 years ago
parent
commit
c5909fb966

+ 9 - 3
pkg/provider/azure/keyvault/keyvault.go

@@ -351,7 +351,7 @@ func (a *Azure) GetSecretMap(ctx context.Context, ref esv1beta1.ExternalSecretDa
 			return a.getSecretTags(ref)
 		}
 
-		kv := make(map[string]string)
+		kv := make(map[string]json.RawMessage)
 		err = json.Unmarshal(data, &kv)
 		if err != nil {
 			return nil, fmt.Errorf(errUnmarshalJSONData, err)
@@ -359,10 +359,16 @@ func (a *Azure) GetSecretMap(ctx context.Context, ref esv1beta1.ExternalSecretDa
 
 		secretData := make(map[string][]byte)
 		for k, v := range kv {
-			secretData[k] = []byte(v)
+			var strVal string
+			err = json.Unmarshal(v, &strVal)
+			if err == nil {
+				secretData[k] = []byte(strVal)
+			} else {
+				secretData[k] = v
+			}
 		}
-
 		return secretData, nil
+
 	case objectTypeCert:
 		return nil, fmt.Errorf(errDataFromCert)
 	case objectTypeKey:

+ 13 - 0
pkg/provider/azure/keyvault/keyvault_test.go

@@ -480,6 +480,18 @@ func TestAzureKeyVaultSecretManagerGetSecretMap(t *testing.T) {
 		smtc.expectedSecret = ""
 	}
 
+	nestedJsonNoProperty := func(smtc *secretManagerTestCase) {
+		jsonString := jsonTestString
+		smtc.expectedSecret = ""
+		smtc.secretOutput = keyvault.SecretBundle{
+			Value: &jsonString,
+		}
+		smtc.ref.Property = ""
+		smtc.expectedData["Name"] = []byte("External")
+		smtc.expectedData["LastName"] = []byte("Secret")
+		smtc.expectedData["Address"] = []byte(`{ "Street": "Myroad st.", "CP": "J4K4T4" }`)
+	}
+
 	successCases := []*secretManagerTestCase{
 		makeValidSecretManagerTestCaseCustom(badSecretString),
 		makeValidSecretManagerTestCaseCustom(setSecretJSON),
@@ -491,6 +503,7 @@ func TestAzureKeyVaultSecretManagerGetSecretMap(t *testing.T) {
 		makeValidSecretManagerTestCaseCustom(setSecretTags),
 		makeValidSecretManagerTestCaseCustom(setSecretWithJSONTag),
 		makeValidSecretManagerTestCaseCustom(setSecretWithNoTags),
+		makeValidSecretManagerTestCaseCustom(nestedJsonNoProperty),
 	}
 
 	sm := Azure{