From 55565f1718f47716f5f7bf24b8410158c29931ef Mon Sep 17 00:00:00 2001 From: Kukks Date: Tue, 21 Mar 2023 13:48:25 +0100 Subject: [PATCH 1/2] Do not provide lnurl method if ln node is dead fixes #3541 --- .../Payments/LNURLPay/LNURLPayPaymentHandler.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs b/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs index 9af7def36..7ce73aa7d 100644 --- a/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs +++ b/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs @@ -1,6 +1,8 @@ #nullable enable +using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using BTCPayServer.Client.Models; using BTCPayServer.Configuration; @@ -20,16 +22,19 @@ namespace BTCPayServer.Payments.Lightning private readonly BTCPayNetworkProvider _networkProvider; private readonly DisplayFormatter _displayFormatter; private readonly LightningLikePaymentHandler _lightningLikePaymentHandler; + private readonly LightningClientFactoryService _lightningClientFactoryService; public LNURLPayPaymentHandler( BTCPayNetworkProvider networkProvider, DisplayFormatter displayFormatter, IOptions options, - LightningLikePaymentHandler lightningLikePaymentHandler) + LightningLikePaymentHandler lightningLikePaymentHandler, + LightningClientFactoryService lightningClientFactoryService) { _networkProvider = networkProvider; _displayFormatter = displayFormatter; _lightningLikePaymentHandler = lightningLikePaymentHandler; + _lightningClientFactoryService = lightningClientFactoryService; Options = options; } @@ -62,6 +67,16 @@ namespace BTCPayServer.Payments.Lightning { throw new PaymentMethodUnavailableException("LNURL requires a lightning node to be configured for the store."); } + using var cts = new CancellationTokenSource(5000); + try + { + var client = lnSupported.CreateLightningClient(network, Options.Value, _lightningClientFactoryService); + await client.GetInfo(cts.Token); + } + catch (OperationCanceledException) when (cts.IsCancellationRequested) + { + throw new PaymentMethodUnavailableException("The lightning node did not reply in a timely manner"); + } return new LNURLPayPaymentMethodDetails() { From ad5752f09b3bcafee66aac6665ba3dce36532a95 Mon Sep 17 00:00:00 2001 From: Dennis Reimann Date: Tue, 21 Mar 2023 14:22:10 +0100 Subject: [PATCH 2/2] Reuse LightningTimeout constant --- BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs | 2 +- .../Payments/Lightning/LightningLikePaymentHandler.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs b/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs index 7ce73aa7d..a655d07de 100644 --- a/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs +++ b/BTCPayServer/Payments/LNURLPay/LNURLPayPaymentHandler.cs @@ -67,7 +67,7 @@ namespace BTCPayServer.Payments.Lightning { throw new PaymentMethodUnavailableException("LNURL requires a lightning node to be configured for the store."); } - using var cts = new CancellationTokenSource(5000); + using var cts = new CancellationTokenSource(LightningLikePaymentHandler.LightningTimeout); try { var client = lnSupported.CreateLightningClient(network, Options.Value, _lightningClientFactoryService); diff --git a/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs b/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs index a33b8c9f1..544b76313 100644 --- a/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs +++ b/BTCPayServer/Payments/Lightning/LightningLikePaymentHandler.cs @@ -21,7 +21,7 @@ namespace BTCPayServer.Payments.Lightning { public class LightningLikePaymentHandler : PaymentMethodHandlerBase { - public static int LIGHTNING_TIMEOUT = 5000; + public static readonly int LightningTimeout = 5000; readonly NBXplorerDashboard _Dashboard; private readonly LightningClientFactoryService _lightningClientFactory; private readonly BTCPayNetworkProvider _networkProvider; @@ -93,7 +93,7 @@ namespace BTCPayServer.Payments.Lightning description = description.Replace("{StoreName}", store.StoreName ?? "", StringComparison.OrdinalIgnoreCase) .Replace("{ItemDescription}", invoice.Metadata.ItemDesc ?? "", StringComparison.OrdinalIgnoreCase) .Replace("{OrderId}", invoice.Metadata.OrderId ?? "", StringComparison.OrdinalIgnoreCase); - using (var cts = new CancellationTokenSource(LIGHTNING_TIMEOUT)) + using (var cts = new CancellationTokenSource(LightningTimeout)) { try { @@ -129,7 +129,7 @@ namespace BTCPayServer.Payments.Lightning try { - using var cts = new CancellationTokenSource(LIGHTNING_TIMEOUT); + using var cts = new CancellationTokenSource(LightningTimeout); var client = CreateLightningClient(supportedPaymentMethod, network); LightningNodeInformation info; try