diff --git a/pkg/services/container/executor.go b/pkg/services/container/executor.go index 276232bb..a3b6eb7a 100644 --- a/pkg/services/container/executor.go +++ b/pkg/services/container/executor.go @@ -8,19 +8,12 @@ import ( "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 { - Put(ContextWithToken, *container.PutRequestBody) (*container.PutResponseBody, error) - Delete(ContextWithToken, *container.DeleteRequestBody) (*container.DeleteResponseBody, error) + Put(context.Context, *session.Token, *container.PutRequestBody) (*container.PutResponseBody, error) + Delete(context.Context, *session.Token, *container.DeleteRequestBody) (*container.DeleteResponseBody, error) Get(context.Context, *container.GetRequestBody) (*container.GetResponseBody, 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) } @@ -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) { - 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 { 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) { - 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 { 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) { - 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 { return nil, fmt.Errorf("could not execute SetEACL request: %w", err) } diff --git a/pkg/services/container/morph/executor.go b/pkg/services/container/morph/executor.go index 884e0887..bd71ee72 100644 --- a/pkg/services/container/morph/executor.go +++ b/pkg/services/container/morph/executor.go @@ -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() if sigV2 == nil { // TODO(@cthulhu-rider): #1387 use "const" error @@ -66,10 +66,10 @@ func (s *morphExecutor) Put(ctx containerSvc.ContextWithToken, body *container.P cnr.SetSignature(&sig) - if ctx.SessionToken != nil { + if tokV2 != nil { var tok session.Container - err := tok.ReadFromV2(*ctx.SessionToken) + err := tok.ReadFromV2(*tokV2) if err != nil { 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 } -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() if idV2 == nil { return nil, errors.New("missing container ID") @@ -108,10 +108,10 @@ func (s *morphExecutor) Delete(ctx containerSvc.ContextWithToken, body *containe var tok *session.Container - if ctx.SessionToken != nil { + if tokV2 != nil { tok = new(session.Container) - err := tok.ReadFromV2(*ctx.SessionToken) + err := tok.ReadFromV2(*tokV2) if err != nil { 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 } -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() if sigV2 == nil { // TODO(@cthulhu-rider): #1387 use "const" error @@ -215,10 +215,10 @@ func (s *morphExecutor) SetExtendedACL(ctx containerSvc.ContextWithToken, body * table.SetSignature(&sig) - if ctx.SessionToken != nil { + if tokV2 != nil { var tok session.Container - err := tok.ReadFromV2(*ctx.SessionToken) + err := tok.ReadFromV2(*tokV2) if err != nil { return nil, fmt.Errorf("invalid session token: %w", err) } diff --git a/pkg/services/container/morph/executor_test.go b/pkg/services/container/morph/executor_test.go index 08e936d2..11aeb818 100644 --- a/pkg/services/container/morph/executor_test.go +++ b/pkg/services/container/morph/executor_test.go @@ -48,35 +48,35 @@ func TestInvalidToken(t *testing.T) { tests := []struct { name string - op func(e containerSvc.ServiceExecutor, ctx containerSvc.ContextWithToken) error + op func(e containerSvc.ServiceExecutor, tokV2 *session.Token) error }{ { 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 reqBody.SetSignature(new(refs.Signature)) - _, err = e.Put(ctx, &reqBody) + _, err = e.Put(context.TODO(), tokV2, &reqBody) return }, }, { 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 reqBody.SetContainerID(&cnrV2) - _, err = e.Delete(ctx, &reqBody) + _, err = e.Delete(context.TODO(), tokV2, &reqBody) return }, }, { 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 reqBody.SetSignature(new(refs.Signature)) - _, err = e.SetExtendedACL(ctx, &reqBody) + _, err = e.SetExtendedACL(context.TODO(), tokV2, &reqBody) return }, }, @@ -84,17 +84,12 @@ func TestInvalidToken(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := containerSvc.ContextWithToken{ - Context: context.Background(), - SessionToken: generateToken(new(session.ObjectSessionContext)), - } - require.Error(t, test.op(e, ctx)) + tok := generateToken(new(session.ObjectSessionContext)) + require.Error(t, test.op(e, tok)) - ctx.SessionToken = &tokV2 - require.NoError(t, test.op(e, ctx)) + require.NoError(t, test.op(e, &tokV2)) - ctx.SessionToken = nil - require.NoError(t, test.op(e, ctx)) + require.NoError(t, test.op(e, nil)) }) } }