Disable internal node options if no internal node configured (#4315)

This commit is contained in:
Nicolas Dorier 2022-11-20 14:22:36 +09:00 committed by GitHub
parent 2bd4a680ad
commit 1e2acfb296
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 5 deletions

View file

@ -137,6 +137,7 @@ namespace BTCPayServer
public string CryptoImagePath { get; set; } public string CryptoImagePath { get; set; }
public string[] DefaultRateRules { get; set; } = Array.Empty<string>(); public string[] DefaultRateRules { get; set; } = Array.Empty<string>();
public override string ToString() public override string ToString()
{ {
return CryptoCode; return CryptoCode;

View file

@ -108,7 +108,7 @@ namespace BTCPayServer.Controllers
if (store == null) if (store == null)
return NotFound(); return NotFound();
vm.CanUseInternalNode = CanUseInternalLightning(); vm.CanUseInternalNode = CanUseInternalLightning(vm.CryptoCode);
if (vm.CryptoCode == null) if (vm.CryptoCode == null)
{ {
@ -122,7 +122,7 @@ namespace BTCPayServer.Controllers
LightningSupportedPaymentMethod? paymentMethod = null; LightningSupportedPaymentMethod? paymentMethod = null;
if (vm.LightningNodeType == LightningNodeType.Internal) if (vm.LightningNodeType == LightningNodeType.Internal)
{ {
if (!CanUseInternalLightning()) if (!CanUseInternalLightning(network.CryptoCode))
{ {
ModelState.AddModelError(nameof(vm.ConnectionString), "You are not authorized to use the internal lightning node"); ModelState.AddModelError(nameof(vm.ConnectionString), "You are not authorized to use the internal lightning node");
return View(vm); return View(vm);
@ -364,14 +364,14 @@ namespace BTCPayServer.Controllers
return RedirectToAction(nameof(LightningSettings), new { storeId, cryptoCode }); return RedirectToAction(nameof(LightningSettings), new { storeId, cryptoCode });
} }
private bool CanUseInternalLightning() private bool CanUseInternalLightning(string cryptoCode)
{ {
return User.IsInRole(Roles.ServerAdmin) || _policiesSettings.AllowLightningInternalNodeForAll; return LightningNetworkOptions.InternalLightningByCryptoCode.ContainsKey(cryptoCode.ToUpperInvariant()) && (User.IsInRole(Roles.ServerAdmin) || _policiesSettings.AllowLightningInternalNodeForAll);
} }
private void SetExistingValues(StoreData store, LightningNodeViewModel vm) private void SetExistingValues(StoreData store, LightningNodeViewModel vm)
{ {
vm.CanUseInternalNode = CanUseInternalLightning(); vm.CanUseInternalNode = CanUseInternalLightning(vm.CryptoCode);
var lightning = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store); var lightning = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store);
if (lightning != null) if (lightning != null)

View file

@ -64,6 +64,7 @@ namespace BTCPayServer.Controllers
IFileService fileService, IFileService fileService,
WebhookSender webhookNotificationManager, WebhookSender webhookNotificationManager,
IDataProtectionProvider dataProtector, IDataProtectionProvider dataProtector,
IOptions<LightningNetworkOptions> lightningNetworkOptions,
IOptions<ExternalServicesOptions> externalServiceOptions) IOptions<ExternalServicesOptions> externalServiceOptions)
{ {
_RateFactory = rateFactory; _RateFactory = rateFactory;
@ -80,6 +81,7 @@ namespace BTCPayServer.Controllers
_fileService = fileService; _fileService = fileService;
DataProtector = dataProtector.CreateProtector("ConfigProtector"); DataProtector = dataProtector.CreateProtector("ConfigProtector");
WebhookNotificationManager = webhookNotificationManager; WebhookNotificationManager = webhookNotificationManager;
LightningNetworkOptions = lightningNetworkOptions.Value;
_EventAggregator = eventAggregator; _EventAggregator = eventAggregator;
_NetworkProvider = networkProvider; _NetworkProvider = networkProvider;
_ExplorerProvider = explorerProvider; _ExplorerProvider = explorerProvider;
@ -111,6 +113,7 @@ namespace BTCPayServer.Controllers
public string? GeneratedPairingCode { get; set; } public string? GeneratedPairingCode { get; set; }
public WebhookSender WebhookNotificationManager { get; } public WebhookSender WebhookNotificationManager { get; }
public LightningNetworkOptions LightningNetworkOptions { get; }
public IDataProtector DataProtector { get; } public IDataProtector DataProtector { get; }
[TempData] [TempData]