forked from TrueCloudLab/frostfs-node
See https://go-critic.com/overview#singlecaseswitch for details. Change-Id: Ied7885f83b4116969771de6f91bc5e1e3b2a4f1e Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package control
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/container"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/netmap"
|
|
)
|
|
|
|
// Server is an entity that serves
|
|
// Control service on IR node.
|
|
//
|
|
// To gain access to the service, any request must be
|
|
// signed with a key from the white list.
|
|
type Server struct {
|
|
prm Prm
|
|
netmapClient *netmap.Client
|
|
containerClient *container.Client
|
|
allowedKeys [][]byte
|
|
}
|
|
|
|
func panicOnPrmValue(n string, v any) {
|
|
const invalidPrmValFmt = "invalid %s parameter (%T): %v"
|
|
panic(fmt.Sprintf(invalidPrmValFmt, n, v, v))
|
|
}
|
|
|
|
// New creates a new instance of the Server.
|
|
//
|
|
// Panics if:
|
|
// - parameterized private key is nil;
|
|
// - parameterized HealthChecker is nil.
|
|
//
|
|
// Forms white list from all keys specified via
|
|
// WithAllowedKeys option and a public key of
|
|
// the parameterized private key.
|
|
func New(prm Prm, netmapClient *netmap.Client, containerClient *container.Client, opts ...Option) *Server {
|
|
// verify required parameters
|
|
if prm.healthChecker == nil {
|
|
panicOnPrmValue("health checker", prm.healthChecker)
|
|
}
|
|
|
|
// compute optional parameters
|
|
o := defaultOptions()
|
|
|
|
for _, opt := range opts {
|
|
opt(o)
|
|
}
|
|
|
|
return &Server{
|
|
prm: prm,
|
|
netmapClient: netmapClient,
|
|
containerClient: containerClient,
|
|
|
|
allowedKeys: append(o.allowedKeys, prm.key.PublicKey().Bytes()),
|
|
}
|
|
}
|