Add setup links for LN URL integration (#3046)

This commit is contained in:
Umar Bolatov
2021-11-10 01:50:39 -08:00
committed by GitHub
parent d5b25dde3d
commit 193b209c92
5 changed files with 77 additions and 8 deletions

View File

@@ -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"));

View File

@@ -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;
}
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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;