public IActionResult LightningSettings(string storeId, string cryptoCode)
        {
            var store = HttpContext.GetStoreData();

            if (store == null)
            {
                return(NotFound());
            }

            var storeBlob      = store.GetStoreBlob();
            var excludeFilters = storeBlob.GetExcludedPaymentMethods();
            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
            {
                CryptoCode = cryptoCode,
                StoreId    = storeId,
                Enabled    = !excludeFilters.Match(lightning.PaymentId),
                LightningDescriptionTemplate = storeBlob.LightningDescriptionTemplate,
                LightningAmountInSatoshi     = storeBlob.LightningAmountInSatoshi,
                LightningPrivateRouteHints   = storeBlob.LightningPrivateRouteHints,
                OnChainWithLnInvoiceFallback = storeBlob.OnChainWithLnInvoiceFallback
            };

            SetExistingValues(store, vm);

            if (lightning != null)
            {
                vm.DisableBolt11PaymentMethod = lightning.DisableBOLT11PaymentOption;
            }

            var lnurl = GetExistingLNURLSupportedPaymentMethod(vm.CryptoCode, store);

            if (lnurl != null)
            {
                vm.LNURLEnabled                = !store.GetStoreBlob().GetExcludedPaymentMethods().Match(lnurl.PaymentId);
                vm.LNURLBech32Mode             = lnurl.UseBech32Scheme;
                vm.LNURLStandardInvoiceEnabled = lnurl.EnableForStandardInvoices;
                vm.LUD12Enabled                = lnurl.LUD12Enabled;
                vm.DisableBolt11PaymentMethod  =
                    vm.LNURLEnabled && vm.LNURLStandardInvoiceEnabled && vm.DisableBolt11PaymentMethod;
            }
            else
            {
                //disable by default for now
                //vm.LNURLEnabled = !lnSet;
                vm.DisableBolt11PaymentMethod = false;
            }

            return(View(vm));
        }
        public async Task <IActionResult> LightningSettings(string storeId, string cryptoCode)
        {
            var store = HttpContext.GetStoreData();

            if (store == null)
            {
                return(NotFound());
            }

            var storeBlob      = store.GetStoreBlob();
            var excludeFilters = storeBlob.GetExcludedPaymentMethods();
            var lightning      = GetExistingLightningSupportedPaymentMethod(cryptoCode, store);
            var vm             = new LightningSettingsViewModel
            {
                CryptoCode = cryptoCode,
                StoreId    = storeId,
                Enabled    = !excludeFilters.Match(lightning.PaymentId),
                LightningDescriptionTemplate = storeBlob.LightningDescriptionTemplate,
                LightningAmountInSatoshi     = storeBlob.LightningAmountInSatoshi,
                LightningPrivateRouteHints   = storeBlob.LightningPrivateRouteHints,
                OnChainWithLnInvoiceFallback = storeBlob.OnChainWithLnInvoiceFallback
            };

            await SetExistingValues(store, vm);

            var lnSet = lightning != null;

            if (lnSet)
            {
                vm.DisableBolt11PaymentMethod = lightning.DisableBOLT11PaymentOption;
            }

            var lnurl = GetExistingLNURLSupportedPaymentMethod(vm.CryptoCode, store);

            if (lnurl != null)
            {
                vm.LNURLEnabled                = !store.GetStoreBlob().GetExcludedPaymentMethods().Match(lnurl.PaymentId);
                vm.LNURLBech32Mode             = lnurl.UseBech32Scheme;
                vm.LNURLStandardInvoiceEnabled = lnurl.EnableForStandardInvoices;
                vm.LUD12Enabled                = lnurl.LUD12Enabled;
                vm.DisableBolt11PaymentMethod  =
                    vm.LNURLEnabled && vm.LNURLStandardInvoiceEnabled && vm.DisableBolt11PaymentMethod;
            }
            else
            {
                //disable by default for now
                //vm.LNURLEnabled = !lnSet;
                vm.DisableBolt11PaymentMethod = false;
            }

            return(View(vm));
        }
        public async Task <IActionResult> LightningSettings(LightningSettingsViewModel vm)
        {
            var store = HttpContext.GetStoreData();

            if (store == null)
            {
                return(NotFound());
            }

            if (vm.CryptoCode == null)
            {
                ModelState.AddModelError(nameof(vm.CryptoCode), "Invalid network");
                return(View(vm));
            }

            var network    = _ExplorerProvider.GetNetwork(vm.CryptoCode);
            var needUpdate = false;
            var blob       = store.GetStoreBlob();

            blob.LightningDescriptionTemplate = vm.LightningDescriptionTemplate ?? string.Empty;
            blob.LightningAmountInSatoshi     = vm.LightningAmountInSatoshi;
            blob.LightningPrivateRouteHints   = vm.LightningPrivateRouteHints;
            blob.OnChainWithLnInvoiceFallback = vm.OnChainWithLnInvoiceFallback;
            var disableBolt11PaymentMethod =
                vm.LNURLEnabled && vm.LNURLStandardInvoiceEnabled && vm.DisableBolt11PaymentMethod;
            var lnurlId = new PaymentMethodId(vm.CryptoCode, PaymentTypes.LNURLPay);

            blob.SetExcluded(lnurlId, !vm.LNURLEnabled);
            var lightning = GetExistingLightningSupportedPaymentMethod(vm.CryptoCode, store);

            // 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;
                lightning.DisableBOLT11PaymentOption = disableBolt11PaymentMethod;
                store.SetSupportedPaymentMethod(lightning);
            }

            var lnurl = GetExistingLNURLSupportedPaymentMethod(vm.CryptoCode, store);

            if (lnurl is null || (
                    lnurl.EnableForStandardInvoices != vm.LNURLStandardInvoiceEnabled ||
                    lnurl.UseBech32Scheme != vm.LNURLBech32Mode ||
                    lnurl.LUD12Enabled != vm.LUD12Enabled))
            {
                needUpdate = true;
            }

            store.SetSupportedPaymentMethod(new LNURLPaySupportedPaymentMethod
            {
                CryptoCode = vm.CryptoCode,
                EnableForStandardInvoices = vm.LNURLStandardInvoiceEnabled,
                UseBech32Scheme           = vm.LNURLBech32Mode,
                LUD12Enabled = vm.LUD12Enabled
            });

            if (store.SetStoreBlob(blob))
            {
                needUpdate = true;
            }

            if (needUpdate)
            {
                await _Repo.UpdateStore(store);

                TempData[WellKnownTempData.SuccessMessage] = $"{network.CryptoCode} Lightning settings successfully updated.";
            }

            return(RedirectToAction(nameof(LightningSettings), new { vm.StoreId, vm.CryptoCode }));
        }