This commit is contained in:
Sipke Schoorstra 2021-06-29 21:03:57 +02:00
parent 5338196e77
commit f17cb73590
23 changed files with 55 additions and 196 deletions

View file

@ -64,6 +64,7 @@ namespace Elsa.Activities.Http.Middleware
var simpleContentType = request.ContentType?.Split(';').First();
var contentParser = orderedContentParsers.FirstOrDefault(x => x.SupportedContentTypes.Contains(simpleContentType, StringComparer.OrdinalIgnoreCase)) ?? orderedContentParsers.LastOrDefault() ?? new DefaultHttpRequestBodyParser();
// Handle each pending workflow individually. We need to check their readContent setting to see if we need to parse the incoming HTTP request body or not.
foreach (var pendingWorkflow in pendingWorkflows)
{
var pendingWorkflowInstance = pendingWorkflowInstances[pendingWorkflow.WorkflowInstanceId];
@ -71,8 +72,7 @@ namespace Elsa.Activities.Http.Middleware
var activityWrapper = workflowBlueprintWrapper.GetUnfilteredActivity<HttpEndpoint>(pendingWorkflow.ActivityId!);
var readContent = await activityWrapper!.EvaluatePropertyValueAsync(x => x.ReadContent, cancellationToken);
var inputModel = commonInputModel;
// TODO: Explain this + sequence.
if (readContent)
{
var targetType = await activityWrapper.EvaluatePropertyValueAsync(x => x.TargetType, cancellationToken);

View file

@ -4,7 +4,7 @@ using System.Threading.Tasks;
using Elsa.Activities.Temporal.Common.Bookmarks;
using Elsa.Activities.Temporal.Common.Services;
using Elsa.Events;
using Elsa.Services.Triggers;
using Elsa.Services;
using MediatR;
using Microsoft.Extensions.Logging;

View file

@ -7,14 +7,14 @@ namespace Elsa
{
public static class StreamExtensions
{
public static async Task<byte[]> ReadBytesToEndAsync(this Stream input, CancellationToken cancellationToken)
public static async Task<byte[]> ReadBytesToEndAsync(this Stream input, CancellationToken cancellationToken = default)
{
using var ms = new MemoryStream();
await using var ms = new MemoryStream();
await input.CopyToAsync(ms, 16 * 1024, cancellationToken);
return ms.ToArray();
}
public static async Task<string> ReadStringToEndAsync(this Stream input, CancellationToken cancellationToken)
public static async Task<string> ReadStringToEndAsync(this Stream input, CancellationToken cancellationToken = default)
{
var bytes = await input.ReadBytesToEndAsync(cancellationToken);
return Encoding.UTF8.GetString(bytes);

View file

@ -4,7 +4,6 @@ using System.Threading;
using System.Threading.Tasks;
using Elsa.Services;
using Elsa.Services.Bookmarks;
using Elsa.Services.Triggers;
namespace Elsa
{

View file

@ -3,7 +3,7 @@ using System.Threading;
using System.Threading.Tasks;
using Elsa.Services.Models;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
/// <summary>
/// An object which can get a collection of the <see cref="WorkflowTrigger"/> for a specified activity blueprint and workflow.

View file

@ -3,7 +3,7 @@ using System.Threading;
using System.Threading.Tasks;
using Elsa.Services.Models;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
/// <summary>
/// An object which can get all of the workflow triggers for a collection of workflow blueprints.

View file

@ -3,7 +3,7 @@ using System.Threading;
using System.Threading.Tasks;
using Elsa.Services.Bookmarks;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
public interface ITriggerFinder
{

View file

@ -1,7 +1,7 @@
using System.Threading;
using System.Threading.Tasks;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
public interface ITriggerIndexer
{

View file

@ -2,7 +2,7 @@
using System.Threading;
using System.Threading.Tasks;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
public interface ITriggerStore
{

View file

@ -1,7 +1,7 @@
using Elsa.Services.Bookmarks;
using Elsa.Services.Models;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
public class TriggerFinderResult
{

View file

@ -1,6 +1,6 @@
using Elsa.Services.Models;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
public class TriggerProviderContext
{

View file

@ -1,7 +1,7 @@
using Elsa.Services.Bookmarks;
using Elsa.Services.Models;
namespace Elsa.Services.Triggers
namespace Elsa.Services
{
public class WorkflowTrigger
{

View file

@ -2,7 +2,6 @@
using System.Threading;
using System.Threading.Tasks;
using Elsa.Services.Models;
using Elsa.Services.Triggers;
namespace Elsa.Services
{

View file

@ -1,6 +1,6 @@
using System.Threading.Tasks;
using Elsa.Events;
using Elsa.Services.Triggers;
using Elsa.Services;
using Rebus.Handlers;
namespace Elsa.Consumers

View file

@ -1,37 +0,0 @@
using System.Reflection;
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Design;
using Elsa.Expressions;
using Elsa.Metadata;
using Elsa.Services;
namespace Elsa.Samples.Server.Host.Activities
{
public class ClosedMultiTextSampleActivity : Activity, IActivityPropertyOptionsProvider
{
[ActivityInput(
UIHint = ActivityInputUIHints.MultiText,
OptionsProvider = typeof(ClosedMultiTextSampleActivity),
DefaultSyntax = SyntaxNames.Json,
SupportedSyntaxes = new[] { SyntaxNames.Json, SyntaxNames.JavaScript, SyntaxNames.Liquid }
)]
public string? FavoriteLanguage { get; set; }
[ActivityOutput] public string? Output { get; set; }
public object GetOptions(PropertyInfo property) => new[]
{
new SelectListItem("C#", "csharp"),
new SelectListItem("JavaScript", "javascript"),
new SelectListItem("Rust", "rust"),
new SelectListItem("PHP", "php"),
};
protected override IActivityExecutionResult OnExecute()
{
Output = FavoriteLanguage;
return Done();
}
}
}

View file

@ -1,26 +0,0 @@
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Design;
using Elsa.Expressions;
using Elsa.Services;
namespace Elsa.Samples.Server.Host.Activities
{
public class OpenMultiTextSampleActivity : Activity
{
[ActivityInput(
UIHint = ActivityInputUIHints.MultiText,
DefaultSyntax = SyntaxNames.Json,
SupportedSyntaxes = new[] { SyntaxNames.Json, SyntaxNames.JavaScript, SyntaxNames.Liquid }
)]
public string? FavoriteLanguage { get; set; }
[ActivityOutput] public string? Output { get; set; }
protected override IActivityExecutionResult OnExecute()
{
Output = FavoriteLanguage;
return Done();
}
}
}

View file

@ -1,15 +0,0 @@
using Elsa.Activities.Console;
using Elsa.Builders;
using Elsa.Services;
namespace Elsa.Samples.Server.Host.Activities
{
public class SampleCompositeActivity : CompositeActivity
{
public override void Build(ICompositeActivityBuilder builder)
{
builder.WriteLine("Line 1");
builder.WriteLine("Line 2");
}
}
}

View file

@ -1,54 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Design;
using Elsa.Expressions;
using Elsa.Metadata;
using Elsa.Services;
namespace Elsa.Samples.Server.Host.Activities
{
[Action]
public class VehicleActivity : Activity, IActivityPropertyOptionsProvider, IRuntimeSelectListItemsProvider
{
private readonly Random _random;
public VehicleActivity()
{
_random = new Random();
}
[ActivityInput(
UIHint = ActivityInputUIHints.Dropdown,
OptionsProvider = typeof(VehicleActivity),
DefaultSyntax = SyntaxNames.Literal,
SupportedSyntaxes = new[] { SyntaxNames.Literal, SyntaxNames.Json, SyntaxNames.JavaScript, SyntaxNames.Liquid }
)]
public string? Brand { get; set; }
[ActivityOutput] public string? Output { get; set; }
public object GetOptions(PropertyInfo property) => new RuntimeSelectListItemsProviderSettings(GetType(), new VehicleContext(_random.Next(100)));
public ValueTask<IEnumerable<SelectListItem>> GetItemsAsync(object? context, CancellationToken cancellationToken = default)
{
var vehicleContext = (VehicleContext) context!;
var brands = new[] { "BMW", "Peugot", "Tesla", vehicleContext.RandomNumber.ToString() };
var items = brands.Select(x => new SelectListItem(x)).ToList();
return new ValueTask<IEnumerable<SelectListItem>>(items);
}
protected override IActivityExecutionResult OnExecute()
{
Output = Brand;
return Done();
}
}
public record VehicleContext(int RandomNumber);
}

View file

@ -1,5 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\..\..\configureawait.props"/>
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
@ -9,46 +9,46 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.AzureServiceBus\Elsa.Activities.AzureServiceBus.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.BlobStorage\Elsa.Activities.BlobStorage.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Conductor\Elsa.Activities.Conductor.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Dropbox\Elsa.Activities.Dropbox.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Entity\Elsa.Activities.Entity.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.File\Elsa.Activities.File.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.MassTransit\Elsa.Activities.MassTransit.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Rebus\Elsa.Activities.Rebus.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Telnyx\Elsa.Activities.Telnyx.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Temporal.Hangfire\Elsa.Activities.Temporal.Hangfire.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Temporal.Quartz\Elsa.Activities.Temporal.Quartz.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.UserTask\Elsa.Activities.UserTask.csproj"/>
<ProjectReference Include="..\..\..\activities\webhooks\Elsa.Activities.Webhooks\Elsa.Activities.Webhooks.csproj"/>
<ProjectReference Include="..\..\..\activities\webhooks\Elsa.Webhooks.Persistence.MongoDb\Elsa.Webhooks.Persistence.MongoDb.csproj"/>
<ProjectReference Include="..\..\..\activities\webhooks\Elsa.Webhooks.Persistence.YesSql\Elsa.Webhooks.Persistence.YesSql.csproj"/>
<ProjectReference Include="..\..\..\caching\Elsa.Caching.Rebus\Elsa.Caching.Rebus.csproj"/>
<ProjectReference Include="..\..\..\indexing\Elsa.Indexing.Elasticsearch\Elsa.Indexing.Elasticsearch.csproj"/>
<ProjectReference Include="..\..\..\locking\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj"/>
<ProjectReference Include="..\..\..\locking\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj"/>
<ProjectReference Include="..\..\..\locking\Elsa.DistributedLocking.SqlServer\Elsa.DistributedLocking.SqlServer.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.MySql\Elsa.Persistence.EntityFramework.MySql.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.PostgreSql\Elsa.Persistence.EntityFramework.PostgreSql.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.Sqlite\Elsa.Persistence.EntityFramework.Sqlite.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.SqlServer\Elsa.Persistence.EntityFramework.SqlServer.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.MongoDb\Elsa.Persistence.MongoDb.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj"/>
<ProjectReference Include="..\..\..\providers\Elsa.Providers.Redis\Elsa.Providers.Redis.csproj"/>
<ProjectReference Include="..\..\..\server\Elsa.Server.Api\Elsa.Server.Api.csproj"/>
<ProjectReference Include="..\..\..\server\Elsa.Server.Hangfire\Elsa.Server.Hangfire.csproj"/>
<ProjectReference Include="..\..\..\server\Elsa.Server.Orleans\Elsa.Server.Orleans.csproj"/>
<ProjectReference Include="..\..\..\servicebus\Elsa.Rebus.AzureServiceBus\Elsa.Rebus.AzureServiceBus.csproj"/>
<ProjectReference Include="..\..\..\servicebus\Elsa.Rebus.RabbitMq\Elsa.Rebus.RabbitMq.csproj"/>
<ProjectReference Include="..\..\..\activities\Elsa.Activities.AzureServiceBus\Elsa.Activities.AzureServiceBus.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.BlobStorage\Elsa.Activities.BlobStorage.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Conductor\Elsa.Activities.Conductor.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Dropbox\Elsa.Activities.Dropbox.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Entity\Elsa.Activities.Entity.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.File\Elsa.Activities.File.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.MassTransit\Elsa.Activities.MassTransit.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Rebus\Elsa.Activities.Rebus.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Telnyx\Elsa.Activities.Telnyx.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Temporal.Hangfire\Elsa.Activities.Temporal.Hangfire.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Temporal.Quartz\Elsa.Activities.Temporal.Quartz.csproj" />
<ProjectReference Include="..\..\..\activities\Elsa.Activities.UserTask\Elsa.Activities.UserTask.csproj" />
<ProjectReference Include="..\..\..\activities\webhooks\Elsa.Activities.Webhooks\Elsa.Activities.Webhooks.csproj" />
<ProjectReference Include="..\..\..\activities\webhooks\Elsa.Webhooks.Persistence.MongoDb\Elsa.Webhooks.Persistence.MongoDb.csproj" />
<ProjectReference Include="..\..\..\activities\webhooks\Elsa.Webhooks.Persistence.YesSql\Elsa.Webhooks.Persistence.YesSql.csproj" />
<ProjectReference Include="..\..\..\caching\Elsa.Caching.Rebus\Elsa.Caching.Rebus.csproj" />
<ProjectReference Include="..\..\..\indexing\Elsa.Indexing.Elasticsearch\Elsa.Indexing.Elasticsearch.csproj" />
<ProjectReference Include="..\..\..\locking\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj" />
<ProjectReference Include="..\..\..\locking\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj" />
<ProjectReference Include="..\..\..\locking\Elsa.DistributedLocking.SqlServer\Elsa.DistributedLocking.SqlServer.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.MySql\Elsa.Persistence.EntityFramework.MySql.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.PostgreSql\Elsa.Persistence.EntityFramework.PostgreSql.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.Sqlite\Elsa.Persistence.EntityFramework.Sqlite.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.SqlServer\Elsa.Persistence.EntityFramework.SqlServer.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.MongoDb\Elsa.Persistence.MongoDb.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj" />
<ProjectReference Include="..\..\..\providers\Elsa.Providers.Redis\Elsa.Providers.Redis.csproj" />
<ProjectReference Include="..\..\..\server\Elsa.Server.Api\Elsa.Server.Api.csproj" />
<ProjectReference Include="..\..\..\server\Elsa.Server.Hangfire\Elsa.Server.Hangfire.csproj" />
<ProjectReference Include="..\..\..\server\Elsa.Server.Orleans\Elsa.Server.Orleans.csproj" />
<ProjectReference Include="..\..\..\servicebus\Elsa.Rebus.AzureServiceBus\Elsa.Rebus.AzureServiceBus.csproj" />
<ProjectReference Include="..\..\..\servicebus\Elsa.Rebus.RabbitMq\Elsa.Rebus.RabbitMq.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Hangfire.InMemory" Version="0.3.4"/>
<PackageReference Include="Hangfire.SqlServer" Version="1.7.22"/>
<PackageReference Include="Quartz.Serialization.Json" Version="3.3.2"/>
<PackageReference Include="Hangfire.InMemory" Version="0.3.4" />
<PackageReference Include="Hangfire.SqlServer" Version="1.7.22" />
<PackageReference Include="Quartz.Serialization.Json" Version="3.3.2" />
</ItemGroup>
</Project>

View file

@ -1,4 +0,0 @@
namespace Elsa.Samples.Server.Host.Models
{
public record SampleInputModel(string Name);
}

View file

@ -1,5 +1,4 @@
using System.Collections.Generic;
using Elsa.Samples.Server.Host.Activities;
using Elsa.Server.Hangfire.Extensions;
using Hangfire;
using Microsoft.AspNetCore.Builder;
@ -55,8 +54,6 @@ namespace Elsa.Samples.Server.Host
};
services
.AddActivityPropertyOptionsProvider<VehicleActivity>()
.AddRuntimeSelectItemsProvider<VehicleActivity>()
.AddElsa(elsa => elsa
.AddActivitiesFrom<Startup>()
.AddWorkflowsFrom<Startup>()

View file

@ -17,7 +17,7 @@
},
"Elsa": {
"Features": [
"Persistence:MongoDb",
"Persistence:EntityFrameworkCore:Sqlite",
"Dispatcher:Hangfire",
"Console",
"Http",

View file

@ -8,7 +8,7 @@ using Elsa.Activities.Signaling;
using Elsa.Builders;
using Elsa.Models;
using Elsa.Persistence;
using Elsa.Services.Triggers;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
using Xunit;