// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNet.DataProtection.KeyManagement { internal static class KeyEscrowServiceProviderExtensions { /// /// Gets an aggregate from the underlying . /// This method may return null if no sinks are registered. /// public static IKeyEscrowSink GetKeyEscrowSink(this IServiceProvider services) { var escrowSinks = services?.GetService>()?.ToList(); return (escrowSinks != null && escrowSinks.Count > 0) ? new AggregateKeyEscrowSink(escrowSinks) : null; } private sealed class AggregateKeyEscrowSink : IKeyEscrowSink { private readonly List _sinks; public AggregateKeyEscrowSink(List sinks) { _sinks = sinks; } public void Store(Guid keyId, XElement element) { foreach (var sink in _sinks) { sink.Store(keyId, element); } } } } }