From a34d1641b310b9afee3464aff9991c10e1c6f2dc Mon Sep 17 00:00:00 2001 From: Aaron Clauson Date: Tue, 18 Dec 2018 20:16:48 +0100 Subject: [PATCH 1/6] Set disable registration as default true. --- BTCPayServer/Services/PoliciesSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BTCPayServer/Services/PoliciesSettings.cs b/BTCPayServer/Services/PoliciesSettings.cs index b1ef0a423..c6c533359 100644 --- a/BTCPayServer/Services/PoliciesSettings.cs +++ b/BTCPayServer/Services/PoliciesSettings.cs @@ -17,6 +17,6 @@ namespace BTCPayServer.Services [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] [Display(Name = "Disable registration")] - public bool LockSubscription { get; set; } + public bool LockSubscription { get; set; } = true; } } From cfaa5766ed85a69c7c911a55b34f3dbbd496739f Mon Sep 17 00:00:00 2001 From: Aaron Clauson Date: Wed, 19 Dec 2018 20:03:27 +0100 Subject: [PATCH 2/6] Always allow user registration if there are no user records. --- BTCPayServer/Controllers/AccountController.cs | 4 ++-- BTCPayServer/Views/Shared/_Layout.cshtml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BTCPayServer/Controllers/AccountController.cs b/BTCPayServer/Controllers/AccountController.cs index fa486a2a2..dc2e21a00 100644 --- a/BTCPayServer/Controllers/AccountController.cs +++ b/BTCPayServer/Controllers/AccountController.cs @@ -242,7 +242,7 @@ namespace BTCPayServer.Controllers public async Task Register(string returnUrl = null, bool logon = true) { var policies = await _SettingsRepository.GetSettingAsync() ?? new PoliciesSettings(); - if (policies.LockSubscription && !User.IsInRole(Roles.ServerAdmin)) + if (policies.LockSubscription && _userManager.Users.Count() > 0 && !User.IsInRole(Roles.ServerAdmin)) return RedirectToAction(nameof(HomeController.Index), "Home"); ViewData["ReturnUrl"] = returnUrl; ViewData["Logon"] = logon.ToString(CultureInfo.InvariantCulture).ToLowerInvariant(); @@ -257,7 +257,7 @@ namespace BTCPayServer.Controllers ViewData["ReturnUrl"] = returnUrl; ViewData["Logon"] = logon.ToString(CultureInfo.InvariantCulture).ToLowerInvariant(); var policies = await _SettingsRepository.GetSettingAsync() ?? new PoliciesSettings(); - if (policies.LockSubscription && !User.IsInRole(Roles.ServerAdmin)) + if (policies.LockSubscription && _userManager.Users.Count() > 0 && !User.IsInRole(Roles.ServerAdmin)) return RedirectToAction(nameof(HomeController.Index), "Home"); if (ModelState.IsValid) { diff --git a/BTCPayServer/Views/Shared/_Layout.cshtml b/BTCPayServer/Views/Shared/_Layout.cshtml index dd9243376..6751bdf8a 100644 --- a/BTCPayServer/Views/Shared/_Layout.cshtml +++ b/BTCPayServer/Views/Shared/_Layout.cshtml @@ -74,7 +74,7 @@ } else { - @if (themeManager.ShowRegister) + @if (themeManager.ShowRegister || UserManager.Users.Count() == 0) { } From 0dcaf80c7f0461c70e4b4a9269f955eff589ad0e Mon Sep 17 00:00:00 2001 From: Aaron Clauson Date: Thu, 20 Dec 2018 20:39:48 +0100 Subject: [PATCH 3/6] Changed disable register mechanism to apply policy setting after admin user created rather than using DB user count checks. --- BTCPayServer/Controllers/AccountController.cs | 8 ++++++-- BTCPayServer/Services/PoliciesSettings.cs | 2 +- BTCPayServer/Views/Shared/_Layout.cshtml | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/BTCPayServer/Controllers/AccountController.cs b/BTCPayServer/Controllers/AccountController.cs index dc2e21a00..738f3b999 100644 --- a/BTCPayServer/Controllers/AccountController.cs +++ b/BTCPayServer/Controllers/AccountController.cs @@ -242,7 +242,7 @@ namespace BTCPayServer.Controllers public async Task Register(string returnUrl = null, bool logon = true) { var policies = await _SettingsRepository.GetSettingAsync() ?? new PoliciesSettings(); - if (policies.LockSubscription && _userManager.Users.Count() > 0 && !User.IsInRole(Roles.ServerAdmin)) + if (policies.LockSubscription && !User.IsInRole(Roles.ServerAdmin)) return RedirectToAction(nameof(HomeController.Index), "Home"); ViewData["ReturnUrl"] = returnUrl; ViewData["Logon"] = logon.ToString(CultureInfo.InvariantCulture).ToLowerInvariant(); @@ -257,7 +257,7 @@ namespace BTCPayServer.Controllers ViewData["ReturnUrl"] = returnUrl; ViewData["Logon"] = logon.ToString(CultureInfo.InvariantCulture).ToLowerInvariant(); var policies = await _SettingsRepository.GetSettingAsync() ?? new PoliciesSettings(); - if (policies.LockSubscription && _userManager.Users.Count() > 0 && !User.IsInRole(Roles.ServerAdmin)) + if (policies.LockSubscription && !User.IsInRole(Roles.ServerAdmin)) return RedirectToAction(nameof(HomeController.Index), "Home"); if (ModelState.IsValid) { @@ -271,6 +271,10 @@ namespace BTCPayServer.Controllers { await _RoleManager.CreateAsync(new IdentityRole(Roles.ServerAdmin)); await _userManager.AddToRoleAsync(user, Roles.ServerAdmin); + + // Once the admin user has been created lock subsequent user registrations until explicitly enabled. + policies.LockSubscription = true; + await _SettingsRepository.UpdateSetting(policies); } var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); diff --git a/BTCPayServer/Services/PoliciesSettings.cs b/BTCPayServer/Services/PoliciesSettings.cs index c6c533359..b1ef0a423 100644 --- a/BTCPayServer/Services/PoliciesSettings.cs +++ b/BTCPayServer/Services/PoliciesSettings.cs @@ -17,6 +17,6 @@ namespace BTCPayServer.Services [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)] [Display(Name = "Disable registration")] - public bool LockSubscription { get; set; } = true; + public bool LockSubscription { get; set; } } } diff --git a/BTCPayServer/Views/Shared/_Layout.cshtml b/BTCPayServer/Views/Shared/_Layout.cshtml index 6751bdf8a..dd9243376 100644 --- a/BTCPayServer/Views/Shared/_Layout.cshtml +++ b/BTCPayServer/Views/Shared/_Layout.cshtml @@ -74,7 +74,7 @@ } else { - @if (themeManager.ShowRegister || UserManager.Users.Count() == 0) + @if (themeManager.ShowRegister) { } From 5dc1da2af009832e8d974b00d8772df0f5ed986f Mon Sep 17 00:00:00 2001 From: Aaron Clauson Date: Sun, 6 Jan 2019 14:55:18 +0100 Subject: [PATCH 4/6] Don't disable user registrations if debug for unit tests. --- BTCPayServer/Controllers/AccountController.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/BTCPayServer/Controllers/AccountController.cs b/BTCPayServer/Controllers/AccountController.cs index 738f3b999..1a534a314 100644 --- a/BTCPayServer/Controllers/AccountController.cs +++ b/BTCPayServer/Controllers/AccountController.cs @@ -5,6 +5,7 @@ using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; @@ -32,6 +33,7 @@ namespace BTCPayServer.Controllers StoreRepository storeRepository; RoleManager _RoleManager; SettingsRepository _SettingsRepository; + BTCPayServerEnvironment _btcPayServerEnvironment; ILogger _logger; public AccountController( @@ -40,7 +42,8 @@ namespace BTCPayServer.Controllers StoreRepository storeRepository, SignInManager signInManager, IEmailSender emailSender, - SettingsRepository settingsRepository) + SettingsRepository settingsRepository, + BTCPayServerEnvironment btcPayServerEnvironment) { this.storeRepository = storeRepository; _userManager = userManager; @@ -48,6 +51,7 @@ namespace BTCPayServer.Controllers _emailSender = emailSender; _RoleManager = roleManager; _SettingsRepository = settingsRepository; + _btcPayServerEnvironment = btcPayServerEnvironment; _logger = Logs.PayServer; } @@ -272,9 +276,12 @@ namespace BTCPayServer.Controllers await _RoleManager.CreateAsync(new IdentityRole(Roles.ServerAdmin)); await _userManager.AddToRoleAsync(user, Roles.ServerAdmin); - // Once the admin user has been created lock subsequent user registrations until explicitly enabled. - policies.LockSubscription = true; - await _SettingsRepository.UpdateSetting(policies); + if(!_btcPayServerEnvironment.Environment.IsDevelopment()) + { + // Once the admin user has been created lock subsequent user registrations until explicitly enabled except for dev builds as unit tests require multiple users. + policies.LockSubscription = true; + await _SettingsRepository.UpdateSetting(policies); + } } var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); From 6010a103e053bfe405c007be302a756394773987 Mon Sep 17 00:00:00 2001 From: Aaron Clauson Date: Sun, 6 Jan 2019 16:43:55 +0100 Subject: [PATCH 5/6] Added new disable-registration command line option. --- BTCPayServer.Tests/BTCPayServerTester.cs | 2 +- BTCPayServer/Configuration/BTCPayServerOptions.cs | 8 ++++++++ BTCPayServer/Configuration/DefaultConfiguration.cs | 1 + BTCPayServer/Controllers/AccountController.cs | 11 +++++------ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/BTCPayServer.Tests/BTCPayServerTester.cs b/BTCPayServer.Tests/BTCPayServerTester.cs index 956defe20..da6ad0016 100644 --- a/BTCPayServer.Tests/BTCPayServerTester.cs +++ b/BTCPayServer.Tests/BTCPayServerTester.cs @@ -122,7 +122,7 @@ namespace BTCPayServer.Tests ServerUri = new Uri("http://" + HostName + ":" + Port + "/"); Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development"); - var conf = new DefaultConfiguration() { Logger = Logs.LogProvider.CreateLogger("Console") }.CreateConfiguration(new[] { "--datadir", _Directory, "--conf", confPath }); + var conf = new DefaultConfiguration() { Logger = Logs.LogProvider.CreateLogger("Console") }.CreateConfiguration(new[] { "--datadir", _Directory, "--conf", confPath, "--disable-registration", "false" }); _Host = new WebHostBuilder() .UseConfiguration(conf) .ConfigureServices(s => diff --git a/BTCPayServer/Configuration/BTCPayServerOptions.cs b/BTCPayServer/Configuration/BTCPayServerOptions.cs index d657f6944..b40470f40 100644 --- a/BTCPayServer/Configuration/BTCPayServerOptions.cs +++ b/BTCPayServer/Configuration/BTCPayServerOptions.cs @@ -61,6 +61,12 @@ namespace BTCPayServer.Configuration set; } = new List(); + public bool DisableRegistration + { + get; + private set; + } + public static string GetDebugLog(IConfiguration configuration) { return configuration.GetValue("debuglog", null); @@ -237,6 +243,8 @@ namespace BTCPayServer.Configuration Logs.Configuration.LogInformation("LogFile: " + LogFile); Logs.Configuration.LogInformation("Log Level: " + GetDebugLogLevel(conf)); } + + DisableRegistration = conf.GetOrDefault("disable-registration", true); } private SSHSettings ParseSSHConfiguration(IConfiguration conf) diff --git a/BTCPayServer/Configuration/DefaultConfiguration.cs b/BTCPayServer/Configuration/DefaultConfiguration.cs index 6717312d7..e89705953 100644 --- a/BTCPayServer/Configuration/DefaultConfiguration.cs +++ b/BTCPayServer/Configuration/DefaultConfiguration.cs @@ -43,6 +43,7 @@ namespace BTCPayServer.Configuration app.Option("--sshtrustedfingerprints", "SSH Host public key fingerprint or sha256 (default: empty, it will allow untrusted connections)", CommandOptionType.SingleValue); app.Option("--debuglog", "A rolling log file for debug messages.", CommandOptionType.SingleValue); app.Option("--debugloglevel", "The severity you log (default:information)", CommandOptionType.SingleValue); + app.Option("--disable-registration", "Disables new user registrations (default:true)", CommandOptionType.SingleValue); foreach (var network in provider.GetAll()) { var crypto = network.CryptoCode.ToLowerInvariant(); diff --git a/BTCPayServer/Controllers/AccountController.cs b/BTCPayServer/Controllers/AccountController.cs index 1a534a314..39e083e35 100644 --- a/BTCPayServer/Controllers/AccountController.cs +++ b/BTCPayServer/Controllers/AccountController.cs @@ -5,7 +5,6 @@ using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; @@ -33,7 +32,7 @@ namespace BTCPayServer.Controllers StoreRepository storeRepository; RoleManager _RoleManager; SettingsRepository _SettingsRepository; - BTCPayServerEnvironment _btcPayServerEnvironment; + Configuration.BTCPayServerOptions _Options; ILogger _logger; public AccountController( @@ -43,7 +42,7 @@ namespace BTCPayServer.Controllers SignInManager signInManager, IEmailSender emailSender, SettingsRepository settingsRepository, - BTCPayServerEnvironment btcPayServerEnvironment) + Configuration.BTCPayServerOptions options) { this.storeRepository = storeRepository; _userManager = userManager; @@ -51,7 +50,7 @@ namespace BTCPayServer.Controllers _emailSender = emailSender; _RoleManager = roleManager; _SettingsRepository = settingsRepository; - _btcPayServerEnvironment = btcPayServerEnvironment; + _Options = options; _logger = Logs.PayServer; } @@ -276,9 +275,9 @@ namespace BTCPayServer.Controllers await _RoleManager.CreateAsync(new IdentityRole(Roles.ServerAdmin)); await _userManager.AddToRoleAsync(user, Roles.ServerAdmin); - if(!_btcPayServerEnvironment.Environment.IsDevelopment()) + if(_Options.DisableRegistration) { - // Once the admin user has been created lock subsequent user registrations until explicitly enabled except for dev builds as unit tests require multiple users. + // Once the admin user has been created lock subsequent user registrations (needs to be disabled for unit tests that require multiple users). policies.LockSubscription = true; await _SettingsRepository.UpdateSetting(policies); } From 4b982f815cb7f29fba08d1b3ac5a44bdbd1c6cdf Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Mon, 7 Jan 2019 15:35:18 +0900 Subject: [PATCH 6/6] Renaming --- BTCPayServer.Tests/UnitTest1.cs | 12 ++++++------ BTCPayServer/Controllers/InvoiceController.UI.cs | 2 +- BTCPayServer/Controllers/InvoiceController.cs | 2 +- .../Bitcoin/BitcoinLikeOnChainPaymentMethod.cs | 6 +++--- .../Payments/Bitcoin/BitcoinLikePaymentHandler.cs | 4 ++-- BTCPayServer/Payments/IPaymentMethodDetails.cs | 4 ++-- .../Lightning/LightningLikePaymentMethodDetails.cs | 2 +- BTCPayServer/Services/Invoices/InvoiceEntity.cs | 12 ++++++------ BTCPayServer/Services/Invoices/InvoiceRepository.cs | 8 ++++---- 9 files changed, 26 insertions(+), 26 deletions(-) diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index 5734380de..1b5e22d97 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -101,7 +101,7 @@ namespace BTCPayServer.Tests Rate = 10513.44m, }.SetPaymentMethodDetails(new BTCPayServer.Payments.Bitcoin.BitcoinLikeOnChainPaymentMethod() { - NetworkFee = Money.Coins(0.00000100m), + NextNetworkFee = Money.Coins(0.00000100m), DepositAddress = dummy })); paymentMethods.Add(new PaymentMethod() @@ -110,7 +110,7 @@ namespace BTCPayServer.Tests Rate = 216.79m }.SetPaymentMethodDetails(new BTCPayServer.Payments.Bitcoin.BitcoinLikeOnChainPaymentMethod() { - NetworkFee = Money.Coins(0.00010000m), + NextNetworkFee = Money.Coins(0.00010000m), DepositAddress = dummy })); invoiceEntity.SetPaymentMethods(paymentMethods); @@ -150,7 +150,7 @@ namespace BTCPayServer.Tests var entity = new InvoiceEntity(); #pragma warning disable CS0618 entity.Payments = new System.Collections.Generic.List(); - entity.SetPaymentMethod(new PaymentMethod() { CryptoCode = "BTC", Rate = 5000, NetworkFee = Money.Coins(0.1m) }); + entity.SetPaymentMethod(new PaymentMethod() { CryptoCode = "BTC", Rate = 5000, NextNetworkFee = Money.Coins(0.1m) }); entity.ProductInformation = new ProductInformation() { Price = 5000 }; var paymentMethod = entity.GetPaymentMethods(null).TryGet("BTC", PaymentTypes.BTCLike); @@ -190,13 +190,13 @@ namespace BTCPayServer.Tests { CryptoCode = "BTC", Rate = 1000, - NetworkFee = Money.Coins(0.1m) + NextNetworkFee = Money.Coins(0.1m) }); paymentMethods.Add(new PaymentMethod() { CryptoCode = "LTC", Rate = 500, - NetworkFee = Money.Coins(0.01m) + NextNetworkFee = Money.Coins(0.01m) }); entity.SetPaymentMethods(paymentMethods); entity.Payments = new List(); @@ -275,7 +275,7 @@ namespace BTCPayServer.Tests var entity = new InvoiceEntity(); #pragma warning disable CS0618 entity.Payments = new List(); - entity.SetPaymentMethod(new PaymentMethod() { CryptoCode = "BTC", Rate = 5000, NetworkFee = Money.Coins(0.1m) }); + entity.SetPaymentMethod(new PaymentMethod() { CryptoCode = "BTC", Rate = 5000, NextNetworkFee = Money.Coins(0.1m) }); entity.ProductInformation = new ProductInformation() { Price = 5000 }; entity.PaymentTolerance = 0; diff --git a/BTCPayServer/Controllers/InvoiceController.UI.cs b/BTCPayServer/Controllers/InvoiceController.UI.cs index 4e9803d2d..1df9aa0ef 100644 --- a/BTCPayServer/Controllers/InvoiceController.UI.cs +++ b/BTCPayServer/Controllers/InvoiceController.UI.cs @@ -304,7 +304,7 @@ namespace BTCPayServer.Controllers #pragma warning disable CS0618 // Type or member is obsolete Status = invoice.StatusString, #pragma warning restore CS0618 // Type or member is obsolete - NetworkFee = paymentMethodDetails.GetNetworkFee(), + NetworkFee = paymentMethodDetails.GetNextNetworkFee(), IsMultiCurrency = invoice.GetPayments().Select(p => p.GetPaymentMethodId()).Concat(new[] { paymentMethod.GetId() }).Distinct().Count() > 1, ChangellyEnabled = changelly != null, ChangellyMerchantId = changelly?.ChangellyMerchantId, diff --git a/BTCPayServer/Controllers/InvoiceController.cs b/BTCPayServer/Controllers/InvoiceController.cs index 47c46a615..eda115aa2 100644 --- a/BTCPayServer/Controllers/InvoiceController.cs +++ b/BTCPayServer/Controllers/InvoiceController.cs @@ -240,7 +240,7 @@ namespace BTCPayServer.Controllers #pragma warning disable CS0618 if (paymentMethod.GetId().IsBTCOnChain) { - entity.TxFee = paymentMethod.NetworkFee; + entity.TxFee = paymentMethod.NextNetworkFee; entity.Rate = paymentMethod.Rate; entity.DepositAddress = paymentMethod.DepositAddress; } diff --git a/BTCPayServer/Payments/Bitcoin/BitcoinLikeOnChainPaymentMethod.cs b/BTCPayServer/Payments/Bitcoin/BitcoinLikeOnChainPaymentMethod.cs index 4cc0d91af..30e25801c 100644 --- a/BTCPayServer/Payments/Bitcoin/BitcoinLikeOnChainPaymentMethod.cs +++ b/BTCPayServer/Payments/Bitcoin/BitcoinLikeOnChainPaymentMethod.cs @@ -20,9 +20,9 @@ namespace BTCPayServer.Payments.Bitcoin return DepositAddress; } - public decimal GetNetworkFee() + public decimal GetNextNetworkFee() { - return NetworkFee.ToDecimal(MoneyUnit.BTC); + return NextNetworkFee.ToDecimal(MoneyUnit.BTC); } public void SetPaymentDestination(string newPaymentDestination) { @@ -34,7 +34,7 @@ namespace BTCPayServer.Payments.Bitcoin [JsonIgnore] public FeeRate FeeRate { get; set; } [JsonIgnore] - public Money NetworkFee { get; set; } + public Money NextNetworkFee { get; set; } [JsonIgnore] public String DepositAddress { get; set; } public BitcoinAddress GetDepositAddress(Network network) diff --git a/BTCPayServer/Payments/Bitcoin/BitcoinLikePaymentHandler.cs b/BTCPayServer/Payments/Bitcoin/BitcoinLikePaymentHandler.cs index 758fdc5fa..e7a830b86 100644 --- a/BTCPayServer/Payments/Bitcoin/BitcoinLikePaymentHandler.cs +++ b/BTCPayServer/Payments/Bitcoin/BitcoinLikePaymentHandler.cs @@ -53,11 +53,11 @@ namespace BTCPayServer.Payments.Bitcoin switch (onchainMethod.NetworkFeeMode) { case NetworkFeeMode.Always: - onchainMethod.NetworkFee = onchainMethod.FeeRate.GetFee(100); // assume price for 100 bytes + onchainMethod.NextNetworkFee = onchainMethod.FeeRate.GetFee(100); // assume price for 100 bytes break; case NetworkFeeMode.Never: case NetworkFeeMode.MultiplePaymentsOnly: - onchainMethod.NetworkFee = Money.Zero; + onchainMethod.NextNetworkFee = Money.Zero; break; } onchainMethod.DepositAddress = (await prepare.ReserveAddress).ToString(); diff --git a/BTCPayServer/Payments/IPaymentMethodDetails.cs b/BTCPayServer/Payments/IPaymentMethodDetails.cs index b6d472b1e..eab9c8853 100644 --- a/BTCPayServer/Payments/IPaymentMethodDetails.cs +++ b/BTCPayServer/Payments/IPaymentMethodDetails.cs @@ -18,10 +18,10 @@ namespace BTCPayServer.Payments string GetPaymentDestination(); PaymentTypes GetPaymentType(); /// - /// Returns what a merchant would need to pay to cashout this payment + /// Returns fee that the merchant charge to the customer for the next payment /// /// - decimal GetNetworkFee(); + decimal GetNextNetworkFee(); /// /// Change the payment destination (internal plumbing) /// diff --git a/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs b/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs index a396e5ca3..c8edcba93 100644 --- a/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs +++ b/BTCPayServer/Payments/Lightning/LightningLikePaymentMethodDetails.cs @@ -22,7 +22,7 @@ namespace BTCPayServer.Payments.Lightning return PaymentTypes.LightningLike; } - public decimal GetNetworkFee() + public decimal GetNextNetworkFee() { return 0.0m; } diff --git a/BTCPayServer/Services/Invoices/InvoiceEntity.cs b/BTCPayServer/Services/Invoices/InvoiceEntity.cs index 746cdc4d4..d0a5a5924 100644 --- a/BTCPayServer/Services/Invoices/InvoiceEntity.cs +++ b/BTCPayServer/Services/Invoices/InvoiceEntity.cs @@ -729,7 +729,7 @@ namespace BTCPayServer.Services.Invoices { FeeRate = FeeRate, DepositAddress = string.IsNullOrEmpty(DepositAddress) ? null : DepositAddress, - NetworkFee = NetworkFee + NextNetworkFee = NextNetworkFee }; } else @@ -737,7 +737,7 @@ namespace BTCPayServer.Services.Invoices var details = PaymentMethodExtensions.DeserializePaymentMethodDetails(GetId(), PaymentMethodDetails); if (details is Payments.Bitcoin.BitcoinLikeOnChainPaymentMethod btcLike) { - btcLike.NetworkFee = NetworkFee; + btcLike.NextNetworkFee = NextNetworkFee; btcLike.DepositAddress = string.IsNullOrEmpty(DepositAddress) ? null : DepositAddress; btcLike.FeeRate = FeeRate; } @@ -759,7 +759,7 @@ namespace BTCPayServer.Services.Invoices if (paymentMethod is Payments.Bitcoin.BitcoinLikeOnChainPaymentMethod bitcoinPaymentMethod) { - NetworkFee = bitcoinPaymentMethod.NetworkFee; + NextNetworkFee = bitcoinPaymentMethod.NextNetworkFee; FeeRate = bitcoinPaymentMethod.FeeRate; DepositAddress = bitcoinPaymentMethod.DepositAddress; } @@ -774,8 +774,8 @@ namespace BTCPayServer.Services.Invoices [Obsolete("Use ((BitcoinLikeOnChainPaymentMethod)GetPaymentMethod()).FeeRate")] public FeeRate FeeRate { get; set; } [JsonProperty(PropertyName = "txFee")] - [Obsolete("Use ((BitcoinLikeOnChainPaymentMethod)GetPaymentMethod()).TxFee")] - public Money NetworkFee { get; set; } + [Obsolete("Use ((BitcoinLikeOnChainPaymentMethod)GetPaymentMethod()).NextNetworkFee")] + public Money NextNetworkFee { get; set; } [JsonProperty(PropertyName = "depositAddress")] [Obsolete("Use ((BitcoinLikeOnChainPaymentMethod)GetPaymentMethod()).DepositAddress")] public string DepositAddress { get; set; } @@ -840,7 +840,7 @@ namespace BTCPayServer.Services.Invoices var method = GetPaymentMethodDetails(); if (method == null) return 0.0m; - return method.GetNetworkFee(); + return method.GetNextNetworkFee(); } } diff --git a/BTCPayServer/Services/Invoices/InvoiceRepository.cs b/BTCPayServer/Services/Invoices/InvoiceRepository.cs index ba9f5bd19..314a90bfa 100644 --- a/BTCPayServer/Services/Invoices/InvoiceRepository.cs +++ b/BTCPayServer/Services/Invoices/InvoiceRepository.cs @@ -393,7 +393,7 @@ retry: paymentMethods = entity.GetPaymentMethods(null); var paymentMethodDetails = paymentMethods.TryGet(paymentEntity.GetPaymentMethodId())?.GetPaymentMethodDetails(); if (paymentMethodDetails != null) // == null should never happen, but we never know. - paymentEntity.NetworkFee = paymentMethodDetails.GetNetworkFee(); + paymentEntity.NetworkFee = paymentMethodDetails.GetNextNetworkFee(); } return paymentEntity; @@ -582,15 +582,15 @@ retry: #pragma warning restore CS0618 ReceivedTime = date.UtcDateTime, Accounted = accounted, - NetworkFee = paymentMethodDetails.GetNetworkFee() + NetworkFee = paymentMethodDetails.GetNextNetworkFee() }; entity.SetCryptoPaymentData(paymentData); if (paymentMethodDetails is Payments.Bitcoin.BitcoinLikeOnChainPaymentMethod bitcoinPaymentMethod && bitcoinPaymentMethod.NetworkFeeMode == NetworkFeeMode.MultiplePaymentsOnly && - bitcoinPaymentMethod.NetworkFee == Money.Zero) + bitcoinPaymentMethod.NextNetworkFee == Money.Zero) { - bitcoinPaymentMethod.NetworkFee = bitcoinPaymentMethod.FeeRate.GetFee(100); // assume price for 100 bytes + bitcoinPaymentMethod.NextNetworkFee = bitcoinPaymentMethod.FeeRate.GetFee(100); // assume price for 100 bytes paymentMethod.SetPaymentMethodDetails(bitcoinPaymentMethod); invoiceEntity.SetPaymentMethod(paymentMethod); invoice.Blob = ToBytes(invoiceEntity, network.NBitcoinNetwork);