Example #1
0
        static List <object> ConfigureRabbitMqConsumers()
        {
            //Redis
            ConnectionMultiplexer redisMultiplexer = InitRedis();
            var rabbitMqConn = ConfigureRabbitMqConn();

            // Factory method for token revoked event consumer.
            Func <TokenRevokedEventRabbitMqConsumer> tokenRevokedEventRabbitMqConsumerFactoryMethod = () =>
            {
                var revokedTokensRedisCollectionConfigs = new RedisCollectionConfig(_configs.GetSection("redis").GetSection("revokedTokensCollection"));
                var revokedTokenRepo = new RedisCachedRepo <string>(redisMultiplexer.GetDatabase(), revokedTokensRedisCollectionConfigs.CollectionName, new DefaultSerializer(), _logger);
                var queueConfig      = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("refreshTokenRevokedEventQueue"));
                TokenRevokedEventRabbitMqConsumer consumer = new TokenRevokedEventRabbitMqConsumer(revokedTokenRepo, rabbitMqConn, queueConfig, _logger);
                return(consumer);
            };

            // Factory method for token invalidated event consumer.
            Func <TokenInvalidatedEventRabbitMqConsumer> tokenInvalidatedEventRabbitMqConsumerFactoryMethod = () =>
            {
                var revokedTokensRedisCollectionConfigs = new RedisCollectionConfig(_configs.GetSection("redis").GetSection("invalidatedTokensCollection"));
                var invalidatedTokenRepo = new RedisCachedRepo <string>(redisMultiplexer.GetDatabase(), revokedTokensRedisCollectionConfigs.CollectionName, new DefaultSerializer(), _logger);
                var queueConfig          = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("refreshTokenInvalidatedEventQueue"));
                TokenInvalidatedEventRabbitMqConsumer consumer = new TokenInvalidatedEventRabbitMqConsumer(invalidatedTokenRepo, rabbitMqConn, queueConfig, _logger);
                return(consumer);
            };

            return(new List <object>()
            {
                tokenRevokedEventRabbitMqConsumerFactoryMethod(),
                tokenInvalidatedEventRabbitMqConsumerFactoryMethod()
            });
        }
Example #2
0
        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);
        }
Example #3
0
        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
        }