コード例 #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()
            });
        }
コード例 #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);
        }
コード例 #3
0
 public UserRolesChangedEventRabbitMqConsumer(IInvalidateAllTokensForAccountCommand invalidateAllTokensForAccountCommand,
                                              IConnection rabbitMqConn,
                                              RabbitMqQueueConfig queueConfig,
                                              ILogger logger)
     : base(rabbitMqConn, queueConfig, logger)
 {
     _invalidateAllTokensForAccountCommand = invalidateAllTokensForAccountCommand;
 }
コード例 #4
0
 public TokenRevokedEventRabbitMqConsumer(ICachedRepo <string> revokedTokenRepo,
                                          IConnection rabbitMqConn,
                                          RabbitMqQueueConfig queueConfig,
                                          ILogger logger)
     : base(rabbitMqConn, queueConfig, logger)
 {
     _revokedTokenRepo = revokedTokenRepo;
 }
 public PasswordChangedEventRabbitMqConsumer(IRevokeAllTokensForAccountCommand revokeAllTokensForAccountCommand,
                                             IConnection rabbitMqConn,
                                             RabbitMqQueueConfig queueConfig,
                                             ILogger logger)
     : base(rabbitMqConn, queueConfig, logger)
 {
     _revokeAllTokensForAccountCommand = revokeAllTokensForAccountCommand;
 }
コード例 #6
0
 public TokenInvalidatedEventRabbitMqConsumer(ICachedRepo <string> invalidatedTokenRepo,
                                              IConnection rabbitMqConn,
                                              RabbitMqQueueConfig queueConfig,
                                              ILogger logger)
     : base(rabbitMqConn, queueConfig, logger)
 {
     _invalidatedTokenRepo = invalidatedTokenRepo;
 }
コード例 #7
0
 public MailSenderRabbitMqConsumer(IMailModelFactory <TModel> mailModelFactory,
                                   IMailSender mailSender,
                                   IConnection rabbitMqConn,
                                   RabbitMqQueueConfig queueConfig,
                                   ILogger logger)
     : base(rabbitMqConn, queueConfig, logger)
 {
     _mailModelFactory = mailModelFactory;
     _mailSender       = mailSender;
     _logger           = logger;
 }
