Show better error message for invalid destination in PullPayments (#5969)

This commit is contained in:
Nicolas Dorier
2024-05-06 04:03:25 +09:00
committed by GitHub
parent b4cd74056e
commit 7de4e8b001

View File

@@ -229,6 +229,7 @@ namespace BTCPayServer.Controllers
PayoutMethodId payoutMethodId = null; PayoutMethodId payoutMethodId = null;
IClaimDestination destination = null; IClaimDestination destination = null;
IPayoutHandler payoutHandler = null; IPayoutHandler payoutHandler = null;
string error = null;
if (string.IsNullOrEmpty(vm.SelectedPayoutMethod)) if (string.IsNullOrEmpty(vm.SelectedPayoutMethod))
{ {
foreach (var pmId in supported) foreach (var pmId in supported)
@@ -237,6 +238,7 @@ namespace BTCPayServer.Controllers
(IClaimDestination dst, string err) = handler == null (IClaimDestination dst, string err) = handler == null
? (null, "No payment handler found for this payment method") ? (null, "No payment handler found for this payment method")
: await handler.ParseAndValidateClaimDestination(vm.Destination, ppBlob, cancellationToken); : await handler.ParseAndValidateClaimDestination(vm.Destination, ppBlob, cancellationToken);
error = err;
if (dst is not null && err is null) if (dst is not null && err is null)
{ {
payoutMethodId = pmId; payoutMethodId = pmId;
@@ -250,12 +252,15 @@ namespace BTCPayServer.Controllers
{ {
payoutMethodId = supported.FirstOrDefault(id => vm.SelectedPayoutMethod == id.ToString()); payoutMethodId = supported.FirstOrDefault(id => vm.SelectedPayoutMethod == id.ToString());
payoutHandler = payoutMethodId is null ? null : _payoutHandlers.TryGet(payoutMethodId); payoutHandler = payoutMethodId is null ? null : _payoutHandlers.TryGet(payoutMethodId);
destination = payoutHandler is null ? null : (await payoutHandler.ParseAndValidateClaimDestination(vm.Destination, ppBlob, cancellationToken)).destination; if (payoutHandler is not null)
{
(destination, error) = await payoutHandler.ParseAndValidateClaimDestination(vm.Destination, ppBlob, cancellationToken);
}
} }
if (destination is null) if (destination is null)
{ {
ModelState.AddModelError(nameof(vm.Destination), "Invalid destination or payment method"); ModelState.AddModelError(nameof(vm.Destination), error ?? "Invalid destination or payment method");
return await ViewPullPayment(pullPaymentId); return await ViewPullPayment(pullPaymentId);
} }
var amtError = ClaimRequest.IsPayoutAmountOk(destination, vm.ClaimedAmount == 0 ? null : vm.ClaimedAmount, payoutHandler.Currency, ppBlob.Currency); var amtError = ClaimRequest.IsPayoutAmountOk(destination, vm.ClaimedAmount == 0 ? null : vm.ClaimedAmount, payoutHandler.Currency, ppBlob.Currency);