Dmitrii Stepanov
189dbb01be
All checks were successful
DCO action / DCO (pull_request) Successful in 3m51s
Vulncheck / Vulncheck (pull_request) Successful in 3m49s
Build / Build Components (1.21) (pull_request) Successful in 4m34s
Build / Build Components (1.20) (pull_request) Successful in 6m21s
Tests and linters / Tests (1.21) (pull_request) Successful in 9m1s
Tests and linters / Tests (1.20) (pull_request) Successful in 9m12s
Tests and linters / Staticcheck (pull_request) Successful in 6m40s
Tests and linters / Tests with -race (pull_request) Successful in 9m21s
Tests and linters / Lint (pull_request) Successful in 9m39s
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
57 lines
1.4 KiB
Go
57 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
|
|
switch {
|
|
case 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()),
|
|
}
|
|
}
|