storj/private/nodeoperator/operator.go
Egon Elbre 961e841bd7 all: fix error naming
errs.Class should not contain "error" in the name, since that causes a
lot of stutter in the error logs. As an example a log line could end up
looking like:

    ERROR node stats service error: satellitedbs error: node stats database error: no rows

Whereas something like:

    ERROR nodestats service: satellitedbs: nodestatsdb: no rows

Would contain all the necessary information without the stutter.

Change-Id: I7b7cb7e592ebab4bcfadc1eef11122584d2b20e0
2021-04-29 15:38:21 +03:00

57 lines
1.6 KiB
Go

// 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())
}