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; }
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}"); } }
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; }