From 12eaa5814ef20b0910e8d64a753378b6f6797989 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 22 May 2026 00:52:16 +1000 Subject: Initial commit --- Server/Program.cs | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Server/Program.cs (limited to 'Server/Program.cs') diff --git a/Server/Program.cs b/Server/Program.cs new file mode 100644 index 0000000..687c6f8 --- /dev/null +++ b/Server/Program.cs @@ -0,0 +1,73 @@ +using HyperBooru.ApiClient; +using HyperBooru.Server.Components; +using HyperBooru.Services; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.EntityFrameworkCore; +using System.Text.Json.Serialization; + +namespace HyperBooru.Server; + +public class Program { + public static void Main(string[] args) { + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + builder.Services.AddHttpContextAccessor(); + builder.Services.AddControllers().AddJsonOptions(o => { + var converter = new JsonStringEnumConverter(); + o.JsonSerializerOptions.Converters.Add(converter); + }); + builder.Services.AddRazorComponents() + .AddInteractiveWebAssemblyComponents(); + + // Add our custom services + builder.Services.AddSingleton(); + builder.Services.AddDbContextFactory(); + builder.Services.AddSingleton(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddHostedService(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(sp => new HBSession() { + BaseUri = new("https://127.0.0.1:7084") + }); + + // Ensure session keys are stored in a persistent location on all platforms + builder.Services.AddDataProtection() + .PersistKeysToFileSystem(new( + builder.Services.BuildServiceProvider() + .GetRequiredService() + .KeyPath)); + + var app = builder.Build(); + + // Ensure database is created and it's schema is up to date + using var scope = app.Services.CreateScope(); + using var db = scope.ServiceProvider.GetRequiredService(); + db.Database.Migrate(); + + // Configure the HTTP request pipeline. + if(app.Environment.IsDevelopment()) { + app.UseWebAssemblyDebugging(); + } else { + 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.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true); + app.UseHttpsRedirection(); + + app.UseAntiforgery(); + + app.MapStaticAssets(); + app.MapControllers(); + app.MapRazorComponents() + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(Client._Imports).Assembly); + + app.Run(); + } +} -- cgit v1.3