From 5c2b8de87d1dcb3a0b71944d53315b0f32c31679 Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Tue, 25 May 2021 19:23:11 +0300 Subject: [PATCH] [#525] v2/container: Make context with token reusable Rename `PutContext` to `ContextWithToken` and implement its constructor as a separate function in order to reuse it in other RPCs. Signed-off-by: Leonard Lyubich --- pkg/services/container/executor.go | 16 +++++++++++----- pkg/services/container/morph/executor.go | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/pkg/services/container/executor.go b/pkg/services/container/executor.go index e0c0248a5..7dc748434 100644 --- a/pkg/services/container/executor.go +++ b/pkg/services/container/executor.go @@ -9,14 +9,14 @@ import ( ) // FIXME: (temp solution) we need to pass session token from header -type PutContext struct { +type ContextWithToken struct { context.Context SessionToken *session.SessionToken } type ServiceExecutor interface { - Put(PutContext, *container.PutRequestBody) (*container.PutResponseBody, error) + Put(ContextWithToken, *container.PutRequestBody) (*container.PutResponseBody, error) Delete(context.Context, *container.DeleteRequestBody) (*container.DeleteResponseBody, error) Get(context.Context, *container.GetRequestBody) (*container.GetResponseBody, error) List(context.Context, *container.ListRequestBody) (*container.ListResponseBody, error) @@ -37,17 +37,23 @@ func NewExecutionService(exec ServiceExecutor) Server { } } -func (s *executorSvc) Put(ctx context.Context, req *container.PutRequest) (*container.PutResponse, error) { +func contextWithTokenFromRequest(ctx context.Context, req interface { + GetMetaHeader() *session.RequestMetaHeader +}) ContextWithToken { var tok *session.SessionToken for meta := req.GetMetaHeader(); meta != nil; meta = meta.GetOrigin() { tok = meta.GetSessionToken() } - respBody, err := s.exec.Put(PutContext{ + return ContextWithToken{ Context: ctx, SessionToken: tok, - }, req.GetBody()) + } +} + +func (s *executorSvc) Put(ctx context.Context, req *container.PutRequest) (*container.PutResponse, error) { + respBody, err := s.exec.Put(contextWithTokenFromRequest(ctx, req), req.GetBody()) if err != nil { return nil, fmt.Errorf("could not execute Put request: %w", err) } diff --git a/pkg/services/container/morph/executor.go b/pkg/services/container/morph/executor.go index 249f94a3d..8fde3960a 100644 --- a/pkg/services/container/morph/executor.go +++ b/pkg/services/container/morph/executor.go @@ -25,7 +25,7 @@ func NewExecutor(w *wrapper.Wrapper) containerSvc.ServiceExecutor { } } -func (s *morphExecutor) Put(ctx containerSvc.PutContext, body *container.PutRequestBody) (*container.PutResponseBody, error) { +func (s *morphExecutor) Put(ctx containerSvc.ContextWithToken, body *container.PutRequestBody) (*container.PutResponseBody, error) { cnr, err := containerSDK.NewVerifiedFromV2(body.GetContainer()) if err != nil { return nil, fmt.Errorf("invalid format of the container structure: %w", err)