protected override async Task <ActivityExecutionResult> OnExecuteAsync(HttpResponseAction activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken)
        {
            var response = httpContextAccessor.HttpContext.Response;

            response.StatusCode  = (int)activity.StatusCode;
            response.ContentType = await expressionEvaluator.EvaluateAsync(activity.ContentType, workflowContext, cancellationToken);

            var headersText = await expressionEvaluator.EvaluateAsync(activity.ResponseHeaders, workflowContext, cancellationToken);

            if (headersText != null)
            {
                var headersQuery =
                    from line in Regex.Split(headersText, "\\n", RegexOptions.Multiline)
                    let pair = line.Split(':', '=')
                               select new KeyValuePair <string, string>(pair[0], pair[1]);

                foreach (var header in headersQuery)
                {
                    var headerValueExpression = new WorkflowExpression <string>(activity.ResponseHeaders.Syntax, header.Value);
                    response.Headers[header.Key] = await expressionEvaluator.EvaluateAsync(headerValueExpression, workflowContext, cancellationToken);
                }
            }

            var bodyText = await expressionEvaluator.EvaluateAsync(activity.Body, workflowContext, cancellationToken);

            if (!string.IsNullOrWhiteSpace(bodyText))
            {
                await response.WriteAsync(bodyText, cancellationToken);
            }

            return(TriggerEndpoint("Done"));
        }
        public async Task <T> EvaluateAsync <T>(WorkflowExpression <T> expression, WorkflowExecutionContext workflowContext)
        {
            var templateContext   = CreateTemplateContext(workflowContext);
            var expressionContext = new WorkflowExecutionExpressionContext(templateContext, workflowContext);

            await _workflowContextHandlers.InvokeAsync(x => x.EvaluatingExpressionAsync(expressionContext), _logger);

            var result = await _liquidTemplateManager.RenderAsync(expression.Expression, System.Text.Encodings.Web.JavaScriptEncoder.Default, templateContext);

            return(string.IsNullOrWhiteSpace(result) ? default(T) : (T)Convert.ChangeType(result, typeof(T)));
        }
Example #3
0
        public async Task <T> EvaluateAsync <T>(WorkflowExpression <T> expression, WorkflowExecutionContext workflowContext, params IGlobalMethodProvider[] scopedMethodProviders)
        {
            var workflowType      = workflowContext.WorkflowType;
            var directive         = $"js:{expression}";
            var expressionContext = new WorkflowExecutionScriptContext(workflowContext);

            await _workflowContextHandlers.InvokeAsync(async x => await x.EvaluatingScriptAsync(expressionContext), _logger);

            var methodProviders = scopedMethodProviders.Concat(expressionContext.ScopedMethodProviders);

            return((T)_scriptingManager.Evaluate(directive, null, null, methodProviders));
        }
        public async Task <T> EvaluateAsync <T>(WorkflowExpression <T> expression, WorkflowExecutionContext workflowContext, TextEncoder encoder)
        {
            var templateContext   = CreateTemplateContext(workflowContext);
            var expressionContext = new WorkflowExecutionExpressionContext(templateContext, workflowContext);

            await _workflowContextHandlers.InvokeAsync((h, expressionContext) => h.EvaluatingExpressionAsync(expressionContext), expressionContext, _logger);

            // Set WorkflowContext as a local scope property.
            var result = await _liquidTemplateManager.RenderAsync(
                expression.Expression,
                encoder ?? NullEncoder.Default,
                scope => scope.SetValue("Workflow", workflowContext)
                );

            return(string.IsNullOrWhiteSpace(result) ? default(T) : (T)Convert.ChangeType(result, typeof(T)));
        }
