From 6783ece863165f1fd86df3efe63b7294291ff295 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Fri, 26 Jan 2024 13:31:37 -0800 Subject: [PATCH] Add descriptive exception for Azure-Valut service Fix #15160 --- src/OrchardCore.Cms.Web/appsettings.json | 2 +- .../AzureKeyVaultConfigurationExtension.cs | 33 +++++++++---------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/OrchardCore.Cms.Web/appsettings.json b/src/OrchardCore.Cms.Web/appsettings.json index f9164bf07df..30d17294534 100644 --- a/src/OrchardCore.Cms.Web/appsettings.json +++ b/src/OrchardCore.Cms.Web/appsettings.json @@ -112,7 +112,7 @@ // Add 'AddOrchardCoreAzureKeyVault()' to the Generic Host in 'CreateHostBuilder() section'. //"OrchardCore_KeyVault_Azure": { // "KeyVaultName": "", // Set the name of your Azure Key Vault. - // "ReloadInterval": // Optional, timespan to wait between attempts at polling the Azure KeyVault for changes. Leave blank to disable reloading. + // "ReloadInterval": null // Optional, timespan to wait between attempts at polling the Azure KeyVault for changes. Leave blank to disable reloading. //}, // See https://docs.orchardcore.net/en/latest/docs/reference/modules/Users/Configuration/#custom-paths //"OrchardCore_Users": { diff --git a/src/OrchardCore/OrchardCore.Configuration.KeyVault/Extensions/AzureKeyVaultConfigurationExtension.cs b/src/OrchardCore/OrchardCore.Configuration.KeyVault/Extensions/AzureKeyVaultConfigurationExtension.cs index 52eb59e7edf..2bec5297768 100644 --- a/src/OrchardCore/OrchardCore.Configuration.KeyVault/Extensions/AzureKeyVaultConfigurationExtension.cs +++ b/src/OrchardCore/OrchardCore.Configuration.KeyVault/Extensions/AzureKeyVaultConfigurationExtension.cs @@ -40,10 +40,7 @@ public static IHostBuilder AddOrchardCoreAzureKeyVault(this IHostBuilder builder /// public static IWebHostBuilder AddOrchardCoreAzureKeyVault(this IWebHostBuilder builder, TokenCredential tokenCredential = null) { - if (builder == null) - { - throw new ArgumentNullException(nameof(builder)); - } + ArgumentNullException.ThrowIfNull(builder); builder.ConfigureAppConfiguration((context, builder) => { @@ -62,10 +59,7 @@ public static IWebHostBuilder AddOrchardCoreAzureKeyVault(this IWebHostBuilder b public static ConfigurationManager AddOrchardCoreAzureKeyVault( this ConfigurationManager manager, TokenCredential tokenCredential = null) { - if (manager == null) - { - throw new ArgumentNullException(nameof(manager)); - } + ArgumentNullException.ThrowIfNull(manager); // The 'ConfigurationManager' is a builder and also an 'IConfigurationRoot' allowing to // get values from the providers already added without having to build a configuration. @@ -79,26 +73,29 @@ private static void AddOrchardCoreAzureKeyVault( { var keyVaultName = configuration["OrchardCore:OrchardCore_KeyVault_Azure:KeyVaultName"]; - TimeSpan? reloadInterval = null; - if (double.TryParse(configuration["OrchardCore:OrchardCore_KeyVault_Azure:ReloadInterval"], out var interval)) + if (string.IsNullOrEmpty(keyVaultName)) { - reloadInterval = TimeSpan.FromSeconds(interval); + throw new Exception("The 'KeyVaultName' property is no configured. Please configure it by specifying the 'OrchardCore:OrchardCore_KeyVault_Azure:KeyVaultName' settings key."); + } + + if (!Uri.TryCreate($"https://{keyVaultName}.vault.azure.net", UriKind.Absolute, out var keyVaultEndpointUri)) + { + throw new Exception("Invalid value used for 'KeyVaultName' property. Please provide a valid key-vault name using the 'OrchardCore:OrchardCore_KeyVault_Azure:KeyVaultName' settings key."); } - var keyVaultEndpointUri = new Uri("https://" + keyVaultName + ".vault.azure.net"); var configOptions = new AzureKeyVaultConfigurationOptions() { Manager = new AzureKeyVaultSecretManager(), - ReloadInterval = reloadInterval, }; + if (double.TryParse(configuration["OrchardCore:OrchardCore_KeyVault_Azure:ReloadInterval"], out var interval)) + { + configOptions.ReloadInterval = TimeSpan.FromSeconds(interval); + } + tokenCredential ??= new DefaultAzureCredential(includeInteractiveCredentials: true); - builder.AddAzureKeyVault( - keyVaultEndpointUri, - tokenCredential, - configOptions - ); + builder.AddAzureKeyVault(keyVaultEndpointUri, tokenCredential, configOptions); } } }