package control import ( "fmt" ) // 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 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, 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, allowedKeys: append(o.allowedKeys, prm.key.PublicKey().Bytes()), } }