Пример #1
0
        /// <summary>
        /// Registers <see cref="IEmailSender"/> that point to Azure queue
        /// </summary>
        /// <param name="container"></param>
        /// <param name="connectionString">Queue connection string</param>
        /// <param name="queueName">Queue name</param>
        public static void RegisterEmailSenderViaAzureQueueMessageProducer(this ContainerBuilder container, IReloadingManager <string> connectionString, string queueName = "emailsqueue")
        {
            var messageProducer = new EmailMessageQueueProducer(AzureQueueExt.Create(connectionString, queueName));
            var emailSender     = new EmailSender(messageProducer);

            container.RegisterInstance <IEmailSender>(emailSender);
        }
Пример #2
0
        public static IServiceProvider BindAndBuild(IConfigurationRoot configuration)
        {
            var collection = new ServiceCollection();

            collection.AddTransient <Job>();

            collection.AddTransient <Func <string, IQueueExt> >(x => queueName => AzureQueueExt.Create(new FakeReloadingManager(configuration.GetConnectionString("azure")), queueName));

            collection.AddSingleton <IBlobStorage>(AzureBlobStorage.Create(new FakeReloadingManager(configuration.GetConnectionString("azure"))));

            var mongoClient = new MongoClient(configuration.GetConnectionString("mongo"));

            collection.AddSingleton <ISpentOutputRepository>(new SpentOutputRepository(new MongoStorage <OutputEntity>(mongoClient, "SpentOutputs")));

            collection.AddSingleton <IBroadcastedOutputRepository>(
                new BroadcastedOutputRepository(new MongoStorage <BroadcastedOutputEntity>(mongoClient, "BroadcastedOutputs")));

            collection.AddSingleton <IBroadcastedTransactionRepository>(
                new BroadcastedTransactionRepository(new MongoStorage <BroadcastedTransactionEntity>(mongoClient, "BroadcastedTransactions")));

            collection.AddSingleton <IPaidFeesTaskWriter, PaidFeesTaskWriter>();

            collection.AddSingleton <IPaidFeesRepository>(
                new PaidFeesRepository(new MongoStorage <PaidFeesEntity>(mongoClient, "PaidFees")));

            collection.AddSingleton <ITransactionSignRequestRepository>(
                new TransactionSignRequestRepository(new MongoStorage <TransactionSignRequestEntity>(mongoClient, "SignRequests")));

            collection.AddSingleton <IConfiguration>(configuration);

            return(collection.BuildServiceProvider());
        }
Пример #3
0
        private void RegistermSmsServices(ContainerBuilder builder)
        {
            var smsQueue       = new AzureQueueExt(_settings.Db.ClientPersonalInfoConnString, "smsqueue");
            var smsQueueReader = new QueueReader(smsQueue, "SmsQueueReader", 3000, _log);

            builder.Register <IQueueReader>(x => smsQueueReader).SingleInstance();
            builder.RegisterType <TemplateGenerator>().As <ITemplateGenerator>();
            builder.RegisterType <SmsTextGenerator>().As <ISmsTextGenerator>().SingleInstance();

            if (_settings.Sms.UseMocks)
            {
                builder.RegisterType <SmsMockSender>().As <ISmsSender>().SingleInstance();
                builder.RegisterType <AlternativeSmsMockSender>().As <IAlternativeSmsSender>().SingleInstance();
            }
            else
            {
                builder.RegisterInstance(_settings.Sms.Nexmo)
                .SingleInstance();
                builder.RegisterType <NexmoSmsSender>().As <ISmsSender>().SingleInstance();

                builder.RegisterInstance(_settings.Sms.Twilio)
                .SingleInstance();
                builder.RegisterType <TwilioSmsSender>().As <IAlternativeSmsSender>().SingleInstance();
            }
        }
