in internal/loader/keyvault_reference_resolver.go [54:91]
func parse(settingValue string) (*KeyVaultSecretMetadata, error) {
var secretRef SecretReference
//
// Valid Key Vault Reference setting value to parse
// {
// "uri":"https://{keyVaultName}.vaule.azure.net/secrets/{secretName}/{secretVersion}"
// }
if err := json.Unmarshal([]byte(settingValue), &secretRef); err != nil {
return nil, err
}
secretUrl, err := url.Parse(secretRef.Uri)
if err != nil {
return nil, err
}
trimmedPath := strings.TrimPrefix(secretUrl.Path, "/")
segments := strings.Split(trimmedPath, "/")
if len(segments) < 2 || strings.ToLower(segments[0]) != "secrets" || segments[1] == "" {
return nil, fmt.Errorf("not a valid url in Key Vault reference type setting '%s', not a valid item", settingValue)
}
var secretVersion string
if len(segments) == 2 { // no version be specified
secretVersion = ""
} else {
secretVersion = segments[2]
}
secretName := segments[1]
hostName := strings.ToLower(secretUrl.Host)
result := &KeyVaultSecretMetadata{
HostName: hostName,
SecretName: secretName,
SecretVersion: secretVersion,
}
return result, nil
}