elsa-core/src/bundles/Elsa.ServerAndStudio.Web/Program.cs

125 lines
4.9 KiB
C#
Raw Normal View History

using Elsa.EntityFrameworkCore.Extensions;
2023-01-14 11:22:38 +00:00
using Elsa.EntityFrameworkCore.Modules.Management;
using Elsa.EntityFrameworkCore.Modules.Runtime;
using Elsa.MassTransit.Options;
using Elsa.Extensions;
using Elsa.ServerAndStudio.Web.Extensions;
using Elsa.Hosting.Management.Options;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.Sqlite;
using Proto.Persistence.Sqlite;
2022-04-29 12:40:25 +00:00
const bool useMassTransit = true;
const bool useProtoActor = false;
2022-04-29 12:40:25 +00:00
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseStaticWebAssets();
2022-04-29 12:40:25 +00:00
var services = builder.Services;
2022-12-09 11:24:05 +00:00
var configuration = builder.Configuration;
var sqliteConnectionString = configuration.GetConnectionString("Sqlite")!;
var rabbitMqConnectionString = configuration.GetConnectionString("RabbitMq")!;
var azureServiceBusConnectionString = configuration.GetConnectionString("AzureServiceBus")!;
2022-12-09 11:24:05 +00:00
var identitySection = configuration.GetSection("Identity");
2023-01-01 21:54:07 +00:00
var identityTokenSection = identitySection.GetSection("Tokens");
var massTransitSection = configuration.GetSection("MassTransit");
var heartbeatSection = configuration.GetSection("Heartbeat");
services.Configure<MassTransitWorkflowDispatcherOptions>(massTransitSection);
2022-04-29 12:40:25 +00:00
// Add Elsa services.
2022-04-29 12:40:25 +00:00
services
.AddElsa(elsa =>
{
elsa
.UseSasTokens()
.UseIdentity(identity =>
{
identity.IdentityOptions = options => identitySection.Bind(options);
identity.TokenOptions = options => identityTokenSection.Bind(options);
identity.UseConfigurationBasedUserProvider(options => identitySection.Bind(options));
identity.UseConfigurationBasedApplicationProvider(options => identitySection.Bind(options));
identity.UseConfigurationBasedRoleProvider(options => identitySection.Bind(options));
})
.UseDefaultAuthentication()
.UseInstanceManagement(x => x.HeartbeatOptions = settings => heartbeatSection.Bind(settings))
.UseWorkflowManagement(management => management.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString)))
.UseWorkflowRuntime(runtime =>
{
runtime.UseEntityFrameworkCore(ef => ef.UseSqlite(sqliteConnectionString));
runtime.UseMassTransitDispatcher();
if (useProtoActor)
{
runtime.UseProtoActor(proto => proto.PersistenceProvider = _ =>
{
return new SqliteProvider(new SqliteConnectionStringBuilder(sqliteConnectionString));
});
}
})
.UseScheduling()
.UseJavaScript(options => options.AllowClrAccess = true)
.UseLiquid()
.UseCSharp()
.UsePython()
.UseHttp(http => http.ConfigureHttpOptions = options => configuration.GetSection("Http").Bind(options))
.UseEmail(email => email.ConfigureOptions = options => configuration.GetSection("Smtp").Bind(options))
.UseWebhooks(webhooks => webhooks.WebhookOptions = options => builder.Configuration.GetSection("Webhooks").Bind(options))
.UseWorkflowsApi()
.UseRealTimeWorkflows()
.AddActivitiesFrom<Program>()
.AddWorkflowsFrom<Program>();
if (useMassTransit)
2022-12-09 11:24:05 +00:00
{
elsa.UseMassTransit(massTransit =>
massTransit.UseAzureServiceBus(azureServiceBusConnectionString, serviceBusFeature => serviceBusFeature.ConfigureServiceBus = bus =>
{
bus.PrefetchCount = 4;
bus.LockDuration = TimeSpan.FromMinutes(5);
bus.MaxConcurrentCalls = 32;
bus.MaxDeliveryCount = 8;
// etc.
})
// massTransit.UseRabbitMq(rabbitMqConnectionString, rabbit => rabbit.ConfigureServiceBus = bus =>
// {
// bus.PrefetchCount = 4;
// bus.Durable = true;
// bus.AutoDelete = false;
// bus.ConcurrentMessageLimit = 32;
// // etc.
// }))
);
}
});
2022-12-09 11:24:05 +00:00
services.AddHealthChecks();
2023-05-28 18:31:42 +00:00
services.AddCors(cors => cors.Configure(configuration.GetSection("CorsPolicy")));
2022-04-29 12:40:25 +00:00
// Razor Pages.
2023-01-14 11:22:38 +00:00
services.AddRazorPages(options => options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()));
2022-04-29 12:40:25 +00:00
// Configure middleware pipeline.
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.MapHealthChecks("/health");
app.UseRouting();
2023-01-14 11:22:38 +00:00
app.UseCors();
2022-04-29 12:40:25 +00:00
app.UseStaticFiles();
2022-12-09 11:24:05 +00:00
app.UseAuthentication();
2022-04-29 12:40:25 +00:00
app.UseAuthorization();
app.UseWorkflowsApi();
app.UseWorkflows();
app.UseWorkflowsSignalRHubs();
app.MapFallbackToPage("/_Host");
app.Run();