Exemplo n.º 1
0
        public Task <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, TemplateContext context)
        {
            if (!context.AmbientValues.TryGetValue("UrlHelper", out var urlHelperObj))
            {
                throw new ArgumentException("UrlHelper missing while invoking 'signal_url'");
            }

            if (!context.AmbientValues.TryGetValue("SignalService", out var signalServiceObj))
            {
                throw new ArgumentException("SignalService missing while invoking 'signal_url'");
            }

            var workflowContextValue = context.GetValue(nameof(WorkflowExecutionContext));

            if (workflowContextValue.IsNil())
            {
                throw new ArgumentException("WorkflowExecutionContext missing while invoking 'signal_url'");
            }

            var workflowContext = (WorkflowExecutionContext)workflowContextValue.ToObjectValue();
            var signalName      = input.ToStringValue();
            var payload         = String.IsNullOrWhiteSpace(workflowContext.CorrelationId)
                ? SignalPayload.ForWorkflow(signalName, workflowContext.WorkflowId)
                : SignalPayload.ForCorrelation(signalName, workflowContext.CorrelationId);

            var urlHelper     = (IUrlHelper)urlHelperObj;
            var signalService = (ISecurityTokenService)signalServiceObj;
            var token         = signalService.CreateToken(payload, TimeSpan.FromDays(7));
            var urlValue      = new StringValue(urlHelper.Action("Trigger", "HttpWorkflow", new { area = "OrchardCore.Workflows", token }));

            return(Task.FromResult <FluidValue>(urlValue));
        }
Exemplo n.º 2
0
        public ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, LiquidTemplateContext ctx)
        {
            var urlHelper = _urlHelperFactory.GetUrlHelper(ctx.ViewContext);

            var workflowContextValue = ctx.GetValue("Workflow");

            if (workflowContextValue.IsNil())
            {
                throw new ArgumentException("WorkflowExecutionContext missing while invoking 'signal_url'");
            }

            var workflowContext = (WorkflowExecutionContext)workflowContextValue.ToObjectValue();
            var signalName      = input.ToStringValue();
            var payload         = String.IsNullOrWhiteSpace(workflowContext.CorrelationId)
                ? SignalPayload.ForWorkflow(signalName, workflowContext.WorkflowId)
                : SignalPayload.ForCorrelation(signalName, workflowContext.CorrelationId);

            var token    = _securityTokenService.CreateToken(payload, TimeSpan.FromDays(7));
            var urlValue = new StringValue(urlHelper.Action("Trigger", "HttpWorkflow", new { area = "OrchardCore.Workflows", token }));

            return(new ValueTask <FluidValue>(urlValue));
        }
Exemplo n.º 3
0
        public SignalMethodProvider(WorkflowExecutionContext workflowContext, ISecurityTokenService securityTokenService)
        {
            _signalUrlMethod = new GlobalMethod
            {
                Name   = "signalUrl",
                Method = serviceProvider => (Func <string, string>)((signal) =>
                {
                    var payload             = !String.IsNullOrWhiteSpace(workflowContext.CorrelationId) ? SignalPayload.ForCorrelation(signal, workflowContext.CorrelationId) : SignalPayload.ForWorkflow(signal, workflowContext.WorkflowId);
                    var token               = securityTokenService.CreateToken(payload, TimeSpan.FromDays(7));
                    var httpContextAccessor = serviceProvider.GetRequiredService <IHttpContextAccessor>();
                    var linkGenerator       = serviceProvider.GetRequiredService <LinkGenerator>();

                    return(linkGenerator.GetPathByAction(httpContextAccessor.HttpContext, "Trigger", "HttpWorkflow", new { area = "OrchardCore.Workflows", token }));
                })
            };
        }