public UIInvoiceController(
     InvoiceRepository invoiceRepository,
     CurrencyNameTable currencyNameTable,
     UserManager <ApplicationUser> userManager,
     RateFetcher rateProvider,
     StoreRepository storeRepository,
     EventAggregator eventAggregator,
     ContentSecurityPolicies csp,
     BTCPayNetworkProvider networkProvider,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     ApplicationDbContextFactory dbContextFactory,
     PullPaymentHostedService paymentHostedService,
     WebhookSender webhookNotificationManager,
     LanguageService languageService,
     ExplorerClientProvider explorerClients,
     UIWalletsController walletsController)
 {
     _CurrencyNameTable = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
     _StoreRepository   = storeRepository ?? throw new ArgumentNullException(nameof(storeRepository));
     _InvoiceRepository = invoiceRepository ?? throw new ArgumentNullException(nameof(invoiceRepository));
     _RateProvider      = rateProvider ?? throw new ArgumentNullException(nameof(rateProvider));
     _UserManager       = userManager;
     _EventAggregator   = eventAggregator;
     _NetworkProvider   = networkProvider;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _dbContextFactory          = dbContextFactory;
     _paymentHostedService      = paymentHostedService;
     WebhookNotificationManager = webhookNotificationManager;
     _languageService           = languageService;
     this._ExplorerClients      = explorerClients;
     _walletsController         = walletsController;
 }
Пример #2
0
        private async Task SendToWebhookAsync(IMapping mapping, RequestMessage request, ResponseMessage response)
        {
            var httpClientForWebhook = HttpClientBuilder.Build(mapping.Settings.WebhookSettings ?? new WebhookSettings());
            var webhookSender        = new WebhookSender(mapping.Settings);

            try
            {
                await webhookSender.SendAsync(httpClientForWebhook, mapping.Webhook.Request, request, response).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                _options.Logger.Error($"Sending message to Webhook Mapping '{mapping.Guid}' failed. Exception: {ex}");
            }
        }
Пример #3
0
 public UIStoresController(
     IServiceProvider serviceProvider,
     BTCPayServerOptions btcpayServerOptions,
     BTCPayServerEnvironment btcpayEnv,
     StoreRepository repo,
     TokenRepository tokenRepo,
     UserManager <ApplicationUser> userManager,
     BitpayAccessTokenController tokenController,
     BTCPayWalletProvider walletProvider,
     BTCPayNetworkProvider networkProvider,
     RateFetcher rateFactory,
     ExplorerClientProvider explorerProvider,
     LanguageService langService,
     PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
     SettingsRepository settingsRepository,
     IAuthorizationService authorizationService,
     EventAggregator eventAggregator,
     AppService appService,
     WebhookSender webhookNotificationManager,
     IDataProtectionProvider dataProtector,
     NBXplorerDashboard Dashboard,
     IOptions <ExternalServicesOptions> externalServiceOptions)
 {
     _RateFactory     = rateFactory;
     _Repo            = repo;
     _TokenRepository = tokenRepo;
     _UserManager     = userManager;
     _LangService     = langService;
     _TokenController = tokenController;
     _WalletProvider  = walletProvider;
     _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
     _settingsRepository             = settingsRepository;
     _authorizationService           = authorizationService;
     _appService   = appService;
     DataProtector = dataProtector.CreateProtector("ConfigProtector");
     WebhookNotificationManager = webhookNotificationManager;
     _EventAggregator           = eventAggregator;
     _NetworkProvider           = networkProvider;
     _ExplorerProvider          = explorerProvider;
     _ServiceProvider           = serviceProvider;
     _BtcpayServerOptions       = btcpayServerOptions;
     _BTCPayEnv = btcpayEnv;
     _Dashboard = Dashboard;
     _externalServiceOptions = externalServiceOptions;
 }
    protected override async Task ProcessEvent(object evt, CancellationToken cancellationToken)
    {
        if (evt is InvoiceEvent invoiceEvent)
        {
            var type = WebhookSender.GetWebhookEvent(invoiceEvent);
            if (type is null)
            {
                return;
            }

            var store = await _storeRepository.FindStore(invoiceEvent.Invoice.StoreId);


            var blob = store.GetStoreBlob();
            if (blob.EmailRules?.Any() is true)
            {
                var actionableRules = blob.EmailRules.Where(rule => rule.Trigger == type.Type).ToList();
                if (actionableRules.Any())
                {
                    var sender = await _emailSenderFactory.GetEmailSender(invoiceEvent.Invoice.StoreId);

                    foreach (UIStoresController.StoreEmailRule actionableRule in actionableRules)
                    {
                        var recipients = (actionableRule.To?.Split(",", StringSplitOptions.RemoveEmptyEntries) ?? Array.Empty <string>())
                                         .Select(o =>
                        {
                            MailboxAddressValidator.TryParse(o, out var mb);
                            return(mb);
                        })
                                         .Where(o => o != null)
                                         .ToList();
                        if (actionableRule.CustomerEmail &&
                            MailboxAddressValidator.TryParse(invoiceEvent.Invoice.Metadata.BuyerEmail, out var bmb))
                        {
                            recipients.Add(bmb);
                        }
                        var i = GreenfieldInvoiceController.ToModel(invoiceEvent.Invoice, _linkGenerator, null);
                        sender.SendEmail(recipients.ToArray(), null, null, Interpolator(actionableRule.Subject, i),
                                         Interpolator(actionableRule.Body, i));
                    }
                }
            }
        }
    }
        /// <summary>
        /// Notifies an exception through the configured webhooks
        /// </summary>
        /// <param name="action">The provisioning action</param>
        /// <param name="ex">The exception that occurred</param>
        private static void ProcessWebhooksExceptionNotification(ProvisioningActionModel action, Exception ex)
        {
            if (action.Webhooks != null && action.Webhooks.Count > 0)
            {
                foreach (var wh in action.Webhooks)
                {
                    var provisioningWebhook = new OfficeDevPnP.Core.Framework.Provisioning.Model.ProvisioningWebhook
                    {
                        Kind       = ProvisioningTemplateWebhookKind.ExceptionOccurred,
                        Url        = wh.Url,
                        Method     = (ProvisioningTemplateWebhookMethod)Enum.Parse(typeof(ProvisioningTemplateWebhookMethod), wh.Method.ToString(), true),
                        BodyFormat = ProvisioningTemplateWebhookBodyFormat.Json, // force JSON format
                        Async      = false,                                      // force sync webhooks
                        Parameters = wh.Parameters,
                    };

                    var httpClient = new HttpClient();

                    WebhookSender.InvokeWebhook(provisioningWebhook, httpClient,
                                                ProvisioningTemplateWebhookKind.ExceptionOccurred,
                                                exception: ex);
                }
            }
        }
 public GreenfieldStoreWebhooksController(StoreRepository storeRepository, WebhookSender webhookSender)
 {
     StoreRepository = storeRepository;
     WebhookSender   = webhookSender;
 }