Lightning Address: Fix availability check and refactor option view (#4584)

As @petzsch rightfully assumed in #4578, the check took only the last available LN payment method into account, which in this case was LN on LTC. We now pass the crypto code as well and I refactored the checks as well as the option view.

Fixes #4578.
This commit is contained in:
d11n
2023-02-02 01:42:41 +01:00
committed by GitHub
parent ca1dac4cc3
commit e4f256d5cd
3 changed files with 35 additions and 71 deletions

View File

@@ -148,48 +148,24 @@ namespace BTCPayServer.Data
#pragma warning restore CS0618
}
public static bool IsLightningEnabled(this StoreData storeData, BTCPayNetworkProvider networks)
public static bool IsLightningEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode)
{
var paymentMethods = storeData.GetSupportedPaymentMethods(networks);
var lightningByCryptoCode = paymentMethods
.OfType<LightningSupportedPaymentMethod>()
.Where(method => method.PaymentId.PaymentType == LightningPaymentType.Instance)
.ToDictionary(c => c.CryptoCode.ToUpperInvariant());
var excludeFilters = storeData.GetStoreBlob().GetExcludedPaymentMethods();
var isLightningEnabled = false;
foreach (var paymentMethod in paymentMethods)
{
var paymentMethodId = paymentMethod.PaymentId;
switch (paymentMethodId.PaymentType)
{
// LNURLPayPaymentType is a subclass of LightningPaymentType, skip it
case LNURLPayPaymentType lnurlPayPaymentType:
break;
case LightningPaymentType _:
var lightning = lightningByCryptoCode.TryGet(paymentMethodId.CryptoCode);
isLightningEnabled = !excludeFilters.Match(paymentMethodId) && lightning != null;
break;
}
}
return isLightningEnabled;
return IsPaymentTypeEnabled(storeData, networks, cryptoCode, LightningPaymentType.Instance);
}
public static bool IsLNUrlEnabled(this StoreData storeData, BTCPayNetworkProvider networks)
public static bool IsLNUrlEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode)
{
return IsPaymentTypeEnabled(storeData, networks, cryptoCode, LNURLPayPaymentType.Instance);
}
private static bool IsPaymentTypeEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode, PaymentType paymentType)
{
var paymentMethods = storeData.GetSupportedPaymentMethods(networks);
var excludeFilters = storeData.GetStoreBlob().GetExcludedPaymentMethods();
var isLNUrlEnabled = false;
foreach (var paymentMethod in paymentMethods)
{
var paymentMethodId = paymentMethod.PaymentId;
if (paymentMethodId.PaymentType is LNURLPayPaymentType)
{
isLNUrlEnabled = !excludeFilters.Match(paymentMethodId);
}
}
return isLNUrlEnabled;
return paymentMethods.Any(method =>
method.PaymentId.CryptoCode == cryptoCode &&
method.PaymentId.PaymentType == paymentType &&
!excludeFilters.Match(method.PaymentId));
}
}
}