[#69] object/acl: Construct service from options

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2020-10-03 08:19:22 +03:00 committed by Alex Vanin
parent e5898c9ca8
commit 30e6912c7b
3 changed files with 74 additions and 28 deletions

View file

@ -292,25 +292,31 @@ func initObjectService(c *cfg) {
objectGRPC.RegisterObjectServiceServer(c.cfgGRPC.server, objectGRPC.RegisterObjectServiceServer(c.cfgGRPC.server,
objectTransportGRPC.New( objectTransportGRPC.New(
acl.New( acl.New(
acl.NewSenderClassifier( acl.WithSenderClassifier(
c.cfgNetmap.wrapper, acl.NewSenderClassifier(
c.cfgNetmap.wrapper, c.cfgNetmap.wrapper,
c.cfgNetmap.wrapper,
),
), ),
c.cfgObject.cnrStorage, acl.WithContainerSource(
objectService.NewSignService( c.cfgObject.cnrStorage,
c.key, ),
objectService.NewTransportSplitter( acl.WithNextService(
c.cfgGRPC.maxChunkSize, objectService.NewSignService(
c.cfgGRPC.maxAddrAmount, c.key,
&objectSvc{ objectService.NewTransportSplitter(
put: sPutV2, c.cfgGRPC.maxChunkSize,
search: sSearchV2, c.cfgGRPC.maxAddrAmount,
head: sHeadV2, &objectSvc{
rng: sRangeV2, put: sPutV2,
get: sGetV2, search: sSearchV2,
rngHash: sRangeHashV2, head: sHeadV2,
delete: sDeleteV2, rng: sRangeV2,
}, get: sGetV2,
rngHash: sRangeHashV2,
delete: sDeleteV2,
},
),
), ),
), ),
), ),

View file

@ -16,9 +16,7 @@ import (
type ( type (
// Service checks basic ACL rules. // Service checks basic ACL rules.
Service struct { Service struct {
containers core.Source *cfg
sender SenderClassifier
next object.Service
} }
putStreamBasicChecker struct { putStreamBasicChecker struct {
@ -47,6 +45,17 @@ type (
} }
) )
// Option represents Service constructor option.
type Option func(*cfg)
type cfg struct {
containers core.Source
sender SenderClassifier
next object.Service
}
var ( var (
ErrMalformedRequest = errors.New("malformed request") ErrMalformedRequest = errors.New("malformed request")
ErrUnknownRole = errors.New("can't classify request sender") ErrUnknownRole = errors.New("can't classify request sender")
@ -54,16 +63,20 @@ var (
ErrBasicAccessDenied = errors.New("access denied by basic acl") ErrBasicAccessDenied = errors.New("access denied by basic acl")
) )
func defaultCfg() *cfg {
return new(cfg)
}
// New is a constructor for object ACL checking service. // New is a constructor for object ACL checking service.
func New( func New(opts ...Option) Service {
c SenderClassifier, cfg := defaultCfg()
cnr core.Source,
next object.Service) Service { for i := range opts {
opts[i](cfg)
}
return Service{ return Service{
containers: cnr, cfg: cfg,
sender: c,
next: next,
} }
} }

View file

@ -0,0 +1,27 @@
package acl
import (
"github.com/nspcc-dev/neofs-api-go/v2/object"
"github.com/nspcc-dev/neofs-node/pkg/core/container"
)
// WithContainerSource returns option to set container source.
func WithContainerSource(v container.Source) Option {
return func(c *cfg) {
c.containers = v
}
}
// WithSenderClassifier returns option to set sender classifier.
func WithSenderClassifier(v SenderClassifier) Option {
return func(c *cfg) {
c.sender = v
}
}
// WithNextService returns option to set next object service.
func WithNextService(v object.Service) Option {
return func(c *cfg) {
c.next = v
}
}