From e3e26392b66d624e7c6628bbc7d2fa567ca4f6c4 Mon Sep 17 00:00:00 2001 From: ruberoid Date: Tue, 14 Oct 2025 17:16:45 +0400 Subject: [PATCH] Removed app protected settings. --- .gitignore | 6 +++++ .../Infrastructure/HostBuilderFactory.cs | 18 +++++++++++--- src/Nocr.Users.Host/Infrastructure/Startup.cs | 24 +++++++++++++++++++ .../appsettings.Development.json.example | 9 +++++++ .../appsettings.DockerCompose.json.example | 9 +++++++ 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/Nocr.Users.Host/appsettings.Development.json.example create mode 100644 src/Nocr.Users.Host/appsettings.DockerCompose.json.example diff --git a/.gitignore b/.gitignore index 75d92e9..35ac2be 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,10 @@ Project_Readme.html # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs .idea/ +.mono/ + +# secret folder '.secrets' all over the project git controlled +.secrets/ # Build results [Dd]ebug/ @@ -226,6 +230,8 @@ Thumbs.db .idea/ # custom +# Ignore environment-specific appsettings, but allow .example files /**/**/appsettings.*.json +!/**/**/appsettings.*.json.example **/**/deployment.yml diff --git a/src/Nocr.Users.Host/Infrastructure/HostBuilderFactory.cs b/src/Nocr.Users.Host/Infrastructure/HostBuilderFactory.cs index 356c506..6476c9f 100644 --- a/src/Nocr.Users.Host/Infrastructure/HostBuilderFactory.cs +++ b/src/Nocr.Users.Host/Infrastructure/HostBuilderFactory.cs @@ -7,14 +7,26 @@ public class HostBuilderFactory where TStartup : class public IHostBuilder CreateHostBuilder(string[] args, string? baseDirectory = null) { var builder = Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration((_, configurationBuilder) => + .ConfigureWebHostDefaults(host => { host.UseStartup(); }) + .ConfigureAppConfiguration((context, configurationBuilder) => { if (!string.IsNullOrWhiteSpace(baseDirectory)) configurationBuilder.SetBasePath(baseDirectory); - configurationBuilder.AddJsonFile("appsettings.protected.json", optional: true); + // Configuration priority (low to high): + // 1. appsettings.json (already loaded by CreateDefaultBuilder) + // 2. appsettings.{Environment}.json (already loaded) + // 3. User Secrets (already loaded in Development) + // 4. Environment Variables (already loaded) ← highest priority + + // Debug mode: log configuration on startup + if (Environment.GetEnvironmentVariable("NOCR_DEBUG_MODE") == "true") + { + Console.WriteLine("[NOCR_DEBUG] Configuration debug mode enabled"); + Console.WriteLine($"[NOCR_DEBUG] Environment: {context.HostingEnvironment.EnvironmentName}"); + Console.WriteLine($"[NOCR_DEBUG] Base Path: {baseDirectory ?? configurationBuilder.Build().GetValue("ContentRoot") ?? "default"}"); + } }) - .ConfigureWebHostDefaults(host => { host.UseStartup(); }) .UseSerilog((ctx, logBuilder) => { logBuilder.ReadFrom.Configuration(ctx.Configuration) diff --git a/src/Nocr.Users.Host/Infrastructure/Startup.cs b/src/Nocr.Users.Host/Infrastructure/Startup.cs index bdd3caf..ee9162c 100644 --- a/src/Nocr.Users.Host/Infrastructure/Startup.cs +++ b/src/Nocr.Users.Host/Infrastructure/Startup.cs @@ -15,6 +15,12 @@ public class Startup public void ConfigureServices(IServiceCollection services) { + // Debug mode: log loaded configuration + if (Environment.GetEnvironmentVariable("NOCR_DEBUG_MODE") == "true") + { + LogConfigurationDebug(); + } + services.AddSingleton(); services.AddControllers(); @@ -40,4 +46,22 @@ public class Startup app.UseHealthChecks("/health"); app.UseEndpoints(builder => builder.MapControllers()); } + + private void LogConfigurationDebug() + { + Console.WriteLine("=== [NOCR_DEBUG] Configuration Values ==="); + + var connString = Configuration.GetConnectionString(nameof(UsersContext)); + Console.WriteLine($"[NOCR_DEBUG] UsersContext ConnectionString: {MaskConnectionString(connString)}"); + + Console.WriteLine("=== [NOCR_DEBUG] End Configuration ==="); + } + + private static string MaskConnectionString(string? value) + { + if (string.IsNullOrEmpty(value)) return "(empty)"; + // Mask password in connection string + var masked = System.Text.RegularExpressions.Regex.Replace(value, @"(?i)(password|pwd)=([^;]+)", m => $"{m.Groups[1].Value}=***"); + return masked; + } } \ No newline at end of file diff --git a/src/Nocr.Users.Host/appsettings.Development.json.example b/src/Nocr.Users.Host/appsettings.Development.json.example new file mode 100644 index 0000000..38338e5 --- /dev/null +++ b/src/Nocr.Users.Host/appsettings.Development.json.example @@ -0,0 +1,9 @@ +{ + // This file provides an example configuration for local VS Code debugging. + // Copy this file to appsettings.Development.json and fill in your actual values. + + "ConnectionStrings": { + // MariaDB connection string for Users database + "UsersContext": "server=localhost;port=3326;database=nocr_users;uid=root;pwd=toor" + } +} diff --git a/src/Nocr.Users.Host/appsettings.DockerCompose.json.example b/src/Nocr.Users.Host/appsettings.DockerCompose.json.example new file mode 100644 index 0000000..557e59c --- /dev/null +++ b/src/Nocr.Users.Host/appsettings.DockerCompose.json.example @@ -0,0 +1,9 @@ +{ + // This file provides an example configuration for Docker Compose deployment. + // Copy this file to appsettings.DockerCompose.json. + + "ConnectionStrings": { + // MariaDB connection - use service name from docker-compose.yml + "UsersContext": "server=nocr-users-db;port=3306;database=nocr_users;uid=root;pwd=toor" + } +}