Пример #4
0
        private void RegisterEmailServices(ContainerBuilder builder)
        {
            var emailsQueue = new AzureQueueExt(_settings.Db.ClientPersonalInfoConnString, "emailsqueue");
            var internalEmailQueueReader   = new QueueReader(emailsQueue, "InternalEmailQueueReader", 3000, _log);
            var blockChainEmailQueue       = new AzureQueueExt(_settings.Db.BitCoinQueueConnectionString, "emailsqueue");
            var blockChainEmailQueueReader = new QueueReader(blockChainEmailQueue, "BlockchainEmailQueueReader", 3000, _log);
            var sharedEmailQueue           = new AzureQueueExt(_settings.Db.SharedStorageConnString, "emailsqueue");
            var sharedEmailQueueReader     = new QueueReader(sharedEmailQueue, "SharedEmailQueueReader", 3000, _log);

            builder.Register <IEnumerable <IQueueReader> >(x => new List <IQueueReader>
            {
                internalEmailQueueReader,
                blockChainEmailQueueReader,
                sharedEmailQueueReader
            })
            .SingleInstance();
            builder.RegisterType <EmailGenerator>()
            .As <IEmailGenerator>()
            .SingleInstance()
            .WithParameters(new []
            {
                TypedParameter.From(_settings.Email),
                TypedParameter.From(_settings.Blockchain),
                TypedParameter.From(_settings.WalletApi)
            });
            builder.RegisterType <HttpRequestClient>();
            builder.RegisterType <RemoteTemplateGenerator>()
            .As <IRemoteTemplateGenerator>()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.Email.EmailTemplatesHost));
            builder.RegisterType <SwiftCredentialsService>().As <ISwiftCredentialsService>().SingleInstance();

            SmtpClient ClientFactory()
            {
                var client = new SmtpClient
                {
                    Timeout = 10000
                };

                client.Connect(_settings.Email.SmtpHost, _settings.Email.SmtpPort);
                client.Authenticate(new NetworkCredential(_settings.Email.SmtpLogin, _settings.Email.SmtpPwd));

                return(client);
            }

            var from = new MailboxAddress(_settings.Email.EmailFromDisplayName, _settings.Email.EmailFrom);

            if (_settings.Email.UseMocks)
            {
                builder.RegisterType <SmtpMailSenderMock>().SingleInstance();
                builder.Register(x => new SmtpMailSender(_log, ClientFactory, from, x.Resolve <IBroadcastMailsRepository>()));
                builder.RegisterType <MockAndRealMailSender>().As <ISmtpEmailSender>().SingleInstance();
            }
            else
            {
                builder.Register <ISmtpEmailSender>(x => new SmtpMailSender(_log, ClientFactory, from, x.Resolve <IBroadcastMailsRepository>()));
            }
        }
        public async Task AzureQueue_CheckParallelInsert()
        {
            var queue = new AzureQueueExt(_azureStorageConnectionString, _queueName);

            Parallel.For(1, 11, i =>
            {
                queue.PutRawMessageAsync(i.ToString()).Wait();
            });

            Assert.AreEqual(10, await _testQueue.Count() ?? 0);
        }
        public static ITransactionMonitoringTaskRepository Create(
            IReloadingManager <string> connectionString)
        {
            var queue = AzureQueueExt.Create
                        (
                connectionStringManager: connectionString,
                queueName: "transaction-monitoring-tasks",
                maxExecutionTimeout: TimeSpan.FromDays(7)
                        );

            return(new TransactionMonitoringTaskRepository(queue));
        }
Пример #7
0
        public static IServiceProvider BindAndBuild(IConfigurationRoot configuration)
        {
            var collection = new ServiceCollection();

            collection.AddTransient <ReenqueueJob>();

            collection.AddTransient <Func <string, IQueueExt> >(x => queueName => AzureQueueExt.Create(new FakeReloadingManager(configuration.GetConnectionString("job")), queueName));

            collection.AddSingleton <IConfiguration>(configuration);

            return(collection.BuildServiceProvider());
        }
Пример #8
0
        public static IBalanceObservationTaskRepository Create(
            IReloadingManager <string> connectionString)
        {
            var queue = AzureQueueExt.Create
                        (
                connectionStringManager: connectionString,
                queueName: "balance-observation-tasks",
                maxExecutionTimeout: TimeSpan.FromDays(7)
                        );

            return(new BalanceObservationTaskRepository(queue));
        }
        public GlobalExceptionFilter(ILog log, IReloadingManager <BaseSettings> settings)
        {
            _log = log;

            if (!string.IsNullOrEmpty(settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString))
            {
                _slackMessageQueue = AzureQueueExt.Create(settings.ConnectionString(x => x.SlackNotifications.AzureQueue.ConnectionString), "slack-notifications");
            }
            else
            {
                _slackMessageQueue = new QueueExtInMemory();
            }
        }
Пример #10
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType <HealthService>()
            .As <IHealthService>()
            .SingleInstance();

            builder.Register(ctx => AzureQueueExt.Create(_settingsManager.ConnectionString(x => x.Db.AzureQueueConnString), "solar-transit")).As <IQueueExt>().SingleInstance();

            RegisterPeriodicalHandlers(builder);

            RegisterMongoDb(builder);

            builder.Populate(_services);
        }
