mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-22 14:22:40 +01:00
* (bug) treat xmr wallet directory as required The wallet directory configuration setting is required because the `UIMoneroLikeStoreController`'s `GetMoneroLikePaymentMethodViewModel` method checks if the wallet file exists, and to do that in needs the directory. * (feat) xmr settlement thresholds Adds the ability to select zero, 1, 10, or a custom number of confirmations as the payment settlement threshold. * (review) fix validation message not showing --------- Co-authored-by: Henry Hollingworth <henry.hollingworth@alcoa.com>
147 lines
7.8 KiB
Text
147 lines
7.8 KiB
Text
@using BTCPayServer.Views.Stores
|
|
@using BTCPayServer.Abstractions.Extensions
|
|
@using MoneroLikePaymentMethodViewModel = BTCPayServer.Services.Altcoins.Monero.UI.UIMoneroLikeStoreController.MoneroLikePaymentMethodViewModel
|
|
@using MoneroLikeSettlementThresholdChoice = BTCPayServer.Services.Altcoins.Monero.UI.UIMoneroLikeStoreController.MoneroLikeSettlementThresholdChoice;
|
|
@model MoneroLikePaymentMethodViewModel
|
|
|
|
@{
|
|
Layout = "../Shared/_NavLayout.cshtml";
|
|
ViewData["NavPartialName"] = "../UIStores/_Nav";
|
|
ViewData.SetActivePage(Model.CryptoCode, $"{Model.CryptoCode} Settings", Model.CryptoCode);
|
|
}
|
|
|
|
<div class="row">
|
|
<div class="col-md-8">
|
|
<div asp-validation-summary="All"></div>
|
|
@if (Model.Summary != null)
|
|
{
|
|
<div class="card">
|
|
<ul class="list-group list-group-flush">
|
|
<li class="list-group-item">Node available: @Model.Summary.DaemonAvailable</li>
|
|
<li class="list-group-item">Wallet available: @Model.Summary.WalletAvailable (@(Model.WalletFileFound ? "Wallet file present" : "Wallet file not found"))</li>
|
|
<li class="list-group-item">Last updated: @Model.Summary.UpdatedAt</li>
|
|
<li class="list-group-item">Synced: @Model.Summary.Synced (@Model.Summary.CurrentHeight / @Model.Summary.TargetHeight)</li>
|
|
</ul>
|
|
</div>
|
|
}
|
|
|
|
@if (!Model.WalletFileFound || Model.Summary.WalletHeight == default)
|
|
{
|
|
<form method="post" asp-action="GetStoreMoneroLikePaymentMethod"
|
|
asp-route-storeId="@Context.GetRouteValue("storeId")"
|
|
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
|
|
class="mt-4" enctype="multipart/form-data">
|
|
|
|
<div class="card my-2">
|
|
<h3 class="card-title p-2">Upload Wallet</h3>
|
|
<div class="form-group p-2">
|
|
<label asp-for="WalletFile" class="form-label"></label>
|
|
<input class="form-control" asp-for="WalletFile" required>
|
|
<span asp-validation-for="WalletFile" class="text-danger"></span>
|
|
</div>
|
|
<div class="form-group p-2">
|
|
<label asp-for="WalletKeysFile" class="form-label"></label>
|
|
<input class="form-control" asp-for="WalletKeysFile" required>
|
|
<span asp-validation-for="WalletKeysFile" class="text-danger"></span>
|
|
</div>
|
|
<div class="form-group p-2">
|
|
<label asp-for="WalletPassword" class="form-label"></label>
|
|
<input class="form-control" asp-for="WalletPassword">
|
|
<span asp-validation-for="WalletPassword" class="text-danger"></span>
|
|
</div>
|
|
<div class="card-footer text-right">
|
|
<button name="command" value="upload-wallet" class="btn btn-secondary" type="submit">Upload</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
}
|
|
<form method="post" asp-action="GetStoreMoneroLikePaymentMethod"
|
|
asp-route-storeId="@Context.GetRouteValue("storeId")"
|
|
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
|
|
class="mt-4" enctype="multipart/form-data">
|
|
|
|
<input type="hidden" asp-for="CryptoCode"/>
|
|
@if (!Model.WalletFileFound || Model.Summary.WalletHeight == default)
|
|
{
|
|
<input type="hidden" asp-for="AccountIndex"/>
|
|
}
|
|
else
|
|
{
|
|
<div class="form-group">
|
|
<label asp-for="AccountIndex" class="control-label"></label>
|
|
@if (@Model.Accounts != null && Model.Accounts.Any())
|
|
{
|
|
<select asp-for="AccountIndex" asp-items="Model.Accounts" class="form-control"></select>
|
|
<span asp-validation-for="AccountIndex" class="text-danger"></span>
|
|
}
|
|
else
|
|
{
|
|
<span>No accounts available on the current wallet</span>
|
|
<input type="hidden" asp-for="AccountIndex"/>
|
|
}
|
|
</div>
|
|
<div class="form-group">
|
|
<div class="input-group my-3">
|
|
<input type="text" class="form-control" placeholder="New account label" asp-for="NewAccountLabel">
|
|
<button name="command" value="add-account" class="input-group-text btn btn-secondary" type="submit">Add account</button>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<div class="form-group">
|
|
<label asp-for="Enabled"></label>
|
|
<input asp-for="Enabled" type="checkbox" class="form-check"/>
|
|
<span asp-validation-for="Enabled" class="text-danger"></span>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label asp-for="SettlementConfirmationThresholdChoice" class="form-label"></label>
|
|
<a href="https://docs.btcpayserver.org/FAQ/Stores/#consider-the-invoice-confirmed-when-the-payment-transaction" target="_blank" rel="noreferrer noopener" title="More information...">
|
|
<vc:icon symbol="info" />
|
|
</a>
|
|
<select
|
|
asp-for="SettlementConfirmationThresholdChoice"
|
|
asp-items="Html.GetEnumSelectList<MoneroLikeSettlementThresholdChoice>()"
|
|
class="form-select w-auto"
|
|
onchange="
|
|
document.getElementById('unconfirmed-warning').hidden = this.value !== '@((int)MoneroLikeSettlementThresholdChoice.ZeroConfirmation)';
|
|
document.getElementById('custom-confirmation-value').hidden = this.value !== '@((int)MoneroLikeSettlementThresholdChoice.Custom)';">
|
|
</select>
|
|
<span asp-validation-for="SettlementConfirmationThresholdChoice" class="text-danger"></span>
|
|
<p class="info-note my-3 text-warning" id="unconfirmed-warning" role="alert" hidden="@(Model.SettlementConfirmationThresholdChoice is not MoneroLikeSettlementThresholdChoice.ZeroConfirmation)">
|
|
<vc:icon symbol="warning" />
|
|
Choosing to accept an unconfirmed invoice can lead to double-spending and is strongly discouraged.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="form-group" id="custom-confirmation-value" hidden="@(Model.SettlementConfirmationThresholdChoice is not MoneroLikeSettlementThresholdChoice.Custom)">
|
|
<label asp-for="CustomSettlementConfirmationThreshold" class="form-label"></label>
|
|
<input
|
|
asp-for="CustomSettlementConfirmationThreshold"
|
|
type="number"
|
|
value="@(Model.CustomSettlementConfirmationThreshold)"
|
|
class="form-control w-auto"
|
|
min="0"
|
|
max="100"
|
|
pattern="\d+"
|
|
/>
|
|
<span asp-validation-for="CustomSettlementConfirmationThreshold" class="text-danger"></span>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<button type="submit" class="btn btn-primary" id="SaveButton">Save</button>
|
|
|
|
<a class="btn btn-secondary" asp-action="GetStoreMoneroLikePaymentMethods"
|
|
asp-route-storeId="@Context.GetRouteValue("storeId")"
|
|
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
|
|
asp-controller="UIMoneroLikeStore">
|
|
Back to list
|
|
</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
@section PageFootContent {
|
|
@await Html.PartialAsync("_ValidationScriptsPartial")
|
|
}
|