summaryrefslogtreecommitdiffstats
path: root/server/src/Program.cs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/Program.cs')
-rw-r--r--server/src/Program.cs63
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;
}