Пример #11
0
        public static void RegisterAzureQueues(this IServiceCollection Services,
                                               IReloadingManager <BaseSettings> settings,
                                               IReloadingManager <SlackNotificationSettings> slackNotificationManager)
        {
            var dataReloadingManager = settings.ConnectionString(x => x.Db.DataConnString);
            var slackReloadManager   = slackNotificationManager.ConnectionString(x => x.AzureQueue.ConnectionString);
            var queueName            = slackNotificationManager.CurrentValue.AzureQueue.QueueName;

            Services.AddTransient <IQueueFactory, QueueFactory>();
            Services.AddTransient <Func <string, IQueueExt> >(provider =>
            {
                return(x =>
                {
                    switch (x)
                    {
                    case Constants.TransferContractUserAssignmentQueueName:
                        return AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + x);

                    case Constants.EthereumContractQueue:
                        return AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + x);

                    case Constants.SlackNotifierQueue:
                        return AzureQueueExt.Create(slackReloadManager, Constants.StoragePrefix + queueName);

                    case Constants.EthereumOutQueue:
                        return AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + x);    //remove

                    case Constants.ContractTransferQueue:
                        return AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + x);

                    case Constants.TransactionMonitoringQueue:
                        return AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + x);

                    case Constants.CoinTransactionQueue:
                        return AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + x);

                    case Constants.UserContractManualQueue:
                        return AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + x);

                    default:
                        throw new Exception("Queue is not registered");
                    }
                });
            });
        }
Пример #12
0
        private static void RegisterQueues(this ContainerBuilder builder,
                                           IReloadingManager <AppSettings> generalSettings,
                                           ILog log)
        {
            builder.RegisterInstance(new AssetDefinitionParseBlockCommandProducer(AzureQueueExt.Create(generalSettings.ConnectionString(x => x.BcnExploler.Db.AssetsConnString), QueueNames.AssetDefinitionScanner.ParseBlock)))
            .As <IAssetDefinitionParseBlockCommandProducer>();


            builder.RegisterInstance(new AssetDefinitionCommandProducer(AzureQueueExt.Create(generalSettings.ConnectionString(x => x.BcnExploler.Db.AssetsConnString), QueueNames.AssetDefinitionScanner.RetrieveAsset)))
            .As <IAssetDefinitionCommandProducer>();

            builder.RegisterInstance(new AssetImageCommandProducer(AzureQueueExt.Create(generalSettings.ConnectionString(x => x.BcnExploler.Db.AssetsConnString), QueueNames.AssetDefinitionScanner.UpsertImages)))
            .As <IAssetImageCommandProducer>();


            builder.RegisterInstance(new AssetCoinholdersIndexesCommandProducer(AzureQueueExt.Create(generalSettings.ConnectionString(x => x.BcnExploler.Db.AssetsConnString), QueueNames.AssetIndexer.UpdateIndex)))
            .As <IAssetCoinholdersIndexesCommandProducer>();
        }
Пример #13
0
        public static void RegisterAzureQueues(this ContainerBuilder builder,
                                               IReloadingManager <string> dataReloadingManager,
                                               IReloadingManager <SlackNotificationSettings> slackNotificationManager)
        {
            var slackReloadManager = slackNotificationManager.ConnectionString(x => x.AzureQueue.ConnectionString);
            var queueName          = slackNotificationManager.CurrentValue.AzureQueue.QueueName;
            Func <string, IQueueExt> oldQueueResolver = (queueNameArg) =>
            {
                switch (queueNameArg)
                {
                case Constants.TransferContractUserAssignmentQueueName:
                    return(AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + queueNameArg));

                case Constants.EthereumContractQueue:
                    return(AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + queueNameArg));

                case Constants.SlackNotifierQueue:
                    return(AzureQueueExt.Create(slackReloadManager, Constants.StoragePrefix + queueName));

                case Constants.EthereumOutQueue:
                    return(AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + queueNameArg));   //remove

                case Constants.ContractTransferQueue:
                    return(AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + queueNameArg));

                case Constants.TransactionMonitoringQueue:
                    return(AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + queueNameArg));

                case Constants.CoinTransactionQueue:
                    return(AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + queueNameArg));

                case Constants.UserContractManualQueue:
                    return(AzureQueueExt.Create(dataReloadingManager, Constants.StoragePrefix + queueNameArg));

                default:
                    throw new Exception("Queue is not registered");
                }
            };

            builder.RegisterType <QueueFactory>()
            .As <IQueueFactory>().SingleInstance();
            builder.RegisterInstance <Func <string, IQueueExt> >(oldQueueResolver);
        }
