/// <summary> /// Constructor for a key vault based setting cache /// </summary> /// <param name="vault">The key vault to use</param> /// <param name="keyEncoder">An encoder setting names (key vault doesn't support URI encoding for setting names but, for example, if migrating from app.config you could have a . in a setting name</param> /// <param name="cachePolicy">The policy for the cache</param> /// <param name="localConfiguration"></param> public AsyncKeyVaultConfiguration( IKeyVault vault, IKeyVaultConfigurationKeyEncoder keyEncoder, KeyVaultConfigurationCachePolicy cachePolicy, IAsyncConfiguration localConfiguration = null) { _vault = vault; _keyEncoder = keyEncoder; _cachePolicy = cachePolicy; _localConfiguration = localConfiguration; }
private static async Task SetSecrets(ApplicationConfiguration configuration, IKeyVault secretStore, IKeyVaultConfigurationKeyEncoder encoder, bool verbose) { try { IApplicationResourceSettingNameProvider nameProvider = new ApplicationResourceSettingNameProvider(); // set the secrets foreach (ApplicationComponent component in configuration.ApplicationComponents) { IComponentIdentity componentIdentity = new ComponentIdentity(component.Fqn); if (!string.IsNullOrWhiteSpace(component.SqlServerConnectionString)) { string key = nameProvider.SqlConnectionString(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.SqlServerConnectionString); } if (!string.IsNullOrWhiteSpace(component.StorageAccountConnectionString)) { string key = nameProvider.StorageAccountConnectionString(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.StorageAccountConnectionString); } if (!string.IsNullOrWhiteSpace(component.ServiceBusConnectionString)) { string key = nameProvider.ServiceBusConnectionString(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.ServiceBusConnectionString); } if (!string.IsNullOrWhiteSpace(component.DbContextType)) { string key = nameProvider.SqlContextType(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DbContextType); } if (!string.IsNullOrWhiteSpace(component.DefaultQueueName)) { string key = nameProvider.DefaultQueueName(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DefaultQueueName); } if (!string.IsNullOrWhiteSpace(component.DefaultBlobContainerName)) { string key = nameProvider.DefaultBlobContainerName(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DefaultBlobContainerName); } if (!string.IsNullOrWhiteSpace(component.DefaultTableName)) { string key = nameProvider.DefaultTableName(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DefaultTableName); } if (!string.IsNullOrWhiteSpace(component.DefaultLeaseBlockName)) { string key = nameProvider.DefaultLeaseBlockName(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DefaultLeaseBlockName); } if (!string.IsNullOrWhiteSpace(component.DefaultSubscriptionName)) { string key = nameProvider.DefaultSubscriptionName(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DefaultSubscriptionName); } if (!string.IsNullOrWhiteSpace(component.DefaultTopicName)) { string key = nameProvider.DefaultTopicName(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DefaultTopicName); } if (!string.IsNullOrWhiteSpace(component.DefaultBrokeredMessageQueueName)) { string key = nameProvider.DefaultBrokeredMessageQueueName(componentIdentity); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, component.DefaultBrokeredMessageQueueName); } foreach (ApplicationComponentSetting setting in component.Settings) { string key = nameProvider.SettingName(componentIdentity, setting.Key); await SetValueInSecretStoreIfIsSecret(secretStore, encoder, verbose, configuration, key, setting.Value); } } } catch (AggregateException aex) { StringBuilder sb = new StringBuilder(); foreach (Exception ex in aex.InnerExceptions) { sb.AppendLine(ex.Message); } throw new ConsoleAppException(sb.ToString(), aex); } }
public KeyVaultConfiguration(IKeyVault vault, IKeyVaultConfigurationKeyEncoder keyEncoder, IConfiguration localConfiguration = null) { _vault = vault; _keyEncoder = keyEncoder; _localConfiguration = localConfiguration; }
private static async Task SetValueInSecretStoreIfIsSecret(IKeyVault secretStore, IKeyVaultConfigurationKeyEncoder encoder, bool verbose, ApplicationConfiguration configuration, string key, string value) { if (configuration.Secrets.Contains(value)) { string encodedKey = encoder.Encode(key); await secretStore.SetSecretAsync(encodedKey, value); if (verbose) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Secret set for key {0}", key); } } }