From 4f63f08aebb6fe81e230ea1c9fe65602551df23b Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Mon, 9 Dec 2024 21:01:26 +0900 Subject: [PATCH] Plugin: Add IGlobalCheckoutModelExtension --- BTCPayServer/Controllers/UIInvoiceController.UI.cs | 11 ++++++++--- BTCPayServer/Controllers/UIInvoiceController.cs | 3 +++ .../Payments/IGlobalCheckoutModelExtension.cs | 10 ++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 BTCPayServer/Payments/IGlobalCheckoutModelExtension.cs diff --git a/BTCPayServer/Controllers/UIInvoiceController.UI.cs b/BTCPayServer/Controllers/UIInvoiceController.UI.cs index 39d2ef238..95c40aed2 100644 --- a/BTCPayServer/Controllers/UIInvoiceController.UI.cs +++ b/BTCPayServer/Controllers/UIInvoiceController.UI.cs @@ -936,10 +936,15 @@ namespace BTCPayServer.Controllers var expiration = TimeSpan.FromSeconds(model.ExpirationSeconds); model.TimeLeft = expiration.PrettyPrint(); - if (_paymentModelExtensions.TryGetValue(paymentMethodId, out var extension) && - _handlers.TryGetValue(paymentMethodId, out var h)) + if (_handlers.TryGetValue(paymentMethodId, out var h)) { - extension.ModifyCheckoutModel(new CheckoutModelContext(model, store, storeBlob, invoice, Url, prompt, h)); + var ctx = new CheckoutModelContext(model, store, storeBlob, invoice, Url, prompt, h); + if (_paymentModelExtensions.TryGetValue(paymentMethodId, out var extension)) + { + extension.ModifyCheckoutModel(ctx); + } + foreach (var global in GlobalCheckoutModelExtensions) + global.ModifyCheckoutModel(ctx); } return model; } diff --git a/BTCPayServer/Controllers/UIInvoiceController.cs b/BTCPayServer/Controllers/UIInvoiceController.cs index 97b56bed9..70b3c817c 100644 --- a/BTCPayServer/Controllers/UIInvoiceController.cs +++ b/BTCPayServer/Controllers/UIInvoiceController.cs @@ -69,6 +69,7 @@ namespace BTCPayServer.Controllers private readonly UriResolver _uriResolver; public WebhookSender WebhookNotificationManager { get; } + public IEnumerable GlobalCheckoutModelExtensions { get; } public IStringLocalizer StringLocalizer { get; } public UIInvoiceController( @@ -99,6 +100,7 @@ namespace BTCPayServer.Controllers IAuthorizationService authorizationService, TransactionLinkProviders transactionLinkProviders, Dictionary paymentModelExtensions, + IEnumerable globalCheckoutModelExtensions, IStringLocalizer stringLocalizer, PrettyNameProvider prettyName) { @@ -124,6 +126,7 @@ namespace BTCPayServer.Controllers _authorizationService = authorizationService; _transactionLinkProviders = transactionLinkProviders; _paymentModelExtensions = paymentModelExtensions; + GlobalCheckoutModelExtensions = globalCheckoutModelExtensions; _prettyName = prettyName; _fileService = fileService; _uriResolver = uriResolver; diff --git a/BTCPayServer/Payments/IGlobalCheckoutModelExtension.cs b/BTCPayServer/Payments/IGlobalCheckoutModelExtension.cs new file mode 100644 index 000000000..b92715681 --- /dev/null +++ b/BTCPayServer/Payments/IGlobalCheckoutModelExtension.cs @@ -0,0 +1,10 @@ +namespace BTCPayServer.Payments +{ + /// + /// will always run when showing the checkout page + /// + public interface IGlobalCheckoutModelExtension + { + void ModifyCheckoutModel(CheckoutModelContext context); + } +}