mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-12 02:08:32 +01:00
wip
This commit is contained in:
parent
6366d2c053
commit
1258c46bf9
13 changed files with 84 additions and 63 deletions
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 &&
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")]
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 &&
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue