71 lines
2.5 KiB
C#
71 lines
2.5 KiB
C#
using Fragalytics.Web;
|
|
using Fragalytics.Web.Infrastructure;
|
|
using Fragalytics.Web.Services;
|
|
using Fragalytics.Web.Services.Parser;
|
|
using Fragalytics.Web.Services.Render;
|
|
using Fragalytics.Web.Services.Scoring;
|
|
using Microsoft.AspNetCore.DataProtection;
|
|
using Microsoft.AspNetCore.Http.Features;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
var contentRoot = AppPathResolver.ResolveContentRoot(Directory.GetCurrentDirectory(), AppContext.BaseDirectory);
|
|
var webRoot = Path.Combine(contentRoot, "wwwroot");
|
|
|
|
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
|
|
{
|
|
Args = args,
|
|
ContentRootPath = contentRoot,
|
|
WebRootPath = Directory.Exists(webRoot) ? webRoot : null
|
|
});
|
|
|
|
builder.Services.Configure<FragalyticsOptions>(builder.Configuration.GetSection("Fragalytics"));
|
|
var uploadMaxBytes = builder.Configuration.GetValue<long?>("Fragalytics:UploadMaxBytes") ?? 536_870_912;
|
|
builder.WebHost.ConfigureKestrel(options =>
|
|
{
|
|
options.Limits.MaxRequestBodySize = uploadMaxBytes;
|
|
});
|
|
builder.Services.Configure<FormOptions>(options =>
|
|
{
|
|
options.MultipartBodyLengthLimit = uploadMaxBytes;
|
|
});
|
|
var dataProtectionRoot = Path.GetFullPath(Path.Combine(contentRoot, builder.Configuration["Fragalytics:DataDirectory"] ?? "data", "keys"));
|
|
Directory.CreateDirectory(dataProtectionRoot);
|
|
|
|
builder.Services
|
|
.AddDataProtection()
|
|
.SetApplicationName("Fragalytics.Web")
|
|
.PersistKeysToFileSystem(new DirectoryInfo(dataProtectionRoot));
|
|
builder.Services.AddRazorPages();
|
|
builder.Services.AddSingleton<JsonAppStore>();
|
|
builder.Services.AddSingleton<ScoringRulesProvider>();
|
|
builder.Services.AddSingleton<IRenderWorkerAdapter, NoOpRenderWorkerAdapter>();
|
|
builder.Services.AddSingleton<IDemoParserAdapter>(serviceProvider =>
|
|
{
|
|
var options = serviceProvider.GetRequiredService<IOptions<FragalyticsOptions>>().Value;
|
|
return string.Equals(options.Parser.Mode, "external", StringComparison.OrdinalIgnoreCase)
|
|
? new ExternalProcessParserAdapter(serviceProvider.GetRequiredService<IOptions<FragalyticsOptions>>())
|
|
: new SampleDemoParserAdapter();
|
|
});
|
|
builder.Services.AddSingleton<MatchScoringService>();
|
|
builder.Services.AddSingleton<DemoIngestService>();
|
|
builder.Services.AddSingleton<ClipMediaService>();
|
|
builder.Services.AddSingleton<QueryService>();
|
|
builder.Services.AddHostedService<DemoProcessingWorker>();
|
|
|
|
var app = builder.Build();
|
|
|
|
if (!app.Environment.IsDevelopment())
|
|
{
|
|
app.UseExceptionHandler("/Error");
|
|
app.UseHsts();
|
|
}
|
|
|
|
app.UseStaticFiles();
|
|
app.UseRouting();
|
|
app.MapRazorPages();
|
|
app.Run();
|
|
|
|
public partial class Program
|
|
{
|
|
}
|