mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-10 09:19:24 +01:00
Pretty names of payment methods isn't provided by CheckoutExtensions
This commit is contained in:
parent
0bf75d52d7
commit
c43721d489
11 changed files with 26 additions and 22 deletions
|
@ -297,6 +297,10 @@ namespace BTCPayServer
|
||||||
{
|
{
|
||||||
return services.AddDefaultTransactions(keyValues.Select(k => KeyValuePair.Create<string, string?>(k, string.Empty)).ToArray());
|
return services.AddDefaultTransactions(keyValues.Select(k => KeyValuePair.Create<string, string?>(k, string.Empty)).ToArray());
|
||||||
}
|
}
|
||||||
|
public static IServiceCollection AddDefaultPrettyName(this IServiceCollection services, PaymentMethodId paymentMethodId, string defaultPrettyName)
|
||||||
|
{
|
||||||
|
return services.AddDefaultTransactions(KeyValuePair.Create<string, string?>(PrettyNameProvider.GetTranslationKey(paymentMethodId), defaultPrettyName));
|
||||||
|
}
|
||||||
public static IServiceCollection AddDefaultTransactions(this IServiceCollection services, params KeyValuePair<string, string?>[] keyValues)
|
public static IServiceCollection AddDefaultTransactions(this IServiceCollection services, params KeyValuePair<string, string?>[] keyValues)
|
||||||
{
|
{
|
||||||
services.AddSingleton<IDefaultTransactionProvider>(new InMemoryDefaultTransactionProvider(keyValues));
|
services.AddSingleton<IDefaultTransactionProvider>(new InMemoryDefaultTransactionProvider(keyValues));
|
||||||
|
|
|
@ -624,6 +624,7 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
||||||
// BTC
|
// BTC
|
||||||
{
|
{
|
||||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode);
|
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode);
|
||||||
|
services.AddDefaultPrettyName(pmi, network.DisplayName);
|
||||||
services.AddSingleton<BTCPayNetworkBase>(network);
|
services.AddSingleton<BTCPayNetworkBase>(network);
|
||||||
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
||||||
(BitcoinLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinLikePaymentHandler), new object[] { network, pmi }));
|
(BitcoinLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinLikePaymentHandler), new object[] { network, pmi }));
|
||||||
|
@ -631,7 +632,6 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
||||||
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentLinkExtension), new object[] { network, pmi }));
|
(IPaymentLinkExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentLinkExtension), new object[] { network, pmi }));
|
||||||
services.AddSingleton<ICheckoutModelExtension>(provider =>
|
services.AddSingleton<ICheckoutModelExtension>(provider =>
|
||||||
(BitcoinCheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinCheckoutModelExtension), new object[] { network, pmi }));
|
(BitcoinCheckoutModelExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinCheckoutModelExtension), new object[] { network, pmi }));
|
||||||
services.AddDefaultTransactions(network.DisplayName);
|
|
||||||
services.AddSingleton<IPaymentMethodBitpayAPIExtension>(provider =>
|
services.AddSingleton<IPaymentMethodBitpayAPIExtension>(provider =>
|
||||||
(IPaymentMethodBitpayAPIExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentMethodBitpayAPIExtension), new object[] { pmi }));
|
(IPaymentMethodBitpayAPIExtension)ActivatorUtilities.CreateInstance(provider, typeof(BitcoinPaymentMethodBitpayAPIExtension), new object[] { pmi }));
|
||||||
|
|
||||||
|
@ -647,6 +647,10 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
||||||
// LN
|
// LN
|
||||||
{
|
{
|
||||||
var pmi = PaymentTypes.LN.GetPaymentMethodId(network.CryptoCode);
|
var pmi = PaymentTypes.LN.GetPaymentMethodId(network.CryptoCode);
|
||||||
|
if (network.IsBTC)
|
||||||
|
services.AddDefaultPrettyName(pmi, "Lightning");
|
||||||
|
else
|
||||||
|
services.AddDefaultPrettyName(pmi, $"Lightning ({network.DisplayName})");
|
||||||
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
||||||
(LightningLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LightningLikePaymentHandler), new object[] { network, pmi }));
|
(LightningLikePaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LightningLikePaymentHandler), new object[] { network, pmi }));
|
||||||
services.AddSingleton<IPaymentLinkExtension>(provider =>
|
services.AddSingleton<IPaymentLinkExtension>(provider =>
|
||||||
|
@ -662,6 +666,10 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
||||||
// LNURL
|
// LNURL
|
||||||
{
|
{
|
||||||
var pmi = PaymentTypes.LNURL.GetPaymentMethodId(network.CryptoCode);
|
var pmi = PaymentTypes.LNURL.GetPaymentMethodId(network.CryptoCode);
|
||||||
|
if (network.IsBTC)
|
||||||
|
services.AddDefaultPrettyName(pmi, "Lightning (via LNURL)");
|
||||||
|
else
|
||||||
|
services.AddDefaultPrettyName(pmi, $"Lightning ({network.DisplayName} via LNURL)");
|
||||||
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
services.AddSingleton<IPaymentMethodHandler>(provider =>
|
||||||
(LNURLPayPaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LNURLPayPaymentHandler), new object[] { network, pmi }));
|
(LNURLPayPaymentHandler)ActivatorUtilities.CreateInstance(provider, typeof(LNURLPayPaymentHandler), new object[] { network, pmi }));
|
||||||
services.AddSingleton<IPaymentLinkExtension>(provider =>
|
services.AddSingleton<IPaymentLinkExtension>(provider =>
|
||||||
|
|
|
@ -18,7 +18,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
||||||
public const string CheckoutBodyComponentName = "BitcoinCheckoutBody";
|
public const string CheckoutBodyComponentName = "BitcoinCheckoutBody";
|
||||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||||
private readonly BTCPayNetwork _Network;
|
private readonly BTCPayNetwork _Network;
|
||||||
private readonly IStringLocalizer StringLocalizer;
|
|
||||||
private readonly DisplayFormatter _displayFormatter;
|
private readonly DisplayFormatter _displayFormatter;
|
||||||
private readonly IPaymentLinkExtension paymentLinkExtension;
|
private readonly IPaymentLinkExtension paymentLinkExtension;
|
||||||
private readonly IPaymentLinkExtension? lnPaymentLinkExtension;
|
private readonly IPaymentLinkExtension? lnPaymentLinkExtension;
|
||||||
|
@ -28,7 +27,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
||||||
public BitcoinCheckoutModelExtension(
|
public BitcoinCheckoutModelExtension(
|
||||||
PaymentMethodId paymentMethodId,
|
PaymentMethodId paymentMethodId,
|
||||||
BTCPayNetwork network,
|
BTCPayNetwork network,
|
||||||
IStringLocalizer stringLocalizer,
|
|
||||||
IEnumerable<IPaymentLinkExtension> paymentLinkExtensions,
|
IEnumerable<IPaymentLinkExtension> paymentLinkExtensions,
|
||||||
DisplayFormatter displayFormatter,
|
DisplayFormatter displayFormatter,
|
||||||
PaymentMethodHandlerDictionary handlers)
|
PaymentMethodHandlerDictionary handlers)
|
||||||
|
@ -36,7 +34,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
||||||
PaymentMethodId = paymentMethodId;
|
PaymentMethodId = paymentMethodId;
|
||||||
_handlers = handlers;
|
_handlers = handlers;
|
||||||
_Network = network;
|
_Network = network;
|
||||||
StringLocalizer = stringLocalizer;
|
|
||||||
_displayFormatter = displayFormatter;
|
_displayFormatter = displayFormatter;
|
||||||
paymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
paymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
||||||
var lnPmi = PaymentTypes.LN.GetPaymentMethodId(network.CryptoCode);
|
var lnPmi = PaymentTypes.LN.GetPaymentMethodId(network.CryptoCode);
|
||||||
|
@ -45,7 +42,6 @@ namespace BTCPayServer.Payments.Bitcoin
|
||||||
lnurlPaymentLinkExtension = paymentLinkExtensions.SingleOrDefault(p => p.PaymentMethodId == lnurlPmi);
|
lnurlPaymentLinkExtension = paymentLinkExtensions.SingleOrDefault(p => p.PaymentMethodId == lnurlPmi);
|
||||||
_bech32Prefix = network.NBitcoinNetwork.GetBech32Encoder(Bech32Type.WITNESS_PUBKEY_ADDRESS, false) is { } enc ? Encoders.ASCII.EncodeData(enc.HumanReadablePart) : null;
|
_bech32Prefix = network.NBitcoinNetwork.GetBech32Encoder(Bech32Type.WITNESS_PUBKEY_ADDRESS, false) is { } enc ? Encoders.ASCII.EncodeData(enc.HumanReadablePart) : null;
|
||||||
}
|
}
|
||||||
public string DisplayName => StringLocalizer[_Network.DisplayName];
|
|
||||||
public string Image => _Network.CryptoImagePath;
|
public string Image => _Network.CryptoImagePath;
|
||||||
public string Badge => "";
|
public string Badge => "";
|
||||||
public PaymentMethodId PaymentMethodId { get; }
|
public PaymentMethodId PaymentMethodId { get; }
|
||||||
|
|
|
@ -15,7 +15,6 @@ namespace BTCPayServer.Payments
|
||||||
public interface ICheckoutModelExtension
|
public interface ICheckoutModelExtension
|
||||||
{
|
{
|
||||||
public PaymentMethodId PaymentMethodId { get; }
|
public PaymentMethodId PaymentMethodId { get; }
|
||||||
string DisplayName { get; }
|
|
||||||
string Image { get; }
|
string Image { get; }
|
||||||
string Badge { get; }
|
string Badge { get; }
|
||||||
void ModifyCheckoutModel(CheckoutModelContext context);
|
void ModifyCheckoutModel(CheckoutModelContext context);
|
||||||
|
|
|
@ -23,7 +23,6 @@ namespace BTCPayServer.Payments.LNURLPay
|
||||||
paymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
paymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
||||||
handler = (LNURLPayPaymentHandler)handlers[PaymentMethodId];
|
handler = (LNURLPayPaymentHandler)handlers[PaymentMethodId];
|
||||||
var isBTC = PaymentTypes.LNURL.GetPaymentMethodId("BTC") == paymentMethodId;
|
var isBTC = PaymentTypes.LNURL.GetPaymentMethodId("BTC") == paymentMethodId;
|
||||||
DisplayName = isBTC ? "Lightning (via LNURL)" : $"Lightning ({network.DisplayName} via LNURL)";
|
|
||||||
}
|
}
|
||||||
public PaymentMethodId PaymentMethodId { get; }
|
public PaymentMethodId PaymentMethodId { get; }
|
||||||
|
|
||||||
|
@ -32,7 +31,6 @@ namespace BTCPayServer.Payments.LNURLPay
|
||||||
private readonly IPaymentLinkExtension paymentLinkExtension;
|
private readonly IPaymentLinkExtension paymentLinkExtension;
|
||||||
private readonly LNURLPayPaymentHandler handler;
|
private readonly LNURLPayPaymentHandler handler;
|
||||||
|
|
||||||
public string DisplayName { get; }
|
|
||||||
public string Image => _network.LightningImagePath;
|
public string Image => _network.LightningImagePath;
|
||||||
public string Badge => "⚡";
|
public string Badge => "⚡";
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@ namespace BTCPayServer.Payments.Lightning
|
||||||
public const string CheckoutBodyComponentName = "LightningCheckoutBody";
|
public const string CheckoutBodyComponentName = "LightningCheckoutBody";
|
||||||
private readonly DisplayFormatter _displayFormatter;
|
private readonly DisplayFormatter _displayFormatter;
|
||||||
IPaymentLinkExtension _PaymentLinkExtension;
|
IPaymentLinkExtension _PaymentLinkExtension;
|
||||||
private readonly bool isBTC;
|
|
||||||
|
|
||||||
public LNCheckoutModelExtension(
|
public LNCheckoutModelExtension(
|
||||||
PaymentMethodId paymentMethodId,
|
PaymentMethodId paymentMethodId,
|
||||||
|
@ -31,7 +30,6 @@ namespace BTCPayServer.Payments.Lightning
|
||||||
Handlers = handlers;
|
Handlers = handlers;
|
||||||
PaymentMethodId = paymentMethodId;
|
PaymentMethodId = paymentMethodId;
|
||||||
_PaymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
_PaymentLinkExtension = paymentLinkExtensions.Single(p => p.PaymentMethodId == PaymentMethodId);
|
||||||
isBTC = PaymentTypes.LN.GetPaymentMethodId("BTC") == paymentMethodId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BTCPayNetwork Network { get; }
|
public BTCPayNetwork Network { get; }
|
||||||
|
@ -39,8 +37,6 @@ namespace BTCPayServer.Payments.Lightning
|
||||||
public PaymentMethodHandlerDictionary Handlers { get; }
|
public PaymentMethodHandlerDictionary Handlers { get; }
|
||||||
public PaymentMethodId PaymentMethodId { get; }
|
public PaymentMethodId PaymentMethodId { get; }
|
||||||
|
|
||||||
public string DisplayName => isBTC ? StringLocalizer["Lightning"] : StringLocalizer["Lightning ({0})", Network.DisplayName];
|
|
||||||
|
|
||||||
public string Image => Network.LightningImagePath;
|
public string Image => Network.LightningImagePath;
|
||||||
public string Badge => "⚡";
|
public string Badge => "⚡";
|
||||||
public void ModifyCheckoutModel(CheckoutModelContext context)
|
public void ModifyCheckoutModel(CheckoutModelContext context)
|
||||||
|
@ -55,7 +51,7 @@ namespace BTCPayServer.Payments.Lightning
|
||||||
if (context.Model.InvoiceBitcoinUrl is not null)
|
if (context.Model.InvoiceBitcoinUrl is not null)
|
||||||
context.Model.InvoiceBitcoinUrlQR = $"lightning:{context.Model.InvoiceBitcoinUrl.ToUpperInvariant()?.Substring("LIGHTNING:".Length)}";
|
context.Model.InvoiceBitcoinUrlQR = $"lightning:{context.Model.InvoiceBitcoinUrl.ToUpperInvariant()?.Substring("LIGHTNING:".Length)}";
|
||||||
context.Model.PeerInfo = handler.ParsePaymentPromptDetails(paymentPrompt.Details).NodeInfo;
|
context.Model.PeerInfo = handler.ParsePaymentPromptDetails(paymentPrompt.Details).NodeInfo;
|
||||||
if (context.StoreBlob.LightningAmountInSatoshi && isBTC)
|
if (context.StoreBlob.LightningAmountInSatoshi && Network.IsBTC)
|
||||||
{
|
{
|
||||||
BitcoinCheckoutModelExtension.PreparePaymentModelForAmountInSats(context.Model, paymentPrompt.Rate, _displayFormatter);
|
BitcoinCheckoutModelExtension.PreparePaymentModelForAmountInSats(context.Model, paymentPrompt.Rate, _displayFormatter);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ public partial class AltcoinsPlugin
|
||||||
? "https://www.exploremonero.com/transaction/{0}"
|
? "https://www.exploremonero.com/transaction/{0}"
|
||||||
: "https://testnet.xmrchain.net/tx/{0}";
|
: "https://testnet.xmrchain.net/tx/{0}";
|
||||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId("XMR");
|
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId("XMR");
|
||||||
|
services.AddDefaultPrettyName(pmi, network.DisplayName);
|
||||||
services.AddBTCPayNetwork(network)
|
services.AddBTCPayNetwork(network)
|
||||||
.AddTransactionLinkProvider(pmi, new SimpleTransactionLinkProvider(blockExplorerLink));
|
.AddTransactionLinkProvider(pmi, new SimpleTransactionLinkProvider(blockExplorerLink));
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ public partial class AltcoinsPlugin
|
||||||
? "https://www.exploreZcash.com/transaction/{0}"
|
? "https://www.exploreZcash.com/transaction/{0}"
|
||||||
: "https://testnet.xmrchain.net/tx/{0}";
|
: "https://testnet.xmrchain.net/tx/{0}";
|
||||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId("ZEC");
|
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId("ZEC");
|
||||||
|
services.AddDefaultPrettyName(pmi, network.DisplayName);
|
||||||
services.AddBTCPayNetwork(network)
|
services.AddBTCPayNetwork(network)
|
||||||
.AddTransactionLinkProvider(pmi, new SimpleTransactionLinkProvider(blockExplorerLink));
|
.AddTransactionLinkProvider(pmi, new SimpleTransactionLinkProvider(blockExplorerLink));
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,6 @@ namespace BTCPayServer.Services.Altcoins.Monero.Payments
|
||||||
}
|
}
|
||||||
public PaymentMethodId PaymentMethodId { get; }
|
public PaymentMethodId PaymentMethodId { get; }
|
||||||
|
|
||||||
public string DisplayName => _network.DisplayName;
|
|
||||||
|
|
||||||
public string Image => _network.CryptoImagePath;
|
public string Image => _network.CryptoImagePath;
|
||||||
public string Badge => "";
|
public string Badge => "";
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,6 @@ namespace BTCPayServer.Services.Altcoins.Zcash.Payments
|
||||||
}
|
}
|
||||||
public PaymentMethodId PaymentMethodId { get; }
|
public PaymentMethodId PaymentMethodId { get; }
|
||||||
|
|
||||||
public string DisplayName => _network.DisplayName;
|
|
||||||
|
|
||||||
public string Image => _network.CryptoImagePath;
|
public string Image => _network.CryptoImagePath;
|
||||||
public string Badge => "";
|
public string Badge => "";
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,28 @@
|
||||||
#nullable enable
|
#nullable enable
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using BTCPayServer.Payments;
|
using BTCPayServer.Payments;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
|
||||||
namespace BTCPayServer.Services
|
namespace BTCPayServer.Services
|
||||||
{
|
{
|
||||||
public class PrettyNameProvider
|
public class PrettyNameProvider
|
||||||
{
|
{
|
||||||
private readonly Dictionary<PaymentMethodId, ICheckoutModelExtension> _extensions;
|
public static string GetTranslationKey(PaymentMethodId paymentMethodId) => $"PrettyName({paymentMethodId})";
|
||||||
|
private readonly IStringLocalizer _stringLocalizer;
|
||||||
|
|
||||||
public PrettyNameProvider(Dictionary<PaymentMethodId, ICheckoutModelExtension> extensions)
|
public PrettyNameProvider(IStringLocalizer stringLocalizer)
|
||||||
{
|
{
|
||||||
_extensions = extensions;
|
_stringLocalizer = stringLocalizer;
|
||||||
}
|
}
|
||||||
public string PrettyName(PaymentMethodId paymentMethodId)
|
public string PrettyName(PaymentMethodId paymentMethodId)
|
||||||
{
|
{
|
||||||
if (paymentMethodId is null)
|
if (paymentMethodId is null)
|
||||||
return "<NULL>";
|
return "<NULL>";
|
||||||
_extensions.TryGetValue(paymentMethodId, out var n);
|
var key = GetTranslationKey(paymentMethodId);
|
||||||
return n?.DisplayName ?? paymentMethodId.ToString();
|
var result = _stringLocalizer[key]?.Value;
|
||||||
|
if (string.IsNullOrEmpty(result) || result == key)
|
||||||
|
return paymentMethodId.ToString();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue