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