/// <summary>Configures HTTP message signature verification to use a MongoDB <see cref="INonceStore"/>.</summary> /// <param name="builder">The <see cref="IHttpMessageSigningVerificationBuilder" /> that is used to configure verification.</param> /// <param name="nonceStoreSettingsFactory">The factory that creates the settings for the Mongo connection.</param> /// <returns>The <see cref="IHttpMessageSigningVerificationBuilder" /> that can be used to continue configuring the verification settings.</returns> public static IHttpMessageSigningVerificationBuilder UseMongoDbNonceStore( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, MongoDbNonceStoreSettings> nonceStoreSettingsFactory) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (nonceStoreSettingsFactory == null) { throw new ArgumentNullException(nameof(nonceStoreSettingsFactory)); } builder.Services .AddMemoryCache() .AddSingleton(prov => { var mongoSettings = nonceStoreSettingsFactory(prov); if (mongoSettings == null) { throw new ValidationException($"Invalid {nameof(MongoDbNonceStoreSettings)} were specified."); } mongoSettings.Validate(); var decorator = prov.GetRequiredService <ICachingNonceStoreDecorator>(); var store = new MongoDbNonceStore( new MongoDatabaseClientProvider(mongoSettings.ConnectionString), mongoSettings.CollectionName); return(decorator.DecorateWithCaching(store)); }); return(builder); }
public MongoDbNonceStoreTests(MongoSetup mongoSetup) : base(mongoSetup) { _collectionName = "nonces"; _mongoDatabaseClientProvider = new MongoDatabaseClientProvider(Database); _sut = new MongoDbNonceStore(_mongoDatabaseClientProvider, _collectionName); _now = new DateTimeOffset( DateTimeOffset.UtcNow.Year, DateTimeOffset.UtcNow.Month, DateTimeOffset.UtcNow.Day, DateTimeOffset.UtcNow.Hour, DateTimeOffset.UtcNow.Minute, DateTimeOffset.UtcNow.Second, DateTimeOffset.UtcNow.Millisecond, TimeSpan.Zero); }