diff --git a/src/Confix.Tool/src/Confix.Library/ThrowHelper.cs b/src/Confix.Tool/src/Confix.Library/ThrowHelper.cs index 1903000..3d8500f 100644 --- a/src/Confix.Tool/src/Confix.Library/ThrowHelper.cs +++ b/src/Confix.Tool/src/Confix.Library/ThrowHelper.cs @@ -1,3 +1,5 @@ +using System.Text; +using Azure; using Confix.Tool.Commands.Logging; namespace Confix.Tool; @@ -42,15 +44,22 @@ public static Exception CouldNotParseJsonFile(FileInfo file) public static Exception SecretNotFound(Exception innerException) => new ExitException("Secret does not exist in this provider.", innerException) { - Help = - $"try running {"confix variable list".AsHighlighted()} to list all available variables" + Help = $"try running {"confix variable list".AsHighlighted()} to list all available variables" }; - public static Exception AccessToKeyVaultFailed(Exception innerException) => - new ExitException("Access to Key Vault failed", innerException) + public static Exception AccessToKeyVaultFailed(RequestFailedException innerException) + { + var details = new StringBuilder(); + details.AppendLine($"Message: {innerException.Message}"); + details.AppendLine($"Error code: {innerException.ErrorCode}"); + details.AppendLine($"Status code: {innerException.Status}"); + + return new ExitException("Access to Key Vault failed", innerException) { - Help = "check if you have the required permissions to access the Key Vault" + Help = "check if you have the required permissions to access the Key Vault", + Details = details.ToString() }; + } public static Exception AuthenticationFailedForVault(Exception innerException) => new ExitException("Authentication for Key Vault failed", innerException) diff --git a/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs b/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs index 78bfcbf..2ebf1f2 100644 --- a/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs +++ b/src/Confix.Tool/src/Confix.Library/Utilities/Console/ExitException.cs @@ -13,4 +13,5 @@ public ExitException(string? message, Exception? innerException) } public string? Help { get; init; } + public string? Details { get; init; } } diff --git a/src/Confix.Tool/src/Confix.Library/Utilities/Console/Extensions/ExceptionHandlerCommandLineBuilderExtensions.cs b/src/Confix.Tool/src/Confix.Library/Utilities/Console/Extensions/ExceptionHandlerCommandLineBuilderExtensions.cs index 3bb7321..54e999b 100644 --- a/src/Confix.Tool/src/Confix.Library/Utilities/Console/Extensions/ExceptionHandlerCommandLineBuilderExtensions.cs +++ b/src/Confix.Tool/src/Confix.Library/Utilities/Console/Extensions/ExceptionHandlerCommandLineBuilderExtensions.cs @@ -2,7 +2,6 @@ using System.CommandLine.Invocation; using Confix.Tool.Commands.Logging; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using Spectre.Console; namespace Confix.Tool; @@ -55,6 +54,7 @@ public static void HandleException(this InvocationContext context, Exception exc case ExitException exitException: logger.ExitException(exitException); console.PrintHelp(exitException); + console.PrintDetails(exitException); break; case ValidationException validationException: @@ -88,7 +88,15 @@ public static void PrintHelp(this IAnsiConsole console, ExitException exception) console.Write(panel); } } - + + public static void PrintDetails(this IAnsiConsole console, ExitException exception) + { + if (exception.Details is not null) + { + console.MarkupLine($"[yellow]{exception.Details.EscapeMarkup()}[/]"); + } + } + public static void ValidationException( this IConsoleLogger logger, ValidationException exception) diff --git a/src/Confix.Tool/src/Confix.Library/Variables/Providers/AzureKeyVault/AzureKeyVaultProvider.cs b/src/Confix.Tool/src/Confix.Library/Variables/Providers/AzureKeyVault/AzureKeyVaultProvider.cs index 29daaf3..5fc5573 100644 --- a/src/Confix.Tool/src/Confix.Library/Variables/Providers/AzureKeyVault/AzureKeyVaultProvider.cs +++ b/src/Confix.Tool/src/Confix.Library/Variables/Providers/AzureKeyVault/AzureKeyVaultProvider.cs @@ -1,6 +1,7 @@ using System.Text.Json.Nodes; using Azure.Identity; using Azure.Security.KeyVault.Secrets; +using Confix.Tool.Commands.Logging; using Confix.Utilities.Azure; using Json.Schema; @@ -36,6 +37,8 @@ public AzureKeyVaultProvider(SecretClient client) public Task> ListAsync(CancellationToken cancellationToken) => KeyVaultExtension.HandleKeyVaultException>(async () => { + App.Log.ListSecrets(_client.VaultUri); + var secrets = new List(); await foreach (var secret in _client.GetPropertiesOfSecretsAsync(cancellationToken)) { @@ -83,3 +86,11 @@ file static class Extensions public static string ToKeyVaultCompatiblePath(this string path) => path.Replace('.', '-'); } + +file static class LogExtensions +{ + public static void ListSecrets(this IConsoleLogger log, Uri vaultUri) + { + log.Information($"List all secrets from Azure Kev Vault '{vaultUri}'"); + } +}