forked from TrueCloudLab/frostfs-node
[#1159] services/container: Remove ContainerWithContext
struct
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
2bcc0051ab
commit
855cbf5a3a
3 changed files with 26 additions and 53 deletions
|
@ -8,19 +8,12 @@ import (
|
||||||
"github.com/nspcc-dev/neofs-api-go/v2/session"
|
"github.com/nspcc-dev/neofs-api-go/v2/session"
|
||||||
)
|
)
|
||||||
|
|
||||||
// FIXME: #1159 (temp solution) we need to pass session token from header
|
|
||||||
type ContextWithToken struct {
|
|
||||||
context.Context
|
|
||||||
|
|
||||||
SessionToken *session.Token
|
|
||||||
}
|
|
||||||
|
|
||||||
type ServiceExecutor interface {
|
type ServiceExecutor interface {
|
||||||
Put(ContextWithToken, *container.PutRequestBody) (*container.PutResponseBody, error)
|
Put(context.Context, *session.Token, *container.PutRequestBody) (*container.PutResponseBody, error)
|
||||||
Delete(ContextWithToken, *container.DeleteRequestBody) (*container.DeleteResponseBody, error)
|
Delete(context.Context, *session.Token, *container.DeleteRequestBody) (*container.DeleteResponseBody, error)
|
||||||
Get(context.Context, *container.GetRequestBody) (*container.GetResponseBody, error)
|
Get(context.Context, *container.GetRequestBody) (*container.GetResponseBody, error)
|
||||||
List(context.Context, *container.ListRequestBody) (*container.ListResponseBody, error)
|
List(context.Context, *container.ListRequestBody) (*container.ListResponseBody, error)
|
||||||
SetExtendedACL(ContextWithToken, *container.SetExtendedACLRequestBody) (*container.SetExtendedACLResponseBody, error)
|
SetExtendedACL(context.Context, *session.Token, *container.SetExtendedACLRequestBody) (*container.SetExtendedACLResponseBody, error)
|
||||||
GetExtendedACL(context.Context, *container.GetExtendedACLRequestBody) (*container.GetExtendedACLResponseBody, error)
|
GetExtendedACL(context.Context, *container.GetExtendedACLRequestBody) (*container.GetExtendedACLResponseBody, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,23 +30,8 @@ func NewExecutionService(exec ServiceExecutor) Server {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func contextWithTokenFromRequest(ctx context.Context, req interface {
|
|
||||||
GetMetaHeader() *session.RequestMetaHeader
|
|
||||||
}) ContextWithToken {
|
|
||||||
var tok *session.Token
|
|
||||||
|
|
||||||
for meta := req.GetMetaHeader(); meta != nil; meta = meta.GetOrigin() {
|
|
||||||
tok = meta.GetSessionToken()
|
|
||||||
}
|
|
||||||
|
|
||||||
return ContextWithToken{
|
|
||||||
Context: ctx,
|
|
||||||
SessionToken: tok,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *executorSvc) Put(ctx context.Context, req *container.PutRequest) (*container.PutResponse, error) {
|
func (s *executorSvc) Put(ctx context.Context, req *container.PutRequest) (*container.PutResponse, error) {
|
||||||
respBody, err := s.exec.Put(contextWithTokenFromRequest(ctx, req), req.GetBody())
|
respBody, err := s.exec.Put(ctx, req.GetMetaHeader().GetOrigin().GetSessionToken(), req.GetBody())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not execute Put request: %w", err)
|
return nil, fmt.Errorf("could not execute Put request: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -65,7 +43,7 @@ func (s *executorSvc) Put(ctx context.Context, req *container.PutRequest) (*cont
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *executorSvc) Delete(ctx context.Context, req *container.DeleteRequest) (*container.DeleteResponse, error) {
|
func (s *executorSvc) Delete(ctx context.Context, req *container.DeleteRequest) (*container.DeleteResponse, error) {
|
||||||
respBody, err := s.exec.Delete(contextWithTokenFromRequest(ctx, req), req.GetBody())
|
respBody, err := s.exec.Delete(ctx, req.GetMetaHeader().GetOrigin().GetSessionToken(), req.GetBody())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not execute Delete request: %w", err)
|
return nil, fmt.Errorf("could not execute Delete request: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -101,7 +79,7 @@ func (s *executorSvc) List(ctx context.Context, req *container.ListRequest) (*co
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *executorSvc) SetExtendedACL(ctx context.Context, req *container.SetExtendedACLRequest) (*container.SetExtendedACLResponse, error) {
|
func (s *executorSvc) SetExtendedACL(ctx context.Context, req *container.SetExtendedACLRequest) (*container.SetExtendedACLResponse, error) {
|
||||||
respBody, err := s.exec.SetExtendedACL(contextWithTokenFromRequest(ctx, req), req.GetBody())
|
respBody, err := s.exec.SetExtendedACL(ctx, req.GetMetaHeader().GetOrigin().GetSessionToken(), req.GetBody())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not execute SetEACL request: %w", err)
|
return nil, fmt.Errorf("could not execute SetEACL request: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ func NewExecutor(rdr Reader, wrt Writer) containerSvc.ServiceExecutor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *morphExecutor) Put(ctx containerSvc.ContextWithToken, body *container.PutRequestBody) (*container.PutResponseBody, error) {
|
func (s *morphExecutor) Put(_ context.Context, tokV2 *sessionV2.Token, body *container.PutRequestBody) (*container.PutResponseBody, error) {
|
||||||
sigV2 := body.GetSignature()
|
sigV2 := body.GetSignature()
|
||||||
if sigV2 == nil {
|
if sigV2 == nil {
|
||||||
// TODO(@cthulhu-rider): #1387 use "const" error
|
// TODO(@cthulhu-rider): #1387 use "const" error
|
||||||
|
@ -66,10 +66,10 @@ func (s *morphExecutor) Put(ctx containerSvc.ContextWithToken, body *container.P
|
||||||
|
|
||||||
cnr.SetSignature(&sig)
|
cnr.SetSignature(&sig)
|
||||||
|
|
||||||
if ctx.SessionToken != nil {
|
if tokV2 != nil {
|
||||||
var tok session.Container
|
var tok session.Container
|
||||||
|
|
||||||
err := tok.ReadFromV2(*ctx.SessionToken)
|
err := tok.ReadFromV2(*tokV2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid session token: %w", err)
|
return nil, fmt.Errorf("invalid session token: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ func (s *morphExecutor) Put(ctx containerSvc.ContextWithToken, body *container.P
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *morphExecutor) Delete(ctx containerSvc.ContextWithToken, body *container.DeleteRequestBody) (*container.DeleteResponseBody, error) {
|
func (s *morphExecutor) Delete(_ context.Context, tokV2 *sessionV2.Token, body *container.DeleteRequestBody) (*container.DeleteResponseBody, error) {
|
||||||
idV2 := body.GetContainerID()
|
idV2 := body.GetContainerID()
|
||||||
if idV2 == nil {
|
if idV2 == nil {
|
||||||
return nil, errors.New("missing container ID")
|
return nil, errors.New("missing container ID")
|
||||||
|
@ -108,10 +108,10 @@ func (s *morphExecutor) Delete(ctx containerSvc.ContextWithToken, body *containe
|
||||||
|
|
||||||
var tok *session.Container
|
var tok *session.Container
|
||||||
|
|
||||||
if ctx.SessionToken != nil {
|
if tokV2 != nil {
|
||||||
tok = new(session.Container)
|
tok = new(session.Container)
|
||||||
|
|
||||||
err := tok.ReadFromV2(*ctx.SessionToken)
|
err := tok.ReadFromV2(*tokV2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid session token: %w", err)
|
return nil, fmt.Errorf("invalid session token: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -201,7 +201,7 @@ func (s *morphExecutor) List(ctx context.Context, body *container.ListRequestBod
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *morphExecutor) SetExtendedACL(ctx containerSvc.ContextWithToken, body *container.SetExtendedACLRequestBody) (*container.SetExtendedACLResponseBody, error) {
|
func (s *morphExecutor) SetExtendedACL(ctx context.Context, tokV2 *sessionV2.Token, body *container.SetExtendedACLRequestBody) (*container.SetExtendedACLResponseBody, error) {
|
||||||
sigV2 := body.GetSignature()
|
sigV2 := body.GetSignature()
|
||||||
if sigV2 == nil {
|
if sigV2 == nil {
|
||||||
// TODO(@cthulhu-rider): #1387 use "const" error
|
// TODO(@cthulhu-rider): #1387 use "const" error
|
||||||
|
@ -215,10 +215,10 @@ func (s *morphExecutor) SetExtendedACL(ctx containerSvc.ContextWithToken, body *
|
||||||
|
|
||||||
table.SetSignature(&sig)
|
table.SetSignature(&sig)
|
||||||
|
|
||||||
if ctx.SessionToken != nil {
|
if tokV2 != nil {
|
||||||
var tok session.Container
|
var tok session.Container
|
||||||
|
|
||||||
err := tok.ReadFromV2(*ctx.SessionToken)
|
err := tok.ReadFromV2(*tokV2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid session token: %w", err)
|
return nil, fmt.Errorf("invalid session token: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,35 +48,35 @@ func TestInvalidToken(t *testing.T) {
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
op func(e containerSvc.ServiceExecutor, ctx containerSvc.ContextWithToken) error
|
op func(e containerSvc.ServiceExecutor, tokV2 *session.Token) error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "put",
|
name: "put",
|
||||||
op: func(e containerSvc.ServiceExecutor, ctx containerSvc.ContextWithToken) (err error) {
|
op: func(e containerSvc.ServiceExecutor, tokV2 *session.Token) (err error) {
|
||||||
var reqBody container.PutRequestBody
|
var reqBody container.PutRequestBody
|
||||||
reqBody.SetSignature(new(refs.Signature))
|
reqBody.SetSignature(new(refs.Signature))
|
||||||
|
|
||||||
_, err = e.Put(ctx, &reqBody)
|
_, err = e.Put(context.TODO(), tokV2, &reqBody)
|
||||||
return
|
return
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "delete",
|
name: "delete",
|
||||||
op: func(e containerSvc.ServiceExecutor, ctx containerSvc.ContextWithToken) (err error) {
|
op: func(e containerSvc.ServiceExecutor, tokV2 *session.Token) (err error) {
|
||||||
var reqBody container.DeleteRequestBody
|
var reqBody container.DeleteRequestBody
|
||||||
reqBody.SetContainerID(&cnrV2)
|
reqBody.SetContainerID(&cnrV2)
|
||||||
|
|
||||||
_, err = e.Delete(ctx, &reqBody)
|
_, err = e.Delete(context.TODO(), tokV2, &reqBody)
|
||||||
return
|
return
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "setEACL",
|
name: "setEACL",
|
||||||
op: func(e containerSvc.ServiceExecutor, ctx containerSvc.ContextWithToken) (err error) {
|
op: func(e containerSvc.ServiceExecutor, tokV2 *session.Token) (err error) {
|
||||||
var reqBody container.SetExtendedACLRequestBody
|
var reqBody container.SetExtendedACLRequestBody
|
||||||
reqBody.SetSignature(new(refs.Signature))
|
reqBody.SetSignature(new(refs.Signature))
|
||||||
|
|
||||||
_, err = e.SetExtendedACL(ctx, &reqBody)
|
_, err = e.SetExtendedACL(context.TODO(), tokV2, &reqBody)
|
||||||
return
|
return
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -84,17 +84,12 @@ func TestInvalidToken(t *testing.T) {
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
ctx := containerSvc.ContextWithToken{
|
tok := generateToken(new(session.ObjectSessionContext))
|
||||||
Context: context.Background(),
|
require.Error(t, test.op(e, tok))
|
||||||
SessionToken: generateToken(new(session.ObjectSessionContext)),
|
|
||||||
}
|
|
||||||
require.Error(t, test.op(e, ctx))
|
|
||||||
|
|
||||||
ctx.SessionToken = &tokV2
|
require.NoError(t, test.op(e, &tokV2))
|
||||||
require.NoError(t, test.op(e, ctx))
|
|
||||||
|
|
||||||
ctx.SessionToken = nil
|
require.NoError(t, test.op(e, nil))
|
||||||
require.NoError(t, test.op(e, ctx))
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue