mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 14:34:23 +01:00
Can pass pre filled amount and address to Send Wallet
This commit is contained in:
@@ -32,17 +32,19 @@ namespace BTCPayServer.Controllers
|
|||||||
[Route("wallets")]
|
[Route("wallets")]
|
||||||
[Authorize(AuthenticationSchemes = Policies.CookieAuthentication)]
|
[Authorize(AuthenticationSchemes = Policies.CookieAuthentication)]
|
||||||
[AutoValidateAntiforgeryToken]
|
[AutoValidateAntiforgeryToken]
|
||||||
public class WalletsController : Controller
|
public partial class WalletsController : Controller
|
||||||
{
|
{
|
||||||
private StoreRepository _Repo;
|
public StoreRepository Repository { get; }
|
||||||
private BTCPayNetworkProvider _NetworkProvider;
|
public BTCPayNetworkProvider NetworkProvider { get; }
|
||||||
|
public ExplorerClientProvider ExplorerClientProvider { get; }
|
||||||
|
|
||||||
private readonly UserManager<ApplicationUser> _userManager;
|
private readonly UserManager<ApplicationUser> _userManager;
|
||||||
private readonly IOptions<MvcJsonOptions> _mvcJsonOptions;
|
private readonly IOptions<MvcJsonOptions> _mvcJsonOptions;
|
||||||
private readonly NBXplorerDashboard _dashboard;
|
private readonly NBXplorerDashboard _dashboard;
|
||||||
private readonly ExplorerClientProvider _explorerProvider;
|
|
||||||
private readonly IFeeProviderFactory _feeRateProvider;
|
private readonly IFeeProviderFactory _feeRateProvider;
|
||||||
private readonly BTCPayWalletProvider _walletProvider;
|
private readonly BTCPayWalletProvider _walletProvider;
|
||||||
RateFetcher _RateProvider;
|
public RateFetcher RateFetcher { get; }
|
||||||
CurrencyNameTable _currencyTable;
|
CurrencyNameTable _currencyTable;
|
||||||
public WalletsController(StoreRepository repo,
|
public WalletsController(StoreRepository repo,
|
||||||
CurrencyNameTable currencyTable,
|
CurrencyNameTable currencyTable,
|
||||||
@@ -56,13 +58,13 @@ namespace BTCPayServer.Controllers
|
|||||||
BTCPayWalletProvider walletProvider)
|
BTCPayWalletProvider walletProvider)
|
||||||
{
|
{
|
||||||
_currencyTable = currencyTable;
|
_currencyTable = currencyTable;
|
||||||
_Repo = repo;
|
Repository = repo;
|
||||||
_RateProvider = rateProvider;
|
RateFetcher = rateProvider;
|
||||||
_NetworkProvider = networkProvider;
|
NetworkProvider = networkProvider;
|
||||||
_userManager = userManager;
|
_userManager = userManager;
|
||||||
_mvcJsonOptions = mvcJsonOptions;
|
_mvcJsonOptions = mvcJsonOptions;
|
||||||
_dashboard = dashboard;
|
_dashboard = dashboard;
|
||||||
_explorerProvider = explorerProvider;
|
ExplorerClientProvider = explorerProvider;
|
||||||
_feeRateProvider = feeRateProvider;
|
_feeRateProvider = feeRateProvider;
|
||||||
_walletProvider = walletProvider;
|
_walletProvider = walletProvider;
|
||||||
}
|
}
|
||||||
@@ -70,10 +72,10 @@ namespace BTCPayServer.Controllers
|
|||||||
public async Task<IActionResult> ListWallets()
|
public async Task<IActionResult> ListWallets()
|
||||||
{
|
{
|
||||||
var wallets = new ListWalletsViewModel();
|
var wallets = new ListWalletsViewModel();
|
||||||
var stores = await _Repo.GetStoresByUserId(GetUserId());
|
var stores = await Repository.GetStoresByUserId(GetUserId());
|
||||||
|
|
||||||
var onChainWallets = stores
|
var onChainWallets = stores
|
||||||
.SelectMany(s => s.GetSupportedPaymentMethods(_NetworkProvider)
|
.SelectMany(s => s.GetSupportedPaymentMethods(NetworkProvider)
|
||||||
.OfType<DerivationStrategy>()
|
.OfType<DerivationStrategy>()
|
||||||
.Select(d => ((Wallet: _walletProvider.GetWallet(d.Network),
|
.Select(d => ((Wallet: _walletProvider.GetWallet(d.Network),
|
||||||
DerivationStrategy: d.DerivationStrategyBase,
|
DerivationStrategy: d.DerivationStrategyBase,
|
||||||
@@ -111,7 +113,7 @@ namespace BTCPayServer.Controllers
|
|||||||
[ModelBinder(typeof(WalletIdModelBinder))]
|
[ModelBinder(typeof(WalletIdModelBinder))]
|
||||||
WalletId walletId)
|
WalletId walletId)
|
||||||
{
|
{
|
||||||
var store = await _Repo.FindStore(walletId.StoreId, GetUserId());
|
var store = await Repository.FindStore(walletId.StoreId, GetUserId());
|
||||||
DerivationStrategy paymentMethod = GetPaymentMethod(walletId, store);
|
DerivationStrategy paymentMethod = GetPaymentMethod(walletId, store);
|
||||||
if (paymentMethod == null)
|
if (paymentMethod == null)
|
||||||
return NotFound();
|
return NotFound();
|
||||||
@@ -139,29 +141,33 @@ namespace BTCPayServer.Controllers
|
|||||||
[Route("{walletId}/send")]
|
[Route("{walletId}/send")]
|
||||||
public async Task<IActionResult> WalletSend(
|
public async Task<IActionResult> WalletSend(
|
||||||
[ModelBinder(typeof(WalletIdModelBinder))]
|
[ModelBinder(typeof(WalletIdModelBinder))]
|
||||||
WalletId walletId)
|
WalletId walletId, string defaultDestination = null, string defaultAmount = null)
|
||||||
{
|
{
|
||||||
if (walletId?.StoreId == null)
|
if (walletId?.StoreId == null)
|
||||||
return NotFound();
|
return NotFound();
|
||||||
var store = await _Repo.FindStore(walletId.StoreId, GetUserId());
|
var store = await Repository.FindStore(walletId.StoreId, GetUserId());
|
||||||
DerivationStrategy paymentMethod = GetPaymentMethod(walletId, store);
|
DerivationStrategy paymentMethod = GetPaymentMethod(walletId, store);
|
||||||
if (paymentMethod == null)
|
if (paymentMethod == null)
|
||||||
return NotFound();
|
return NotFound();
|
||||||
|
|
||||||
var storeData = store.GetStoreBlob();
|
var storeData = store.GetStoreBlob();
|
||||||
var rateRules = store.GetStoreBlob().GetRateRules(_NetworkProvider);
|
var rateRules = store.GetStoreBlob().GetRateRules(NetworkProvider);
|
||||||
rateRules.Spread = 0.0m;
|
rateRules.Spread = 0.0m;
|
||||||
var currencyPair = new Rating.CurrencyPair(paymentMethod.PaymentId.CryptoCode, GetCurrencyCode(storeData.DefaultLang) ?? "USD");
|
var currencyPair = new Rating.CurrencyPair(paymentMethod.PaymentId.CryptoCode, GetCurrencyCode(storeData.DefaultLang) ?? "USD");
|
||||||
WalletModel model = new WalletModel();
|
WalletModel model = new WalletModel()
|
||||||
model.ServerUrl = GetLedgerWebsocketUrl(this.HttpContext, walletId.CryptoCode, paymentMethod.DerivationStrategyBase);
|
{
|
||||||
model.CryptoCurrency = walletId.CryptoCode;
|
DefaultAddress = defaultDestination,
|
||||||
|
DefaultAmount = defaultAmount,
|
||||||
|
ServerUrl = GetLedgerWebsocketUrl(this.HttpContext, walletId.CryptoCode, paymentMethod.DerivationStrategyBase),
|
||||||
|
CryptoCurrency = walletId.CryptoCode
|
||||||
|
};
|
||||||
|
|
||||||
using (CancellationTokenSource cts = new CancellationTokenSource())
|
using (CancellationTokenSource cts = new CancellationTokenSource())
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
cts.CancelAfter(TimeSpan.FromSeconds(5));
|
cts.CancelAfter(TimeSpan.FromSeconds(5));
|
||||||
var result = await _RateProvider.FetchRate(currencyPair, rateRules).WithCancellation(cts.Token);
|
var result = await RateFetcher.FetchRate(currencyPair, rateRules).WithCancellation(cts.Token);
|
||||||
if (result.BidAsk != null)
|
if (result.BidAsk != null)
|
||||||
{
|
{
|
||||||
model.Rate = result.BidAsk.Center;
|
model.Rate = result.BidAsk.Center;
|
||||||
@@ -197,7 +203,7 @@ namespace BTCPayServer.Controllers
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
var paymentMethod = store
|
var paymentMethod = store
|
||||||
.GetSupportedPaymentMethods(_NetworkProvider)
|
.GetSupportedPaymentMethods(NetworkProvider)
|
||||||
.OfType<DerivationStrategy>()
|
.OfType<DerivationStrategy>()
|
||||||
.FirstOrDefault(p => p.PaymentId.PaymentType == Payments.PaymentTypes.BTCLike && p.PaymentId.CryptoCode == walletId.CryptoCode);
|
.FirstOrDefault(p => p.PaymentId.PaymentType == Payments.PaymentTypes.BTCLike && p.PaymentId.CryptoCode == walletId.CryptoCode);
|
||||||
return paymentMethod;
|
return paymentMethod;
|
||||||
@@ -257,7 +263,7 @@ namespace BTCPayServer.Controllers
|
|||||||
BTCPayNetwork network = null;
|
BTCPayNetwork network = null;
|
||||||
if (cryptoCode != null)
|
if (cryptoCode != null)
|
||||||
{
|
{
|
||||||
network = _NetworkProvider.GetNetwork(cryptoCode);
|
network = NetworkProvider.GetNetwork(cryptoCode);
|
||||||
if (network == null)
|
if (network == null)
|
||||||
throw new FormatException("Invalid value for crypto code");
|
throw new FormatException("Invalid value for crypto code");
|
||||||
}
|
}
|
||||||
@@ -403,7 +409,7 @@ namespace BTCPayServer.Controllers
|
|||||||
if (!strategy.Segwit)
|
if (!strategy.Segwit)
|
||||||
{
|
{
|
||||||
var parentHashes = usedCoins.Select(c => c.Outpoint.Hash).ToHashSet();
|
var parentHashes = usedCoins.Select(c => c.Outpoint.Hash).ToHashSet();
|
||||||
var explorer = _explorerProvider.GetExplorerClient(network);
|
var explorer = ExplorerClientProvider.GetExplorerClient(network);
|
||||||
var getTransactionAsyncs = parentHashes.Select(h => (Op: explorer.GetTransactionAsync(h), Hash: h)).ToList();
|
var getTransactionAsyncs = parentHashes.Select(h => (Op: explorer.GetTransactionAsync(h), Hash: h)).ToList();
|
||||||
foreach (var getTransactionAsync in getTransactionAsyncs)
|
foreach (var getTransactionAsync in getTransactionAsyncs)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ namespace BTCPayServer.Models.WalletViewModels
|
|||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
public string DefaultAddress { get; set; }
|
||||||
|
public string DefaultAmount { get; set; }
|
||||||
|
|
||||||
public decimal? Rate { get; set; }
|
public decimal? Rate { get; set; }
|
||||||
public int Divisibility { get; set; }
|
public int Divisibility { get; set; }
|
||||||
public string Fiat { get; set; }
|
public string Fiat { get; set; }
|
||||||
|
|||||||
@@ -15,7 +15,12 @@ $(function () {
|
|||||||
var recommendedFees = "";
|
var recommendedFees = "";
|
||||||
var recommendedBalance = "";
|
var recommendedBalance = "";
|
||||||
var cryptoCode = $("#cryptoCode").val();
|
var cryptoCode = $("#cryptoCode").val();
|
||||||
|
if (srvModel.defaultAddress !== null) {
|
||||||
|
$("#destination-textbox").val(srvModel.defaultAddress);
|
||||||
|
}
|
||||||
|
if (srvModel.defaultAmount !== null) {
|
||||||
|
$("#amount-textbox").val(srvModel.defaultAmount);
|
||||||
|
}
|
||||||
function WriteAlert(type, message) {
|
function WriteAlert(type, message) {
|
||||||
$("#walletAlert").removeClass("alert-danger");
|
$("#walletAlert").removeClass("alert-danger");
|
||||||
$("#walletAlert").removeClass("alert-warning");
|
$("#walletAlert").removeClass("alert-warning");
|
||||||
@@ -133,8 +138,7 @@ $(function () {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bridge.sendCommand('test', null, 5)
|
bridge.sendCommand('test', null, 5)
|
||||||
.catch(function (reason)
|
.catch(function (reason) {
|
||||||
{
|
|
||||||
if (reason.name === "TransportError")
|
if (reason.name === "TransportError")
|
||||||
reason = "Are you running the ledger app with version equals or above 1.2.4?";
|
reason = "Are you running the ledger app with version equals or above 1.2.4?";
|
||||||
Write('hw', 'error', reason);
|
Write('hw', 'error', reason);
|
||||||
|
|||||||
Reference in New Issue
Block a user