mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 22:14:26 +01:00
Add ability to set default payment method for pay button (#3606)
* Add ability to set default payment method for pay button close #3604 * Add "#nullable enable" to UIStoresController * Add PaymentMethodOptionViewModel * Add explicit "Use the store’s default" option
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
@@ -229,7 +230,7 @@ namespace BTCPayServer.Controllers
|
||||
}
|
||||
|
||||
[HttpPost("{storeId}/rates")]
|
||||
public async Task<IActionResult> Rates(RatesViewModel model, string command = null, string storeId = null, CancellationToken cancellationToken = default)
|
||||
public async Task<IActionResult> Rates(RatesViewModel model, string? command = null, string? storeId = null, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (command == "scripting-on")
|
||||
{
|
||||
@@ -243,7 +244,7 @@ namespace BTCPayServer.Controllers
|
||||
var exchanges = GetSupportedExchanges();
|
||||
model.SetExchangeRates(exchanges, model.PreferredExchange);
|
||||
model.StoreId = storeId ?? model.StoreId;
|
||||
CurrencyPair[] currencyPairs = null;
|
||||
CurrencyPair[]? currencyPairs = null;
|
||||
try
|
||||
{
|
||||
currencyPairs = model.DefaultCurrencyPairs?
|
||||
@@ -277,7 +278,7 @@ namespace BTCPayServer.Controllers
|
||||
return View(model);
|
||||
}
|
||||
}
|
||||
RateRules rules = null;
|
||||
RateRules? rules = null;
|
||||
if (model.ShowScripting)
|
||||
{
|
||||
if (!RateRules.TryParse(model.Script, out rules, out var errors))
|
||||
@@ -421,6 +422,29 @@ namespace BTCPayServer.Controllers
|
||||
}
|
||||
|
||||
void SetCryptoCurrencies(CheckoutAppearanceViewModel vm, Data.StoreData storeData)
|
||||
{
|
||||
var choices = GetEnabledPaymentMethodChoices(storeData);
|
||||
var chosen = GetDefaultPaymentMethodChoice(storeData);
|
||||
|
||||
vm.PaymentMethods = new SelectList(choices, nameof(chosen.Value), nameof(chosen.Name), chosen?.Value);
|
||||
vm.DefaultPaymentMethod = chosen?.Value;
|
||||
}
|
||||
|
||||
PaymentMethodOptionViewModel.Format[] GetEnabledPaymentMethodChoices(Data.StoreData storeData)
|
||||
{
|
||||
var enabled = storeData.GetEnabledPaymentIds(_NetworkProvider);
|
||||
|
||||
return enabled
|
||||
.Select(o =>
|
||||
new PaymentMethodOptionViewModel.Format()
|
||||
{
|
||||
Name = o.ToPrettyString(),
|
||||
Value = o.ToString(),
|
||||
PaymentId = o
|
||||
}).ToArray();
|
||||
}
|
||||
|
||||
PaymentMethodOptionViewModel.Format? GetDefaultPaymentMethodChoice(Data.StoreData storeData)
|
||||
{
|
||||
var enabled = storeData.GetEnabledPaymentIds(_NetworkProvider);
|
||||
var defaultPaymentId = storeData.GetDefaultPaymentId();
|
||||
@@ -431,17 +455,9 @@ namespace BTCPayServer.Controllers
|
||||
enabled.FirstOrDefault(e => e.CryptoCode == "BTC" && e.PaymentType == PaymentTypes.LightningLike) ??
|
||||
enabled.FirstOrDefault();
|
||||
}
|
||||
var choices = enabled
|
||||
.Select(o =>
|
||||
new CheckoutAppearanceViewModel.Format()
|
||||
{
|
||||
Name = o.ToPrettyString(),
|
||||
Value = o.ToString(),
|
||||
PaymentId = o
|
||||
}).ToArray();
|
||||
var chosen = defaultChoice is null ? null : choices.FirstOrDefault(c => defaultChoice.ToString().Equals(c.Value, StringComparison.OrdinalIgnoreCase));
|
||||
vm.PaymentMethods = new SelectList(choices, nameof(chosen.Value), nameof(chosen.Name), chosen?.Value);
|
||||
vm.DefaultPaymentMethod = chosen?.Value;
|
||||
var choices = GetEnabledPaymentMethodChoices(storeData);
|
||||
|
||||
return defaultChoice is null ? null : choices.FirstOrDefault(c => defaultChoice.ToString().Equals(c.Value, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
@@ -616,7 +632,7 @@ namespace BTCPayServer.Controllers
|
||||
}
|
||||
|
||||
[HttpPost("{storeId}/settings")]
|
||||
public async Task<IActionResult> GeneralSettings(GeneralSettingsViewModel model, string command = null)
|
||||
public async Task<IActionResult> GeneralSettings(GeneralSettingsViewModel model, string? command = null)
|
||||
{
|
||||
bool needUpdate = false;
|
||||
if (CurrentStore.StoreName != model.StoreName)
|
||||
@@ -747,7 +763,7 @@ namespace BTCPayServer.Controllers
|
||||
TempData[WellKnownTempData.ErrorMessage] = "Failure to revoke this token.";
|
||||
else
|
||||
TempData[WellKnownTempData.SuccessMessage] = "Token revoked";
|
||||
return RedirectToAction(nameof(ListTokens), new { storeId = token.StoreId });
|
||||
return RedirectToAction(nameof(ListTokens), new { storeId = token?.StoreId });
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
@@ -782,7 +798,7 @@ namespace BTCPayServer.Controllers
|
||||
Id = model.PublicKey == null ? null : NBitpayClient.Extensions.BitIdExtensions.GetBitIDSIN(new PubKey(model.PublicKey).Compress())
|
||||
};
|
||||
|
||||
string pairingCode = null;
|
||||
string? pairingCode = null;
|
||||
if (model.PublicKey == null)
|
||||
{
|
||||
tokenRequest.PairingCode = await _TokenRepository.CreatePairingCodeAsync();
|
||||
@@ -807,7 +823,7 @@ namespace BTCPayServer.Controllers
|
||||
});
|
||||
}
|
||||
|
||||
public string GeneratedPairingCode { get; set; }
|
||||
public string? GeneratedPairingCode { get; set; }
|
||||
public WebhookSender WebhookNotificationManager { get; }
|
||||
public IDataProtector DataProtector { get; }
|
||||
|
||||
@@ -880,7 +896,7 @@ namespace BTCPayServer.Controllers
|
||||
[HttpGet]
|
||||
[Route("/api-access-request")]
|
||||
[AllowAnonymous]
|
||||
public async Task<IActionResult> RequestPairing(string pairingCode, string selectedStore = null)
|
||||
public async Task<IActionResult> RequestPairing(string pairingCode, string? selectedStore = null)
|
||||
{
|
||||
var userId = GetUserId();
|
||||
if (userId == null)
|
||||
@@ -956,9 +972,9 @@ namespace BTCPayServer.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
private string GetUserId()
|
||||
private string? GetUserId()
|
||||
{
|
||||
if (User.Identity.AuthenticationType != AuthenticationSchemes.Cookie)
|
||||
if (User.Identity?.AuthenticationType != AuthenticationSchemes.Cookie)
|
||||
return null;
|
||||
return _UserManager.GetUserId(User);
|
||||
}
|
||||
@@ -990,6 +1006,8 @@ namespace BTCPayServer.Controllers
|
||||
{
|
||||
Price = null,
|
||||
Currency = storeBlob.DefaultCurrency,
|
||||
DefaultPaymentMethod = String.Empty,
|
||||
PaymentMethods = GetEnabledPaymentMethodChoices(store),
|
||||
ButtonSize = 2,
|
||||
UrlRoot = appUrl,
|
||||
PayButtonImageUrl = appUrl + "img/paybutton/pay.svg",
|
||||
|
||||
Reference in New Issue
Block a user