diff options
Diffstat (limited to 'server/src/Program.cs')
| -rw-r--r-- | server/src/Program.cs | 63 |
1 files changed, 34 insertions, 29 deletions
diff --git a/server/src/Program.cs b/server/src/Program.cs index b449117..d6e8929 100644 --- a/server/src/Program.cs +++ b/server/src/Program.cs @@ -37,12 +37,12 @@ global using IOL.GreatOffice.Api.Data; global using IOL.GreatOffice.Api.Data.Static; global using IOL.GreatOffice.Api.Services; global using IOL.GreatOffice.Api.Utilities; -using System.Diagnostics; using System.Reflection; using IOL.GreatOffice.Api.Endpoints.V1; using IOL.GreatOffice.Api.Jobs; using Microsoft.AspNetCore.HttpOverrides; using Microsoft.AspNetCore.Mvc.Versioning; +using Microsoft.Extensions.Options; using Quartz; namespace IOL.GreatOffice.Api; @@ -51,39 +51,50 @@ public static class Program { public static WebApplicationBuilder CreateAppBuilder(string[] args) { var builder = WebApplication.CreateBuilder(args); + builder.Services.AddLogging(); + builder.Services.AddHttpClient(); - var seqUrl = builder.Configuration.GetValue<string>(AppEnvironmentVariables.SEQ_API_URL); - var seqKey = builder.Configuration.GetValue<string>(AppEnvironmentVariables.SEQ_API_KEY); + builder.Services.AddScoped<MailService>(); + builder.Services.AddScoped<ForgotPasswordService>(); + builder.Services.AddScoped<UserService>(); + builder.Services.AddScoped<VaultService>(); + var vaultService = builder.Services.BuildServiceProvider().GetRequiredService<VaultService>(); + var configurationResponse = vaultService.GetSecretAsync<AppConfiguration>(builder.Configuration.GetValue<string>(AppEnvironmentVariables.MAIN_CONFIG_SHEET)).Result; + builder.Services.AddOptions<AppConfiguration>() + .Configure(o => { + foreach (var property in typeof(AppConfiguration).GetProperties().Where(p => p.CanWrite)) { + property.SetValue(o, property.GetValue(configurationResponse.Data.Data, null), null); + } + }); + var configuration = builder.Services.BuildServiceProvider().GetRequiredService<IOptions<AppConfiguration>>().Value; var logger = new LoggerConfiguration() .Enrich.FromLogContext() .ReadFrom.Configuration(builder.Configuration) .WriteTo.Console(); - if (!builder.Environment.IsDevelopment() && seqUrl.HasValue() && seqKey.HasValue()) { - logger.WriteTo.Seq(seqUrl, apiKey: seqKey); + if (!builder.Environment.IsDevelopment() && configuration.SEQ_API_KEY.HasValue() && configuration.SEQ_API_URL.HasValue()) { + logger.WriteTo.Seq(configuration.SEQ_API_URL, apiKey: configuration.SEQ_API_KEY); } Log.Logger = logger.CreateLogger(); - Log.Information("Starting web host" + Log.Information("Starting web host, " + JsonSerializer.Serialize(new { DateTime.UtcNow, PID = Environment.ProcessId, - DB_HOST = builder.Configuration.GetValue<string>(AppEnvironmentVariables.DB_HOST), - DB_PORT = builder.Configuration.GetValue<string>(AppEnvironmentVariables.DB_PORT), - DB_USER = builder.Configuration.GetValue<string>(AppEnvironmentVariables.DB_USER), - DB_NAME = builder.Configuration.GetValue<string>(AppEnvironmentVariables.DB_NAME), - DB_PASS = builder.Configuration.GetValue<string>(AppEnvironmentVariables.DB_PASSWORD).Obfuscate() ?? "!!!Empty!!!", - QUARTZ_DB_HOST = builder.Configuration.GetValue<string>(AppEnvironmentVariables.QUARTZ_DB_HOST), - QUARTZ_DB_PORT = builder.Configuration.GetValue<string>(AppEnvironmentVariables.QUARTZ_DB_PORT), - QUARTZ_DB_USER = builder.Configuration.GetValue<string>(AppEnvironmentVariables.QUARTZ_DB_USER), - QUARTZ_DB_NAME = builder.Configuration.GetValue<string>(AppEnvironmentVariables.QUARTZ_DB_NAME), - QUARTZ_DB_PASS = builder.Configuration.GetValue<string>(AppEnvironmentVariables.QUARTZ_DB_PASSWORD).Obfuscate() - ?? "!!!Empty!!!", + configuration.DB_HOST, + configuration.DB_PORT, + configuration.DB_USER, + configuration.DB_NAME, + DB_PASS = configuration.DB_PASSWORD.Obfuscate() ?? "!!!Empty!!!", + configuration.QUARTZ_DB_HOST, + configuration.QUARTZ_DB_PORT, + configuration.QUARTZ_DB_USER, + configuration.QUARTZ_DB_NAME, + QUARTZ_DB_PASS = configuration.QUARTZ_DB_PASSWORD.Obfuscate() ?? "!!!Empty!!!", }, new JsonSerializerOptions() { WriteIndented = true })); - builder.Host.UseSerilog(Log.Logger); builder.WebHost.ConfigureKestrel(kestrel => { kestrel.AddServerHeader = false; @@ -104,7 +115,7 @@ public static class Program builder.Services.Configure(JsonSettings.Default); builder.Services.AddQuartz(options => { options.UsePersistentStore(o => { - o.UsePostgres(builder.Configuration.GetQuartzDatabaseConnectionString()); + o.UsePostgres(builder.Configuration.GetQuartzDatabaseConnectionString(configuration)); o.UseSerializer<QuartzJsonSerializer>(); }); options.UseMicrosoftDependencyInjectionJobFactory(); @@ -132,20 +143,20 @@ public static class Program }; }) .AddGitHub(options => { - options.ClientSecret = builder.Configuration.GetValue<string>(AppEnvironmentVariables.GITHUB_CLIENT_SECRET); - options.ClientId = builder.Configuration.GetValue<string>(AppEnvironmentVariables.GITHUB_CLIENT_ID); + options.ClientSecret = builder.Configuration.GetValue<string>(configuration.GITHUB_CLIENT_SECRET); + options.ClientId = builder.Configuration.GetValue<string>(configuration.GITHUB_CLIENT_ID); options.SaveTokens = true; options.CorrelationCookie.Name = "gh_correlation"; options.CorrelationCookie.SameSite = SameSiteMode.Lax; options.CorrelationCookie.SecurePolicy = CookieSecurePolicy.Always; options.CorrelationCookie.HttpOnly = true; - options.Events.OnCreatingTicket = context => GithubAuthenticationHelpers.HandleGithubTicketCreation(context, builder.Configuration); + options.Events.OnCreatingTicket = context => GithubAuthenticationHelpers.HandleGithubTicketCreation(context, builder.Configuration, configuration); }) .AddScheme<AuthenticationSchemeOptions, BasicAuthenticationHandler>(AppConstants.BASIC_AUTH_SCHEME, default); builder.Services.AddDbContext<AppDbContext>(options => { - options.UseNpgsql(builder.Configuration.GetAppDatabaseConnectionString(), + options.UseNpgsql(builder.Configuration.GetAppDatabaseConnectionString(configuration), npgsqlDbContextOptionsBuilder => { npgsqlDbContextOptionsBuilder.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery); npgsqlDbContextOptionsBuilder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), default); @@ -193,16 +204,10 @@ public static class Program }); }); - builder.Services.AddScoped<MailService>(); - builder.Services.AddScoped<ForgotPasswordService>(); - builder.Services.AddScoped<UserService>(); - builder.Services.AddLogging(); - builder.Services.AddHttpClient(); builder.Services .AddControllers() .AddJsonOptions(JsonSettings.Default); - return builder; } |
