frostfs-node/cmd/neofs-node/config/node/config.go

109 lines
2.4 KiB
Go
Raw Normal View History

package nodeconfig
import (
"errors"
"fmt"
"io/ioutil"
"strconv"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
"github.com/nspcc-dev/neofs-node/pkg/network"
utilConfig "github.com/nspcc-dev/neofs-node/pkg/util/config"
)
const (
subsection = "node"
attributePrefix = "attribute"
)
var (
errKeyNotSet = errors.New("empty/not set key address, see `node.key` section")
errAddressNotSet = errors.New("empty/not set bootstrap address, see `node.address` section")
)
// Key returns value of "key" config parameter
// from "node" section.
//
// Panics if value is not a non-empty string.
func Key(c *config.Config) *keys.PrivateKey {
v := config.StringSafe(c.Sub(subsection), "key")
if v == "" {
panic(errKeyNotSet)
}
var (
key *keys.PrivateKey
err error
data []byte
)
if data, err = ioutil.ReadFile(v); err == nil {
key, err = keys.NewPrivateKeyFromBytes(data)
}
if err != nil {
return Wallet(c)
}
return key
}
// Wallet returns value of node private key from "node" section.
func Wallet(c *config.Config) *keys.PrivateKey {
v := c.Sub(subsection).Sub("wallet")
acc, err := utilConfig.LoadAccount(
config.String(v, "path"),
config.String(v, "address"),
config.String(v, "password"))
if err != nil {
panic(fmt.Errorf("invalid wallet config: %w", err))
}
return acc.PrivateKey()
}
// BootstrapAddress returns value of "address" config parameter
// from "node" section as network.Address.
//
// Panics if value is not a valid NeoFS network address
func BootstrapAddress(c *config.Config) *network.Address {
v := config.StringSafe(c.Sub(subsection), "address")
if v == "" {
panic(errAddressNotSet)
}
addr, err := network.AddressFromString(v)
if err != nil {
panic(fmt.Errorf("could not convert bootstrap address %s to %T: %w", v, addr, err))
}
return addr
}
// Attributes returns list of config parameters
// from "node" section that are set in "attribute_i" format,
// where i in range [0,100).
func Attributes(c *config.Config) (attrs []string) {
const maxAttributes = 100
for i := 0; i < maxAttributes; i++ {
attr := config.StringSafe(c.Sub(subsection), attributePrefix+"_"+strconv.Itoa(i))
if attr == "" {
return
}
attrs = append(attrs, attr)
}
return
}
// Relay returns value of "relay" config parameter
// from "node" section.
//
// Returns false if value is not set.
func Relay(c *config.Config) bool {
return config.BoolSafe(c.Sub(subsection), "relay")
}