From cf9597de850de1ef721a35ad79ac67b9fdb9e1d4 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Sat, 4 Jun 2022 21:05:47 +0200 Subject: refactor: Use Vault to get configuration --- server/src/Program.cs | 63 +++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 29 deletions(-) (limited to 'server/src/Program.cs') 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(AppEnvironmentVariables.SEQ_API_URL); - var seqKey = builder.Configuration.GetValue(AppEnvironmentVariables.SEQ_API_KEY); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + var vaultService = builder.Services.BuildServiceProvider().GetRequiredService(); + var configurationResponse = vaultService.GetSecretAsync(builder.Configuration.GetValue(AppEnvironmentVariables.MAIN_CONFIG_SHEET)).Result; + builder.Services.AddOptions() + .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>().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(AppEnvironmentVariables.DB_HOST), - DB_PORT = builder.Configuration.GetValue(AppEnvironmentVariables.DB_PORT), - DB_USER = builder.Configuration.GetValue(AppEnvironmentVariables.DB_USER), - DB_NAME = builder.Configuration.GetValue(AppEnvironmentVariables.DB_NAME), - DB_PASS = builder.Configuration.GetValue(AppEnvironmentVariables.DB_PASSWORD).Obfuscate() ?? "!!!Empty!!!", - QUARTZ_DB_HOST = builder.Configuration.GetValue(AppEnvironmentVariables.QUARTZ_DB_HOST), - QUARTZ_DB_PORT = builder.Configuration.GetValue(AppEnvironmentVariables.QUARTZ_DB_PORT), - QUARTZ_DB_USER = builder.Configuration.GetValue(AppEnvironmentVariables.QUARTZ_DB_USER), - QUARTZ_DB_NAME = builder.Configuration.GetValue(AppEnvironmentVariables.QUARTZ_DB_NAME), - QUARTZ_DB_PASS = builder.Configuration.GetValue(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(); }); options.UseMicrosoftDependencyInjectionJobFactory(); @@ -132,20 +143,20 @@ public static class Program }; }) .AddGitHub(options => { - options.ClientSecret = builder.Configuration.GetValue(AppEnvironmentVariables.GITHUB_CLIENT_SECRET); - options.ClientId = builder.Configuration.GetValue(AppEnvironmentVariables.GITHUB_CLIENT_ID); + options.ClientSecret = builder.Configuration.GetValue(configuration.GITHUB_CLIENT_SECRET); + options.ClientId = builder.Configuration.GetValue(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(AppConstants.BASIC_AUTH_SCHEME, default); builder.Services.AddDbContext(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(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddLogging(); - builder.Services.AddHttpClient(); builder.Services .AddControllers() .AddJsonOptions(JsonSettings.Default); - return builder; } -- cgit v1.3