Пример #14
0
        private static void BindQueue(this ContainerBuilder ioc, IReloadingManager <GeneralSettings> settings)
        {
            var dataReloadingManager = settings.Nested(p => p.BcnReports.Db.DataConnString);

            ioc.RegisterType <SlackNotificationsProducer>()
            .As <ISlackNotificationsProducer>();

            ioc.RegisterType <SlackNotificationsProducer>()
            .As <IPoisionQueueNotifier>();

            ioc.Register(p => new AddressReportCommandProducer(AzureQueueExt.Create(dataReloadingManager, QueueNames.AddressTransactionsReport)))
            .As <IAddressReportCommandProducer>();

            ioc.Register(p => new AssetReportCommandProducer(AzureQueueExt.Create(dataReloadingManager, QueueNames.AssetTransactionsReport)))
            .As <IAssetReportCommandProducer>();

            ioc.Register(p => new BlockReportCommandProducer(AzureQueueExt.Create(dataReloadingManager, QueueNames.BlockTransactionsReport)))
            .As <IBlockReportCommandProducer>();
        }
Пример #15
0
        public static IServiceProvider BindAndBuild(IConfigurationRoot configuration)
        {
            var mongoClient = new MongoClient(configuration.GetConnectionString("mongo"));
            var collection  = new ServiceCollection();

            collection.AddTransient <EnqueueFeesJob>();
            collection.AddSingleton <Func <string, IQueueExt> >(x => AzureQueueExt.Create(new FakeReloadingManager(configuration.GetConnectionString("default")), x));
            collection.AddSingleton <IPregeneratedOutputsQueueFactory, PregeneratedOutputsQueueFactory>();


            collection.AddSingleton <IAssetRepository>(new AssetRepository(AzureTableStorage <AssetEntity> .Create(new FakeReloadingManager(configuration.GetConnectionString("dicts")), "Dictionaries", log: null)));

            collection.AddSingleton <ISpentOutputRepository>(
                new SpentOutputRepository(new MongoStorage <OutputEntity>(mongoClient, "SpentOutputs")));
            collection.AddSingleton <IWalletAddressRepository>(
                new WalletAddressRepository(new MongoStorage <WalletAddressEntity>(mongoClient, "Wallets")));

            collection.AddSingleton <ISegwitPrivateWalletRepository>(
                new SegwitPrivateWalletRepository(new MongoStorage <SegwitPrivateWalletEntity>(mongoClient, "SegwitWallets")));

            collection.AddSingleton <IBroadcastedOutputRepository>(
                new BroadcastedOutputRepository(new MongoStorage <BroadcastedOutputEntity>(mongoClient, "BroadcastedOutputs")));

            collection.AddSingleton <IInternalSpentOutputRepository>(
                new InternalSpentOutputRepository(new MongoStorage <InternalSpentOutput>(mongoClient, "InternalSpentOutputs")));
            var network = (NetworkType)configuration.GetValue <int>("BitcoinConfig:Network");

            var rpcConnectionParams = new RpcConnectionParams(new BaseSettings()
            {
                NetworkType = network
            });

            collection.AddSingleton(rpcConnectionParams);

            collection.AddSingleton <Func <QBitNinjaClient> >(x =>
            {
                return(() => new QBitNinjaClient(configuration.GetValue <string>("BitcoinConfig:QBitNinjaBaseUrl"), rpcConnectionParams.Network));
            });
            collection.AddSingleton <IConfiguration>(configuration);
            collection.AddTransient <IQBitNinjaApiCaller, QBitNinjaApiCaller>();
            collection.AddTransient <IBitcoinOutputsService, BitcoinOutputsService>();
            return(collection.BuildServiceProvider());
        }
