private static List <object> ConfigureRabbitMqConsumers() { var mongoDb = InitMongoDb(); var redisMultiplexer = InitRedis(); var rabbitMqConn = InitRabbitMqConn(); //Factory method for creating PasswordChangedEventRabbitMqConsumer. Func <PasswordChangedEventRabbitMqConsumer> passwordChangedEventRabbitMqConsumerFactoryMethod = () => { // Create command for the consumer. IMongoCollection <AccountRTokenInfo> rtokensRepo = mongoDb.GetCollection <AccountRTokenInfo>(_accountTokenMongoCollectionName); var revokedTokensRedisDbPrefix = new RedisCollectionConfig(_configs.GetSection("redis").GetSection("revokedTokensCollection")).CollectionName; RedisCachedRepo <string> revokedTokensRedisRepo = new RedisCachedRepo <string>(redisMultiplexer.GetDatabase(), revokedTokensRedisDbPrefix, new DefaultSerializer(), _logger); var command = new RevokeAllTokensForAccountCommand(rtokensRepo, _logger); // Add event subscribers to the command. var refreshTokenRevokedEventExchangeConfig = new RabbitMqExchangeConfigs(_configs.GetSection("rabbitMq").GetSection("refreshTokenRevokedEventExchange")); command.AddSubsciber(new RabbitMqEventPublisher <RefreshTokenRevokedEvent>( new RabbitMqProducer <RefreshTokenRevokedEvent>(rabbitMqConn, refreshTokenRevokedEventExchangeConfig, _logger), _logger)); command.AddSubsciber(new RevokedTokenRedisCacher(revokedTokensRedisRepo, _logger)); // Create consumer and return it. var userClaimsChangedEventQueueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("passwordChangedEventQueue")); PasswordChangedEventRabbitMqConsumer consumer = new PasswordChangedEventRabbitMqConsumer(command, rabbitMqConn, userClaimsChangedEventQueueConfig, _logger); return(consumer); }; //Factory method for creating UserRolesChangedEventRabbitMqConsumer. Func <UserRolesChangedEventRabbitMqConsumer> userRolesChangedEventRabbitMqConsumerFactoryMethod = () => { // Create command for the consumer. IMongoCollection <AccountRTokenInfo> rtokensRepo = mongoDb.GetCollection <AccountRTokenInfo>(_accountTokenMongoCollectionName); var invalidatedTokensRedisDbPrefix = new RedisCollectionConfig(_configs.GetSection("redis").GetSection("invalidatedTokensCollection")).CollectionName; RedisCachedRepo <string> invalidatedTokensRedisRepo = new RedisCachedRepo <string>(redisMultiplexer.GetDatabase(), invalidatedTokensRedisDbPrefix, new DefaultSerializer(), _logger); var command = new InvalidateAllTokensForAccountCommand(rtokensRepo, _logger); // Add event subscribers to the command. var refreshTokenInvalidatedEventExchangeConfigs = new RabbitMqExchangeConfigs(_configs.GetSection("rabbitMq").GetSection("refreshTokenInvalidatedEventExchange")); command.AddSubsciber(new RabbitMqEventPublisher <RefreshTokenRevokedEvent>( new RabbitMqProducer <RefreshTokenRevokedEvent>(rabbitMqConn, refreshTokenInvalidatedEventExchangeConfigs, _logger), _logger)); command.AddSubsciber(new InvalidatedTokenRedisCacher(invalidatedTokensRedisRepo, _logger)); // Create consumer and return it. var userClaimsChangedEventQueueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("userRolesChangedEventQueue")); UserRolesChangedEventRabbitMqConsumer consumer = new UserRolesChangedEventRabbitMqConsumer(command, rabbitMqConn, userClaimsChangedEventQueueConfig, _logger); return(consumer); }; // Create and return RabbitMq consumers list. var rabbitMqConsumers = new List <object>() { passwordChangedEventRabbitMqConsumerFactoryMethod(), userRolesChangedEventRabbitMqConsumerFactoryMethod() }; return(rabbitMqConsumers); }
public void ConfigureServices(IServiceCollection services) { ILogger logger = InitLogger(services); IMongoDatabase mongodb = InitMongoDb(); ConnectionMultiplexer redisMultiplexer = InitRedis(); IConnection rabbitMqConn = InitRabbitMqConn(); IBusControl massTransitBus = InitMassTransit(); IClientFactory massTransitClientFactory = massTransitBus.CreateClientFactory(); #region Various //ITokenExtractor services.AddTransient(typeof(ITokenExtractor), (serviceProvider) => { return(new TokenExtractor(_rTokenConfig, new SymmetricKeyProvider(_rTokenKeyConfig))); }); #endregion #region Commands //IGenerateRefreshTokenCommand services.AddTransient(typeof(IGenerateRefreshTokenCommand), (serviceProvider) => { IMongoCollection <AccountRTokenInfo> rtokensRepo = mongodb.GetCollection <AccountRTokenInfo>(_accountRTokensCollectionConfig.Name); return(new GenerateRefreshTokenCommand(_rTokenConfig, new SymmetricKeyProvider(_rTokenKeyConfig), new GuidBasedSecretGenerator(), rtokensRepo, logger)); }); //IGenerateShortTokenCommand services.AddTransient(typeof(IGenerateShortTokenCommand), (serviceProvider) => { var revokedTokensRedisCollectionConfigs = new RedisCollectionConfig(_config.GetSection("redis").GetSection("revokedTokensCollection")); RedisCachedRepo <string> revokedTokensRedisRepo = new RedisCachedRepo <string>(redisMultiplexer.GetDatabase(), revokedTokensRedisCollectionConfigs.CollectionName, new DefaultSerializer(), logger); return(new GenerateShortTokenCommand(new TokenExtractor(_rTokenConfig, new SymmetricKeyProvider(_rTokenKeyConfig)), revokedTokensRedisRepo, new SymmetricKeyProvider(_sTokenKeyConfig), new GuidBasedSecretGenerator(), _sTokenConfig, logger)); }); //IRevokeAllTokensForAccountCommand services.AddTransient(typeof(IRevokeAllTokensForAccountCommand), (serviceProvider) => { IMongoCollection <AccountRTokenInfo> rtokensRepo = mongodb.GetCollection <AccountRTokenInfo>(_accountRTokensCollectionConfig.Name); var revokedTokensRedisCollectionConfigs = new RedisCollectionConfig(_config.GetSection("redis").GetSection("revokedTokensCollection")); RedisCachedRepo <string> revokedTokensRedisRepo = new RedisCachedRepo <string>(redisMultiplexer.GetDatabase(), revokedTokensRedisCollectionConfigs.CollectionName, new DefaultSerializer(), logger); var command = new RevokeAllTokensForAccountCommand(rtokensRepo, logger); var exchangeConfigs = new RabbitMqExchangeConfigs(_config.GetSection("rabbitMq").GetSection("refreshTokenRevokedEventExchange")); command.AddSubsciber(new RabbitMqEventPublisher <RefreshTokenRevokedEvent>( new RabbitMqProducer <RefreshTokenRevokedEvent>(rabbitMqConn, exchangeConfigs, logger), logger)); command.AddSubsciber(new RevokedTokenRedisCacher(revokedTokensRedisRepo, logger)); return(command); }); //IRevokeTokenCommand services.AddTransient(typeof(IRevokeTokenCommand), (serviceProvider) => { IMongoCollection <AccountRTokenInfo> rtokensRepo = mongodb.GetCollection <AccountRTokenInfo>(_accountRTokensCollectionConfig.Name); var revokedTokensRedisCollectionConfigs = new RedisCollectionConfig(_config.GetSection("redis").GetSection("revokedTokensCollection")); RedisCachedRepo <string> revokedTokensRedisRepo = new RedisCachedRepo <string>(redisMultiplexer.GetDatabase(), revokedTokensRedisCollectionConfigs.CollectionName, new DefaultSerializer(), logger); var command = new RevokeTokenCommand(rtokensRepo, logger); var exchangeConfigs = new RabbitMqExchangeConfigs(_config.GetSection("rabbitMq").GetSection("refreshTokenRevokedEventExchange")); command.AddSubsciber(new RabbitMqEventPublisher <RefreshTokenRevokedEvent>( new RabbitMqProducer <RefreshTokenRevokedEvent>(rabbitMqConn, exchangeConfigs, logger), logger)); command.AddSubsciber(new RevokedTokenRedisCacher(revokedTokensRedisRepo, logger)); return(command); }); #endregion #region Queries //IGetAllTokensForAccountQuery services.AddTransient(typeof(IGetAllTokensForAccountQuery), (serviceProvider) => { IMongoCollection <AccountRTokenInfo> rtokensRepo = mongodb.GetCollection <AccountRTokenInfo>(_accountRTokensCollectionConfig.Name); return(new GetAllTokensForAccountQuery(rtokensRepo, logger)); }); #endregion #region MassTransit services.AddTransient(typeof(IRequestClient <UserClaimsRequest>), (serviceProvider) => { var massTransitChannelName = _config.GetSection("rabbitMq").GetSection("getUserClaimsMassTransitChannel")["Name"]; var requestClient = massTransitClientFactory.CreateRequestClient <UserClaimsMQRequest>(new Uri($"rabbitmq://{_rabbitmqConfigs.Host}/{massTransitChannelName}")); return(requestClient); }); services.AddTransient(typeof(IRequestClient <AuthValidationRequest>), (serviceProvider) => { var massTransitChannelName = _config.GetSection("rabbitMq").GetSection("validateCredentialsMassTransitChannel")["Name"]; var requestClient = massTransitClientFactory.CreateRequestClient <AuthValidationMQRequest>(new Uri($"rabbitmq://{_rabbitmqConfigs.Host}/{massTransitChannelName}")); return(requestClient); }); #endregion #region Mvc Framework var mvcBuilder = services.AddMvc(); MvcConfigProvider mvcConfigProvider = new MvcConfigProvider(); mvcBuilder.AddMvcOptions(mvcConfigProvider.GetMvcOptionsConfigurer()) .AddJsonOptions(mvcConfigProvider.GetJsonOptionsConfigurer()); services.AddSession(); #endregion }