From 8beb7f60d875013aeb73fdfc14acadf44f1a53c8 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Thu, 11 Feb 2021 08:29:25 +0100 Subject: [PATCH] Encode event params into scope before running wf session --- automation/service/trigger.go | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/automation/service/trigger.go b/automation/service/trigger.go index ca0999c78..db0133c64 100644 --- a/automation/service/trigger.go +++ b/automation/service/trigger.go @@ -8,6 +8,7 @@ import ( "github.com/cortezaproject/corteza-server/pkg/auth" "github.com/cortezaproject/corteza-server/pkg/errors" "github.com/cortezaproject/corteza-server/pkg/eventbus" + "github.com/cortezaproject/corteza-server/pkg/expr" "github.com/cortezaproject/corteza-server/pkg/filter" "github.com/cortezaproject/corteza-server/pkg/label" "github.com/cortezaproject/corteza-server/pkg/wfexec" @@ -51,6 +52,14 @@ type ( triggerUpdateHandler func(ctx context.Context, ns *types.Trigger) (triggerChanges, error) triggerChanges uint8 + + varsEncoder interface { + EncodeVars() (*expr.Vars, error) + } + + varsDecoder interface { + DecodeVars(*expr.Vars) error + } ) const ( @@ -467,15 +476,25 @@ func (svc *trigger) registerTriggers(wf *types.Workflow, runAs auth.Identifiable } var ( - handler = func(ctx context.Context, ev eventbus.Event) error { + handler = func(ctx context.Context, ev eventbus.Event) (err error) { var ( // create session scope from predefined workflow scope and trigger input - scope = wf.Scope.Merge(t.Input) - wait WaitFn + scope = wf.Scope.Merge(t.Input) + evScope *expr.Vars + wait WaitFn ) - // scope["event"] = ev + if enc, is := ev.(varsEncoder); is { + if evScope, err = enc.EncodeVars(); err != nil { + return + } + + scope = scope.Merge(evScope) + } + + _ = scope.AssignFieldValue("eventType", expr.Must(expr.NewString(ev.EventType()))) + _ = scope.AssignFieldValue("resourceType", expr.Must(expr.NewString(ev.ResourceType()))) if runAs == nil { // @todo can/should we get alternative identity from Event?