using LiteCharms.Features.Mediator; using LiteCharms.Features.MidrandBooks.Payments; using LiteCharms.Features.Extensions; using LiteCharms.Features.MidrandBooks.Extensions; using static LiteCharms.Features.Extensions.Quartz; namespace MidrandBookshop; public static class Setup { public static IServiceCollection RegisterServices(this IServiceCollection services, IConfiguration configuration) { services.AddCancellationToken(); services.AddAntiforgery(); services.AddRazorComponents() .AddInteractiveServerComponents(); services.AddBlazoredToast(); services.AddEndpointsApiExplorer(); services.AddScoped(typeof(IPipelineBehavior<,>), typeof(TelemetryPipelineBehavior<,>)); services.AddScoped(typeof(IPipelineBehavior<,>), typeof(LoggingPipelineBehavior<,>)); services.AddQuartzSchedulerClient(MidrandShopSchedulerName, configuration); services.AddMediator(); services.AddEmailServices(configuration); services.AddEmailServiceBus(); services.AddHttpClient(); services.AddScoped(); services.AddScoped(); services.AddShopServices(includeLocalStorage: true); services.AddHashServices(configuration); services.AddPayfastServices(configuration); services.AddDataProtectionDatabase(configuration); services.AddMidrandShopDatabase(configuration); services.AddSecurityApiSdk(configuration); services.AddLiteCharmsWebSecurity(configuration); services.AddMidrandShopPostgresHealthCheck(); services.AddMidrandShopQuartzHealthCheck(); services.AddHealthChecksSupport(configuration); services.Configure(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; options.KnownProxies.Clear(); options.KnownIPNetworks.Clear(); options.ForwardLimit = null; options.RequireHeaderSymmetry = false; }); return services; } }