/// <summary>Configures HTTP message signature verification to use a SQL Server <see cref="IClientStore"/>.</summary> /// <param name="builder">The <see cref="IHttpMessageSigningVerificationBuilder" /> that is used to configure verification.</param> /// <param name="clientStoreSettingsFactory">The factory that creates the settings for the SQL Server connection.</param> /// <returns>The <see cref="IHttpMessageSigningVerificationBuilder" /> that can be used to continue configuring the verification settings.</returns> public static IHttpMessageSigningVerificationBuilder UseSqlServerClientStore( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, SqlServerClientStoreSettings> clientStoreSettingsFactory) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (clientStoreSettingsFactory == null) { throw new ArgumentNullException(nameof(clientStoreSettingsFactory)); } builder.Services .AddMemoryCache() .AddSingleton <ISignatureAlgorithmConverter, SignatureAlgorithmConverter>() .AddSingleton(prov => { var settings = clientStoreSettingsFactory(prov); if (settings == null) { throw new ValidationException($"Invalid {nameof(SqlServerClientStoreSettings)} were specified."); } settings.Validate(); return(settings); }); return(builder // The actual store .UseClientStore(prov => { var sqlSettings = prov.GetRequiredService <SqlServerClientStoreSettings>(); var decorator = prov.GetRequiredService <ICachingClientStoreDecorator>(); var store = new SqlServerClientStore(sqlSettings, prov.GetRequiredService <ISignatureAlgorithmConverter>()); return decorator.DecorateWithCaching(store, sqlSettings.ClientCacheEntryExpiration); })); }
/// <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); }
/// <summary>Configures HTTP message signature verification to use a MongoDB <see cref="IClientStore"/>.</summary> /// <param name="builder">The <see cref="IHttpMessageSigningVerificationBuilder" /> that is used to configure verification.</param> /// <param name="clientStoreSettingsFactory">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 UseMongoDbClientStore( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, MongoDbClientStoreSettings> clientStoreSettingsFactory) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (clientStoreSettingsFactory == null) { throw new ArgumentNullException(nameof(clientStoreSettingsFactory)); } builder.Services // Services .AddMemoryCache() .AddSingleton <ISystemClock, RealSystemClock>() .AddSingleton <IDelayer, Delayer>() .AddSingleton <IBackgroundTaskStarter, BackgroundTaskStarter>() .AddSingleton(prov => { var settings = clientStoreSettingsFactory(prov); if (settings == null) { throw new ValidationException($"Invalid {nameof(MongoDbClientStoreSettings)} were specified."); } settings.Validate(); return(settings); }) .AddSingleton <IMongoDatabaseClientProvider>(prov => { var mongoSettings = prov.GetRequiredService <MongoDbClientStoreSettings>(); return(new MongoDatabaseClientProvider(mongoSettings.ConnectionString)); }) // ClientStore Migrations .AddSingleton <IClientStoreBaseliner, ClientStoreBaseliner>() .AddSingleton <ISemaphoreFactory, SemaphoreFactory>() .AddSingleton <IClientStoreMigrator>(prov => new OnlyOnceClientStoreMigrator( new ClientStoreMigrator( prov.GetRequiredService <IEnumerable <IClientStoreMigrationStep> >(), prov.GetRequiredService <IClientStoreBaseliner>()), prov.GetRequiredService <IClientStoreBaseliner>(), prov.GetRequiredService <ISemaphoreFactory>())) .AddSingleton <IClientStoreMigrationStep, AddEncryptionSupportToClientsMigrationStep>(); return(builder // The actual store .UseClientStore(prov => { var mongoSettings = prov.GetRequiredService <MongoDbClientStoreSettings>(); return new CachingMongoDbClientStore( new MongoDbClientStore( prov.GetRequiredService <IMongoDatabaseClientProvider>(), mongoSettings.CollectionName, mongoSettings.SharedSecretEncryptionKey, prov.GetRequiredService <IClientStoreMigrator>()), prov.GetRequiredService <IMemoryCache>(), mongoSettings.ClientCacheEntryExpiration, prov.GetRequiredService <IBackgroundTaskStarter>()); })); }
public static IHttpMessageSigningVerificationBuilder UseSignatureParser(this IHttpMessageSigningVerificationBuilder builder, ISignatureParser signatureParser) { if (signatureParser == null) { throw new ArgumentNullException(nameof(signatureParser)); } return(builder.UseSignatureParser(provider => signatureParser)); }
public static IHttpMessageSigningVerificationBuilder UseAuthenticationHeaderExtractor( this IHttpMessageSigningVerificationBuilder builder, IAuthenticationHeaderExtractor authenticationHeaderExtractor) { if (authenticationHeaderExtractor == null) { throw new ArgumentNullException(nameof(authenticationHeaderExtractor)); } return(builder.UseAuthenticationHeaderExtractor(provider => authenticationHeaderExtractor)); }
public static IHttpMessageSigningVerificationBuilder UseMongoDbNonceStore(this IHttpMessageSigningVerificationBuilder builder, MongoDbNonceStoreSettings nonceStoreSettings) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (nonceStoreSettings == null) { throw new ArgumentNullException(nameof(nonceStoreSettings)); } return(builder.UseMongoDbNonceStore(prov => nonceStoreSettings)); }
public static IHttpMessageSigningVerificationBuilder UseSqlServerClientStore(this IHttpMessageSigningVerificationBuilder builder, SqlServerClientStoreSettings clientStoreSettings) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (clientStoreSettings == null) { throw new ArgumentNullException(nameof(clientStoreSettings)); } return(builder.UseSqlServerClientStore(prov => clientStoreSettings)); }
public static IHttpMessageSigningVerificationBuilder UseSignatureParser( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, ISignatureParser> signatureParserFactory) { if (signatureParserFactory == null) { throw new ArgumentNullException(nameof(signatureParserFactory)); } builder.Services.AddSingleton(signatureParserFactory); return(builder); }
public static IHttpMessageSigningVerificationBuilder UseAuthenticationHeaderExtractor( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, IAuthenticationHeaderExtractor> authenticationHeaderExtractorFactory) { if (authenticationHeaderExtractorFactory == null) { throw new ArgumentNullException(nameof(authenticationHeaderExtractorFactory)); } builder.Services.AddSingleton(authenticationHeaderExtractorFactory); return(builder); }
/// <summary>Configures HTTP message signature verification to use a file system-backed <see cref="IClientStore"/>.</summary> /// <param name="builder">The <see cref="IHttpMessageSigningVerificationBuilder" /> that is used to configure verification.</param> /// <param name="clientStoreSettingsFactory">The factory that creates the settings for the file.</param> /// <returns>The <see cref="IHttpMessageSigningVerificationBuilder" /> that can be used to continue configuring the verification settings.</returns> public static IHttpMessageSigningVerificationBuilder UseFileSystemClientStore( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, FileSystemClientStoreSettings> clientStoreSettingsFactory) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (clientStoreSettingsFactory == null) { throw new ArgumentNullException(nameof(clientStoreSettingsFactory)); } builder.Services .AddMemoryCache() .AddSingleton <IFileReader, FileReader>() .AddSingleton <IFileWriter, FileWriter>() .AddSingleton <IClientDataRecordSerializer, ClientDataRecordSerializer>() .AddSingleton <ILockFactory, LockFactory>() .AddSingleton <ISignatureAlgorithmDataRecordConverter, SignatureAlgorithmDataRecordConverter>() .AddSingleton(prov => { var settings = clientStoreSettingsFactory(prov); if (settings == null) { throw new ValidationException($"Invalid {nameof(FileSystemClientStoreSettings)} were specified."); } settings.Validate(); return(settings); }); return(builder // The actual store .UseClientStore(prov => { var settings = prov.GetRequiredService <FileSystemClientStoreSettings>(); var decorator = prov.GetRequiredService <ICachingClientStoreDecorator>(); var store = new LockingClientStore( new FileSystemClientStore( new ClientsFileManager( prov.GetRequiredService <IFileReader>(), prov.GetRequiredService <IFileWriter>(), settings.FilePath, prov.GetRequiredService <IClientDataRecordSerializer>()), prov.GetRequiredService <ISignatureAlgorithmDataRecordConverter>(), settings.SharedSecretEncryptionKey), prov.GetRequiredService <ILockFactory>()); return decorator.DecorateWithCaching(store, settings.ClientCacheEntryExpiration); })); }
/// <summary>Configures HTTP message signature verification to use a file system-backed <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 file.</param> /// <returns>The <see cref="IHttpMessageSigningVerificationBuilder" /> that can be used to continue configuring the verification settings.</returns> public static IHttpMessageSigningVerificationBuilder UseFileSystemNonceStore( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, FileSystemNonceStoreSettings> nonceStoreSettingsFactory) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (nonceStoreSettingsFactory == null) { throw new ArgumentNullException(nameof(nonceStoreSettingsFactory)); } builder.Services .AddMemoryCache() .AddSingleton <IFileReader, FileReader>() .AddSingleton <IFileWriter, FileWriter>() .AddSingleton <INonceDataRecordSerializer, NonceDataRecordSerializer>() .AddSingleton <ILockFactory, LockFactory>() .AddSingleton(prov => { var settings = nonceStoreSettingsFactory(prov); if (settings == null) { throw new ValidationException($"Invalid {nameof(FileSystemNonceStoreSettings)} were specified."); } settings.Validate(); return(settings); }) .AddSingleton(prov => { var settings = prov.GetRequiredService <FileSystemNonceStoreSettings>(); var decorator = prov.GetRequiredService <ICachingNonceStoreDecorator>(); var store = new LockingNonceStore( new FileSystemNonceStore( new NoncesFileManager( prov.GetRequiredService <IFileReader>(), prov.GetRequiredService <IFileWriter>(), settings.FilePath, prov.GetRequiredService <INonceDataRecordSerializer>()), prov.GetRequiredService <ISystemClock>()), prov.GetRequiredService <ILockFactory>()); return(decorator.DecorateWithCaching(store)); }); return(builder); }
/// <summary>Configures HTTP message signature verification to use a SQL Server <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 SQL Server connection.</param> /// <returns>The <see cref="IHttpMessageSigningVerificationBuilder" /> that can be used to continue configuring the verification settings.</returns> public static IHttpMessageSigningVerificationBuilder UseSqlServerNonceStore( this IHttpMessageSigningVerificationBuilder builder, Func <IServiceProvider, SqlServerNonceStoreSettings> nonceStoreSettingsFactory) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (nonceStoreSettingsFactory == null) { throw new ArgumentNullException(nameof(nonceStoreSettingsFactory)); } builder.Services .AddMemoryCache() .AddSingleton(prov => { var sqlSettings = nonceStoreSettingsFactory(prov); if (sqlSettings == null) { throw new ValidationException($"Invalid {nameof(SqlServerNonceStoreSettings)} were specified."); } sqlSettings.Validate(); return(sqlSettings); }) .AddSingleton <IExpiredNoncesCleaner>(prov => new ExpiredNoncesCleaner( prov.GetRequiredService <SqlServerNonceStoreSettings>(), prov.GetRequiredService <IBackgroundTaskStarter>(), prov.GetRequiredService <ISystemClock>())) .AddSingleton(prov => { var decorator = prov.GetRequiredService <ICachingNonceStoreDecorator>(); var store = new SqlServerNonceStore( prov.GetRequiredService <SqlServerNonceStoreSettings>(), prov.GetRequiredService <IExpiredNoncesCleaner>()); return(decorator.DecorateWithCaching(store)); }); return(builder); }
public static IHttpMessageSigningVerificationBuilder UseAspNetCoreSignatureVerification(this IHttpMessageSigningVerificationBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Services .AddSingleton <ISignatureParser>(prov => new SignatureParser(prov.GetService <ILogger <SignatureParser> >())) .AddSingleton <IRequestSignatureVerifier, RequestSignatureVerifier>(); return(builder); }
public static IHttpMessageSigningVerificationBuilder UseAuthenticationHeaderExtractor <TAuthenticationHeaderExtractor>(this IHttpMessageSigningVerificationBuilder builder) where TAuthenticationHeaderExtractor : IAuthenticationHeaderExtractor { return(builder.UseAuthenticationHeaderExtractor(provider => provider.GetRequiredService <TAuthenticationHeaderExtractor>())); }
public static IHttpMessageSigningVerificationBuilder UseSignatureParser <TSignatureParser>(this IHttpMessageSigningVerificationBuilder builder) where TSignatureParser : ISignatureParser { return(builder.UseSignatureParser(provider => provider.GetRequiredService <TSignatureParser>())); }