Пример #16
0
        private static void BindQueue(this ContainerBuilder ioc, IReloadingManager <DbSettings> settings)
        {
            ioc.RegisterInstance <Func <string, IQueueExt> >(queueName =>
            {
                switch (queueName)
                {
                case Constants.EmailNotifierQueue:
                    return(AzureQueueExt.Create(settings.ConnectionString(x => x.SharedConnString), queueName));

                default:
                    return(AzureQueueExt.Create(settings.ConnectionString(x => x.DataConnString), queueName));
                }
            });
            ioc.RegisterType <PregeneratedOutputsQueueFactory>().As <IPregeneratedOutputsQueueFactory>().SingleInstance();

            ioc.RegisterType <TransactionQueueWriter>().As <ITransactionQueueWriter>().SingleInstance();
            ioc.RegisterType <TransactionMonitoringWriter>().As <ITransactionMonitoringWriter>().SingleInstance();
            ioc.RegisterType <FeeReserveMonitoringWriter>().As <IFeeReserveMonitoringWriter>().SingleInstance();
            ioc.RegisterType <ReturnOutputsMessageWriter>().As <IReturnOutputsMessageWriter>().SingleInstance();
            ioc.RegisterType <SpendCommitmentMonitoringWriter>().As <ISpendCommitmentMonitoringWriter>().SingleInstance();
            ioc.RegisterType <PaidFeesTaskWriter>().As <IPaidFeesTaskWriter>().SingleInstance();
            ioc.RegisterType <CommitmentClosingTaskWriter>().As <ICommitmentClosingTaskWriter>().SingleInstance();
        }
 public IQueueReader Create(string connection, string queueName, TimeSpan queueTimeout)
 {
     return(new AzureQueueReader(AzureQueueExt.Create(_connectionPool.GetConnection(connection), queueName, queueTimeout)));
 }
        public static void BindAzureRepositories(this ContainerBuilder container, IReloadingManager <AppSettings> settings, ILog log)
        {
            container.RegisterInstance <IWalletCredentialsRepository>(
                new WalletCredentialsRepository(AzureTableStorage <WalletCredentialsEntity> .Create(settings.ConnectionString(n => n.ReferralLinksService.Db.ClientPersonalInfoConnString), "WalletCredentials", log)));

            container.RegisterInstance <IOffchainTransferRepository>(
                new OffchainTransferRepository(AzureTableStorage <OffchainTransferEntity> .Create(settings.ConnectionString(n => n.ReferralLinksService.Db.OffchainConnString), "OffchainTransfers", log)));

            container.RegisterInstance <IClientSettingsRepository>(
                new ClientSettingsRepository(AzureTableStorage <ClientSettingsEntity> .Create(settings.ConnectionString(n => n.ReferralLinksService.Db.ClientPersonalInfoConnString), "TraderSettings", log)));

            container.RegisterInstance <IOffchainEncryptedKeysRepository>(
                new OffchainEncryptedKeyRepository(
                    AzureTableStorage <OffchainEncryptedKeyEntity> .Create(settings.ConnectionString(x => x.ReferralLinksService.Db.OffchainConnString), "OffchainEncryptedKeys", log)));

            container.RegisterInstance <IOffchainRequestRepository>(
                new OffchainRequestRepository(
                    AzureTableStorage <OffchainRequestEntity> .Create(settings.ConnectionString(x => x.ReferralLinksService.Db.OffchainConnString), "OffchainRequests", log)));

            container.RegisterInstance <IReferralLinkRepository>(
                new ReferralLinkRepository(AzureTableStorage <ReferralLinkEntity> .Create(settings.ConnectionString(n => n.ReferralLinksService.Db.ReferralLinksConnString), "ReferralLinks", log)));

            container.RegisterInstance <IReferralLinkClaimsRepository>(
                new ReferralLinkClaimsRepository(AzureTableStorage <ReferralLinkClaimEntity> .Create(settings.ConnectionString(n => n.ReferralLinksService.Db.ReferralLinksConnString), "ReferralLinkClaims", log)));

            container.RegisterInstance <IOffchainFinalizeCommandProducer>(new OffchainFinalizeCommandProducer(AzureQueueExt.Create(settings.ConnectionString(x => x.ReferralLinksService.Db.BitCoinQueueConnectionString), "offchain-finalization")));
        }
Пример #19
0
        private void BindRepositories(ContainerBuilder builder)
        {
            builder.RegisterInstance <IPostponedCashInRepository>(
                new PostponedCashInRepository(
                    AzureTableStorage <PostponedCashInRecord> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.BitCoinQueueConnectionString), "PostponedBtcCashIns", _log)));

            builder.RegisterInstance <IConfirmedTransactionsRepository>(
                new ConfirmedTransactionsRepository(
                    AzureTableStorage <ConfirmedTransactionRecord> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.BitCoinQueueConnectionString), "ConfirmedTransactions", _log)));

            builder.RegisterInstance <IBitcoinCashinRepository>(
                new BitcoinCashinRepository(
                    AzureTableStorage <BitcoinCashinEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.BitCoinQueueConnectionString), "BitcoinCashin", _log)));

            builder.RegisterInstance <IBalanceChangeTransactionsRepository>(
                new BalanceChangeTransactionsRepository(
                    AzureTableStorage <BalanceChangeTransactionEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.BitCoinQueueConnectionString), "BalanceChangeTransactions", _log)));

            builder.RegisterInstance <ILastProcessedBlockRepository>(
                new LastProcessedBlockRepository(
                    AzureTableStorage <LastProcessedBlockEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.BitCoinQueueConnectionString), "LastProcessedBlocks", _log)));

            builder.RegisterInstance <IInternalOperationsRepository>(
                new InternalOperationsRepository(
                    AzureTableStorage <InternalOperationEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.BitCoinQueueConnectionString), "InternalOperations", _log)));

            builder.RegisterInstance <IWalletCredentialsRepository>(
                new WalletCredentialsRepository(
                    AzureTableStorage <WalletCredentialsEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.ClientPersonalInfoConnString), "WalletCredentials", _log)));

            builder.RegisterInstance <IBcnClientCredentialsRepository>(
                new BcnClientCredentialsRepository(
                    AzureTableStorage <BcnCredentialsRecordEntity> .Create(_settingsManager.ConnectionString(i => i.TxDetectorJob.Db.ClientPersonalInfoConnString),
                                                                           "BcnClientCredentials", _log)));

            builder.RegisterInstance <IAppGlobalSettingsRepositry>(
                new AppGlobalSettingsRepository(
                    AzureTableStorage <AppGlobalSettingsEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.ClientPersonalInfoConnString), "Setup", _log)));

            builder.RegisterInstance <IEmailCommandProducer>(
                new EmailCommandProducer(
                    AzureQueueExt.Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.ClientPersonalInfoConnString), "emailsqueue")));

            builder.RegisterInstance <IPaymentTransactionEventsLog>(
                new PaymentTransactionEventsLog(
                    AzureTableStorage <PaymentTransactionLogEventEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.LogsConnString), "PaymentsLog", _log)));

            builder.RegisterInstance <IPaymentTransactionsRepository>(
                new PaymentTransactionsRepository(
                    AzureTableStorage <PaymentTransactionEntity> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.ClientPersonalInfoConnString), "PaymentTransactions", _log),
                    AzureTableStorage <AzureMultiIndex> .Create(
                        _settingsManager.ConnectionString(i => i.TxDetectorJob.Db.ClientPersonalInfoConnString), "PaymentTransactions", _log)));
        }
 public void TestInit()
 {
     _testQueue = new AzureQueueExt(_azureStorageConnectionString, _queueName);
 }
