diff --git a/BTCPayServer.Abstractions/Contracts/IStoreRepository.cs b/BTCPayServer.Abstractions/Contracts/IStoreRepository.cs index 12e4cad82..c36bef21f 100644 --- a/BTCPayServer.Abstractions/Contracts/IStoreRepository.cs +++ b/BTCPayServer.Abstractions/Contracts/IStoreRepository.cs @@ -1,4 +1,5 @@ #nullable enable +using System.Collections.Generic; using System.Threading.Tasks; namespace BTCPayServer.Abstractions.Contracts; @@ -6,5 +7,6 @@ namespace BTCPayServer.Abstractions.Contracts; public interface IStoreRepository { Task GetSettingAsync(string storeId, string name) where T : class; + Task> GetSettingsAsync(string name) where T : class; Task UpdateSetting(string storeId, string name, T obj) where T : class; } diff --git a/BTCPayServer.Tests/GreenfieldAPITests.cs b/BTCPayServer.Tests/GreenfieldAPITests.cs index 7e5fdacee..e7fe044d1 100644 --- a/BTCPayServer.Tests/GreenfieldAPITests.cs +++ b/BTCPayServer.Tests/GreenfieldAPITests.cs @@ -18,6 +18,7 @@ using BTCPayServer.Services.Custodian.Client.MockCustodian; using BTCPayServer.Services; using BTCPayServer.Services.Notifications; using BTCPayServer.Services.Notifications.Blobs; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using NBitcoin; @@ -58,8 +59,19 @@ namespace BTCPayServer.Tests var s = await client.GetStores(); var store = await client.GetStore(user.StoreId); Assert.NotNull(store); - var addr = await client.GetLightningDepositAddress(user.StoreId,"BTC"); + var addr = await client.GetLightningDepositAddress(user.StoreId, "BTC"); Assert.NotNull(BitcoinAddress.Create(addr, Network.RegTest)); + + await user.CreateStoreAsync(); + var store1 = user.StoreId; + await user.CreateStoreAsync(); + var store2 = user.StoreId; + var store1Client = await factory.Create(null, store1); + var store2Client = await factory.Create(null, store2); + var store1Res = await store1Client.GetStore(store1); + var store2Res = await store2Client.GetStore(store2); + Assert.Equal(store1, store1Res.Id); + Assert.Equal(store2, store2Res.Id); } [Fact(Timeout = TestTimeout)] diff --git a/BTCPayServer/BTCPayServer.csproj b/BTCPayServer/BTCPayServer.csproj index 30339e591..5b7ddce0b 100644 --- a/BTCPayServer/BTCPayServer.csproj +++ b/BTCPayServer/BTCPayServer.csproj @@ -90,8 +90,8 @@ - - + + diff --git a/BTCPayServer/Controllers/GreenField/LocalBTCPayServerClient.cs b/BTCPayServer/Controllers/GreenField/LocalBTCPayServerClient.cs index fc308770a..84f51a657 100644 --- a/BTCPayServer/Controllers/GreenField/LocalBTCPayServerClient.cs +++ b/BTCPayServer/Controllers/GreenField/LocalBTCPayServerClient.cs @@ -40,105 +40,19 @@ namespace BTCPayServer.Controllers.Greenfield { private readonly StoreRepository _storeRepository; private readonly IOptionsMonitor _identityOptions; - private readonly GreenfieldStoreOnChainPaymentMethodsController _chainPaymentMethodsController; - private readonly GreenfieldStoreOnChainWalletsController _storeOnChainWalletsController; - - private readonly GreenfieldStoreLightningNetworkPaymentMethodsController - _storeLightningNetworkPaymentMethodsController; - - private readonly GreenfieldStoreLNURLPayPaymentMethodsController _storeLnurlPayPaymentMethodsController; - private readonly GreenfieldHealthController _healthController; - private readonly GreenfieldPaymentRequestsController _paymentRequestController; - private readonly GreenfieldApiKeysController _apiKeysController; - private readonly GreenfieldNotificationsController _notificationsController; - private readonly GreenfieldUsersController _usersController; - private readonly GreenfieldStoresController _storesController; - private readonly GreenfieldInternalLightningNodeApiController _internalLightningNodeApiController; - private readonly GreenfieldStoreLightningNodeApiController _storeLightningNodeApiController; - private readonly GreenfieldInvoiceController _greenFieldInvoiceController; private readonly UserManager _userManager; - private readonly GreenfieldServerInfoController _greenFieldServerInfoController; - private readonly GreenfieldStoreWebhooksController _storeWebhooksController; - private readonly GreenfieldPullPaymentController _greenfieldPullPaymentController; - private readonly UIHomeController _homeController; - private readonly GreenfieldStorePaymentMethodsController _storePaymentMethodsController; - private readonly GreenfieldStoreEmailController _greenfieldStoreEmailController; - private readonly GreenfieldStoreUsersController _greenfieldStoreUsersController; - private readonly GreenfieldStorePayoutProcessorsController _greenfieldStorePayoutProcessorsController; - private readonly GreenfieldPayoutProcessorsController _greenfieldPayoutProcessorsController; - - private readonly GreenfieldStoreAutomatedOnChainPayoutProcessorsController - _greenfieldStoreAutomatedOnChainPayoutProcessorsController; - - private readonly GreenfieldStoreAutomatedLightningPayoutProcessorsController - _greenfieldStoreAutomatedLightningPayoutProcessorsController; - - private readonly GreenfieldAppsController _greenFieldAppsController; private readonly IServiceProvider _serviceProvider; - public BTCPayServerClientFactory(StoreRepository storeRepository, + public BTCPayServerClientFactory( + StoreRepository storeRepository, IOptionsMonitor identityOptions, - GreenfieldStoreOnChainPaymentMethodsController chainPaymentMethodsController, - GreenfieldStoreOnChainWalletsController storeOnChainWalletsController, - GreenfieldStoreLightningNetworkPaymentMethodsController storeLightningNetworkPaymentMethodsController, - GreenfieldStoreLNURLPayPaymentMethodsController storeLnurlPayPaymentMethodsController, - GreenfieldHealthController healthController, - GreenfieldPaymentRequestsController paymentRequestController, - GreenfieldApiKeysController apiKeysController, - GreenfieldNotificationsController notificationsController, - GreenfieldUsersController usersController, - GreenfieldStoresController storesController, - GreenfieldInternalLightningNodeApiController internalLightningNodeApiController, - GreenfieldStoreLightningNodeApiController storeLightningNodeApiController, - GreenfieldInvoiceController greenFieldInvoiceController, UserManager userManager, - GreenfieldServerInfoController greenFieldServerInfoController, - GreenfieldStoreWebhooksController storeWebhooksController, - GreenfieldPullPaymentController greenfieldPullPaymentController, - UIHomeController homeController, - GreenfieldStorePaymentMethodsController storePaymentMethodsController, - GreenfieldStoreEmailController greenfieldStoreEmailController, - GreenfieldStoreUsersController greenfieldStoreUsersController, - GreenfieldStorePayoutProcessorsController greenfieldStorePayoutProcessorsController, - GreenfieldPayoutProcessorsController greenfieldPayoutProcessorsController, - GreenfieldStoreAutomatedOnChainPayoutProcessorsController - greenfieldStoreAutomatedOnChainPayoutProcessorsController, - GreenfieldStoreAutomatedLightningPayoutProcessorsController - greenfieldStoreAutomatedLightningPayoutProcessorsController, - GreenfieldAppsController greenFieldAppsController, IServiceProvider serviceProvider) { _storeRepository = storeRepository; _identityOptions = identityOptions; - _chainPaymentMethodsController = chainPaymentMethodsController; - _storeOnChainWalletsController = storeOnChainWalletsController; - _storeLightningNetworkPaymentMethodsController = storeLightningNetworkPaymentMethodsController; - _storeLnurlPayPaymentMethodsController = storeLnurlPayPaymentMethodsController; - _healthController = healthController; - _paymentRequestController = paymentRequestController; - _apiKeysController = apiKeysController; - _notificationsController = notificationsController; - _usersController = usersController; - _storesController = storesController; - _internalLightningNodeApiController = internalLightningNodeApiController; - _storeLightningNodeApiController = storeLightningNodeApiController; - _greenFieldInvoiceController = greenFieldInvoiceController; _userManager = userManager; - _greenFieldServerInfoController = greenFieldServerInfoController; - _storeWebhooksController = storeWebhooksController; - _greenfieldPullPaymentController = greenfieldPullPaymentController; - _homeController = homeController; - _storePaymentMethodsController = storePaymentMethodsController; - _greenfieldStoreEmailController = greenfieldStoreEmailController; - _greenfieldStoreUsersController = greenfieldStoreUsersController; - _greenfieldStorePayoutProcessorsController = greenfieldStorePayoutProcessorsController; - _greenfieldPayoutProcessorsController = greenfieldPayoutProcessorsController; - _greenfieldStoreAutomatedOnChainPayoutProcessorsController = - greenfieldStoreAutomatedOnChainPayoutProcessorsController; - _greenfieldStoreAutomatedLightningPayoutProcessorsController = - greenfieldStoreAutomatedLightningPayoutProcessorsController; - _greenFieldAppsController = greenFieldAppsController; _serviceProvider = serviceProvider; } @@ -193,37 +107,12 @@ namespace BTCPayServer.Controllers.Greenfield context.SetStoresData(await _storeRepository.GetStoresByUserId(userId)); } - return new LocalBTCPayServerClient( - _serviceProvider, - _chainPaymentMethodsController, - _storeOnChainWalletsController, - _healthController, - _paymentRequestController, - _apiKeysController, - _notificationsController, - _usersController, - _storesController, - _storeLightningNodeApiController, - _internalLightningNodeApiController, - _storeLightningNetworkPaymentMethodsController, - _storeLnurlPayPaymentMethodsController, - _greenFieldInvoiceController, - _greenFieldServerInfoController, - _storeWebhooksController, - _greenfieldPullPaymentController, - _homeController, - _storePaymentMethodsController, - _greenfieldStoreEmailController, - _greenfieldStoreUsersController, - _greenfieldStorePayoutProcessorsController, - _greenfieldPayoutProcessorsController, - _greenfieldStoreAutomatedOnChainPayoutProcessorsController, - _greenfieldStoreAutomatedLightningPayoutProcessorsController, - _greenFieldAppsController, - new LocalHttpContextAccessor() {HttpContext = context} - ); + return ActivatorUtilities.CreateInstance(_serviceProvider, + new LocalHttpContextAccessor() {HttpContext = context}); + } } + public class LocalHttpContextAccessor : IHttpContextAccessor { @@ -232,139 +121,46 @@ namespace BTCPayServer.Controllers.Greenfield public class LocalBTCPayServerClient : BTCPayServerClient { - private readonly GreenfieldStoreOnChainPaymentMethodsController _chainPaymentMethodsController; - private readonly GreenfieldStoreOnChainWalletsController _storeOnChainWalletsController; - private readonly GreenfieldHealthController _healthController; - private readonly GreenfieldPaymentRequestsController _paymentRequestController; - private readonly GreenfieldApiKeysController _apiKeysController; - private readonly GreenfieldNotificationsController _notificationsController; - private readonly GreenfieldUsersController _usersController; - private readonly GreenfieldStoresController _storesController; - private readonly GreenfieldStoreLightningNodeApiController _storeLightningNodeApiController; - private readonly GreenfieldInternalLightningNodeApiController _lightningNodeApiController; - - private readonly GreenfieldStoreLightningNetworkPaymentMethodsController - _storeLightningNetworkPaymentMethodsController; - - private readonly GreenfieldStoreLNURLPayPaymentMethodsController _storeLnurlPayPaymentMethodsController; - private readonly GreenfieldInvoiceController _greenFieldInvoiceController; - private readonly GreenfieldServerInfoController _greenFieldServerInfoController; - private readonly GreenfieldStoreWebhooksController _storeWebhooksController; - private readonly GreenfieldPullPaymentController _greenfieldPullPaymentController; - private readonly UIHomeController _homeController; - private readonly GreenfieldStorePaymentMethodsController _storePaymentMethodsController; - private readonly GreenfieldStoreEmailController _greenfieldStoreEmailController; - private readonly GreenfieldStorePayoutProcessorsController _greenfieldStorePayoutProcessorsController; - private readonly GreenfieldPayoutProcessorsController _greenfieldPayoutProcessorsController; - - private readonly GreenfieldStoreAutomatedOnChainPayoutProcessorsController - _greenfieldStoreAutomatedOnChainPayoutProcessorsController; - - private readonly GreenfieldStoreAutomatedLightningPayoutProcessorsController - _greenfieldStoreAutomatedLightningPayoutProcessorsController; - - private readonly GreenfieldStoreUsersController _greenfieldStoreUsersController; - - private readonly GreenfieldAppsController _greenFieldAppsController; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IServiceProvider _serviceProvider; + public LocalBTCPayServerClient( - IServiceProvider serviceProvider, - GreenfieldStoreOnChainPaymentMethodsController chainPaymentMethodsController, - GreenfieldStoreOnChainWalletsController storeOnChainWalletsController, - GreenfieldHealthController healthController, - GreenfieldPaymentRequestsController paymentRequestController, - GreenfieldApiKeysController apiKeysController, - GreenfieldNotificationsController notificationsController, - GreenfieldUsersController usersController, - GreenfieldStoresController storesController, - GreenfieldStoreLightningNodeApiController storeLightningNodeApiController, - GreenfieldInternalLightningNodeApiController lightningNodeApiController, - GreenfieldStoreLightningNetworkPaymentMethodsController storeLightningNetworkPaymentMethodsController, - GreenfieldStoreLNURLPayPaymentMethodsController storeLnurlPayPaymentMethodsController, - GreenfieldInvoiceController greenFieldInvoiceController, - GreenfieldServerInfoController greenFieldServerInfoController, - GreenfieldStoreWebhooksController storeWebhooksController, - GreenfieldPullPaymentController greenfieldPullPaymentController, - UIHomeController homeController, - GreenfieldStorePaymentMethodsController storePaymentMethodsController, - GreenfieldStoreEmailController greenfieldStoreEmailController, - GreenfieldStoreUsersController greenfieldStoreUsersController, - GreenfieldStorePayoutProcessorsController greenfieldStorePayoutProcessorsController, - GreenfieldPayoutProcessorsController greenfieldPayoutProcessorsController, - GreenfieldStoreAutomatedOnChainPayoutProcessorsController - greenfieldStoreAutomatedOnChainPayoutProcessorsController, - GreenfieldStoreAutomatedLightningPayoutProcessorsController - greenfieldStoreAutomatedLightningPayoutProcessorsController, - GreenfieldAppsController greenFieldAppsController, - IHttpContextAccessor httpContextAccessor) : base(new Uri("https://dummy.local"), "", "") + IHttpContextAccessor httpContextAccessor, + IServiceProvider serviceProvider) : base(new Uri("https://dummy.local"), "", "") { - _chainPaymentMethodsController = chainPaymentMethodsController; - _storeOnChainWalletsController = storeOnChainWalletsController; - _healthController = healthController; - _paymentRequestController = paymentRequestController; - _apiKeysController = apiKeysController; - _notificationsController = notificationsController; - _usersController = usersController; - _storesController = storesController; - _storeLightningNodeApiController = storeLightningNodeApiController; - _lightningNodeApiController = lightningNodeApiController; - _storeLightningNetworkPaymentMethodsController = storeLightningNetworkPaymentMethodsController; - _storeLnurlPayPaymentMethodsController = storeLnurlPayPaymentMethodsController; - _greenFieldInvoiceController = greenFieldInvoiceController; - _greenFieldServerInfoController = greenFieldServerInfoController; - _storeWebhooksController = storeWebhooksController; - _greenfieldPullPaymentController = greenfieldPullPaymentController; - _homeController = homeController; - _storePaymentMethodsController = storePaymentMethodsController; - _greenfieldStoreEmailController = greenfieldStoreEmailController; - _greenfieldStoreUsersController = greenfieldStoreUsersController; - _greenfieldStorePayoutProcessorsController = greenfieldStorePayoutProcessorsController; - _greenfieldPayoutProcessorsController = greenfieldPayoutProcessorsController; - _greenfieldStoreAutomatedOnChainPayoutProcessorsController = - greenfieldStoreAutomatedOnChainPayoutProcessorsController; - _greenfieldStoreAutomatedLightningPayoutProcessorsController = - greenfieldStoreAutomatedLightningPayoutProcessorsController; - _greenFieldAppsController = greenFieldAppsController; + _httpContextAccessor = httpContextAccessor; + _serviceProvider = serviceProvider; + } - var controllers = new[] + + private T GetController() where T : ControllerBase + { + var authoverride = new AuthorizationService(new GreenfieldAuthorizationHandler(_httpContextAccessor, + _serviceProvider.GetService>(), + _serviceProvider.GetService())); + + var controller = _serviceProvider.GetService(); + controller.ControllerContext.HttpContext = _httpContextAccessor.HttpContext; + var authInterface = typeof(IAuthorizationService); + var type = controller.GetType(); + do { - chainPaymentMethodsController, storeOnChainWalletsController, healthController, - paymentRequestController, apiKeysController, notificationsController, usersController, - storeLightningNetworkPaymentMethodsController, greenFieldInvoiceController, storeWebhooksController, - greenFieldServerInfoController, greenfieldPullPaymentController, storesController, homeController, - storePaymentMethodsController, greenfieldStoreUsersController, lightningNodeApiController, - storeLightningNodeApiController as ControllerBase, greenfieldStoreEmailController, - greenfieldStorePayoutProcessorsController, greenfieldPayoutProcessorsController, - greenfieldStoreAutomatedOnChainPayoutProcessorsController, - greenfieldStoreAutomatedLightningPayoutProcessorsController, storeLnurlPayPaymentMethodsController - }; - - var authoverride = new AuthorizationService(new GreenfieldAuthorizationHandler(httpContextAccessor, - serviceProvider.GetService>(), - serviceProvider.GetService())); - - - foreach (var controller in controllers) - { - controller.ControllerContext.HttpContext = httpContextAccessor.HttpContext; - var authInterface = typeof(IAuthorizationService); - var type = controller.GetType(); - do + foreach (FieldInfo fieldInfo in type.GetFields(BindingFlags.FlattenHierarchy | + BindingFlags.Instance | + BindingFlags.NonPublic | + BindingFlags.Public | + BindingFlags.Static) + .Where(info => + authInterface == info.FieldType || authInterface.IsAssignableFrom(info.FieldType))) { - foreach (FieldInfo fieldInfo in type.GetFields(BindingFlags.FlattenHierarchy | - BindingFlags.Instance | - BindingFlags.NonPublic | - BindingFlags.Public | - BindingFlags.Static) - .Where(info => - authInterface == info.FieldType || authInterface.IsAssignableFrom(info.FieldType))) - { - fieldInfo.SetValue(controller, authoverride); - } + fieldInfo.SetValue(controller, authoverride); + } - type = type.BaseType; - } while (type is not null); - } + type = type.BaseType; + } while (type is not null); + + return controller; } class AuthorizationService : IAuthorizationService @@ -423,14 +219,14 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.CreateWebhook(storeId, create)); + await GetController().CreateWebhook(storeId, create)); } public override async Task GetWebhook(string storeId, string webhookId, CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.ListWebhooks(storeId, webhookId)); + await GetController().ListWebhooks(storeId, webhookId)); } public override async Task UpdateWebhook(string storeId, string webhookId, @@ -438,217 +234,217 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.UpdateWebhook(storeId, webhookId, update)); + await GetController().UpdateWebhook(storeId, webhookId, update)); } public override async Task DeleteWebhook(string storeId, string webhookId, CancellationToken token = default) { - HandleActionResult(await _storeWebhooksController.DeleteWebhook(storeId, webhookId)); + HandleActionResult(await GetController().DeleteWebhook(storeId, webhookId)); return true; } public override async Task GetWebhooks(string storeId, CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.ListWebhooks(storeId, null)); + await GetController().ListWebhooks(storeId, null)); } public override async Task GetWebhookDeliveries(string storeId, string webhookId, CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.ListDeliveries(storeId, webhookId, null)); + await GetController().ListDeliveries(storeId, webhookId, null)); } public override async Task GetWebhookDelivery(string storeId, string webhookId, string deliveryId, CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.ListDeliveries(storeId, webhookId, deliveryId)); + await GetController().ListDeliveries(storeId, webhookId, deliveryId)); } public override async Task RedeliverWebhook(string storeId, string webhookId, string deliveryId, CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.RedeliverWebhook(storeId, webhookId, deliveryId)); + await GetController().RedeliverWebhook(storeId, webhookId, deliveryId)); } public override async Task GetWebhookDeliveryRequest(string storeId, string webhookId, string deliveryId, CancellationToken token = default) { return GetFromActionResult( - await _storeWebhooksController.GetDeliveryRequest(storeId, webhookId, deliveryId)); + await GetController().GetDeliveryRequest(storeId, webhookId, deliveryId)); } public override async Task CreatePullPayment(string storeId, CreatePullPaymentRequest request, CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController.CreatePullPayment(storeId, request)); + await GetController().CreatePullPayment(storeId, request)); } public override async Task GetPullPayment(string pullPaymentId, CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController.GetPullPayment(pullPaymentId)); + await GetController().GetPullPayment(pullPaymentId)); } public override async Task GetPullPayments(string storeId, bool includeArchived = false, CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController.GetPullPayments(storeId, includeArchived)); + await GetController().GetPullPayments(storeId, includeArchived)); } public override async Task ArchivePullPayment(string storeId, string pullPaymentId, CancellationToken cancellationToken = default) { - HandleActionResult(await _greenfieldPullPaymentController.ArchivePullPayment(storeId, pullPaymentId)); + HandleActionResult(await GetController().ArchivePullPayment(storeId, pullPaymentId)); } public override async Task GetPayouts(string pullPaymentId, bool includeCancelled = false, CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController.GetPayouts(pullPaymentId, includeCancelled)); + await GetController().GetPayouts(pullPaymentId, includeCancelled)); } public override async Task CreatePayout(string pullPaymentId, CreatePayoutRequest payoutRequest, CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController.CreatePayout(pullPaymentId, payoutRequest)); + await GetController().CreatePayout(pullPaymentId, payoutRequest)); } public override async Task CancelPayout(string storeId, string payoutId, CancellationToken cancellationToken = default) { - HandleActionResult(await _greenfieldPullPaymentController.CancelPayout(storeId, payoutId)); + HandleActionResult(await GetController().CancelPayout(storeId, payoutId)); } public override async Task ApprovePayout(string storeId, string payoutId, ApprovePayoutRequest request, CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController.ApprovePayout(storeId, payoutId, request, cancellationToken)); + await GetController().ApprovePayout(storeId, payoutId, request, cancellationToken)); } public override async Task GetLightningNodeInfo(string storeId, string cryptoCode, CancellationToken token = default) { return GetFromActionResult( - await _storeLightningNodeApiController.GetInfo(cryptoCode, token)); + await GetController().GetInfo(cryptoCode, token)); } public override async Task GetLightningNodeBalance(string storeId, string cryptoCode, CancellationToken token = default) { return GetFromActionResult( - await _storeLightningNodeApiController.GetBalance(cryptoCode)); + await GetController().GetBalance(cryptoCode)); } public override async Task ConnectToLightningNode(string storeId, string cryptoCode, ConnectToNodeRequest request, CancellationToken token = default) { - HandleActionResult(await _storeLightningNodeApiController.ConnectToNode(cryptoCode, request, token)); + HandleActionResult(await GetController().ConnectToNode(cryptoCode, request, token)); } public override async Task> GetLightningNodeChannels(string storeId, string cryptoCode, CancellationToken token = default) { return GetFromActionResult>( - await _storeLightningNodeApiController.GetChannels(cryptoCode, token)); + await GetController().GetChannels(cryptoCode, token)); } public override async Task OpenLightningChannel(string storeId, string cryptoCode, OpenLightningChannelRequest request, CancellationToken token = default) { - HandleActionResult(await _storeLightningNodeApiController.OpenChannel(cryptoCode, request, token)); + HandleActionResult(await GetController().OpenChannel(cryptoCode, request, token)); } public override async Task GetLightningDepositAddress(string storeId, string cryptoCode, CancellationToken token = default) { return GetFromActionResult( - await _storeLightningNodeApiController.GetDepositAddress(cryptoCode, token)); + await GetController().GetDepositAddress(cryptoCode, token)); } public override async Task PayLightningInvoice(string storeId, string cryptoCode, PayLightningInvoiceRequest request, CancellationToken token = default) { - HandleActionResult(await _storeLightningNodeApiController.PayInvoice(cryptoCode, request, token)); + HandleActionResult(await GetController().PayInvoice(cryptoCode, request, token)); } public override async Task GetLightningInvoice(string storeId, string cryptoCode, string invoiceId, CancellationToken token = default) { return GetFromActionResult( - await _storeLightningNodeApiController.GetInvoice(cryptoCode, invoiceId, token)); + await GetController().GetInvoice(cryptoCode, invoiceId, token)); } public override async Task CreateLightningInvoice(string storeId, string cryptoCode, CreateLightningInvoiceRequest request, CancellationToken token = default) { return GetFromActionResult( - await _storeLightningNodeApiController.CreateInvoice(cryptoCode, request, token)); + await GetController().CreateInvoice(cryptoCode, request, token)); } public override async Task GetLightningNodeInfo(string cryptoCode, CancellationToken token = default) { return GetFromActionResult( - await _lightningNodeApiController.GetInfo(cryptoCode)); + await GetController().GetInfo(cryptoCode)); } public override async Task GetLightningNodeBalance(string cryptoCode, CancellationToken token = default) { return GetFromActionResult( - await _lightningNodeApiController.GetBalance(cryptoCode)); + await GetController().GetBalance(cryptoCode)); } public override async Task ConnectToLightningNode(string cryptoCode, ConnectToNodeRequest request, CancellationToken token = default) { - HandleActionResult(await _lightningNodeApiController.ConnectToNode(cryptoCode, request, token)); + HandleActionResult(await GetController().ConnectToNode(cryptoCode, request, token)); } public override async Task> GetLightningNodeChannels(string cryptoCode, CancellationToken token = default) { return GetFromActionResult>( - await _lightningNodeApiController.GetChannels(cryptoCode, token)); + await GetController().GetChannels(cryptoCode, token)); } public override async Task OpenLightningChannel(string cryptoCode, OpenLightningChannelRequest request, CancellationToken token = default) { - HandleActionResult(await _lightningNodeApiController.OpenChannel(cryptoCode, request, token)); + HandleActionResult(await GetController().OpenChannel(cryptoCode, request, token)); } public override async Task GetLightningDepositAddress(string cryptoCode, CancellationToken token = default) { return GetFromActionResult( - await _lightningNodeApiController.GetDepositAddress(cryptoCode, token)); + await GetController().GetDepositAddress(cryptoCode, token)); } public override async Task PayLightningInvoice(string cryptoCode, PayLightningInvoiceRequest request, CancellationToken token = default) { return GetFromActionResult( - await _lightningNodeApiController.PayInvoice(cryptoCode, request, token)); + await GetController().PayInvoice(cryptoCode, request, token)); } public override async Task GetLightningInvoice(string cryptoCode, string invoiceId, CancellationToken token = default) { return GetFromActionResult( - await _lightningNodeApiController.GetInvoice(cryptoCode, invoiceId, token)); + await GetController().GetInvoice(cryptoCode, invoiceId, token)); } public override async Task CreateLightningInvoice(string cryptoCode, @@ -656,7 +452,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _lightningNodeApiController.CreateInvoice(cryptoCode, request, token)); + await GetController().CreateInvoice(cryptoCode, request, token)); } private T GetFromActionResult(IActionResult result) @@ -700,27 +496,27 @@ namespace BTCPayServer.Controllers.Greenfield bool? enabled, CancellationToken token = default) { return Task.FromResult( - GetFromActionResult(_chainPaymentMethodsController.GetOnChainPaymentMethods(storeId, enabled))); + GetFromActionResult(GetController().GetOnChainPaymentMethods(storeId, enabled))); } public override Task GetStoreOnChainPaymentMethod(string storeId, string cryptoCode, CancellationToken token = default) { return Task.FromResult(GetFromActionResult( - _chainPaymentMethodsController.GetOnChainPaymentMethod(storeId, cryptoCode))); + GetController().GetOnChainPaymentMethod(storeId, cryptoCode))); } public override async Task RemoveStoreOnChainPaymentMethod(string storeId, string cryptoCode, CancellationToken token = default) { - HandleActionResult(await _chainPaymentMethodsController.RemoveOnChainPaymentMethod(storeId, cryptoCode)); + HandleActionResult(await GetController().RemoveOnChainPaymentMethod(storeId, cryptoCode)); } public override async Task UpdateStoreOnChainPaymentMethod(string storeId, string cryptoCode, UpdateOnChainPaymentMethodRequest paymentMethod, CancellationToken token = default) { return GetFromActionResult( - await _chainPaymentMethodsController.UpdateOnChainPaymentMethod(storeId, cryptoCode, + await GetController().UpdateOnChainPaymentMethod(storeId, cryptoCode, new UpdateOnChainPaymentMethodRequest( enabled: paymentMethod.Enabled, label: paymentMethod.Label, @@ -735,7 +531,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return Task.FromResult(GetFromActionResult( - _chainPaymentMethodsController.GetProposedOnChainPaymentMethodPreview(storeId, cryptoCode, + GetController().GetProposedOnChainPaymentMethodPreview(storeId, cryptoCode, paymentMethod, offset, amount))); } @@ -743,39 +539,39 @@ namespace BTCPayServer.Controllers.Greenfield string storeId, string cryptoCode, int offset = 0, int amount = 10, CancellationToken token = default) { return Task.FromResult(GetFromActionResult( - _chainPaymentMethodsController.GetOnChainPaymentMethodPreview(storeId, cryptoCode, offset, + GetController().GetOnChainPaymentMethodPreview(storeId, cryptoCode, offset, amount))); } public override Task GetHealth(CancellationToken token = default) { - return Task.FromResult(GetFromActionResult(_healthController.GetHealth())); + return Task.FromResult(GetFromActionResult(GetController().GetHealth())); } public override async Task> GetPaymentRequests(string storeId, bool includeArchived = false, CancellationToken token = default) { - return GetFromActionResult(await _paymentRequestController.GetPaymentRequests(storeId, includeArchived)); + return GetFromActionResult(await GetController().GetPaymentRequests(storeId, includeArchived)); } public override async Task GetPaymentRequest(string storeId, string paymentRequestId, CancellationToken token = default) { return GetFromActionResult( - await _paymentRequestController.GetPaymentRequest(storeId, paymentRequestId)); + await GetController().GetPaymentRequest(storeId, paymentRequestId)); } public override async Task ArchivePaymentRequest(string storeId, string paymentRequestId, CancellationToken token = default) { - HandleActionResult(await _paymentRequestController.ArchivePaymentRequest(storeId, paymentRequestId)); + HandleActionResult(await GetController().ArchivePaymentRequest(storeId, paymentRequestId)); } public override async Task CreatePaymentRequest(string storeId, CreatePaymentRequestRequest request, CancellationToken token = default) { return GetFromActionResult( - await _paymentRequestController.CreatePaymentRequest(storeId, request)); + await GetController().CreatePaymentRequest(storeId, request)); } public override async Task UpdatePaymentRequest(string storeId, string paymentRequestId, @@ -783,73 +579,73 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _paymentRequestController.UpdatePaymentRequest(storeId, paymentRequestId, request)); + await GetController().UpdatePaymentRequest(storeId, paymentRequestId, request)); } public override async Task GetCurrentAPIKeyInfo(CancellationToken token = default) { - return GetFromActionResult(await _apiKeysController.GetKey()); + return GetFromActionResult(await GetController().GetKey()); } public override async Task CreateAPIKey(CreateApiKeyRequest request, CancellationToken token = default) { - return GetFromActionResult(await _apiKeysController.CreateKey(request)); + return GetFromActionResult(await GetController().CreateKey(request)); } public override async Task RevokeCurrentAPIKeyInfo(CancellationToken token = default) { - HandleActionResult(await _apiKeysController.RevokeCurrentKey()); + HandleActionResult(await GetController().RevokeCurrentKey()); } public override async Task RevokeAPIKey(string apikey, CancellationToken token = default) { - HandleActionResult(await _apiKeysController.RevokeKey(apikey)); + HandleActionResult(await GetController().RevokeKey(apikey)); } public override async Task> GetNotifications(bool? seen = null, int? skip = null, int? take = null, CancellationToken token = default) { return GetFromActionResult>( - await _notificationsController.GetNotifications(seen, skip, take)); + await GetController().GetNotifications(seen, skip, take)); } public override async Task GetNotification(string notificationId, CancellationToken token = default) { return GetFromActionResult( - await _notificationsController.GetNotification(notificationId)); + await GetController().GetNotification(notificationId)); } public override async Task UpdateNotification(string notificationId, bool? seen, CancellationToken token = default) { return GetFromActionResult( - await _notificationsController.UpdateNotification(notificationId, + await GetController().UpdateNotification(notificationId, new UpdateNotification() {Seen = seen})); } public override async Task RemoveNotification(string notificationId, CancellationToken token = default) { - HandleActionResult(await _notificationsController.DeleteNotification(notificationId)); + HandleActionResult(await GetController().DeleteNotification(notificationId)); } public override async Task GetCurrentUser(CancellationToken token = default) { - return GetFromActionResult(await _usersController.GetCurrentUser()); + return GetFromActionResult(await GetController().GetCurrentUser()); } public override async Task CreateUser(CreateApplicationUserRequest request, CancellationToken token = default) { - return GetFromActionResult(await _usersController.CreateUser(request, token)); + return GetFromActionResult(await GetController().CreateUser(request, token)); } public override async Task ShowOnChainWalletOverview(string storeId, string cryptoCode, CancellationToken token = default) { return GetFromActionResult( - await _storeOnChainWalletsController.ShowOnChainWalletOverview(storeId, cryptoCode)); + await GetController().ShowOnChainWalletOverview(storeId, cryptoCode)); } public override async Task GetOnChainWalletReceiveAddress(string storeId, @@ -857,7 +653,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _storeOnChainWalletsController.GetOnChainWalletReceiveAddress(storeId, cryptoCode, + await GetController().GetOnChainWalletReceiveAddress(storeId, cryptoCode, forceGenerate)); } @@ -865,7 +661,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { HandleActionResult( - await _storeOnChainWalletsController.UnReserveOnChainWalletReceiveAddress(storeId, cryptoCode)); + await GetController().UnReserveOnChainWalletReceiveAddress(storeId, cryptoCode)); } public override async Task> ShowOnChainWalletTransactions( @@ -873,21 +669,21 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult>( - await _storeOnChainWalletsController.ShowOnChainWalletTransactions(storeId, cryptoCode, statusFilter)); + await GetController().ShowOnChainWalletTransactions(storeId, cryptoCode, statusFilter)); } public override async Task GetOnChainWalletTransaction(string storeId, string cryptoCode, string transactionId, CancellationToken token = default) { return GetFromActionResult( - await _storeOnChainWalletsController.GetOnChainWalletTransaction(storeId, cryptoCode, transactionId)); + await GetController().GetOnChainWalletTransaction(storeId, cryptoCode, transactionId)); } public override async Task> GetOnChainWalletUTXOs(string storeId, string cryptoCode, CancellationToken token = default) { return GetFromActionResult>( - await _storeOnChainWalletsController.GetOnChainWalletUTXOs(storeId, cryptoCode)); + await GetController().GetOnChainWalletUTXOs(storeId, cryptoCode)); } public override async Task CreateOnChainTransaction(string storeId, @@ -900,7 +696,7 @@ namespace BTCPayServer.Controllers.Greenfield } return GetFromActionResult( - await _storeOnChainWalletsController.CreateOnChainTransaction(storeId, cryptoCode, request)); + await GetController().CreateOnChainTransaction(storeId, cryptoCode, request)); } public override async Task CreateOnChainTransactionButDoNotBroadcast(string storeId, @@ -915,34 +711,34 @@ namespace BTCPayServer.Controllers.Greenfield return Transaction.Parse( GetFromActionResult( - await _storeOnChainWalletsController.CreateOnChainTransaction(storeId, cryptoCode, request)), + await GetController().CreateOnChainTransaction(storeId, cryptoCode, request)), network); } public override async Task> GetStores(CancellationToken token = default) { - return GetFromActionResult(await _storesController.GetStores()); + return GetFromActionResult(await GetController().GetStores()); } public override Task GetStore(string storeId, CancellationToken token = default) { - return Task.FromResult(GetFromActionResult(_storesController.GetStore(storeId))); + return Task.FromResult(GetFromActionResult(GetController().GetStore(storeId))); } public override async Task RemoveStore(string storeId, CancellationToken token = default) { - HandleActionResult(await _storesController.RemoveStore(storeId)); + HandleActionResult(await GetController().RemoveStore(storeId)); } public override async Task CreateStore(CreateStoreRequest request, CancellationToken token = default) { - return GetFromActionResult(await _storesController.CreateStore(request)); + return GetFromActionResult(await GetController().CreateStore(request)); } public override async Task UpdateStore(string storeId, UpdateStoreRequest request, CancellationToken token = default) { - return GetFromActionResult(await _storesController.UpdateStore(storeId, request)); + return GetFromActionResult(await GetController().UpdateStore(storeId, request)); } public override Task> @@ -950,21 +746,21 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return Task.FromResult(GetFromActionResult( - _storeLnurlPayPaymentMethodsController.GetLNURLPayPaymentMethods(storeId, enabled))); + GetController().GetLNURLPayPaymentMethods(storeId, enabled))); } public override Task GetStoreLNURLPayPaymentMethod( string storeId, string cryptoCode, CancellationToken token = default) { return Task.FromResult(GetFromActionResult( - _storeLnurlPayPaymentMethodsController.GetLNURLPayPaymentMethod(storeId, cryptoCode))); + GetController().GetLNURLPayPaymentMethod(storeId, cryptoCode))); } public override async Task RemoveStoreLNURLPayPaymentMethod(string storeId, string cryptoCode, CancellationToken token = default) { HandleActionResult( - await _storeLnurlPayPaymentMethodsController.RemoveLNURLPayPaymentMethod(storeId, + await GetController().RemoveLNURLPayPaymentMethod(storeId, cryptoCode)); } @@ -973,7 +769,7 @@ namespace BTCPayServer.Controllers.Greenfield LNURLPayPaymentMethodData paymentMethod, CancellationToken token = default) { return GetFromActionResult(await - _storeLnurlPayPaymentMethodsController.UpdateLNURLPayPaymentMethod(storeId, cryptoCode, + GetController().UpdateLNURLPayPaymentMethod(storeId, cryptoCode, paymentMethod)); } @@ -982,21 +778,21 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return Task.FromResult(GetFromActionResult( - _storeLightningNetworkPaymentMethodsController.GetLightningPaymentMethods(storeId, enabled))); + GetController().GetLightningPaymentMethods(storeId, enabled))); } public override Task GetStoreLightningNetworkPaymentMethod( string storeId, string cryptoCode, CancellationToken token = default) { return Task.FromResult(GetFromActionResult( - _storeLightningNetworkPaymentMethodsController.GetLightningNetworkPaymentMethod(storeId, cryptoCode))); + GetController().GetLightningNetworkPaymentMethod(storeId, cryptoCode))); } public override async Task RemoveStoreLightningNetworkPaymentMethod(string storeId, string cryptoCode, CancellationToken token = default) { HandleActionResult( - await _storeLightningNetworkPaymentMethodsController.RemoveLightningNetworkPaymentMethod(storeId, + await GetController().RemoveLightningNetworkPaymentMethod(storeId, cryptoCode)); } @@ -1005,7 +801,7 @@ namespace BTCPayServer.Controllers.Greenfield UpdateLightningNetworkPaymentMethodRequest paymentMethod, CancellationToken token = default) { return GetFromActionResult(await - _storeLightningNetworkPaymentMethodsController.UpdateLightningNetworkPaymentMethod(storeId, cryptoCode, + GetController().UpdateLightningNetworkPaymentMethod(storeId, cryptoCode, new UpdateLightningNetworkPaymentMethodRequest(paymentMethod.ConnectionString, paymentMethod.Enabled))); } @@ -1022,7 +818,7 @@ namespace BTCPayServer.Controllers.Greenfield ) { return GetFromActionResult>( - await _greenFieldInvoiceController.GetInvoices(storeId, orderId, + await GetController().GetInvoices(storeId, orderId, status?.Select(invoiceStatus => invoiceStatus.ToString())?.ToArray(), startDate, endDate, textSearch, includeArchived, skip, take)); } @@ -1030,32 +826,32 @@ namespace BTCPayServer.Controllers.Greenfield public override async Task GetInvoice(string storeId, string invoiceId, CancellationToken token = default) { - return GetFromActionResult(await _greenFieldInvoiceController.GetInvoice(storeId, invoiceId)); + return GetFromActionResult(await GetController().GetInvoice(storeId, invoiceId)); } public override async Task GetInvoicePaymentMethods(string storeId, string invoiceId, CancellationToken token = default) { return GetFromActionResult( - await _greenFieldInvoiceController.GetInvoicePaymentMethods(storeId, invoiceId)); + await GetController().GetInvoicePaymentMethods(storeId, invoiceId)); } public override async Task ArchiveInvoice(string storeId, string invoiceId, CancellationToken token = default) { - HandleActionResult(await _greenFieldInvoiceController.ArchiveInvoice(storeId, invoiceId)); + HandleActionResult(await GetController().ArchiveInvoice(storeId, invoiceId)); } public override async Task CreateInvoice(string storeId, CreateInvoiceRequest request, CancellationToken token = default) { - return GetFromActionResult(await _greenFieldInvoiceController.CreateInvoice(storeId, request)); + return GetFromActionResult(await GetController().CreateInvoice(storeId, request)); } public override async Task UpdateInvoice(string storeId, string invoiceId, UpdateInvoiceRequest request, CancellationToken token = default) { return GetFromActionResult( - await _greenFieldInvoiceController.UpdateInvoice(storeId, invoiceId, request)); + await GetController().UpdateInvoice(storeId, invoiceId, request)); } public override async Task MarkInvoiceStatus(string storeId, string invoiceId, @@ -1063,60 +859,60 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _greenFieldInvoiceController.MarkInvoiceStatus(storeId, invoiceId, request)); + await GetController().MarkInvoiceStatus(storeId, invoiceId, request)); } public override async Task UnarchiveInvoice(string storeId, string invoiceId, CancellationToken token = default) { return GetFromActionResult( - await _greenFieldInvoiceController.UnarchiveInvoice(storeId, invoiceId)); + await GetController().UnarchiveInvoice(storeId, invoiceId)); } public override Task GetServerInfo(CancellationToken token = default) { - return Task.FromResult(GetFromActionResult(_greenFieldServerInfoController.ServerInfo())); + return Task.FromResult(GetFromActionResult(GetController().ServerInfo())); } public override async Task ActivateInvoicePaymentMethod(string storeId, string invoiceId, string paymentMethod, CancellationToken token = default) { HandleActionResult( - await _greenFieldInvoiceController.ActivateInvoicePaymentMethod(storeId, invoiceId, paymentMethod)); + await GetController().ActivateInvoicePaymentMethod(storeId, invoiceId, paymentMethod)); } public override async Task GetOnChainFeeRate(string storeId, string cryptoCode, int? blockTarget = null, CancellationToken token = default) { return GetFromActionResult( - await _storeOnChainWalletsController.GetOnChainFeeRate(storeId, cryptoCode, blockTarget)); + await GetController().GetOnChainFeeRate(storeId, cryptoCode, blockTarget)); } public override async Task DeleteCurrentUser(CancellationToken token = default) { - HandleActionResult(await _usersController.DeleteCurrentUser()); + HandleActionResult(await GetController().DeleteCurrentUser()); } public override async Task DeleteUser(string userId, CancellationToken token = default) { - HandleActionResult(await _usersController.DeleteUser(userId)); + HandleActionResult(await GetController().DeleteUser(userId)); } public override Task GetAvailableLanguages(CancellationToken token = default) { - return Task.FromResult(_homeController.LanguageService.GetLanguages() + return Task.FromResult(GetController().LanguageService.GetLanguages() .Select(language => new Language(language.Code, language.DisplayName)).ToArray()); } public override Task GetPermissionMetadata(CancellationToken token = default) { - return Task.FromResult(GetFromActionResult(_homeController.Permissions())); + return Task.FromResult(GetFromActionResult(GetController().Permissions())); } public override async Task> GetStorePaymentMethods(string storeId, bool? enabled = null, CancellationToken token = default) { - return GetFromActionResult(await _storePaymentMethodsController.GetStorePaymentMethods(storeId, enabled)); + return GetFromActionResult(await GetController().GetStorePaymentMethods(storeId, enabled)); } public override async Task GenerateOnChainWallet(string storeId, @@ -1124,7 +920,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _chainPaymentMethodsController.GenerateOnChainWallet(storeId, cryptoCode, + await GetController().GenerateOnChainWallet(storeId, cryptoCode, new GenerateWalletRequest() { Passphrase = request.Passphrase, @@ -1141,55 +937,55 @@ namespace BTCPayServer.Controllers.Greenfield public override async Task SendEmail(string storeId, SendEmailRequest request, CancellationToken token = default) { - HandleActionResult(await _greenfieldStoreEmailController.SendEmailFromStore(storeId, request)); + HandleActionResult(await GetController().SendEmailFromStore(storeId, request)); } public override Task GetStoreEmailSettings(string storeId, CancellationToken token = default) { return Task.FromResult( - GetFromActionResult(_greenfieldStoreEmailController.GetStoreEmailSettings())); + GetFromActionResult(GetController().GetStoreEmailSettings())); } public override async Task UpdateStoreEmailSettings(string storeId, EmailSettingsData request, CancellationToken token = default) { return GetFromActionResult( - await _greenfieldStoreEmailController.UpdateStoreEmailSettings(storeId, + await GetController().UpdateStoreEmailSettings(storeId, JObject.FromObject(request).ToObject())); } public override async Task GetUsers(CancellationToken token = default) { - return GetFromActionResult(await _usersController.GetUsers()); + return GetFromActionResult(await GetController().GetUsers()); } public override Task> GetStoreUsers(string storeId, CancellationToken token = default) { return Task.FromResult( - GetFromActionResult>(_greenfieldStoreUsersController.GetStoreUsers())); + GetFromActionResult>(GetController().GetStoreUsers())); } public override async Task AddStoreUser(string storeId, StoreUserData request, CancellationToken token = default) { - HandleActionResult(await _greenfieldStoreUsersController.AddStoreUser(storeId, request)); + HandleActionResult(await GetController().AddStoreUser(storeId, request)); } public override async Task RemoveStoreUser(string storeId, string userId, CancellationToken token = default) { - HandleActionResult(await _greenfieldStoreUsersController.RemoveStoreUser(storeId, userId)); + HandleActionResult(await GetController().RemoveStoreUser(storeId, userId)); } public override async Task GetUserByIdOrEmail(string idOrEmail, CancellationToken token = default) { - return GetFromActionResult(await _usersController.GetUser(idOrEmail)); + return GetFromActionResult(await GetController().GetUser(idOrEmail)); } public override async Task LockUser(string idOrEmail, bool disabled, CancellationToken token = default) { - HandleActionResult(await _usersController.LockUser(idOrEmail, new LockUserRequest() {Locked = disabled})); + HandleActionResult(await GetController().LockUser(idOrEmail, new LockUserRequest() {Locked = disabled})); } public override async Task PatchOnChainWalletTransaction(string storeId, @@ -1197,7 +993,7 @@ namespace BTCPayServer.Controllers.Greenfield PatchOnChainTransactionRequest request, CancellationToken token = default) { return GetFromActionResult( - await _storeOnChainWalletsController.PatchOnChainWalletTransaction(storeId, cryptoCode, transactionId, + await GetController().PatchOnChainWalletTransaction(storeId, cryptoCode, transactionId, request)); } @@ -1205,14 +1001,14 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult( - await _lightningNodeApiController.GetPayment(cryptoCode, paymentHash, token)); + await GetController().GetPayment(cryptoCode, paymentHash, token)); } public override async Task GetLightningPayment(string storeId, string cryptoCode, string paymentHash, CancellationToken token = default) { return GetFromActionResult( - await _storeLightningNodeApiController.GetPayment(cryptoCode, paymentHash, token)); + await GetController().GetPayment(cryptoCode, paymentHash, token)); } public override async Task CreatePayout(string storeId, @@ -1220,20 +1016,20 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController.CreatePayoutThroughStore(storeId, payoutRequest)); + await GetController().CreatePayoutThroughStore(storeId, payoutRequest)); } public override async Task> GetPayoutProcessors(string storeId, CancellationToken token = default) { return GetFromActionResult>( - await _greenfieldStorePayoutProcessorsController.GetStorePayoutProcessors(storeId)); + await GetController().GetStorePayoutProcessors(storeId)); } public override Task> GetPayoutProcessors(CancellationToken token = default) { return Task.FromResult( - GetFromActionResult>(_greenfieldPayoutProcessorsController + GetFromActionResult>(GetController() .GetPayoutProcessors())); } @@ -1241,7 +1037,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { HandleActionResult( - await _greenfieldStorePayoutProcessorsController.RemoveStorePayoutProcessor(storeId, processor, + await GetController().RemoveStorePayoutProcessor(storeId, processor, paymentMethod)); } @@ -1250,7 +1046,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult>( - await _greenfieldStoreAutomatedOnChainPayoutProcessorsController + await GetController() .GetStoreOnChainAutomatedPayoutProcessors(storeId, paymentMethod)); } @@ -1259,7 +1055,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken token = default) { return GetFromActionResult>( - await _greenfieldStoreAutomatedLightningPayoutProcessorsController + await GetController() .GetStoreLightningAutomatedPayoutProcessors(storeId, paymentMethod)); } @@ -1268,7 +1064,7 @@ namespace BTCPayServer.Controllers.Greenfield OnChainAutomatedPayoutSettings request, CancellationToken token = default) { return GetFromActionResult( - await _greenfieldStoreAutomatedOnChainPayoutProcessorsController + await GetController() .UpdateStoreOnchainAutomatedPayoutProcessor(storeId, paymentMethod, request)); } @@ -1277,7 +1073,7 @@ namespace BTCPayServer.Controllers.Greenfield LightningAutomatedPayoutSettings request, CancellationToken token = default) { return GetFromActionResult( - await _greenfieldStoreAutomatedLightningPayoutProcessorsController + await GetController() .UpdateStoreLightningAutomatedPayoutProcessor(storeId, paymentMethod, request)); } @@ -1285,7 +1081,7 @@ namespace BTCPayServer.Controllers.Greenfield CancellationToken cancellationToken = default) { return GetFromActionResult( - await _greenfieldPullPaymentController + await GetController() .GetStorePayouts(storeId, includeCancelled)); } @@ -1294,18 +1090,18 @@ namespace BTCPayServer.Controllers.Greenfield CreatePointOfSaleAppRequest request, CancellationToken token = default) { return GetFromActionResult( - await _greenFieldAppsController.CreatePointOfSaleApp(storeId, request)); + await GetController().CreatePointOfSaleApp(storeId, request)); } public override async Task GetApp(string appId, CancellationToken token = default) { return GetFromActionResult( - await _greenFieldAppsController.GetApp(appId)); + await GetController().GetApp(appId)); } public override async Task DeleteApp(string appId, CancellationToken token = default) { - HandleActionResult(await _greenFieldAppsController.DeleteApp(appId)); + HandleActionResult(await GetController().DeleteApp(appId)); } } } diff --git a/BTCPayServer/Services/Stores/StoreRepository.cs b/BTCPayServer/Services/Stores/StoreRepository.cs index 73c715d70..1242dab04 100644 --- a/BTCPayServer/Services/Stores/StoreRepository.cs +++ b/BTCPayServer/Services/Stores/StoreRepository.cs @@ -384,6 +384,13 @@ namespace BTCPayServer.Services.Stores } + public async Task> GetSettingsAsync(string name) where T : class + { + await using var ctx = _ContextFactory.CreateContext(); + var data = await ctx.StoreSettings.Where(s => s.Name == name).ToDictionaryAsync(settingData => settingData.StoreId); + return data.ToDictionary(pair => pair.Key, pair => Deserialize(pair.Value.Value)); + } + public async Task UpdateSetting(string storeId, string name, T obj) where T : class { await using var ctx = _ContextFactory.CreateContext();