using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; using Vault.Demo.hashicorp.Console.Helper; namespace Vault.Demo.hashicorp.Console; internal class App { private readonly IConnectionStringProvider _connectionStringProvider; public App(IConnectionStringProvider connectionStringProvider) => this._connectionStringProvider = connectionStringProvider; public async Task Run(string arg) { var files = Directory.GetFiles(arg, "appsettings*.json", SearchOption.AllDirectories); foreach (var file in files) { if (file.Contains("/bin/") || file.Contains("\\bin\\")) continue; await UpdateAppSettingFile(file); } } private async Task UpdateAppSettingFile(string file) { var content = JObject.Parse(await File.ReadAllTextAsync(file)); var jsonReader = content["ConnectionStrings"] as JObject; if (jsonReader == null) return; foreach (var item in jsonReader.Properties()) { var value = await _connectionStringProvider.GetConnectionString(item.Name); if (value == string.Empty) continue; jsonReader[item.Name] = value; } await File.WriteAllTextAsync(file, jsonReader.ToString()); } }