Пример #21
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <ISmsCommandProducer>(y =>
                                                   new SmsCommandProducer(AzureQueueExt.Create(
                                                                              _smsNotificationsSettings.ConnectionString(x => x.AzureQueue.ConnectionString),
                                                                              _smsNotificationsSettings.CurrentValue.AzureQueue.QueueName)));

            builder.RegisterType <VerificationCodesFactory>().AsImplementedInterfaces().SingleInstance();
            builder.RegisterType <RandomValueGenerator>().AsImplementedInterfaces().SingleInstance();
            builder.RegisterType <DateTimeProvider>().AsImplementedInterfaces().SingleInstance();

            builder.Register(x =>
                             AzureTableStorage <SmsVerificationCodeEntity> .Create(_personalDataConnString,
                                                                                   TableNameSmsVerificationCodes, x.Resolve <ILogFactory>()
                                                                                   )).AsImplementedInterfaces().SingleInstance();
            builder.Register(x =>
                             AzureTableStorage <SmsVerificationPriorityCodeEntity> .Create(_personalDataConnString,
                                                                                           TableNameSmsVerificationPriorityCodes, x.Resolve <ILogFactory>())).AsImplementedInterfaces().SingleInstance();
            builder.RegisterType <SmsVerificationCodeRepository>().AsImplementedInterfaces().SingleInstance();

            builder.Register(x =>
                             AzureTableStorage <EmailVerificationCodeEntity> .Create(_personalDataConnString,
                                                                                     TableNameEmailVerificationCodes, x.Resolve <ILogFactory>())).AsImplementedInterfaces().SingleInstance();
            builder.Register(x =>
                             AzureTableStorage <EmailVerificationPriorityCodeEntity> .Create(_personalDataConnString,
                                                                                             TableNameEmailVerificationPriorityCodes, x.Resolve <ILogFactory>())).AsImplementedInterfaces().SingleInstance();
            builder.RegisterType <EmailVerificationCodeRepository>().AsImplementedInterfaces().SingleInstance();

            builder.Register <ICallTimeLimitsRepository>(y =>
                                                         new CallTimeLimitsRepository(
                                                             AzureTableStorage <ApiCallHistoryRecord> .Create(_logsConnString, TableNameApiCalls, y.Resolve <ILogFactory>())));

            if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("EncryptionKey")))
            {
                builder
                .Register(x =>
                {
                    var manager = new EncryptedStorageManager(AzureTableStorage <EncryptionInitModel> .Create(
                                                                  _google2faConnString,
                                                                  TableNameGoogle2Fa,
                                                                  x.Resolve <ILogFactory>()));

                    if (!manager.TrySetKey(Environment.GetEnvironmentVariable("EncryptionKey"), out string error))
                    {
                        var exception = new InvalidOperationException("EncryptionKey is not set");
                        x.Resolve <ILogFactory>().CreateLog(this).WriteFatalError("SetEncryptionKey", error, exception);
                        throw exception;
                    }

                    return(manager);
                })
                .As <EncryptedStorageManager>()
                .AutoActivate();

                builder
                .Register(
                    x => EncryptedTableStorageDecorator <Google2FaSecretEntity> .Create(
                        AzureTableStorage <Google2FaSecretEntity> .Create(
                            _google2faConnString,
                            TableNameGoogle2Fa,
                            x.Resolve <ILogFactory>()),
                        x.Resolve <EncryptedStorageManager>().Serializer))
                .As <INoSQLTableStorage <Google2FaSecretEntity> >()
                .SingleInstance();
            }
            else
            {
                builder
                .Register(
                    x => {
                    if (x.Resolve <IHostingEnvironment>().IsProduction())
                    {
                        throw new Exception("Need to set EncryptionKey in Production environment");
                    }

                    return(AzureTableStorage <Google2FaSecretEntity> .Create(
                               _google2faConnString,
                               TableNameGoogle2Fa,
                               x.Resolve <ILogFactory>()));
                })
                .As <INoSQLTableStorage <Google2FaSecretEntity> >()
                .AutoActivate()
                .SingleInstance();
            }

            builder
            .RegisterType <Google2FaRepository>()
            .As <IGoogle2FaRepository>()
            .SingleInstance();
        }
        public EmailRepository(IReloadingManager <string> connectionStringManager, ILog log)
        {
            _tableStorage = AzureTableStorage <EmailEntity> .Create(connectionStringManager, "Emails", log);

            _queueExt = AzureQueueExt.Create(connectionStringManager, Constants.EmailQueue);
        }
 private void BindQueue(ContainerBuilder builder)
 {
     builder.RegisterInstance(new PaidFeeQueueWriter(
                                  AzureQueueExt.Create(_settings.ConnectionString(x => x.AffiliateService.Db.AzureConnString),
                                                       Constants.PaidFeeQueueName))).As <IPaidFeeQueueWriter>();
 }
