Rename PaymentModel to CheckoutModel

This commit is contained in:
nicolas.dorier 2024-10-07 19:58:08 +09:00
parent 2f287874e3
commit 968223a953
No known key found for this signature in database
GPG key ID: 6618763EF09186FE
25 changed files with 75 additions and 97 deletions

View file

@ -320,7 +320,7 @@ namespace BTCPayServer.Tests
var controller = tester.PayTester.GetController<UIInvoiceController>(null);
var checkout =
(Models.InvoicingModels.PaymentModel)((JsonResult)controller.GetStatus(invoice.Id)
(Models.InvoicingModels.CheckoutModel)((JsonResult)controller.GetStatus(invoice.Id)
.GetAwaiter().GetResult()).Value;
Assert.Single(checkout.AvailableCryptos);
Assert.Equal("LTC", checkout.PaymentMethodCurrency);
@ -337,7 +337,7 @@ namespace BTCPayServer.Tests
{
invoice = user.BitPay.GetInvoice(invoice.Id);
Assert.Equal("paid", invoice.Status);
checkout = (Models.InvoicingModels.PaymentModel)((JsonResult)controller.GetStatus(invoice.Id)
checkout = (Models.InvoicingModels.CheckoutModel)((JsonResult)controller.GetStatus(invoice.Id)
.GetAwaiter().GetResult()).Value;
Assert.Equal("Processing", checkout.Status);
});
@ -475,7 +475,7 @@ namespace BTCPayServer.Tests
var controller = tester.PayTester.GetController<UIInvoiceController>(null);
var checkout =
(Models.InvoicingModels.PaymentModel)((JsonResult)controller.GetStatus(invoice.Id, null)
(Models.InvoicingModels.CheckoutModel)((JsonResult)controller.GetStatus(invoice.Id, null)
.GetAwaiter().GetResult()).Value;
Assert.Single(checkout.AvailableCryptos);
Assert.Equal("BTC", checkout.PaymentMethodCurrency);
@ -536,7 +536,7 @@ namespace BTCPayServer.Tests
});
controller = tester.PayTester.GetController<UIInvoiceController>(null);
checkout = (Models.InvoicingModels.PaymentModel)((JsonResult)controller.GetStatus(invoice.Id, "LTC")
checkout = (Models.InvoicingModels.CheckoutModel)((JsonResult)controller.GetStatus(invoice.Id, "LTC")
.GetAwaiter().GetResult()).Value;
Assert.Equal(2, checkout.AvailableCryptos.Count);
Assert.Equal("LTC", checkout.PaymentMethodCurrency);

View file

@ -2733,7 +2733,7 @@ namespace BTCPayServer.Tests
Assert.EndsWith($"/i/{newInvoice.Id}", newInvoice.CheckoutLink);
var controller = tester.PayTester.GetController<UIInvoiceController>(user.UserId, user.StoreId);
var model = (PaymentModel)((ViewResult)await controller.Checkout(newInvoice.Id)).Model;
var model = (CheckoutModel)((ViewResult)await controller.Checkout(newInvoice.Id)).Model;
Assert.Equal("it-IT", model.DefaultLang);
Assert.Equal("http://toto.com/lol", model.MerchantRefLink);

View file

@ -1587,14 +1587,14 @@ namespace BTCPayServer.Tests
ItemDesc = "Some description",
FullNotifications = true
}, Facade.Merchant);
var checkout = (await user.GetController<UIInvoiceController>().Checkout(invoice.Id)).AssertViewModel<PaymentModel>();
var checkout = (await user.GetController<UIInvoiceController>().Checkout(invoice.Id)).AssertViewModel<CheckoutModel>();
Assert.Equal(lnMethod, checkout.PaymentMethodId);
// If we change store's default, it should change the checkout's default
vm.DefaultPaymentMethod = btcMethod;
Assert.IsType<RedirectToActionResult>(user.GetController<UIStoresController>().CheckoutAppearance(vm)
.Result);
checkout = (await user.GetController<UIInvoiceController>().Checkout(invoice.Id)).AssertViewModel<PaymentModel>();
checkout = (await user.GetController<UIInvoiceController>().Checkout(invoice.Id)).AssertViewModel<CheckoutModel>();
Assert.Equal(btcMethod, checkout.PaymentMethodId);
}
@ -1625,7 +1625,7 @@ namespace BTCPayServer.Tests
// validate that invoice data model doesn't have lightning string initially
var res = await user.GetController<UIInvoiceController>().Checkout(invoice.Id);
var paymentMethodFirst = Assert.IsType<PaymentModel>(
var paymentMethodFirst = Assert.IsType<CheckoutModel>(
Assert.IsType<ViewResult>(res).Model
);
Assert.DoesNotContain("&lightning=", paymentMethodFirst.InvoiceBitcoinUrlQR);
@ -1641,7 +1641,7 @@ namespace BTCPayServer.Tests
// validate that QR code now has both onchain and offchain payment urls
res = await user.GetController<UIInvoiceController>().Checkout(invoice.Id);
var paymentMethodUnified = Assert.IsType<PaymentModel>(
var paymentMethodUnified = Assert.IsType<CheckoutModel>(
Assert.IsType<ViewResult>(res).Model
);
Assert.StartsWith("bitcoin:bcrt", paymentMethodUnified.InvoiceBitcoinUrl);

View file

@ -1,6 +1,6 @@
@using BTCPayServer.Payments
@model BTCPayServer.Components.InvoiceStatus.InvoiceStatusViewModel
@inject Dictionary<PaymentMethodId, IPaymentModelExtension> Extensions
@inject Dictionary<PaymentMethodId, ICheckoutModelExtension> Extensions
@{
var state = Model.State.ToString();

View file

@ -694,7 +694,7 @@ namespace BTCPayServer.Controllers
if (invoiceId is null)
return NotFound();
var model = await GetInvoiceModel(invoiceId, paymentMethodId == null ? null : PaymentMethodId.Parse(paymentMethodId), lang);
var model = await GetCheckoutModel(invoiceId, paymentMethodId == null ? null : PaymentMethodId.Parse(paymentMethodId), lang);
if (model == null)
{
// see if the invoice actually exists and is in a state for which we do not display the checkout
@ -713,7 +713,7 @@ namespace BTCPayServer.Controllers
return View(model);
}
private async Task<PaymentModel?> GetInvoiceModel(string invoiceId, PaymentMethodId? paymentMethodId, string? lang)
private async Task<CheckoutModel?> GetCheckoutModel(string invoiceId, PaymentMethodId? paymentMethodId, string? lang)
{
var invoice = await _InvoiceRepository.GetInvoice(invoiceId);
if (invoice == null)
@ -822,7 +822,7 @@ namespace BTCPayServer.Controllers
if (prompt is null)
return null;
if (activated)
return await GetInvoiceModel(invoiceId, paymentMethodId, lang);
return await GetCheckoutModel(invoiceId, paymentMethodId, lang);
var accounting = prompt.Calculate();
@ -863,7 +863,7 @@ namespace BTCPayServer.Controllers
}
string ShowMoney(decimal value) => MoneyExtensions.ShowMoney(value, prompt.RateDivisibility ?? prompt.Divisibility);
var model = new PaymentModel
var model = new CheckoutModel
{
Activated = prompt.Activated,
PaymentMethodName = _prettyName.PrettyName(paymentMethodId),
@ -914,7 +914,7 @@ namespace BTCPayServer.Controllers
.Select(kv =>
{
var handler = _handlers[kv.PaymentMethodId];
return new PaymentModel.AvailableCrypto
return new CheckoutModel.AvailableCrypto
{
Displayed = displayedPaymentMethods.Contains(kv.PaymentMethodId),
PaymentMethodId = kv.PaymentMethodId,
@ -950,7 +950,7 @@ namespace BTCPayServer.Controllers
if (_paymentModelExtensions.TryGetValue(paymentMethodId, out var extension) &&
_handlers.TryGetValue(paymentMethodId, out var h))
{
extension.ModifyPaymentModel(new PaymentModelContext(model, store, storeBlob, invoice, Url, prompt, h));
extension.ModifyCheckoutModel(new CheckoutModelContext(model, store, storeBlob, invoice, Url, prompt, h));
}
return model;
}
@ -987,7 +987,7 @@ namespace BTCPayServer.Controllers
{
if (string.IsNullOrEmpty(paymentMethodId))
paymentMethodId = implicitPaymentMethodId;
var model = await GetInvoiceModel(invoiceId, paymentMethodId == null ? null : PaymentMethodId.Parse(paymentMethodId), lang);
var model = await GetCheckoutModel(invoiceId, paymentMethodId == null ? null : PaymentMethodId.Parse(paymentMethodId), lang);
if (model == null)
return NotFound();
return Json(model);

View file

@ -62,7 +62,7 @@ namespace BTCPayServer.Controllers
private readonly LinkGenerator _linkGenerator;
private readonly IAuthorizationService _authorizationService;
private readonly TransactionLinkProviders _transactionLinkProviders;
private readonly Dictionary<PaymentMethodId, IPaymentModelExtension> _paymentModelExtensions;
private readonly Dictionary<PaymentMethodId, ICheckoutModelExtension> _paymentModelExtensions;
private readonly PrettyNameProvider _prettyName;
private readonly AppService _appService;
private readonly IFileService _fileService;
@ -97,7 +97,7 @@ namespace BTCPayServer.Controllers
DefaultRulesCollection defaultRules,
IAuthorizationService authorizationService,
TransactionLinkProviders transactionLinkProviders,
Dictionary<PaymentMethodId, IPaymentModelExtension> paymentModelExtensions,
Dictionary<PaymentMethodId, ICheckoutModelExtension> paymentModelExtensions,
PrettyNameProvider prettyName)
{
_displayFormatter = displayFormatter;

View file

@ -21,13 +21,13 @@ namespace BTCPayServer.Controllers
public class UIPublicLightningNodeInfoController : Controller
{
private readonly BTCPayNetworkProvider _BtcPayNetworkProvider;
private readonly Dictionary<PaymentMethodId, IPaymentModelExtension> _paymentModelExtensions;
private readonly Dictionary<PaymentMethodId, ICheckoutModelExtension> _paymentModelExtensions;
private readonly UriResolver _uriResolver;
private readonly PaymentMethodHandlerDictionary _handlers;
private readonly StoreRepository _StoreRepository;
public UIPublicLightningNodeInfoController(BTCPayNetworkProvider btcPayNetworkProvider,
Dictionary<PaymentMethodId, IPaymentModelExtension> paymentModelExtensions,
Dictionary<PaymentMethodId, ICheckoutModelExtension> paymentModelExtensions,
UriResolver uriResolver,
PaymentMethodHandlerDictionary handlers,
StoreRepository storeRepository)

View file

@ -70,7 +70,7 @@ namespace BTCPayServer.Controllers
private readonly LabelService _labelService;
private readonly PaymentMethodHandlerDictionary _handlers;
private readonly DefaultRulesCollection _defaultRules;
private readonly Dictionary<PaymentMethodId, IPaymentModelExtension> _paymentModelExtensions;
private readonly Dictionary<PaymentMethodId, ICheckoutModelExtension> _paymentModelExtensions;
private readonly TransactionLinkProviders _transactionLinkProviders;
private readonly PullPaymentHostedService _pullPaymentHostedService;
private readonly WalletHistogramService _walletHistogramService;
@ -98,7 +98,7 @@ namespace BTCPayServer.Controllers
LabelService labelService,
DefaultRulesCollection defaultRules,
PaymentMethodHandlerDictionary handlers,
Dictionary<PaymentMethodId, IPaymentModelExtension> paymentModelExtensions,
Dictionary<PaymentMethodId, ICheckoutModelExtension> paymentModelExtensions,
TransactionLinkProviders transactionLinkProviders)
{
_currencyTable = currencyTable;

View file

@ -390,8 +390,8 @@ namespace BTCPayServer.Hosting
o.GetRequiredService<IEnumerable<IPaymentMethodBitpayAPIExtension>>().ToDictionary(o => o.PaymentMethodId, o => o));
services.AddSingleton<Dictionary<PaymentMethodId, IPaymentLinkExtension>>(o =>
o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.PaymentMethodId, o => o));
services.AddSingleton<Dictionary<PaymentMethodId, IPaymentModelExtension>>(o =>
o.GetRequiredService<IEnumerable<IPaymentModelExtension>>().ToDictionary(o => o.PaymentMethodId, o => o));
services.AddSingleton<Dictionary<PaymentMethodId, ICheckoutModelExtension>>(o =>
o.GetRequiredService<IEnumerable<ICheckoutModelExtension>>().ToDictionary(o => o.PaymentMethodId, o => o));
services.AddHttpClient(LightningLikePayoutHandler.LightningLikePayoutHandlerOnionNamedClient)
.ConfigurePrimaryHttpMessageHandler<Socks5HttpClientHandler>();
@ -630,8 +630,8 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
(BitcoinLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinLikePaymentHandler), new object[] { network, pmi }));
services.AddSingleton<IPaymentLinkExtension>(provider =>
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentLinkExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentModelExtension>(provider =>
(BitcoinPaymentModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentModelExtension), new object[] { network, pmi }));
services.AddSingleton<ICheckoutModelExtension>(provider =>
(BitcoinCheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinCheckoutModelExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentMethodBitpayAPIExtension>(provider =>
(IPaymentMethodBitpayAPIExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentMethodBitpayAPIExtension), new object[] { pmi }));
@ -651,8 +651,8 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
(LightningLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LightningLikePaymentHandler), new object[] { network, pmi }));
services.AddSingleton<IPaymentLinkExtension>(provider =>
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(LightningPaymentLinkExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentModelExtension>(provider =>
(IPaymentModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(LightningPaymentModelExtension), new object[] { network, pmi }));
services.AddSingleton<ICheckoutModelExtension>(provider =>
(ICheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(LNCheckoutModelExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentMethodBitpayAPIExtension>(provider =>
(IPaymentMethodBitpayAPIExtension)ActivatorUtilities.CreateInstance(provider, typeof(LightningPaymentMethodBitpayAPIExtension), new object[] { pmi }));
var payoutMethodId = PayoutTypes.LN.GetPayoutMethodId(network.CryptoCode);
@ -666,8 +666,8 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
(LNURLPayPaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LNURLPayPaymentHandler), new object[] { network, pmi }));
services.AddSingleton<IPaymentLinkExtension>(provider =>
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(LNURLPayPaymentLinkExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentModelExtension>(provider =>
(IPaymentModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(LNURLPayPaymentModelExtension), new object[] { network, pmi }));
services.AddSingleton<ICheckoutModelExtension>(provider =>
(ICheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(LNURLCheckoutModelExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentMethodBitpayAPIExtension>(provider =>
(IPaymentMethodBitpayAPIExtension)ActivatorUtilities.CreateInstance(provider, typeof(LNURLPayPaymentMethodBitpayAPIExtension), new object[] { pmi }));
}

View file

@ -7,7 +7,7 @@ using Newtonsoft.Json.Linq;
namespace BTCPayServer.Models.InvoicingModels
{
public class PaymentModel
public class CheckoutModel
{
public string CheckoutBodyComponentName { get; set; }
public class AvailableCrypto

View file

@ -12,7 +12,7 @@ using NBitcoin.DataEncoders;
namespace BTCPayServer.Payments.Bitcoin
{
public class BitcoinPaymentModelExtension : IPaymentModelExtension
public class BitcoinCheckoutModelExtension : ICheckoutModelExtension
{
public const string CheckoutBodyComponentName = "BitcoinCheckoutBody";
private readonly PaymentMethodHandlerDictionary _handlers;
@ -23,7 +23,7 @@ namespace BTCPayServer.Payments.Bitcoin
private readonly IPaymentLinkExtension? lnurlPaymentLinkExtension;
private readonly string? _bech32Prefix;
public BitcoinPaymentModelExtension(
public BitcoinCheckoutModelExtension(
PaymentMethodId paymentMethodId,
BTCPayNetwork network,
IEnumerable<IPaymentLinkExtension> paymentLinkExtensions,
@ -45,7 +45,7 @@ namespace BTCPayServer.Payments.Bitcoin
public string Image => _Network.CryptoImagePath;
public string Badge => "";
public PaymentMethodId PaymentMethodId { get; }
public void ModifyPaymentModel(PaymentModelContext context)
public void ModifyCheckoutModel(CheckoutModelContext context)
{
if (context is not { Handler: BitcoinLikePaymentHandler handler})
return;
@ -138,7 +138,7 @@ namespace BTCPayServer.Payments.Bitcoin
}
}
public static void PreparePaymentModelForAmountInSats(PaymentModel model, decimal rate, DisplayFormatter displayFormatter)
public static void PreparePaymentModelForAmountInSats(CheckoutModel model, decimal rate, DisplayFormatter displayFormatter)
{
var satoshiCulture = new CultureInfo(CultureInfo.InvariantCulture.Name)
{

View file

@ -4,20 +4,20 @@ using Microsoft.AspNetCore.Mvc;
namespace BTCPayServer.Payments
{
public record PaymentModelContext(
PaymentModel Model,
public record CheckoutModelContext(
CheckoutModel Model,
Data.StoreData Store,
Data.StoreBlob StoreBlob,
InvoiceEntity InvoiceEntity,
IUrlHelper UrlHelper,
PaymentPrompt Prompt,
IPaymentMethodHandler Handler);
public interface IPaymentModelExtension
public interface ICheckoutModelExtension
{
public PaymentMethodId PaymentMethodId { get; }
string DisplayName { get; }
string Image { get; }
string Badge { get; }
void ModifyPaymentModel(PaymentModelContext context);
void ModifyCheckoutModel(CheckoutModelContext context);
}
}

View file

@ -8,9 +8,9 @@ using NBitcoin;
namespace BTCPayServer.Payments.LNURLPay
{
public class LNURLPayPaymentModelExtension : IPaymentModelExtension
public class LNURLCheckoutModelExtension : ICheckoutModelExtension
{
public LNURLPayPaymentModelExtension(
public LNURLCheckoutModelExtension(
PaymentMethodId paymentMethodId,
BTCPayNetwork network,
DisplayFormatter displayFormatter,
@ -37,7 +37,7 @@ namespace BTCPayServer.Payments.LNURLPay
public string Badge => "⚡";
private const string UriScheme = "lightning:";
public void ModifyPaymentModel(PaymentModelContext context)
public void ModifyCheckoutModel(CheckoutModelContext context)
{
if (context is not { Handler: LNURLPayPaymentHandler handler })
return;
@ -48,11 +48,11 @@ namespace BTCPayServer.Payments.LNURLPay
context.Model.InvoiceBitcoinUrl = lnurl;
context.Model.InvoiceBitcoinUrlQR = lnurl.ToUpperInvariant().Replace(UriScheme.ToUpperInvariant(), UriScheme);
}
context.Model.CheckoutBodyComponentName = LightningPaymentModelExtension.CheckoutBodyComponentName;
context.Model.CheckoutBodyComponentName = LNCheckoutModelExtension.CheckoutBodyComponentName;
context.Model.PeerInfo = handler.ParsePaymentPromptDetails(context.Prompt.Details).NodeInfo;
if (context.StoreBlob.LightningAmountInSatoshi && context.Model.PaymentMethodCurrency == "BTC")
{
BitcoinPaymentModelExtension.PreparePaymentModelForAmountInSats(context.Model, context.Prompt.Rate, _displayFormatter);
BitcoinCheckoutModelExtension.PreparePaymentModelForAmountInSats(context.Model, context.Prompt.Rate, _displayFormatter);
}
}
}

View file

@ -9,12 +9,12 @@ using System.Linq;
namespace BTCPayServer.Payments.Lightning
{
public class LightningPaymentModelExtension : IPaymentModelExtension
public class LNCheckoutModelExtension : ICheckoutModelExtension
{
public const string CheckoutBodyComponentName = "LightningCheckoutBody";
private readonly DisplayFormatter _displayFormatter;
IPaymentLinkExtension _PaymentLinkExtension;
public LightningPaymentModelExtension(
public LNCheckoutModelExtension(
PaymentMethodId paymentMethodId,
BTCPayNetwork network,
DisplayFormatter displayFormatter,
@ -38,7 +38,7 @@ namespace BTCPayServer.Payments.Lightning
public string Image => Network.LightningImagePath;
public string Badge => "⚡";
public void ModifyPaymentModel(PaymentModelContext context)
public void ModifyCheckoutModel(CheckoutModelContext context)
{
if (context is not { Handler: LightningLikePaymentHandler handler })
return;
@ -52,7 +52,7 @@ namespace BTCPayServer.Payments.Lightning
context.Model.PeerInfo = handler.ParsePaymentPromptDetails(paymentPrompt.Details).NodeInfo;
if (context.StoreBlob.LightningAmountInSatoshi && context.Model.PaymentMethodCurrency == "BTC")
{
BitcoinPaymentModelExtension.PreparePaymentModelForAmountInSats(context.Model, paymentPrompt.Rate, _displayFormatter);
BitcoinCheckoutModelExtension.PreparePaymentModelForAmountInSats(context.Model, paymentPrompt.Rate, _displayFormatter);
}
}
}

View file

@ -67,8 +67,8 @@ public partial class AltcoinsPlugin
(IPaymentMethodHandler)ActivatorUtilities.CreateInstance(provider, typeof(MoneroLikePaymentMethodHandler), new object[] { network }));
services.AddSingleton<IPaymentLinkExtension>(provider =>
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(MoneroPaymentLinkExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentModelExtension>(provider =>
(IPaymentModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(MoneroPaymentModelExtension), new object[] { network, pmi }));
services.AddSingleton<ICheckoutModelExtension>(provider =>
(ICheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(MoneroCheckoutModelExtension), new object[] { network, pmi }));
services.AddSingleton<IUIExtension>(new UIExtension("Monero/StoreNavMoneroExtension", "store-nav"));
services.AddSingleton<IUIExtension>(new UIExtension("Monero/StoreWalletsNavMoneroExtension", "store-wallets-nav"));

View file

@ -56,8 +56,8 @@ public partial class AltcoinsPlugin
(IPaymentMethodHandler)ActivatorUtilities.CreateInstance(provider, typeof(ZcashLikePaymentMethodHandler), new object[] { network }));
services.AddSingleton<IPaymentLinkExtension>(provider =>
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(ZcashPaymentLinkExtension), new object[] { network, pmi }));
services.AddSingleton<IPaymentModelExtension>(provider =>
(IPaymentModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(ZcashPaymentModelExtension), new object[] { network, pmi }));
services.AddSingleton<ICheckoutModelExtension>(provider =>
(ICheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(ZcashCheckoutModelExtension), new object[] { network, pmi }));
services.AddSingleton<ZcashLikePaymentMethodHandler>();
services.AddSingleton<IPaymentMethodHandler>(provider => provider.GetRequiredService<ZcashLikePaymentMethodHandler>());

View file

@ -8,13 +8,13 @@ using BTCPayServer.Services.Invoices;
namespace BTCPayServer.Services.Altcoins.Monero.Payments
{
public class MoneroPaymentModelExtension : IPaymentModelExtension
public class MoneroCheckoutModelExtension : ICheckoutModelExtension
{
private readonly BTCPayNetworkBase _network;
private readonly PaymentMethodHandlerDictionary _handlers;
private readonly IPaymentLinkExtension paymentLinkExtension;
public MoneroPaymentModelExtension(
public MoneroCheckoutModelExtension(
PaymentMethodId paymentMethodId,
IEnumerable<IPaymentLinkExtension> paymentLinkExtensions,
BTCPayNetworkBase network,
@ -32,11 +32,11 @@ namespace BTCPayServer.Services.Altcoins.Monero.Payments
public string Image => _network.CryptoImagePath;
public string Badge => "";
public void ModifyPaymentModel(PaymentModelContext context)
public void ModifyCheckoutModel(CheckoutModelContext context)
{
if (context is not { Handler: MoneroLikePaymentMethodHandler handler })
return;
context.Model.CheckoutBodyComponentName = BitcoinPaymentModelExtension.CheckoutBodyComponentName;
context.Model.CheckoutBodyComponentName = BitcoinCheckoutModelExtension.CheckoutBodyComponentName;
if (context.Model.Activated)
{
var details = context.InvoiceEntity.GetPayments(true)

View file

@ -8,13 +8,13 @@ using BTCPayServer.Services.Invoices;
namespace BTCPayServer.Services.Altcoins.Zcash.Payments
{
public class ZcashPaymentModelExtension : IPaymentModelExtension
public class ZcashCheckoutModelExtension : ICheckoutModelExtension
{
private readonly BTCPayNetworkBase _network;
private readonly PaymentMethodHandlerDictionary _handlers;
private readonly IPaymentLinkExtension paymentLinkExtension;
public ZcashPaymentModelExtension(
public ZcashCheckoutModelExtension(
PaymentMethodId paymentMethodId,
IEnumerable<IPaymentLinkExtension> paymentLinkExtensions,
BTCPayNetworkBase network,
@ -32,11 +32,11 @@ namespace BTCPayServer.Services.Altcoins.Zcash.Payments
public string Image => _network.CryptoImagePath;
public string Badge => "";
public void ModifyPaymentModel(PaymentModelContext context)
public void ModifyCheckoutModel(CheckoutModelContext context)
{
if (context is not { Handler: ZcashLikePaymentMethodHandler handler })
return;
context.Model.CheckoutBodyComponentName = BitcoinPaymentModelExtension.CheckoutBodyComponentName;
context.Model.CheckoutBodyComponentName = BitcoinCheckoutModelExtension.CheckoutBodyComponentName;
if (context.Model.Activated)
{
var details = context.InvoiceEntity.GetPayments(true)

View file

@ -6,9 +6,9 @@ namespace BTCPayServer.Services
{
public class PrettyNameProvider
{
private readonly Dictionary<PaymentMethodId, IPaymentModelExtension> _extensions;
private readonly Dictionary<PaymentMethodId, ICheckoutModelExtension> _extensions;
public PrettyNameProvider(Dictionary<PaymentMethodId, IPaymentModelExtension> extensions)
public PrettyNameProvider(Dictionary<PaymentMethodId, ICheckoutModelExtension> extensions)
{
_extensions = extensions;
}

View file

@ -2,9 +2,9 @@
@using BTCPayServer.Components.TruncateCenter
@using BTCPayServer.Abstractions.TagHelpers
@using BTCPayServer.Payments.Bitcoin
@model BTCPayServer.Models.InvoicingModels.PaymentModel
@model BTCPayServer.Models.InvoicingModels.CheckoutModel
<template id="@BitcoinPaymentModelExtension.CheckoutBodyComponentName">
<template id="@BitcoinCheckoutModelExtension.CheckoutBodyComponentName">
@await Component.InvokeAsync("UiExtensionPoint", new {location = "checkout-bitcoin-pre-content", model = Model})
<div class="payment-box">
<div v-if="model.invoiceBitcoinUrlQR" class="qr-container" :data-qr-value="model.invoiceBitcoinUrlQR" :data-clipboard="model.invoiceBitcoinUrl" data-clipboard-confirm-element="#Address_@Model.PaymentMethodId [data-clipboard]">
@ -32,9 +32,9 @@
</template>
<script>
Vue.component(@Safe.Json(BitcoinPaymentModelExtension.CheckoutBodyComponentName), {
Vue.component(@Safe.Json(BitcoinCheckoutModelExtension.CheckoutBodyComponentName), {
props: ['model', 'nfcSupported', 'nfcScanning', 'nfcErrorMessage'],
template: @Safe.Json("#" + BitcoinPaymentModelExtension.CheckoutBodyComponentName),
template: @Safe.Json("#" + BitcoinCheckoutModelExtension.CheckoutBodyComponentName),
components: {
qrcode: VueQrcode
},

View file

@ -1,7 +1,7 @@
@using BTCPayServer.Payments.Lightning
@model BTCPayServer.Models.InvoicingModels.PaymentModel
@model BTCPayServer.Models.InvoicingModels.CheckoutModel
<template id="@LightningPaymentModelExtension.CheckoutBodyComponentName">
<template id="@LNCheckoutModelExtension.CheckoutBodyComponentName">
<div class="payment-box">
@await Component.InvokeAsync("UiExtensionPoint" , new { location="checkout-lightning-pre-content", model = Model})
<div v-if="model.invoiceBitcoinUrlQR" class="qr-container" :data-qr-value="model.invoiceBitcoinUrlQR" :data-clipboard="model.invoiceBitcoinUrl" data-clipboard-confirm-element="#Lightning_@Model.PaymentMethodId [data-clipboard]">
@ -24,9 +24,9 @@
</template>
<script>
Vue.component(@Safe.Json(LightningPaymentModelExtension.CheckoutBodyComponentName), {
Vue.component(@Safe.Json(LNCheckoutModelExtension.CheckoutBodyComponentName), {
props: ['model', 'nfcSupported', 'nfcScanning', 'nfcErrorMessage'],
template: @Safe.Json("#" + LightningPaymentModelExtension.CheckoutBodyComponentName),
template: @Safe.Json("#" + LNCheckoutModelExtension.CheckoutBodyComponentName),
components: {
qrcode: VueQrcode
},

View file

@ -1,4 +1,4 @@
@model PaymentModel
@model CheckoutModel
<style>
#checkout-cheating form + form { margin-top: var(--btcpay-space-l); }

View file

@ -1,4 +1,4 @@
@model PaymentModel
@model CheckoutModel
<div id="testing">
<hr class="my-3" />

View file

@ -5,7 +5,7 @@
@inject IEnumerable<IUIExtension> UiExtensions
@inject PaymentMethodHandlerDictionary PaymentMethodHandlerDictionary
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
@model PaymentModel
@model CheckoutModel
@{
Layout = null;
ViewData["Title"] = Model.HtmlTitle;

View file

@ -1,4 +1,4 @@
@model PaymentModel
@model CheckoutModel
@{
Layout = null;
var displayedPaymentMethods = Model.AvailableCryptos.Where(a => a.Displayed).ToList();
@ -18,28 +18,6 @@
@if (Model.Status == "new")
{
<h1 class="text-danger">This payment method requires javascript.</h1>
@if (displayedPaymentMethods.Count > 1)
{
<div>
<hr />
<h2>Pay with:</h2>
<ul style="list-style-type: none;padding-left: 5px;">
@foreach (var crypto in displayedPaymentMethods)
{
<li style="height: 32px; line-height: 32px;">
<a asp-action="CheckoutNoScript" asp-route-invoiceId="@Model.InvoiceId" asp-route-paymentMethodId="@crypto.PaymentMethodId">
<img alt="@crypto.PaymentMethodName" src="@crypto.CryptoImage" style="vertical-align:middle; height:24px; text-decoration:none; margin-top: -3px;" asp-append-version="true" />
</a>
<a asp-action="CheckoutNoScript" asp-route-invoiceId="@Model.InvoiceId" asp-route-paymentMethodId="@crypto.PaymentMethodId" style="padding-top: 2px;">
@crypto.PaymentMethodName
@(crypto.IsLightning ? Html.Raw("&#9889;") : null)
(@crypto.CryptoCode)
</a>
</li>
}
</ul>
</div>
}
}
else if (Model.Status == "paid" || Model.Status == "complete" || Model.Status == "confirmed")
{