using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Bit.Core.Context; using Bit.Core.Settings; using Stripe; using Bit.Core.Utilities; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.AspNetCore.Routing; using System.Globalization; using Microsoft.Extensions.Hosting; namespace Bit.Billing { public class Startup { public Startup(IConfiguration configuration) { CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { // Options services.AddOptions(); // Settings var globalSettings = services.AddGlobalSettingsServices(Configuration); services.Configure(Configuration.GetSection("BillingSettings")); // Stripe Billing StripeConfiguration.ApiKey = globalSettings.StripeApiKey; // Repositories services.AddSqlServerRepositories(globalSettings); // PayPal Client services.AddSingleton(); // BitPay Client services.AddSingleton(); // Context services.AddScoped(); // Fido2 services.AddFido2(options => { options.ServerDomain = new Uri(globalSettings.BaseServiceUri.Vault).Host; options.ServerName = "Bitwarden"; options.Origin = globalSettings.BaseServiceUri.Vault; options.TimestampDriftTolerance = 300000; }); // Identity services.AddCustomIdentityServices(globalSettings); //services.AddPasswordlessIdentityServices(globalSettings); // Services services.AddBaseServices(); services.AddDefaultServices(globalSettings); services.TryAddSingleton(); // Mvc services.AddMvc(config => { config.Filters.Add(new LoggingExceptionHandlerFilterAttribute()); }); services.Configure(options => options.LowercaseUrls = true); // Authentication services.AddAuthentication(); // Jobs service, uncomment when we have some jobs to run // Jobs.JobsHostedService.AddJobsServices(services); // services.AddHostedService(); } public void Configure( IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifetime, GlobalSettings globalSettings) { app.UseSerilog(env, appLifetime, globalSettings); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute()); } } }