Пример #24
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc()
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
            });

            services.AddSwaggerGen(options =>
            {
                options.DefaultLykkeConfiguration("v1", "SlackNotifications Job API");
            });

            var builder         = new ContainerBuilder();
            var settingsManager = Configuration.LoadSettings <AppSettings>();

            Log = CreateLogWithSlack(services, settingsManager);
            builder.RegisterInstance(Log).As <ILog>().SingleInstance();

            var settings = settingsManager.CurrentValue;

            builder.RegisterInstance(settings.SlackNotificationsJobSettings).SingleInstance();
            builder.RegisterType <SlackNotifcationsConsumer>();

            if (!string.IsNullOrEmpty(settings.SlackNotificationsJobSettings.ForwardMonitorMessagesQueueConnString))
            {
                builder.RegisterInstance <IMsgForwarder>(new MsgForwarder(AzureQueueExt.Create(
                                                                              settingsManager.ConnectionString(x => x.SlackNotificationsJobSettings.ForwardMonitorMessagesQueueConnString),
                                                                              "slack-notifications-monitor"))).SingleInstance();
            }
            else
            {
                builder.RegisterInstance <IMsgForwarder>(new MsgForwarderStub()).SingleInstance();
            }

            builder.RegisterType <NotificationFilter>().As <INotificationFilter>().SingleInstance();
            builder
            .RegisterType <SrvSlackNotifications>()
            .WithParameter(TypedParameter.From(settings.SlackIntegration))
            .WithParameter(TypedParameter.From(settings))
            .As <ISlackNotificationSender>();
            builder
            .Register(c => MessagesRepository.Create(settingsManager.Nested(s => s.SlackNotificationsJobSettings.FullMessagesConnString)))
            .As <IMessagesRepository>();

            builder.AddTriggers(pool =>
            {
                pool.AddDefaultConnection(settingsManager.ConnectionString(x => x.SlackNotificationsJobSettings.SharedStorageConnString));
            });

            builder.RegisterType <UnmuteHandler>()
            .As <IStartable>()
            .AutoActivate()
            .SingleInstance();

            builder.Populate(services);

            ApplicationContainer = builder.Build();

            var serviceProvider = new AutofacServiceProvider(ApplicationContainer);

            _triggerHost = new TriggerHost(serviceProvider);
            _triggerHost.ProvideAssembly(typeof(SlackNotifcationsConsumer).Assembly);

            return(serviceProvider);
        }
 public IQueueExt Build(string queueName = "default-queue-name")
 {
     return(AzureQueueExt.Create(_settings.ConnectionString(x => x.Db.DataConnString), Constants.StoragePrefix + queueName));
 }
        private void BindRepositories(ContainerBuilder builder)
        {
            builder.Register <ITransactionsRepository>(ctx =>
                                                       new TransactionsRepository(
                                                           AzureTableStorage <BitCoinTransactionEntity> .Create(
                                                               _dbSettingsManager.ConnectionString(x => x.BitCoinQueueConnectionString),
                                                               "BitCoinTransactions", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IWalletCredentialsRepository>(ctx =>
                                                            new WalletCredentialsRepository(
                                                                AzureTableStorage <WalletCredentialsEntity> .Create(
                                                                    _dbSettingsManager.ConnectionString(x => x.ClientPersonalInfoConnString),
                                                                    "WalletCredentials", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IBcnClientCredentialsRepository>(ctx =>
                                                               new BcnClientCredentialsRepository(
                                                                   AzureTableStorage <BcnCredentialsRecordEntity> .Create(
                                                                       _dbSettingsManager.ConnectionString(x => x.ClientPersonalInfoConnString),
                                                                       "BcnClientCredentials", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IClientCacheRepository>(ctx =>
                                                      new ClientCacheRepository(
                                                          AzureTableStorage <ClientCacheEntity> .Create(
                                                              _dbSettingsManager.ConnectionString(x => x.ClientPersonalInfoConnString),
                                                              "ClientCache", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IEthereumTransactionRequestRepository>(ctx =>
                                                                     new EthereumTransactionRequestRepository(
                                                                         AzureTableStorage <EthereumTransactionReqEntity> .Create(
                                                                             _dbSettingsManager.ConnectionString(x => x.BitCoinQueueConnectionString),
                                                                             "EthereumTxRequest", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IBitcoinCashinRepository>(ctx =>
                                                        new BitcoinCashinRepository(
                                                            AzureTableStorage <BitcoinCashinEntity> .Create(
                                                                _dbSettingsManager.ConnectionString(x => x.BitCoinQueueConnectionString),
                                                                "BitcoinCashin", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IMarketOrdersRepository>(ctx =>
                                                       new MarketOrdersRepository(AzureTableStorage <MarketOrderEntity> .Create(
                                                                                      _dbSettingsManager.ConnectionString(x => x.HMarketOrdersConnString),
                                                                                      "MarketOrders", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <ILimitOrdersRepository>(ctx =>
                                                      new LimitOrdersRepository(AzureTableStorage <LimitOrderEntity> .Create(
                                                                                    _dbSettingsManager.ConnectionString(x => x.HMarketOrdersConnString),
                                                                                    "LimitOrders", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.RegisterInstance <IEmailCommandProducer>(
                new EmailCommandProducer(AzureQueueExt.Create(
                                             _dbSettingsManager.ConnectionString(x => x.ClientPersonalInfoConnString),
                                             "emailsqueue")));

            builder.Register <IOffchainRequestRepository>(ctx =>
                                                          new OffchainRequestRepository(
                                                              AzureTableStorage <OffchainRequestEntity> .Create(
                                                                  _dbSettingsManager.ConnectionString(x => x.OffchainConnString),
                                                                  "OffchainRequests", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IOffchainTransferRepository>(ctx =>
                                                           new OffchainTransferRepository(
                                                               AzureTableStorage <OffchainTransferEntity> .Create(
                                                                   _dbSettingsManager.ConnectionString(x => x.OffchainConnString),
                                                                   "OffchainTransfers", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IPaymentTransactionsRepository>(ctx =>
                                                              new PaymentTransactionsRepository(
                                                                  AzureTableStorage <PaymentTransactionEntity> .Create(
                                                                      _dbSettingsManager.ConnectionString(x => x.ClientPersonalInfoConnString),
                                                                      "PaymentTransactions", ctx.Resolve <ILogFactory>()),
                                                                  AzureTableStorage <AzureMultiIndex> .Create(
                                                                      _dbSettingsManager.ConnectionString(x => x.ClientPersonalInfoConnString),
                                                                      "PaymentTransactions", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.RegisterInstance(
                new BitcoinTransactionContextBlobStorage(AzureBlobStorage.Create(
                                                             _dbSettingsManager.ConnectionString(x => x.BitCoinQueueConnectionString))))
            .As <IBitcoinTransactionContextBlobStorage>();

            builder.Register <IEthererumPendingActionsRepository>(ctx =>
                                                                  new EthererumPendingActionsRepository(
                                                                      AzureTableStorage <EthererumPendingActionEntity> .Create(
                                                                          _dbSettingsManager.ConnectionString(x => x.BitCoinQueueConnectionString),
                                                                          "EthererumPendingActions", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register <IClientCommentsRepository>(ctx =>
                                                         new ClientCommentsRepository(AzureTableStorage <ClientCommentEntity> .Create(
                                                                                          _dbSettingsManager.ConnectionString(x => x.ClientPersonalInfoConnString),
                                                                                          "ClientComments", ctx.Resolve <ILogFactory>())))
            .SingleInstance();

            builder.Register(ctx =>
                             EthereumCashinAggregateRepository.Create(
                                 _dbSettingsManager.ConnectionString(x => x.BitCoinQueueConnectionString),
                                 ctx.Resolve <ILogFactory>()))
            .As <IEthereumCashinAggregateRepository>()
            .SingleInstance();
        }