コード例 #8
0
        private static List <Object> ConfigureRabbitMqConsumers()
        {
            var smtpConfig = new SmtpConfig(_configs.GetSection("smtp"));


            var templateFileForConfirmMail                 = _configs["templateFileForConfirmMail"];
            var templateFileForDirectPassRecovery          = _configs["templateFileForDirectPassRecovery"];
            var templateFileForResetLinkPassRecovery       = _configs["templateFileForResetLinkPassRecovery"];
            var templateFileForUserClaimsChangedEvent      = _configs["templateFileForUserClaimsChangedEvent"];
            var templateFileForPasswordChangedEvent        = _configs["templateFileForPasswordChangedEvent"];
            var templateFileForAccountEmailChangedEvent    = _configs["templateFileForAccountEmailChangedEvent"];
            var templateFileForAccountEmailChangeUndoEvent = _configs["templateFileForAccountEmailChangeUndoEvent"];

            var rabbitMqConnection = ConfigureRabbitMqConn();


            Func <MailSenderRabbitMqConsumer <ConfirmMailModel> > confirmMailModelConsumerFactory = () =>
            {
                SmtpClient smtpClient  = ConfigureSmtpClient(smtpConfig);
                var        queueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("confirmMailQueue"));
                MailSenderRabbitMqConsumer <ConfirmMailModel> consumer = new MailSenderRabbitMqConsumer <ConfirmMailModel>(
                    new ConfirmMailModelMailModelFactory(smtpConfig, templateFileForConfirmMail),
                    new SmtpMailSender(smtpClient, _logger),
                    rabbitMqConnection,
                    queueConfig,
                    _logger);
                return(consumer);
            };

            // DirectPassRecoveryMailModel  consumer factory.
            Func <MailSenderRabbitMqConsumer <DirectPassRecoveryMailModel> > directPassRecoveryModelConsumerFactory = () =>
            {
                SmtpClient smtpClient  = ConfigureSmtpClient(smtpConfig);
                var        queueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("directPassRecoveryMailQueue"));
                return(new MailSenderRabbitMqConsumer <DirectPassRecoveryMailModel>(
                           new DirectPassRecoveryMailModelFactory(smtpConfig, templateFileForDirectPassRecovery),
                           new SmtpMailSender(smtpClient, _logger),
                           rabbitMqConnection,
                           queueConfig,
                           _logger));
            };

            // ResetLinkPasswordRecoveryMailModel consumer factory.
            Func <MailSenderRabbitMqConsumer <ResetLinkPasswordRecoveryMailModel> > resetLinkPasswordRecoveryModelConsumerFactory = () =>
            {
                SmtpClient smtpClient  = ConfigureSmtpClient(smtpConfig);
                var        queueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("resetLinkPasswordRecoveryMailQueue"));
                return(new MailSenderRabbitMqConsumer <ResetLinkPasswordRecoveryMailModel>(
                           new ResetLinkPasswordRecoveryMailModelFactory(smtpConfig, templateFileForResetLinkPassRecovery),
                           new SmtpMailSender(smtpClient, _logger),
                           rabbitMqConnection,
                           queueConfig,
                           _logger));
            };

            // UserClaimsChangedEvent consumer factory.
            Func <MailSenderRabbitMqConsumer <UserClaimsChangedEvent> > userClaimsChangedEventConsumerFactory = () =>
            {
                SmtpClient smtpClient  = ConfigureSmtpClient(smtpConfig);
                var        queueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("userClaimsChangedEventQueue"));
                return(new MailSenderRabbitMqConsumer <UserClaimsChangedEvent>(
                           new UserClaimsChangedEventModelFactory(smtpConfig, templateFileForUserClaimsChangedEvent),
                           new SmtpMailSender(smtpClient, _logger),
                           rabbitMqConnection,
                           queueConfig,
                           _logger));
            };

            // PasswordChangedEvent consumer factory.
            Func <MailSenderRabbitMqConsumer <PasswordChangedEvent> > passwordChangedEventConsumerFactory = () =>
            {
                SmtpClient smtpClient  = ConfigureSmtpClient(smtpConfig);
                var        queueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("passwordChangedEventQueue"));
                return(new MailSenderRabbitMqConsumer <PasswordChangedEvent>(
                           new PasswordChangedEventModelFactory(smtpConfig, templateFileForPasswordChangedEvent),
                           new SmtpMailSender(smtpClient, _logger),
                           rabbitMqConnection,
                           queueConfig,
                           _logger));
            };

            // AccountEmailChangedEvent consumer factory.
            Func <MailSenderRabbitMqConsumer <AccountEmailChangedEvent> > accountEmailChangedEventConsumerFactory = () =>
            {
                SmtpClient smtpClient  = ConfigureSmtpClient(smtpConfig);
                var        queueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("accountEmailChangedEventQueue"));
                return(new MailSenderRabbitMqConsumer <AccountEmailChangedEvent>(
                           new AccountEmailChangedEventMailModelFactory(smtpConfig, templateFileForAccountEmailChangedEvent, "https://example.com/api/v1/account/emailChange"),
                           new SmtpMailSender(smtpClient, _logger),
                           rabbitMqConnection,
                           queueConfig,
                           _logger));
            };

            // AccountEmailChangedEvent consumer factory.
            Func <MailSenderRabbitMqConsumer <AccountEmailChangeUndoEvent> > accountEmailChangeUndoEventConsumerFactory = () =>
            {
                SmtpClient smtpClient  = ConfigureSmtpClient(smtpConfig);
                var        queueConfig = new RabbitMqQueueConfig(_configs.GetSection("rabbitMq").GetSection("accountEmailChangeUndoEventQueue"));
                return(new MailSenderRabbitMqConsumer <AccountEmailChangeUndoEvent>(
                           new AccountEmailChangeUndoEventMailModelFactory(smtpConfig, templateFileForAccountEmailChangeUndoEvent),
                           new SmtpMailSender(smtpClient, _logger),
                           rabbitMqConnection,
                           queueConfig,
                           _logger));
            };

            return(new List <object>()
            {
                confirmMailModelConsumerFactory(),
                directPassRecoveryModelConsumerFactory(),
                resetLinkPasswordRecoveryModelConsumerFactory(),
                userClaimsChangedEventConsumerFactory(),
                passwordChangedEventConsumerFactory(),
                accountEmailChangedEventConsumerFactory(),
                accountEmailChangeUndoEventConsumerFactory()
            });
        }