diff --git a/src/Configuration/Vault/src/ConfigurationManagerExtensions.cs b/src/Configuration/Vault/src/ConfigurationManagerExtensions.cs index 7fe23750..25bed272 100644 --- a/src/Configuration/Vault/src/ConfigurationManagerExtensions.cs +++ b/src/Configuration/Vault/src/ConfigurationManagerExtensions.cs @@ -1,5 +1,6 @@ namespace ClickView.GoodStuff.Configuration.Vault; +using System; using Microsoft.Extensions.Configuration; public static class ConfigurationManagerExtensions @@ -16,6 +17,8 @@ public static IConfigurationManager AddVault(this IConfigurationManager configur { ArgumentNullException.ThrowIfNull(configurationManager); + configurationManager.Sources.Insert(0, new VaultTokenFileConfigurationSource()); + var options = GetOptions(configurationManager); configure?.Invoke(options); diff --git a/src/Configuration/Vault/src/VaultTokenFileConfigurationProvider.cs b/src/Configuration/Vault/src/VaultTokenFileConfigurationProvider.cs new file mode 100644 index 00000000..5a3d6378 --- /dev/null +++ b/src/Configuration/Vault/src/VaultTokenFileConfigurationProvider.cs @@ -0,0 +1,19 @@ +namespace ClickView.GoodStuff.Configuration.Vault; + +using Microsoft.Extensions.Configuration; + +internal class VaultTokenFileConfigurationProvider : ConfigurationProvider +{ + public override void Load() + { + var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".vault-token"); + + if (!File.Exists(path)) + return; + + var token = File.ReadAllText(path).Trim(); + + if (!string.IsNullOrEmpty(token)) + Data["Vault:Token"] = token; + } +} diff --git a/src/Configuration/Vault/src/VaultTokenFileConfigurationSource.cs b/src/Configuration/Vault/src/VaultTokenFileConfigurationSource.cs new file mode 100644 index 00000000..02fb5631 --- /dev/null +++ b/src/Configuration/Vault/src/VaultTokenFileConfigurationSource.cs @@ -0,0 +1,8 @@ +namespace ClickView.GoodStuff.Configuration.Vault; + +using Microsoft.Extensions.Configuration; + +internal class VaultTokenFileConfigurationSource : IConfigurationSource +{ + public IConfigurationProvider Build(IConfigurationBuilder builder) => new VaultTokenFileConfigurationProvider(); +}