mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-30 18:17:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) HashiCorp, Inc.
 | |
| // SPDX-License-Identifier: MPL-2.0
 | |
| 
 | |
| package api
 | |
| 
 | |
| // NOTE: this file was copied from
 | |
| // https://github.com/hashicorp/vault/blob/main/sdk/helper/consts/plugin_types.go
 | |
| // Any changes made should be made to both files at the same time.
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| )
 | |
| 
 | |
| var PluginTypes = []PluginType{
 | |
| 	PluginTypeUnknown,
 | |
| 	PluginTypeCredential,
 | |
| 	PluginTypeDatabase,
 | |
| 	PluginTypeSecrets,
 | |
| }
 | |
| 
 | |
| type PluginType uint32
 | |
| 
 | |
| // This is a list of PluginTypes used by Vault.
 | |
| // If we need to add any in the future, it would
 | |
| // be best to add them to the _end_ of the list below
 | |
| // because they resolve to incrementing numbers,
 | |
| // which may be saved in state somewhere. Thus if
 | |
| // the name for one of those numbers changed because
 | |
| // a value were added to the middle, that could cause
 | |
| // the wrong plugin types to be read from storage
 | |
| // for a given underlying number. Example of the problem
 | |
| // here: https://play.golang.org/p/YAaPw5ww3er
 | |
| const (
 | |
| 	PluginTypeUnknown PluginType = iota
 | |
| 	PluginTypeCredential
 | |
| 	PluginTypeDatabase
 | |
| 	PluginTypeSecrets
 | |
| )
 | |
| 
 | |
| func (p PluginType) String() string {
 | |
| 	switch p {
 | |
| 	case PluginTypeUnknown:
 | |
| 		return "unknown"
 | |
| 	case PluginTypeCredential:
 | |
| 		return "auth"
 | |
| 	case PluginTypeDatabase:
 | |
| 		return "database"
 | |
| 	case PluginTypeSecrets:
 | |
| 		return "secret"
 | |
| 	default:
 | |
| 		return "unsupported"
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func ParsePluginType(pluginType string) (PluginType, error) {
 | |
| 	switch pluginType {
 | |
| 	case "unknown":
 | |
| 		return PluginTypeUnknown, nil
 | |
| 	case "auth":
 | |
| 		return PluginTypeCredential, nil
 | |
| 	case "database":
 | |
| 		return PluginTypeDatabase, nil
 | |
| 	case "secret":
 | |
| 		return PluginTypeSecrets, nil
 | |
| 	default:
 | |
| 		return PluginTypeUnknown, fmt.Errorf("%q is not a supported plugin type", pluginType)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // UnmarshalJSON implements json.Unmarshaler. It supports unmarshaling either a
 | |
| // string or a uint32. All new serialization will be as a string, but we
 | |
| // previously serialized as a uint32 so we need to support that for backwards
 | |
| // compatibility.
 | |
| func (p *PluginType) UnmarshalJSON(data []byte) error {
 | |
| 	var asString string
 | |
| 	err := json.Unmarshal(data, &asString)
 | |
| 	if err == nil {
 | |
| 		*p, err = ParsePluginType(asString)
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	var asUint32 uint32
 | |
| 	err = json.Unmarshal(data, &asUint32)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	*p = PluginType(asUint32)
 | |
| 	switch *p {
 | |
| 	case PluginTypeUnknown, PluginTypeCredential, PluginTypeDatabase, PluginTypeSecrets:
 | |
| 		return nil
 | |
| 	default:
 | |
| 		return fmt.Errorf("%d is not a supported plugin type", asUint32)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // MarshalJSON implements json.Marshaler.
 | |
| func (p PluginType) MarshalJSON() ([]byte, error) {
 | |
| 	return json.Marshal(p.String())
 | |
| }
 | 
