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)); }
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)); }
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 })); }) }; }