Exemple #1
0
        /// <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);
        }