コード例 #1
0
        protected override Task <EditLightningNodeExternalServiceDataViewModel> BuildViewModel(ExternalServiceData data)
        {
            var vm = new EditLightningNodeExternalServiceDataViewModel(
                new LightningNodeService(data, _nbXplorerClientProvider, _nbXplorerSummaryProvider, _socketFactory)
                .GetData());

            vm.CryptoCodes = new SelectList(_nbXplorerOptions.Cryptos?.ToList() ?? new List <string>(),
                                            vm.CryptoCode);
            return(Task.FromResult(vm));
        }
コード例 #2
0
        BuildModel(EditLightningNodeExternalServiceDataViewModel viewModel, ExternalServiceData mainModel)
        {
            var failureViewModel = new EditLightningNodeExternalServiceDataViewModel(viewModel);

            failureViewModel.CryptoCodes = new SelectList(_nbXplorerOptions.Cryptos?.ToList() ?? new List <string>(),
                                                          viewModel.CryptoCode);
            //current External Service data
            var externalServiceData = mainModel;

            if (!ModelState.IsValid)
            {
                return(null, failureViewModel);
            }

            //current External Service data
            externalServiceData.Set((LightningNodeExternalServiceData)viewModel);
            var lightningNodeService = new LightningNodeService(externalServiceData, _nbXplorerClientProvider,
                                                                _nbXplorerSummaryProvider, _socketFactory);


            if (!string.IsNullOrEmpty(viewModel.ConnectionString))
            {
                if (!LightningConnectionString.TryParse(viewModel.ConnectionString, false, out var connectionString,
                                                        out var error))
                {
                    ModelState.AddModelError(nameof(viewModel.ConnectionString), $"Invalid URL ({error})");
                    return(null, failureViewModel);
                }

                if (connectionString.ConnectionType == LightningConnectionType.LndGRPC)
                {
                    ModelState.AddModelError(nameof(viewModel.ConnectionString),
                                             $"BTCPay does not support gRPC connections");
                    return(null, failureViewModel);
                }

                var canUseInternalLightning = await IsAdmin();

                bool isInternalNode = connectionString.ConnectionType == LightningConnectionType.CLightning ||
                                      connectionString.BaseUri.DnsSafeHost.StartsWith("lnd_") ||
                                      (connectionString.BaseUri.DnsSafeHost.Equals("127.0.0.1",
                                                                                   StringComparison.InvariantCultureIgnoreCase) ||
                                       connectionString.BaseUri.DnsSafeHost.Equals("localhost",
                                                                                   StringComparison.InvariantCultureIgnoreCase));

                if (connectionString.BaseUri.Scheme == "http")
                {
                    if (!isInternalNode)
                    {
                        ModelState.AddModelError(nameof(viewModel.ConnectionString), "The url must be HTTPS");
                        return(null, failureViewModel);
                    }
                }

                if (connectionString.MacaroonFilePath != null)
                {
                    if (!canUseInternalLightning)
                    {
                        ModelState.AddModelError(nameof(viewModel.ConnectionString),
                                                 "You are not authorized to use macaroonfilepath");
                        return(null, failureViewModel);
                    }

                    if (!System.IO.File.Exists(connectionString.MacaroonFilePath))
                    {
                        ModelState.AddModelError(nameof(viewModel.ConnectionString),
                                                 "The macaroonfilepath file does not exist");
                        return(null, failureViewModel);
                    }

                    if (!System.IO.Path.IsPathRooted(connectionString.MacaroonFilePath))
                    {
                        ModelState.AddModelError(nameof(viewModel.ConnectionString),
                                                 "The macaroonfilepath should be fully rooted");
                        return(null, failureViewModel);
                    }
                }

                if (isInternalNode && !canUseInternalLightning)
                {
                    ModelState.AddModelError(nameof(viewModel.ConnectionString), "Unauthorized url");
                    return(null, failureViewModel);
                }
            }

            if (!await lightningNodeService.TestAccess(Request.IsOnion()))
            {
                ModelState.AddModelError(String.Empty, "Could not connect with current settings");


                return(null, failureViewModel);
            }

            return(externalServiceData, null);
        }