mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-19 06:54: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
|
//ln address tests
|
||||||
var store = s.CreateNewStore();
|
var store = s.CreateNewStore();
|
||||||
s.GoToStore(s.StoreId, StoreNavPages.Integrations);
|
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"))
|
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.GoToStore(s.StoreId, StoreNavPages.PaymentMethods);
|
||||||
s.AddLightningNode("BTC", LightningConnectionType.LndREST, false);
|
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.FindElement(By.Id($"Modify-LightningBTC")).Click();
|
||||||
s.Driver.SetCheckbox(By.Id("LNURLEnabled"), true);
|
s.Driver.SetCheckbox(By.Id("LNURLEnabled"), true);
|
||||||
s.Driver.WaitForAndClick(By.Id("save"));
|
s.Driver.WaitForAndClick(By.Id("save"));
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using BTCPayServer.Payments;
|
using BTCPayServer.Payments;
|
||||||
using BTCPayServer.Services.Rates;
|
using BTCPayServer.Services.Rates;
|
||||||
|
using NBitcoin;
|
||||||
using NBXplorer;
|
using NBXplorer;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using BTCPayServer.Payments.Lightning;
|
||||||
|
|
||||||
namespace BTCPayServer.Data
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
@@ -146,5 +148,49 @@ namespace BTCPayServer.Data
|
|||||||
storeData.DerivationStrategies = strategies.ToString();
|
storeData.DerivationStrategies = strategies.ToString();
|
||||||
#pragma warning restore CS0618
|
#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
|
@inject BTCPayNetworkProvider BTCPayNetworkProvider
|
||||||
@{
|
@{
|
||||||
var store = Context.GetStoreData();
|
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">
|
<li class="list-group-item bg-tile" id="lightning-address-option">
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
@@ -23,10 +28,21 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<span class="d-flex align-items-center text-danger">
|
if (!isLightningEnabled)
|
||||||
<span class="me-2 btcpay-status btcpay-status--disabled"></span>
|
{
|
||||||
You need LNURL configured first.
|
<a asp-action="PaymentMethods" asp-controller="Stores" asp-route-storeId="@store.Id" class="btn btn-link p-0">
|
||||||
</span>
|
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>
|
||||||
|
<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>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</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">
|
<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"/>
|
<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>
|
<label asp-for="LNURLEnabled" class="form-label mb-0 me-1"></label>
|
||||||
|
|||||||
@@ -10202,6 +10202,7 @@ input[type=number].hide-number-spin {
|
|||||||
}
|
}
|
||||||
.btcpay-status {
|
.btcpay-status {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
|
flex-shrink: 0;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
border: .25em solid transparent;
|
border: .25em solid transparent;
|
||||||
|
|||||||
Reference in New Issue
Block a user