This commit is contained in:
Kukks 2023-06-01 11:55:42 +02:00
parent 6366d2c053
commit 1258c46bf9
No known key found for this signature in database
GPG key ID: 8E5530D9D1C93097
13 changed files with 84 additions and 63 deletions

View file

@ -9,6 +9,7 @@ using BTCPayServer.Abstractions.Constants;
using BTCPayServer.Data;
using BTCPayServer.Filters;
using BTCPayServer.Models;
using BTCPayServer.Payments;
using BTCPayServer.Rating;
using BTCPayServer.Security;
using BTCPayServer.Security.Bitpay;
@ -30,6 +31,7 @@ namespace BTCPayServer.Controllers
readonly BTCPayNetworkProvider _networkProvider;
readonly CurrencyNameTable _currencyNameTable;
readonly StoreRepository _storeRepo;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
private StoreData CurrentStore => HttpContext.GetStoreData();
@ -37,12 +39,13 @@ namespace BTCPayServer.Controllers
RateFetcher rateProviderFactory,
BTCPayNetworkProvider networkProvider,
StoreRepository storeRepo,
CurrencyNameTable currencyNameTable)
CurrencyNameTable currencyNameTable, PaymentTypeRegistry paymentTypeRegistry)
{
_rateProviderFactory = rateProviderFactory ?? throw new ArgumentNullException(nameof(rateProviderFactory));
_networkProvider = networkProvider;
_storeRepo = storeRepo;
_currencyNameTable = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
_paymentTypeRegistry = paymentTypeRegistry;
}
[Route("rates/{baseCurrency}")]
@ -50,7 +53,7 @@ namespace BTCPayServer.Controllers
[BitpayAPIConstraint]
public async Task<IActionResult> GetBaseCurrencyRates(string baseCurrency, CancellationToken cancellationToken)
{
var supportedMethods = CurrentStore.GetSupportedPaymentMethods(_networkProvider);
var supportedMethods = CurrentStore.GetSupportedPaymentMethods(_networkProvider, _paymentTypeRegistry);
var currencyCodes = supportedMethods.Where(method => !string.IsNullOrEmpty(method.PaymentId.CryptoCode))
.Select(method => method.PaymentId.CryptoCode).Distinct();

View file

@ -28,17 +28,19 @@ namespace BTCPayServer.Controllers.Greenfield
private readonly IOptions<LightningNetworkOptions> _lightningNetworkOptions;
private readonly LightningClientFactoryService _lightningClientFactory;
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
public GreenfieldStoreLightningNodeApiController(
IOptions<LightningNetworkOptions> lightningNetworkOptions,
LightningClientFactoryService lightningClientFactory, BTCPayNetworkProvider btcPayNetworkProvider,
PoliciesSettings policiesSettings,
IAuthorizationService authorizationService) : base(
IAuthorizationService authorizationService, PaymentTypeRegistry paymentTypeRegistry) : base(
btcPayNetworkProvider, policiesSettings, authorizationService)
{
_lightningNetworkOptions = lightningNetworkOptions;
_lightningClientFactory = lightningClientFactory;
_btcPayNetworkProvider = btcPayNetworkProvider;
_paymentTypeRegistry = paymentTypeRegistry;
}
[Authorize(Policy = Policies.CanUseLightningNodeInStore,
@ -151,7 +153,7 @@ namespace BTCPayServer.Controllers.Greenfield
}
var id = new PaymentMethodId(cryptoCode, LightningPaymentType.Instance);
var existing = store.GetSupportedPaymentMethods(_btcPayNetworkProvider)
var existing = store.GetSupportedPaymentMethods(_btcPayNetworkProvider, _paymentTypeRegistry)
.OfType<LightningSupportedPaymentMethod>()
.FirstOrDefault(d => d.PaymentId == id);
if (existing == null)

View file

@ -32,22 +32,25 @@ namespace BTCPayServer.Controllers.Greenfield
private StoreData Store => HttpContext.GetStoreData();
private readonly StoreRepository _storeRepository;
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
public GreenfieldStoreLNURLPayPaymentMethodsController(
StoreRepository storeRepository,
BTCPayNetworkProvider btcPayNetworkProvider)
BTCPayNetworkProvider btcPayNetworkProvider,
PaymentTypeRegistry paymentTypeRegistry)
{
_storeRepository = storeRepository;
_btcPayNetworkProvider = btcPayNetworkProvider;
_paymentTypeRegistry = paymentTypeRegistry;
}
public static IEnumerable<LNURLPayPaymentMethodData> GetLNURLPayPaymentMethods(StoreData store,
BTCPayNetworkProvider networkProvider, bool? enabled)
BTCPayNetworkProvider networkProvider, bool? enabled, PaymentTypeRegistry paymentTypeRegistry)
{
var blob = store.GetStoreBlob();
var excludedPaymentMethods = blob.GetExcludedPaymentMethods();
return store.GetSupportedPaymentMethods(networkProvider)
return store.GetSupportedPaymentMethods(networkProvider, paymentTypeRegistry)
.Where((method) => method.PaymentId.PaymentType == LNURLPayPaymentType.Instance)
.OfType<LNURLPaySupportedPaymentMethod>()
.Select(paymentMethod =>
@ -67,7 +70,7 @@ namespace BTCPayServer.Controllers.Greenfield
string storeId,
[FromQuery] bool? enabled)
{
return Ok(GetLNURLPayPaymentMethods(Store, _btcPayNetworkProvider, enabled));
return Ok(GetLNURLPayPaymentMethods(Store, _btcPayNetworkProvider, enabled, _paymentTypeRegistry));
}
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -110,7 +113,7 @@ namespace BTCPayServer.Controllers.Greenfield
AssertCryptoCodeWallet(cryptoCode, out _);
var lnMethod = GreenfieldStoreLightningNetworkPaymentMethodsController.GetExistingLightningLikePaymentMethod(_btcPayNetworkProvider,
cryptoCode, Store);
cryptoCode, Store, _paymentTypeRegistry);
if ((lnMethod is null || lnMethod.Enabled is false) && paymentMethodData.Enabled)
{
@ -143,7 +146,7 @@ namespace BTCPayServer.Controllers.Greenfield
var storeBlob = store.GetStoreBlob();
var id = new PaymentMethodId(cryptoCode, LNURLPayPaymentType.Instance);
var paymentMethod = store
.GetSupportedPaymentMethods(_btcPayNetworkProvider)
.GetSupportedPaymentMethods(_btcPayNetworkProvider, _paymentTypeRegistry)
.OfType<LNURLPaySupportedPaymentMethod>()
.FirstOrDefault(method => method.PaymentId == id);

View file

@ -37,27 +37,30 @@ namespace BTCPayServer.Controllers.Greenfield
private readonly StoreRepository _storeRepository;
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
private readonly IAuthorizationService _authorizationService;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
public GreenfieldStoreLightningNetworkPaymentMethodsController(
StoreRepository storeRepository,
BTCPayNetworkProvider btcPayNetworkProvider,
IAuthorizationService authorizationService,
ISettingsRepository settingsRepository,
PoliciesSettings policiesSettings)
PoliciesSettings policiesSettings,
PaymentTypeRegistry paymentTypeRegistry)
{
_storeRepository = storeRepository;
_btcPayNetworkProvider = btcPayNetworkProvider;
_authorizationService = authorizationService;
_paymentTypeRegistry = paymentTypeRegistry;
PoliciesSettings = policiesSettings;
}
public static IEnumerable<LightningNetworkPaymentMethodData> GetLightningPaymentMethods(StoreData store,
BTCPayNetworkProvider networkProvider, bool? enabled)
BTCPayNetworkProvider networkProvider, bool? enabled, PaymentTypeRegistry paymentTypeRegistry)
{
var blob = store.GetStoreBlob();
var excludedPaymentMethods = blob.GetExcludedPaymentMethods();
return store.GetSupportedPaymentMethods(networkProvider)
return store.GetSupportedPaymentMethods(networkProvider, paymentTypeRegistry )
.Where((method) => method.PaymentId.PaymentType == LightningPaymentType.Instance)
.OfType<LightningSupportedPaymentMethod>()
.Select(paymentMethod =>
@ -79,7 +82,7 @@ namespace BTCPayServer.Controllers.Greenfield
string storeId,
[FromQuery] bool? enabled)
{
return Ok(GetLightningPaymentMethods(Store, _btcPayNetworkProvider, enabled));
return Ok(GetLightningPaymentMethods(Store, _btcPayNetworkProvider, enabled, _paymentTypeRegistry));
}
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -88,7 +91,7 @@ namespace BTCPayServer.Controllers.Greenfield
{
AssertSupportLightning(cryptoCode);
var method = GetExistingLightningLikePaymentMethod(_btcPayNetworkProvider, cryptoCode, Store);
var method = GetExistingLightningLikePaymentMethod(_btcPayNetworkProvider, cryptoCode, Store, _paymentTypeRegistry);
if (method is null)
{
throw ErrorPaymentMethodNotConfigured();
@ -137,7 +140,7 @@ namespace BTCPayServer.Controllers.Greenfield
LightningSupportedPaymentMethod? paymentMethod = null;
var store = Store;
var storeBlob = store.GetStoreBlob();
var existing = GetExistingLightningLikePaymentMethod(_btcPayNetworkProvider, cryptoCode, store);
var existing = GetExistingLightningLikePaymentMethod(_btcPayNetworkProvider, cryptoCode, store, _paymentTypeRegistry);
if (existing == null || existing.ConnectionString != request.ConnectionString)
{
if (request.ConnectionString == LightningSupportedPaymentMethod.InternalNode)
@ -187,17 +190,17 @@ namespace BTCPayServer.Controllers.Greenfield
storeBlob.SetExcluded(paymentMethodId, !request.Enabled);
store.SetStoreBlob(storeBlob);
await _storeRepository.UpdateStore(store);
return Ok(GetExistingLightningLikePaymentMethod(_btcPayNetworkProvider, cryptoCode, store));
return Ok(GetExistingLightningLikePaymentMethod(_btcPayNetworkProvider, cryptoCode, store, _paymentTypeRegistry));
}
public static LightningNetworkPaymentMethodData? GetExistingLightningLikePaymentMethod(BTCPayNetworkProvider btcPayNetworkProvider, string cryptoCode,
StoreData store)
StoreData store, PaymentTypeRegistry paymentTypeRegistry)
{
var storeBlob = store.GetStoreBlob();
var id = new PaymentMethodId(cryptoCode, LightningPaymentType.Instance);
var paymentMethod = store
.GetSupportedPaymentMethods(btcPayNetworkProvider)
.GetSupportedPaymentMethods(btcPayNetworkProvider, paymentTypeRegistry)
.OfType<LightningSupportedPaymentMethod>()
.FirstOrDefault(method => method.PaymentId == id);

View file

@ -38,6 +38,7 @@ namespace BTCPayServer.Controllers.Greenfield
private readonly IAuthorizationService _authorizationService;
private readonly ExplorerClientProvider _explorerClientProvider;
private readonly EventAggregator _eventAggregator;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
public GreenfieldStoreOnChainPaymentMethodsController(
StoreRepository storeRepository,
@ -46,7 +47,8 @@ namespace BTCPayServer.Controllers.Greenfield
IAuthorizationService authorizationService,
ExplorerClientProvider explorerClientProvider,
PoliciesSettings policiesSettings,
EventAggregator eventAggregator)
EventAggregator eventAggregator,
PaymentTypeRegistry paymentTypeRegistry)
{
_storeRepository = storeRepository;
_btcPayNetworkProvider = btcPayNetworkProvider;
@ -54,16 +56,17 @@ namespace BTCPayServer.Controllers.Greenfield
_authorizationService = authorizationService;
_explorerClientProvider = explorerClientProvider;
_eventAggregator = eventAggregator;
_paymentTypeRegistry = paymentTypeRegistry;
PoliciesSettings = policiesSettings;
}
public static IEnumerable<OnChainPaymentMethodData> GetOnChainPaymentMethods(StoreData store,
BTCPayNetworkProvider networkProvider, bool? enabled)
BTCPayNetworkProvider networkProvider, bool? enabled, PaymentTypeRegistry paymentTypeRegistry)
{
var blob = store.GetStoreBlob();
var excludedPaymentMethods = blob.GetExcludedPaymentMethods();
return store.GetSupportedPaymentMethods(networkProvider)
return store.GetSupportedPaymentMethods(networkProvider, paymentTypeRegistry)
.Where((method) => method.PaymentId.PaymentType == BitcoinPaymentType.Instance)
.OfType<DerivationSchemeSettings>()
.Select(strategy =>
@ -81,7 +84,7 @@ namespace BTCPayServer.Controllers.Greenfield
string storeId,
[FromQuery] bool? enabled)
{
return Ok(GetOnChainPaymentMethods(Store, _btcPayNetworkProvider, enabled));
return Ok(GetOnChainPaymentMethods(Store, _btcPayNetworkProvider, enabled, _paymentTypeRegistry));
}
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -295,7 +298,7 @@ namespace BTCPayServer.Controllers.Greenfield
var storeBlob = store.GetStoreBlob();
var id = new PaymentMethodId(cryptoCode, BitcoinPaymentType.Instance);
var paymentMethod = store
.GetSupportedPaymentMethods(_btcPayNetworkProvider)
.GetSupportedPaymentMethods(_btcPayNetworkProvider, _paymentTypeRegistry)
.OfType<DerivationSchemeSettings>()
.FirstOrDefault(method => method.PaymentId == id);

View file

@ -14,6 +14,7 @@ using BTCPayServer.Client.Models;
using BTCPayServer.Data;
using BTCPayServer.HostedServices;
using BTCPayServer.Models.WalletViewModels;
using BTCPayServer.Payments;
using BTCPayServer.Payments.PayJoin;
using BTCPayServer.Payments.PayJoin.Sender;
using BTCPayServer.Services;
@ -54,6 +55,7 @@ namespace BTCPayServer.Controllers.Greenfield
private readonly WalletReceiveService _walletReceiveService;
private readonly IFeeProviderFactory _feeProviderFactory;
private readonly UTXOLocker _utxoLocker;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
public GreenfieldStoreOnChainWalletsController(
IAuthorizationService authorizationService,
@ -69,7 +71,8 @@ namespace BTCPayServer.Controllers.Greenfield
EventAggregator eventAggregator,
WalletReceiveService walletReceiveService,
IFeeProviderFactory feeProviderFactory,
UTXOLocker utxoLocker
UTXOLocker utxoLocker,
PaymentTypeRegistry paymentTypeRegistry
)
{
_authorizationService = authorizationService;
@ -86,6 +89,7 @@ namespace BTCPayServer.Controllers.Greenfield
_walletReceiveService = walletReceiveService;
_feeProviderFactory = feeProviderFactory;
_utxoLocker = utxoLocker;
_paymentTypeRegistry = paymentTypeRegistry;
}
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -801,7 +805,7 @@ namespace BTCPayServer.Controllers.Greenfield
private DerivationSchemeSettings? GetDerivationSchemeSettings(string cryptoCode)
{
var paymentMethod = Store
.GetSupportedPaymentMethods(_btcPayNetworkProvider)
.GetSupportedPaymentMethods(_btcPayNetworkProvider, _paymentTypeRegistry)
.OfType<DerivationSchemeSettings>()
.FirstOrDefault(p =>
p.PaymentId.PaymentType == Payments.BitcoinPaymentType.Instance &&

View file

@ -6,6 +6,7 @@ using BTCPayServer.Abstractions.Constants;
using BTCPayServer.Client;
using BTCPayServer.Client.Models;
using BTCPayServer.Data;
using BTCPayServer.Payments;
using BTCPayServer.Security;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors;
@ -22,11 +23,13 @@ namespace BTCPayServer.Controllers.Greenfield
private StoreData Store => HttpContext.GetStoreData();
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
private readonly IAuthorizationService _authorizationService;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
public GreenfieldStorePaymentMethodsController(BTCPayNetworkProvider btcPayNetworkProvider, IAuthorizationService authorizationService)
public GreenfieldStorePaymentMethodsController(BTCPayNetworkProvider btcPayNetworkProvider, IAuthorizationService authorizationService, PaymentTypeRegistry paymentTypeRegistry)
{
_btcPayNetworkProvider = btcPayNetworkProvider;
_authorizationService = authorizationService;
_paymentTypeRegistry = paymentTypeRegistry;
}
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -40,7 +43,7 @@ namespace BTCPayServer.Controllers.Greenfield
var canModifyStore = (await _authorizationService.AuthorizeAsync(User, null,
new PolicyRequirement(Policies.CanModifyStoreSettings))).Succeeded;
;
return Ok(Store.GetSupportedPaymentMethods(_btcPayNetworkProvider)
return Ok(Store.GetSupportedPaymentMethods(_btcPayNetworkProvider, _paymentTypeRegistry)
.Where(method =>
enabled is null || (enabled is false && excludedPaymentMethods.Match(method.PaymentId)))
.ToDictionary(

View file

@ -40,7 +40,7 @@ namespace BTCPayServer.Controllers.Greenfield
public Task<ActionResult<IEnumerable<Client.Models.StoreData>>> GetStores()
{
var stores = HttpContext.GetStoresData();
return Task.FromResult<ActionResult<IEnumerable<Client.Models.StoreData>>>(Ok(stores.Select(FromModel)));
return Task.FromResult<ActionResult<IEnumerable<Client.Models.StoreData>>>(Ok(stores.Select(data => FromModel(data, _paymentTypeRegistry))));
}
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -52,7 +52,7 @@ namespace BTCPayServer.Controllers.Greenfield
{
return StoreNotFound();
}
return Ok(FromModel(store));
return Ok(FromModel(store, _paymentTypeRegistry));
}
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -89,7 +89,7 @@ namespace BTCPayServer.Controllers.Greenfield
_paymentTypeRegistry.TryParsePaymentMethod(request.DefaultPaymentMethod, out var defaultPaymentMethodId);
ToModel(request, store, defaultPaymentMethodId);
await _storeRepository.CreateStore(_userManager.GetUserId(User), store);
return Ok(FromModel(store));
return Ok(FromModel(store, _paymentTypeRegistry));
}
[Authorize(Policy = Policies.CanModifyStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
@ -111,10 +111,10 @@ namespace BTCPayServer.Controllers.Greenfield
ToModel(request, store, defaultPaymentMethodId);
await _storeRepository.UpdateStore(store);
return Ok(FromModel(store));
return Ok(FromModel(store, _paymentTypeRegistry));
}
internal static Client.Models.StoreData FromModel(Data.StoreData data)
internal static Client.Models.StoreData FromModel(StoreData data, PaymentTypeRegistry paymentTypeRegistry)
{
var storeBlob = data.GetStoreBlob();
return new Client.Models.StoreData
@ -124,7 +124,7 @@ namespace BTCPayServer.Controllers.Greenfield
Website = data.StoreWebsite,
SupportUrl = storeBlob.StoreSupportUrl,
SpeedPolicy = data.SpeedPolicy,
DefaultPaymentMethod = data.GetDefaultPaymentId()?.ToStringNormalized(),
DefaultPaymentMethod = data.GetDefaultPaymentId(paymentTypeRegistry)?.ToStringNormalized(),
//blob
//we do not include DefaultCurrencyPairs,Spread, PreferredExchange, RateScripting, RateScript in this model and instead opt to set it in stores/storeid/rates endpoints
//we do not include ExcludedPaymentMethods in this model and instead opt to set it in stores/storeid/payment-methods endpoints

View file

@ -3,6 +3,7 @@ using System.Threading.Tasks;
using BTCPayServer.Abstractions.Constants;
using BTCPayServer.Client;
using BTCPayServer.Data;
using BTCPayServer.Payments;
using BTCPayServer.Security;
using BTCPayServer.Services.Stores;
using Microsoft.AspNetCore.Authorization;
@ -22,14 +23,12 @@ namespace BTCPayServer.Controllers.Greenfield
public class GreenfieldTestApiKeyController : ControllerBase
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly StoreRepository _storeRepository;
private readonly BTCPayServerClient _localBTCPayServerClient;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
public GreenfieldTestApiKeyController(UserManager<ApplicationUser> userManager, StoreRepository storeRepository, BTCPayServerClient localBTCPayServerClient)
public GreenfieldTestApiKeyController(UserManager<ApplicationUser> userManager, PaymentTypeRegistry paymentTypeRegistry)
{
_userManager = userManager;
_storeRepository = storeRepository;
_localBTCPayServerClient = localBTCPayServerClient;
_paymentTypeRegistry = paymentTypeRegistry;
}
[HttpGet("me/id")]
@ -57,7 +56,7 @@ namespace BTCPayServer.Controllers.Greenfield
[Authorize(Policy = Policies.CanViewStoreSettings, AuthenticationSchemes = AuthenticationSchemes.Greenfield)]
public BTCPayServer.Client.Models.StoreData[] GetCurrentUserStores()
{
return this.HttpContext.GetStoresData().Select(Greenfield.GreenfieldStoresController.FromModel).ToArray();
return this.HttpContext.GetStoresData().Select(data => Greenfield.GreenfieldStoresController.FromModel(data, _paymentTypeRegistry)).ToArray();
}
[HttpGet("me/stores/{storeId}/can-view")]

View file

@ -66,6 +66,7 @@ namespace BTCPayServer.Controllers
private readonly DelayedTransactionBroadcaster _broadcaster;
private readonly PayjoinClient _payjoinClient;
private readonly LabelService _labelService;
private readonly PaymentTypeRegistry _paymentTypeRegistry;
private readonly PullPaymentHostedService _pullPaymentHostedService;
private readonly WalletHistogramService _walletHistogramService;
@ -89,10 +90,12 @@ namespace BTCPayServer.Controllers
PayjoinClient payjoinClient,
IServiceProvider serviceProvider,
PullPaymentHostedService pullPaymentHostedService,
LabelService labelService)
LabelService labelService,
PaymentTypeRegistry paymentTypeRegistry)
{
_currencyTable = currencyTable;
_labelService = labelService;
_paymentTypeRegistry = paymentTypeRegistry;
Repository = repo;
WalletRepository = walletRepository;
RateFetcher = rateProvider;
@ -171,7 +174,7 @@ namespace BTCPayServer.Controllers
var stores = await Repository.GetStoresByUserId(GetUserId());
var onChainWallets = stores
.SelectMany(s => s.GetSupportedPaymentMethods(NetworkProvider)
.SelectMany(s => s.GetSupportedPaymentMethods(NetworkProvider, _paymentTypeRegistry)
.OfType<DerivationSchemeSettings>()
.Select(d => ((Wallet: _walletProvider.GetWallet(d.Network),
DerivationStrategy: d.AccountDerivation,

View file

@ -24,15 +24,15 @@ namespace BTCPayServer.Data
return defaultPaymentId;
}
public static PaymentMethodId[] GetEnabledPaymentIds(this StoreData storeData, BTCPayNetworkProvider networks)
public static PaymentMethodId[] GetEnabledPaymentIds(this StoreData storeData, BTCPayNetworkProvider networks, PaymentTypeRegistry paymentTypeRegistry)
{
return GetEnabledPaymentMethods(storeData, networks).Select(method => method.PaymentId).ToArray();
return GetEnabledPaymentMethods(storeData, networks, paymentTypeRegistry).Select(method => method.PaymentId).ToArray();
}
public static ISupportedPaymentMethod[] GetEnabledPaymentMethods(this StoreData storeData, BTCPayNetworkProvider networks)
public static ISupportedPaymentMethod[] GetEnabledPaymentMethods(this StoreData storeData, BTCPayNetworkProvider networks, PaymentTypeRegistry paymentTypeRegistry)
{
var excludeFilter = storeData.GetStoreBlob().GetExcludedPaymentMethods();
var paymentMethodIds = storeData.GetSupportedPaymentMethods(networks)
var paymentMethodIds = storeData.GetSupportedPaymentMethods(networks, paymentTypeRegistry)
.Where(a => !excludeFilter.Match(a.PaymentId))
.OrderByDescending(a => a.PaymentId.CryptoCode == "BTC")
.ThenBy(a => a.PaymentId.CryptoCode)
@ -69,7 +69,7 @@ namespace BTCPayServer.Data
return true;
}
public static IEnumerable<ISupportedPaymentMethod> GetSupportedPaymentMethods(this StoreData storeData, BTCPayNetworkProvider networks)
public static IEnumerable<ISupportedPaymentMethod> GetSupportedPaymentMethods(this StoreData storeData, BTCPayNetworkProvider networks, PaymentTypeRegistry paymentTypeRegistry)
{
ArgumentNullException.ThrowIfNull(storeData);
#pragma warning disable CS0618
@ -80,7 +80,7 @@ namespace BTCPayServer.Data
JObject strategies = JObject.Parse(storeData.DerivationStrategies);
foreach (var strat in strategies.Properties())
{
if (!_paymentTypeRegistry.TryParsePaymentMethod(strat.Name, out var paymentMethodId))
if (!paymentTypeRegistry.TryParsePaymentMethod(strat.Name, out var paymentMethodId))
{
continue;
}
@ -127,11 +127,8 @@ namespace BTCPayServer.Data
bool existing = false;
foreach (var strat in strategies.Properties().ToList())
{
if (!_paymentTypeRegistry.TryParsePaymentMethod(strat.Name, out var stratId))
{
continue;
}
if (stratId == paymentMethodId)
if (strat.Name == paymentMethodId.PaymentType.GetPaymentMethodId(paymentMethodId))
{
if (supportedPaymentMethod == null)
{
@ -151,19 +148,19 @@ namespace BTCPayServer.Data
#pragma warning restore CS0618
}
public static bool IsLightningEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode)
public static bool IsLightningEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode, PaymentTypeRegistry paymentTypeRegistry)
{
return IsPaymentTypeEnabled(storeData, networks, cryptoCode, LightningPaymentType.Instance);
return IsPaymentTypeEnabled(storeData, networks, cryptoCode, LightningPaymentType.Instance, paymentTypeRegistry);
}
public static bool IsLNUrlEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode)
public static bool IsLNUrlEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode, PaymentTypeRegistry paymentTypeRegistry)
{
return IsPaymentTypeEnabled(storeData, networks, cryptoCode, LNURLPayPaymentType.Instance);
return IsPaymentTypeEnabled(storeData, networks, cryptoCode, LNURLPayPaymentType.Instance, paymentTypeRegistry);
}
private static bool IsPaymentTypeEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode, PaymentType paymentType)
private static bool IsPaymentTypeEnabled(this StoreData storeData, BTCPayNetworkProvider networks, string cryptoCode, PaymentType paymentType, PaymentTypeRegistry paymentTypeRegistry)
{
var paymentMethods = storeData.GetSupportedPaymentMethods(networks);
var paymentMethods = storeData.GetSupportedPaymentMethods(networks, paymentTypeRegistry);
var excludeFilters = storeData.GetStoreBlob().GetExcludedPaymentMethods();
return paymentMethods.Any(method =>
method.PaymentId.CryptoCode == cryptoCode &&

View file

@ -125,9 +125,9 @@ namespace BTCPayServer
return services;
}
public static PaymentMethodId GetpaymentMethodId(this InvoiceCryptoInfo info)
public static PaymentMethodId GetpaymentMethodId(this InvoiceCryptoInfo info, PaymentTypeRegistry paymentTypeRegistry)
{
return new PaymentMethodId(info.CryptoCode, PaymentTypes.Parse(info.PaymentType));
return new PaymentMethodId(info.CryptoCode, paymentTypeRegistry.Parse(info.PaymentType));
}
public static async Task CloseSocket(this WebSocket webSocket)

View file

@ -2,6 +2,7 @@ using System.Reflection;
using System.Threading.Tasks;
using BTCPayServer.Payments;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.DependencyInjection;
namespace BTCPayServer.ModelBinders
{
@ -21,8 +22,8 @@ namespace BTCPayServer.ModelBinders
{
return Task.CompletedTask;
}
if (_paymentTypeRegistry.TryParsePaymentMethod(key, out var paymentId))
var paymentTypeRegistry = bindingContext.HttpContext.RequestServices.GetRequiredService<PaymentTypeRegistry>();
if (paymentTypeRegistry.TryParsePaymentMethod(key, out var paymentId))
{
bindingContext.Result = ModelBindingResult.Success(paymentId);
}