- Introduced AuthorityAdvisoryAiOptions and related classes for managing advisory AI configurations, including remote inference options and tenant-specific settings. - Added AuthorityApiLifecycleOptions to control API lifecycle settings, including legacy OAuth endpoint configurations. - Implemented validation and normalization methods for both advisory AI and API lifecycle options to ensure proper configuration. - Created AuthorityNotificationsOptions and its related classes for managing notification settings, including ack tokens, webhooks, and escalation options. - Developed IssuerDirectoryClient and related models for interacting with the issuer directory service, including caching mechanisms and HTTP client configurations. - Added support for dependency injection through ServiceCollectionExtensions for the Issuer Directory Client. - Updated project file to include necessary package references for the new Issuer Directory Client library.
40 lines
1.2 KiB
C#
40 lines
1.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace StellaOps.Scanner.Surface.Secrets.Providers;
|
|
|
|
internal sealed class CompositeSurfaceSecretProvider : ISurfaceSecretProvider
|
|
{
|
|
private readonly IReadOnlyList<ISurfaceSecretProvider> _providers;
|
|
|
|
public CompositeSurfaceSecretProvider(IEnumerable<ISurfaceSecretProvider> providers)
|
|
{
|
|
_providers = providers?.ToArray() ?? throw new ArgumentNullException(nameof(providers));
|
|
if (_providers.Count == 0)
|
|
{
|
|
throw new ArgumentException("At least one provider must be supplied.", nameof(providers));
|
|
}
|
|
}
|
|
|
|
public async ValueTask<SurfaceSecretHandle> GetAsync(
|
|
SurfaceSecretRequest request,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
foreach (var provider in _providers)
|
|
{
|
|
try
|
|
{
|
|
return await provider.GetAsync(request, cancellationToken).ConfigureAwait(false);
|
|
}
|
|
catch (SurfaceSecretNotFoundException)
|
|
{
|
|
// try next provider
|
|
}
|
|
}
|
|
|
|
throw new SurfaceSecretNotFoundException(request);
|
|
}
|
|
}
|