mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 14:34:23 +01:00
Fix null reference exception when going to LN node settings before it's been set-up (#3410)
* Fix null reference exception when going to LN node settings before it's been set-up * Fix-up remaining null reference errors * Update error message
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
#nullable enable
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@@ -102,16 +103,16 @@ namespace BTCPayServer.Controllers
|
|||||||
|
|
||||||
vm.CanUseInternalNode = await CanUseInternalLightning();
|
vm.CanUseInternalNode = await CanUseInternalLightning();
|
||||||
|
|
||||||
var network = vm.CryptoCode == null ? null : _ExplorerProvider.GetNetwork(vm.CryptoCode);
|
if (vm.CryptoCode == null)
|
||||||
if (network == null)
|
|
||||||
{
|
{
|
||||||
ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network");
|
ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network");
|
||||||
return View(vm);
|
return View(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var network = _ExplorerProvider.GetNetwork(vm.CryptoCode);
|
||||||
var paymentMethodId = new PaymentMethodId(network.CryptoCode, PaymentTypes.LightningLike);
|
var paymentMethodId = new PaymentMethodId(network.CryptoCode, PaymentTypes.LightningLike);
|
||||||
|
|
||||||
LightningSupportedPaymentMethod paymentMethod = null;
|
LightningSupportedPaymentMethod? paymentMethod = null;
|
||||||
if (vm.LightningNodeType == LightningNodeType.Internal)
|
if (vm.LightningNodeType == LightningNodeType.Internal)
|
||||||
{
|
{
|
||||||
if (!await CanUseInternalLightning())
|
if (!await CanUseInternalLightning())
|
||||||
@@ -206,6 +207,13 @@ namespace BTCPayServer.Controllers
|
|||||||
var storeBlob = store.GetStoreBlob();
|
var storeBlob = store.GetStoreBlob();
|
||||||
var excludeFilters = storeBlob.GetExcludedPaymentMethods();
|
var excludeFilters = storeBlob.GetExcludedPaymentMethods();
|
||||||
var lightning = GetExistingLightningSupportedPaymentMethod(cryptoCode, store);
|
var lightning = GetExistingLightningSupportedPaymentMethod(cryptoCode, store);
|
||||||
|
if (lightning == null)
|
||||||
|
{
|
||||||
|
TempData[WellKnownTempData.ErrorMessage] = $"You need to connect to a Lightning node before adjusting its settings.";
|
||||||
|
|
||||||
|
return RedirectToAction(nameof(SetupLightningNode), new { storeId, cryptoCode });
|
||||||
|
}
|
||||||
|
|
||||||
var vm = new LightningSettingsViewModel
|
var vm = new LightningSettingsViewModel
|
||||||
{
|
{
|
||||||
CryptoCode = cryptoCode,
|
CryptoCode = cryptoCode,
|
||||||
@@ -218,8 +226,7 @@ namespace BTCPayServer.Controllers
|
|||||||
};
|
};
|
||||||
await SetExistingValues(store, vm);
|
await SetExistingValues(store, vm);
|
||||||
|
|
||||||
var lnSet = lightning != null;
|
if (lightning != null)
|
||||||
if (lnSet)
|
|
||||||
{
|
{
|
||||||
vm.DisableBolt11PaymentMethod = lightning.DisableBOLT11PaymentOption;
|
vm.DisableBolt11PaymentMethod = lightning.DisableBOLT11PaymentOption;
|
||||||
}
|
}
|
||||||
@@ -251,13 +258,13 @@ namespace BTCPayServer.Controllers
|
|||||||
if (store == null)
|
if (store == null)
|
||||||
return NotFound();
|
return NotFound();
|
||||||
|
|
||||||
var network = vm.CryptoCode == null ? null : _ExplorerProvider.GetNetwork(vm.CryptoCode);
|
if (vm.CryptoCode == null)
|
||||||
if (network == null)
|
|
||||||
{
|
{
|
||||||
ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network");
|
ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network");
|
||||||
return View(vm);
|
return View(vm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var network = _ExplorerProvider.GetNetwork(vm.CryptoCode);
|
||||||
var needUpdate = false;
|
var needUpdate = false;
|
||||||
var blob = store.GetStoreBlob();
|
var blob = store.GetStoreBlob();
|
||||||
blob.LightningDescriptionTemplate = vm.LightningDescriptionTemplate ?? string.Empty;
|
blob.LightningDescriptionTemplate = vm.LightningDescriptionTemplate ?? string.Empty;
|
||||||
@@ -269,7 +276,8 @@ namespace BTCPayServer.Controllers
|
|||||||
var lnurlId = new PaymentMethodId(vm.CryptoCode, PaymentTypes.LNURLPay);
|
var lnurlId = new PaymentMethodId(vm.CryptoCode, PaymentTypes.LNURLPay);
|
||||||
blob.SetExcluded(lnurlId, !vm.LNURLEnabled);
|
blob.SetExcluded(lnurlId, !vm.LNURLEnabled);
|
||||||
var lightning = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store);
|
var lightning = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store);
|
||||||
if (lightning.DisableBOLT11PaymentOption != disableBolt11PaymentMethod)
|
// Going to mark "lightning" as non-null here assuming that if we are POSTing here it's because we have a Lightning Node set-up
|
||||||
|
if (lightning!.DisableBOLT11PaymentOption != disableBolt11PaymentMethod)
|
||||||
{
|
{
|
||||||
needUpdate = true;
|
needUpdate = true;
|
||||||
lightning.DisableBOLT11PaymentOption = disableBolt11PaymentMethod;
|
lightning.DisableBOLT11PaymentOption = disableBolt11PaymentMethod;
|
||||||
@@ -315,10 +323,10 @@ namespace BTCPayServer.Controllers
|
|||||||
if (store == null)
|
if (store == null)
|
||||||
return NotFound();
|
return NotFound();
|
||||||
|
|
||||||
var network = cryptoCode == null ? null : _ExplorerProvider.GetNetwork(cryptoCode);
|
if (cryptoCode == null)
|
||||||
if (network == null)
|
|
||||||
return NotFound();
|
return NotFound();
|
||||||
|
|
||||||
|
var network = _ExplorerProvider.GetNetwork(cryptoCode);
|
||||||
var lightning = GetExistingLightningSupportedPaymentMethod(cryptoCode, store);
|
var lightning = GetExistingLightningSupportedPaymentMethod(cryptoCode, store);
|
||||||
if (lightning == null)
|
if (lightning == null)
|
||||||
return NotFound();
|
return NotFound();
|
||||||
@@ -347,8 +355,7 @@ namespace BTCPayServer.Controllers
|
|||||||
vm.CanUseInternalNode = await CanUseInternalLightning();
|
vm.CanUseInternalNode = await CanUseInternalLightning();
|
||||||
var lightning = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store);
|
var lightning = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store);
|
||||||
|
|
||||||
var lnSet = lightning != null;
|
if (lightning != null)
|
||||||
if (lnSet)
|
|
||||||
{
|
{
|
||||||
vm.LightningNodeType = lightning.IsInternalNode ? LightningNodeType.Internal : LightningNodeType.Custom;
|
vm.LightningNodeType = lightning.IsInternalNode ? LightningNodeType.Internal : LightningNodeType.Custom;
|
||||||
vm.ConnectionString = lightning.GetDisplayableConnectionString();
|
vm.ConnectionString = lightning.GetDisplayableConnectionString();
|
||||||
@@ -359,7 +366,7 @@ namespace BTCPayServer.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private LightningSupportedPaymentMethod GetExistingLightningSupportedPaymentMethod(string cryptoCode, StoreData store)
|
private LightningSupportedPaymentMethod? GetExistingLightningSupportedPaymentMethod(string cryptoCode, StoreData store)
|
||||||
{
|
{
|
||||||
var id = new PaymentMethodId(cryptoCode, PaymentTypes.LightningLike);
|
var id = new PaymentMethodId(cryptoCode, PaymentTypes.LightningLike);
|
||||||
var existing = store.GetSupportedPaymentMethods(_NetworkProvider)
|
var existing = store.GetSupportedPaymentMethods(_NetworkProvider)
|
||||||
@@ -367,7 +374,7 @@ namespace BTCPayServer.Controllers
|
|||||||
.FirstOrDefault(d => d.PaymentId == id);
|
.FirstOrDefault(d => d.PaymentId == id);
|
||||||
return existing;
|
return existing;
|
||||||
}
|
}
|
||||||
private LNURLPaySupportedPaymentMethod GetExistingLNURLSupportedPaymentMethod(string cryptoCode, StoreData store)
|
private LNURLPaySupportedPaymentMethod? GetExistingLNURLSupportedPaymentMethod(string cryptoCode, StoreData store)
|
||||||
{
|
{
|
||||||
var id = new PaymentMethodId(cryptoCode, PaymentTypes.LNURLPay);
|
var id = new PaymentMethodId(cryptoCode, PaymentTypes.LNURLPay);
|
||||||
var existing = store.GetSupportedPaymentMethods(_NetworkProvider)
|
var existing = store.GetSupportedPaymentMethods(_NetworkProvider)
|
||||||
|
|||||||
Reference in New Issue
Block a user