private void EnsureUniqueSecretProviderNames() { IEnumerable <string> secretProvidersWithDuplicateNames = SecretStoreSources.GroupBy(source => source.Options?.Name) .Where(group => @group.Key != null && @group.Count() > 1) .Select(group => @group.Key); if (secretProvidersWithDuplicateNames.Any()) { string duplicateNames = String.Join(", ", secretProvidersWithDuplicateNames); throw new InvalidOperationException( $"Cannot set up secret store because one or more {nameof(ISecretProvider)} was registered with the same name: {duplicateNames}"); } }
/// <summary> /// Adds an <see cref="ISecretProvider"/> implementation to the secret store of the application. /// </summary> /// <param name="secretProvider">The provider which secrets are added to the secret store.</param> /// <param name="mutateSecretName">The optional function to mutate the secret name before looking it up.</param> /// <returns> /// The extended secret store with the given <paramref name="secretProvider"/>. /// </returns> /// <exception cref="ArgumentNullException">Thrown when the <paramref name="secretProvider"/> is <c>null</c>.</exception> public SecretStoreBuilder AddProvider(ISecretProvider secretProvider, Func <string, string> mutateSecretName = null) { Guard.NotNull(secretProvider, nameof(secretProvider), "Requires a secret provider to add to the secret store"); if (mutateSecretName is null) { SecretStoreSources.Add(new SecretStoreSource(secretProvider)); } else { SecretStoreSources.Add(CreateMutatedSecretSource(serviceProvider => secretProvider, mutateSecretName)); } return(this); }
/// <summary> /// Adds an <see cref="ISecretProvider"/> implementation to the secret store of the application. /// </summary> /// <param name="secretProvider">The provider which secrets are added to the secret store.</param> /// <param name="configureOptions">The function to configure the registration of the <see cref="ISecretProvider"/> in the secret store.</param> /// <returns> /// The extended secret store with the given <paramref name="secretProvider"/>. /// </returns> /// <exception cref="ArgumentNullException">Thrown when the <paramref name="secretProvider"/> is <c>null</c>.</exception> public SecretStoreBuilder AddProvider( ISecretProvider secretProvider, Action <SecretProviderOptions> configureOptions) { Guard.NotNull(secretProvider, nameof(secretProvider), "Requires a secret provider to add to the secret store"); var options = new SecretProviderOptions(); configureOptions?.Invoke(options); if (options?.MutateSecretName is null) { SecretStoreSources.Add(new SecretStoreSource(secretProvider, options)); } else { SecretStoreSources.Add(CreateMutatedSecretSource(serviceProvider => secretProvider, options)); } return(this); }
/// <summary> /// Adds an <see cref="ISecretProvider"/> implementation to the secret store of the application. /// </summary> /// <param name="secretProvider">The provider which secrets are added to the secret store.</param> /// <param name="configureOptions">The function to configure the registration of the <see cref="ISecretProvider"/> in the secret store.</param> /// <returns> /// The extended secret store with the given <paramref name="secretProvider"/>. /// </returns> /// <exception cref="ArgumentNullException">Thrown when the <paramref name="secretProvider"/> is <c>null</c>.</exception> public SecretStoreBuilder AddProvider( ISecretProvider secretProvider, Action <SecretProviderOptions> configureOptions) { Guard.NotNull(secretProvider, nameof(secretProvider), "Requires a secret provider to add to the secret store"); var options = new SecretProviderOptions(); configureOptions?.Invoke(options); // ReSharper disable once ConstantConditionalAccessQualifier - options can still be 'null' when consumer set it to 'null'. if (options?.MutateSecretName is null) { SecretStoreSources.Add(new SecretStoreSource(secretProvider, options)); } else { SecretStoreSources.Add(CreateMutatedSecretSource(serviceProvider => secretProvider, options)); } return(this); }