| File: RedisDataProtectionBuilderExtensions.cs | Web Access |
| Project: src\aspnetcore\src\DataProtection\StackExchangeRedis\src\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj (Microsoft.AspNetCore.DataProtection.StackExchangeRedis) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.AspNetCore.DataProtection.KeyManagement; using Microsoft.AspNetCore.DataProtection.StackExchangeRedis; using Microsoft.AspNetCore.Shared; using Microsoft.Extensions.DependencyInjection; using StackExchange.Redis; namespace Microsoft.AspNetCore.DataProtection; /// <summary> /// Contains Redis-specific extension methods for modifying a <see cref="IDataProtectionBuilder"/>. /// </summary> public static class StackExchangeRedisDataProtectionBuilderExtensions { private const string DataProtectionKeysName = "DataProtection-Keys"; /// <summary> /// Configures the data protection system to persist keys to specified key in Redis database /// </summary> /// <param name="builder">The builder instance to modify.</param> /// <param name="databaseFactory">The delegate used to create <see cref="IDatabase"/> instances.</param> /// <param name="key">The <see cref="RedisKey"/> used to store key list.</param> /// <returns>A reference to the <see cref="IDataProtectionBuilder" /> after this operation has completed.</returns> public static IDataProtectionBuilder PersistKeysToStackExchangeRedis(this IDataProtectionBuilder builder, Func<IDatabase> databaseFactory, RedisKey key) { ArgumentNullThrowHelper.ThrowIfNull(builder); ArgumentNullThrowHelper.ThrowIfNull(databaseFactory); return PersistKeysToStackExchangeRedisInternal(builder, databaseFactory, key); } /// <summary> /// Configures the data protection system to persist keys to the default key ('DataProtection-Keys') in Redis database /// </summary> /// <param name="builder">The builder instance to modify.</param> /// <param name="connectionMultiplexer">The <see cref="IConnectionMultiplexer"/> for database access.</param> /// <returns>A reference to the <see cref="IDataProtectionBuilder" /> after this operation has completed.</returns> public static IDataProtectionBuilder PersistKeysToStackExchangeRedis(this IDataProtectionBuilder builder, IConnectionMultiplexer connectionMultiplexer) { return PersistKeysToStackExchangeRedis(builder, connectionMultiplexer, DataProtectionKeysName); } /// <summary> /// Configures the data protection system to persist keys to the specified key in Redis database /// </summary> /// <param name="builder">The builder instance to modify.</param> /// <param name="connectionMultiplexer">The <see cref="IConnectionMultiplexer"/> for database access.</param> /// <param name="key">The <see cref="RedisKey"/> used to store key list.</param> /// <returns>A reference to the <see cref="IDataProtectionBuilder" /> after this operation has completed.</returns> public static IDataProtectionBuilder PersistKeysToStackExchangeRedis(this IDataProtectionBuilder builder, IConnectionMultiplexer connectionMultiplexer, RedisKey key) { ArgumentNullThrowHelper.ThrowIfNull(builder); ArgumentNullThrowHelper.ThrowIfNull(connectionMultiplexer); return PersistKeysToStackExchangeRedisInternal(builder, () => connectionMultiplexer.GetDatabase(), key); } private static IDataProtectionBuilder PersistKeysToStackExchangeRedisInternal(IDataProtectionBuilder builder, Func<IDatabase> databaseFactory, RedisKey key) { builder.Services.Configure<KeyManagementOptions>(options => { options.XmlRepository = new RedisXmlRepository(databaseFactory, key); }); return builder; } }