mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-19 15:04:19 +01:00
Add setup links for LN URL integration (#3046)
This commit is contained in:
@@ -1508,13 +1508,19 @@ namespace BTCPayServer.Tests
|
||||
//ln address tests
|
||||
var store = s.CreateNewStore();
|
||||
s.GoToStore(s.StoreId, StoreNavPages.Integrations);
|
||||
//ensure ln address is not available as lnurl is not configured
|
||||
//ensure ln address is not available as Lightning is not enable
|
||||
s.Driver.FindElement(By.Id("lightning-address-option"))
|
||||
.FindElement(By.ClassName("btcpay-status--disabled"));
|
||||
.FindElement(By.LinkText("You need to setup Lightning first"));
|
||||
|
||||
s.GoToStore(s.StoreId, StoreNavPages.PaymentMethods);
|
||||
s.AddLightningNode("BTC", LightningConnectionType.LndREST, false);
|
||||
|
||||
s.GoToStore(s.StoreId, StoreNavPages.Integrations);
|
||||
//ensure ln address is not available as lnurl is not configured
|
||||
s.Driver.FindElement(By.Id("lightning-address-option"))
|
||||
.FindElement(By.LinkText("You need LNURL configured first"));
|
||||
|
||||
s.GoToStore(s.StoreId, StoreNavPages.PaymentMethods);
|
||||
s.Driver.FindElement(By.Id($"Modify-LightningBTC")).Click();
|
||||
s.Driver.SetCheckbox(By.Id("LNURLEnabled"), true);
|
||||
s.Driver.WaitForAndClick(By.Id("save"));
|
||||
|
||||
@@ -5,8 +5,10 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using BTCPayServer.Payments;
|
||||
using BTCPayServer.Services.Rates;
|
||||
using NBitcoin;
|
||||
using NBXplorer;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using BTCPayServer.Payments.Lightning;
|
||||
|
||||
namespace BTCPayServer.Data
|
||||
{
|
||||
@@ -146,5 +148,49 @@ namespace BTCPayServer.Data
|
||||
storeData.DerivationStrategies = strategies.ToString();
|
||||
#pragma warning restore CS0618
|
||||
}
|
||||
|
||||
public static bool IsLightningEnabled(this StoreData storeData, BTCPayNetworkProvider networks)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
public static bool IsLNUrlEnabled(this StoreData storeData, BTCPayNetworkProvider networks)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,12 @@
|
||||
@inject BTCPayNetworkProvider BTCPayNetworkProvider
|
||||
@{
|
||||
var store = Context.GetStoreData();
|
||||
var possible = store.GetSupportedPaymentMethods(BTCPayNetworkProvider).OfType<LNURLPaySupportedPaymentMethod>().Any(type => type.CryptoCode == "BTC");
|
||||
var isLightningEnabled = store.IsLightningEnabled(BTCPayNetworkProvider);
|
||||
var isLNUrlEnabled = store.IsLNUrlEnabled(BTCPayNetworkProvider);
|
||||
var possible =
|
||||
isLightningEnabled &&
|
||||
isLNUrlEnabled &&
|
||||
store.GetSupportedPaymentMethods(BTCPayNetworkProvider).OfType<LNURLPaySupportedPaymentMethod>().Any(type => type.CryptoCode == "BTC");
|
||||
}
|
||||
<li class="list-group-item bg-tile" id="lightning-address-option">
|
||||
<div class="d-flex align-items-center">
|
||||
@@ -22,12 +27,23 @@
|
||||
</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!isLightningEnabled)
|
||||
{
|
||||
<a asp-action="PaymentMethods" asp-controller="Stores" asp-route-storeId="@store.Id" class="btn btn-link p-0">
|
||||
You need to setup Lightning first
|
||||
</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="d-flex align-items-center text-danger">
|
||||
<span class="me-2 btcpay-status btcpay-status--disabled"></span>
|
||||
You need LNURL configured first.
|
||||
<a asp-action="LightningSettings" asp-route-cryptoCode="BTC" asp-route-storeId="@store.Id" asp-fragment="ln-url">
|
||||
You need LNURL configured first
|
||||
</a>
|
||||
</span>
|
||||
}
|
||||
}
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h4 class="mt-5 mb-3">LNURL</h4>
|
||||
<h4 class="mt-5 mb-3" id="ln-url">LNURL</h4>
|
||||
<div class="d-flex align-items-center">
|
||||
<input asp-for="LNURLEnabled" type="checkbox" class="btcpay-toggle me-2" data-bs-toggle="collapse" data-bs-target="#LNURLSettings" aria-expanded="@Model.LNURLEnabled" aria-controls="LNURLSettings"/>
|
||||
<label asp-for="LNURLEnabled" class="form-label mb-0 me-1"></label>
|
||||
|
||||
@@ -10202,6 +10202,7 @@ input[type=number].hide-number-spin {
|
||||
}
|
||||
.btcpay-status {
|
||||
display: inline-flex;
|
||||
flex-shrink: 0;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: .25em solid transparent;
|
||||
|
||||
Reference in New Issue
Block a user