From a7ef9c7c27561e1f991e21c38be20b220f639e8b Mon Sep 17 00:00:00 2001 From: Samuel Adams Date: Fri, 12 Nov 2021 20:09:32 -0500 Subject: [PATCH] Fix payout/pull payment crash when no payment method bug Fixes #3084. --- ...torePullPaymentsController.PullPayments.cs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/BTCPayServer/Controllers/StorePullPaymentsController.PullPayments.cs b/BTCPayServer/Controllers/StorePullPaymentsController.PullPayments.cs index b76843f3e..70679217a 100644 --- a/BTCPayServer/Controllers/StorePullPaymentsController.PullPayments.cs +++ b/BTCPayServer/Controllers/StorePullPaymentsController.PullPayments.cs @@ -65,14 +65,23 @@ namespace BTCPayServer.Controllers if (CurrentStore is null) return NotFound(); - var paymentMethodOptions = await _payoutHandlers.GetSupportedPaymentMethods(CurrentStore); + var paymentMethods = await _payoutHandlers.GetSupportedPaymentMethods(CurrentStore); + if (!paymentMethods.Any()) + { + TempData.SetStatusMessageModel(new StatusMessageModel + { + Message = "You must enable at least one payment method before creating a pull payment.", + Severity = StatusMessageModel.StatusSeverity.Error + }); + return RedirectToAction("PaymentMethods", "Stores", new { storeId }); + } return View(new NewPullPaymentModel { Name = "", Currency = "BTC", CustomCSSLink = "", EmbeddedCSS = "", - PaymentMethodItems = paymentMethodOptions.Select(id => new SelectListItem(id.ToPrettyString(), id.ToString(), true)) + PaymentMethodItems = paymentMethods.Select(id => new SelectListItem(id.ToPrettyString(), id.ToString(), true)) }); } @@ -406,6 +415,16 @@ namespace BTCPayServer.Controllers int skip = 0, int count = 50) { var paymentMethods = await _payoutHandlers.GetSupportedPaymentMethods(HttpContext.GetStoreData()); + if (!paymentMethods.Any()) + { + TempData.SetStatusMessageModel(new StatusMessageModel + { + Message = "You must enable at least one payment method before creating a payout.", + Severity = StatusMessageModel.StatusSeverity.Error + }); + return RedirectToAction("PaymentMethods", "Stores", new { storeId }); + } + var vm = this.ParseListQuery(new PayoutsModel { PaymentMethods = paymentMethods,