Example #5
0
        public async Task <T> EvaluateAsync <T>(WorkflowExpression <T> expression, WorkflowExecutionContext workflowContext, TextEncoder encoder)
        {
            var templateContext   = new TemplateContext(_templateOptions);
            var expressionContext = new WorkflowExecutionExpressionContext(templateContext, workflowContext);

            await _workflowContextHandlers.InvokeAsync((h, expressionContext) => h.EvaluatingExpressionAsync(expressionContext), expressionContext, _logger);

            // Set WorkflowContext as a local scope property.
            var result = await _liquidTemplateManager.RenderStringAsync(
                expression.Expression,
                encoder ?? NullEncoder.Default,
                new Dictionary <string, FluidValue>() { ["Workflow"] = new ObjectValue(workflowContext) }
                );

            return(String.IsNullOrWhiteSpace(result) ? default : (T)Convert.ChangeType(result, typeof(T)));
        }
        public async Task <T> EvaluateAsync <T>(WorkflowExpression <T> expression, WorkflowExecutionContext workflowContext, params IGlobalMethodProvider[] scopedMethodProviders)
        {
            if (String.IsNullOrWhiteSpace(expression.Expression))
            {
                return(await Task.FromResult <T>(default(T)));
            }

            var workflowType      = workflowContext.WorkflowType;
            var directive         = $"js:{expression}";
            var expressionContext = new WorkflowExecutionScriptContext(workflowContext);

            await _workflowContextHandlers.InvokeAsync((h, expressionContext) => h.EvaluatingScriptAsync(expressionContext), expressionContext, _logger);

            var methodProviders = scopedMethodProviders.Concat(expressionContext.ScopedMethodProviders);

            return((T)_scriptingManager.Evaluate(directive, null, null, methodProviders));
        }
Example #7
0
        public ActionResult ContentModeratorWorkflowCreate(string teamName, string workflowName)
        {
            //only text or numbers. no special characters
            if (!workflowName.All(char.IsLetterOrDigit))
            {
                return(ContentModeratorWorkflow());
            }

            WorkflowExpression we = new WorkflowExpression()
            {
                Description = $"New Sample Workflow: {workflowName}",
                Type        = ContentModeratorReviewType.Image,
                Expression  = new Condition
                {
                    Operator   = "ge",
                    OutputName = "adultscore",
                    Value      = "0.1"
                }
            };

            var result = ContentModeratorService.CreateOrUpdateWorkflow(teamName, workflowName, we);

            if (!result)
            {
                return(ContentModeratorWorkflow());
            }

            var wer = new WorkflowExpressionResponse()
            {
                Description = we.Description,
                Name        = workflowName
            };

            return(View("ContentModerator/Workflow", new WorkflowResult()
            {
                Workflow = wer
            }));
        }
        public virtual bool CreateOrUpdateWorkflow(string teamName, string workflowName, WorkflowExpression expression)
        {
            try
            {
                var result = Task.Run(async() => await ContentModeratorRepository.CreateOrUpdateWorkflowAsync(teamName, workflowName, expression)).Result;

                return(result);
            }
            catch (Exception ex)
            {
                Logger.Error("ContentModeratorService.CreateOrUpdateWorkflow failed", this, ex);
            }

            return(false);
        }
Example #9
0
 public WriteLine(string text)
 {
     TextExpression = new WorkflowExpression <string>(PlainTextEvaluator.SyntaxName, text);
 }
Example #10
0
 public async Task <T> EvaluateAsync <T>(WorkflowExpression <T> expression, WorkflowExecutionContext workflowContext, params IGlobalMethodProvider[] scopedMethodProviders)
 {
     if (String.IsNullOrWhiteSpace(expression.Expression))
     {
         return(default);
Example #11
0
        public virtual async Task <bool> CreateOrUpdateWorkflowAsync(string teamName, string workflowName, WorkflowExpression expression)
        {
            var data = JsonConvert.SerializeObject(expression);

            var response = await RepositoryClient.SendAsync(
                ApiKeys.ContentModerator,
                $"{ApiKeys.ContentModeratorEndpoint}{reviewUrl}{teamName}/workflows/{workflowName}",
                RepositoryClient.GetByteArray(data),
                "application/json",
                "PUT",
                GetToken());

            return(JsonConvert.DeserializeObject <bool>(response));
        }
Example #12
0
 public ExpressionViewModel(WorkflowExpression workflowExpression)
 {
     Expression = workflowExpression?.Expression;
     Syntax     = workflowExpression?.Syntax;
 }
 public virtual bool CreateOrUpdateWorkflow(string teamName, string workflowName, WorkflowExpression expression)
 {
     return(PolicyService.ExecuteRetryAndCapture400Errors(
                "ContentModeratorService.CreateOrUpdateWorkflow",
                ApiKeys.ContentModeratorRetryInSeconds,
                () =>
     {
         var result = ContentModeratorRepository.CreateOrUpdateWorkflow(teamName, workflowName, expression);
         return result;
     },
                false));
 }
Example #14
0
 public ExpressionViewModel(WorkflowExpression workflowExpression)
     : this(workflowExpression?.Expression, workflowExpression?.Syntax)
 {
 }