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

View File

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

View File

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

View File

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

View File

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