/*
* Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
* See https://github.com/openiddict/openiddict-core for more information concerning
* the license and the contributors participating to this project.
*/
using System;
using JetBrains.Annotations;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.Extensions.Options;
namespace OpenIddict.Server.DataProtection
{
///
/// Contains the methods required to ensure that the OpenIddict ASP.NET Core Data Protection configuration is valid.
///
public class OpenIddictServerDataProtectionConfiguration : IConfigureOptions,
IPostConfigureOptions
{
private readonly IDataProtectionProvider _dataProtectionProvider;
///
/// Creates a new instance of the class.
///
/// The ASP.NET Core Data Protection provider.
public OpenIddictServerDataProtectionConfiguration([NotNull] IDataProtectionProvider dataProtectionProvider)
=> _dataProtectionProvider = dataProtectionProvider;
public void Configure([NotNull] OpenIddictServerOptions options)
{
if (options == null)
{
throw new ArgumentNullException(nameof(options));
}
// Register the built-in event handlers used by the OpenIddict Data Protection server components.
foreach (var handler in OpenIddictServerDataProtectionHandlers.DefaultHandlers)
{
options.DefaultHandlers.Add(handler);
}
}
///
/// Populates the default OpenIddict ASP.NET Core Data Protection server options
/// and ensures that the configuration is in a consistent and valid state.
///
/// The name of the options instance to configure, if applicable.
/// The options instance to initialize.
public void PostConfigure([CanBeNull] string name, [NotNull] OpenIddictServerDataProtectionOptions options)
{
if (options == null)
{
throw new ArgumentNullException(nameof(options));
}
options.DataProtectionProvider ??= _dataProtectionProvider;
}
}
}