44 lines
965 B
Go
44 lines
965 B
Go
package validators
|
|
|
|
import (
|
|
"crypto/ed25519"
|
|
"encoding/hex"
|
|
"errors"
|
|
"fmt"
|
|
validation "github.com/go-ozzo/ozzo-validation/v4"
|
|
"github.com/imdario/mergo"
|
|
"reflect"
|
|
)
|
|
|
|
func CheckPubkeyValidator(value interface{}) error {
|
|
p, _ := value.(string)
|
|
pubkeyBytes, err := hex.DecodeString(p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(pubkeyBytes) != ed25519.PublicKeySize {
|
|
return errors.New(fmt.Sprintf("pubkey must be %d bytes in hexadecimal format", ed25519.PublicKeySize))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type Validatable interface {
|
|
validation.Validatable
|
|
Import(d map[string]interface{}) (Validatable, error)
|
|
}
|
|
|
|
type ValidatableImpl struct {
|
|
}
|
|
|
|
func (v ValidatableImpl) Import(d map[string]interface{}, destType Validatable) (Validatable, error) {
|
|
instance := reflect.New(reflect.TypeOf(destType)).Interface().(Validatable)
|
|
// Perform the import logic
|
|
if err := mergo.Map(instance, d, mergo.WithOverride); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return instance, nil
|
|
}
|