func parse()

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
}