storj/private/nodeoperator/operator.go

57 lines
1.6 KiB
Go
Raw Normal View History

// Copyright (C) 2021 Storj Labs, Inc.
// See LICENSE for copying information.
package nodeoperator
import (
"strings"
"github.com/zeebo/errs"
)
// DefaultWalletFeaturesValidation contains default wallet features list validation config.
var DefaultWalletFeaturesValidation = WalletFeaturesValidation{
MaxListLength: 5,
MaxFeatureLength: 15,
ReservedCharacters: []rune{',', '|'},
}
// WalletFeatureValidationError wallet feature validation errors class.
var WalletFeatureValidationError = errs.Class("wallet feature validation")
// WalletFeaturesValidation contains config for wallet feature validation.
type WalletFeaturesValidation struct {
MaxListLength int
MaxFeatureLength int
ReservedCharacters []rune
}
// Validate validates wallet features list.
func (validation *WalletFeaturesValidation) Validate(features []string) error {
var errGroup errs.Group
if len(features) == 0 {
return nil
}
if len(features) > validation.MaxListLength {
errGroup.Add(
errs.New("features list exceeds maximum length, %d > %d", len(features), validation.MaxListLength))
}
for _, feature := range features {
if len(feature) > validation.MaxFeatureLength {
errGroup.Add(
errs.New("feature %q exceeds maximum length, %d > %d", feature, len(feature), validation.MaxFeatureLength))
}
for _, reserved := range validation.ReservedCharacters {
if i := strings.IndexRune(feature, reserved); i >= 0 {
errGroup.Add(errs.New("feature %q contains reserved character '%c' at pos %d", feature, reserved, i))
}
}
}
return WalletFeatureValidationError.Wrap(errGroup.Err())
}