package pki import ( "fmt" "strings" "github.com/hashicorp/vault/sdk/framework" "github.com/hashicorp/vault/sdk/helper/errutil" ) const ( managedKeyNameArg = "managed_key_name" managedKeyIdArg = "managed_key_id" ) func normalizeSerial(serial string) string { return strings.Replace(strings.ToLower(serial), ":", "-", -1) } func denormalizeSerial(serial string) string { return strings.Replace(strings.ToLower(serial), "-", ":", -1) } func kmsRequested(input *inputBundle) bool { exportedStr, ok := input.apiData.GetOk("exported") if !ok { return false } return exportedStr.(string) == "kms" } type keyId interface { String() string } type ( UUIDKey string NameKey string ) func (u UUIDKey) String() string { return string(u) } func (n NameKey) String() string { return string(n) } // getManagedKeyId returns a NameKey or a UUIDKey, whichever was specified in the // request API data. func getManagedKeyId(data *framework.FieldData) (keyId, error) { name, UUID, err := getManagedKeyNameOrUUID(data) if err != nil { return nil, err } var keyId keyId = NameKey(name) if len(UUID) > 0 { keyId = UUIDKey(UUID) } return keyId, nil } func getManagedKeyNameOrUUID(data *framework.FieldData) (name string, UUID string, err error) { getApiData := func(argName string) (string, error) { arg, ok := data.GetOk(argName) if !ok { return "", nil } argValue, ok := arg.(string) if !ok { return "", errutil.UserError{Err: fmt.Sprintf("invalid type for argument %s", argName)} } return strings.TrimSpace(argValue), nil } keyName, err := getApiData(managedKeyNameArg) keyUUID, err2 := getApiData(managedKeyIdArg) switch { case err != nil: return "", "", err case err2 != nil: return "", "", err2 case len(keyName) == 0 && len(keyUUID) == 0: return "", "", errutil.UserError{Err: fmt.Sprintf("missing argument %s or %s", managedKeyNameArg, managedKeyIdArg)} case len(keyName) > 0 && len(keyUUID) > 0: return "", "", errutil.UserError{Err: fmt.Sprintf("only one argument of %s or %s should be specified", managedKeyNameArg, managedKeyIdArg)} } return keyName, keyUUID, nil }