forked from TrueCloudLab/frostfs-node
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
|
package control
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
crypto "github.com/nspcc-dev/neofs-crypto"
|
||
|
)
|
||
|
|
||
|
// 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
|
||
|
|
||
|
allowedKeys [][]byte
|
||
|
}
|
||
|
|
||
|
func panicOnPrmValue(n string, v interface{}) {
|
||
|
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, opts ...Option) *Server {
|
||
|
// verify required parameters
|
||
|
switch {
|
||
|
case prm.key == nil:
|
||
|
panicOnPrmValue("key", prm.key)
|
||
|
case prm.healthChecker == nil:
|
||
|
panicOnPrmValue("health checker", prm.healthChecker)
|
||
|
}
|
||
|
|
||
|
// compute optional parameters
|
||
|
o := defaultOptions()
|
||
|
|
||
|
for _, opt := range opts {
|
||
|
opt(o)
|
||
|
}
|
||
|
|
||
|
return &Server{
|
||
|
prm: prm,
|
||
|
|
||
|
allowedKeys: append(o.allowedKeys, crypto.MarshalPublicKey(&prm.key.PublicKey)),
|
||
|
}
|
||
|
}
|