mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-10 09:19:24 +01:00
* UI: Move section navigation to sidebar * Scroll active nav link into view * Move CTAs to top right * Server Settings: Make Policies first page * Responsive table fixes * Spacing fixes * Add breadcrumb samples * store settings fixes * payment request fixes * updates pull payment title * adds invoice detail fix * updates server settings breadcrumbs + copy fix * Don't open Server Settings on Plugins page * Add breadcrumbs to pull payment views * adds breadcrumbs to account * server and store breadcrumb fixes * fixes access tokens * Fix payment processor breadcrumbs * fixes webhook 404 * Final touches * Fix test * Add breadcrumb for email rules page * Design system updates --------- Co-authored-by: dstrukt <gfxdsign@gmail.com>
106 lines
3.7 KiB
Text
106 lines
3.7 KiB
Text
@inject BTCPayServer.Security.ContentSecurityPolicies Csp
|
||
@model WalletSetupViewModel
|
||
@{
|
||
Layout = "_LayoutWalletSetup";
|
||
ViewData.SetActivePage(StoreNavPages.OnchainSettings, "Scan QR code", $"{Context.GetStoreData().Id}-{Model.CryptoCode}");
|
||
Csp.UnsafeEval();
|
||
}
|
||
|
||
@section Navbar {
|
||
<a asp-controller="UIStores" asp-action="ImportWallet" asp-route-storeId="@Model.StoreId" asp-route-cryptoCode="@Model.CryptoCode" asp-route-method="">
|
||
<vc:icon symbol="back" />
|
||
</a>
|
||
}
|
||
|
||
<header class="text-center">
|
||
<h1>@ViewData["Title"]</h1>
|
||
<p class="lead text-secondary mt-3">Scan the extended public key, also called "xpub", shown on your wallet's display.</p>
|
||
</header>
|
||
|
||
@if (!ViewContext.ModelState.IsValid)
|
||
{
|
||
<div asp-validation-summary="All"></div>
|
||
}
|
||
|
||
<div class="my-5">
|
||
<partial name="CameraScanner"/>
|
||
<form id="qr-import-form" method="post">
|
||
<input asp-for="WalletFileContent" type="hidden" />
|
||
</form>
|
||
</div>
|
||
|
||
<p class="mt-5">
|
||
Generate a QR code of the extended public key in your wallet (see instructions for supported wallets below).
|
||
Allow the browser access to your camera and hold the code to the camera when the scan prompt appears.
|
||
</p>
|
||
|
||
<table class="table table-hover">
|
||
<thead>
|
||
<tr>
|
||
<th>Wallet</th>
|
||
<th>Instructions</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>BlueWallet</td>
|
||
<td>Open Wallet Settings ❯ Show Wallet XPUB</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-nowrap">Cobo Vault</td>
|
||
<td>Open Wallet Settings ❯ Show/Export XPUB</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="text-nowrap">Keystone Vault</td>
|
||
<td>Open Wallet Settings ❯ Show/Export XPUB</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Passport</td>
|
||
<td>Wallet ❯ Connect Wallet ❯ BTCPay ❯ QR Code</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Specter DIY</td>
|
||
<td>Master public keys ❯ Select key</td>
|
||
</tr>
|
||
<tr>
|
||
<td>SeedSigner</td>
|
||
<td>Seeds ❯ Select seed ❯ Export XPUB ❯ BlueWallet</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
@section PageHeadContent {
|
||
<link href="~/vendor/vue-qrcode-reader/vue-qrcode-reader.css" rel="stylesheet" asp-append-version="true"/>
|
||
}
|
||
|
||
@section PageFootContent {
|
||
<partial name="_ValidationScriptsPartial"/>
|
||
<script src="~/vendor/vuejs/vue.min.js" asp-append-version="true"></script>
|
||
<script src="~/vendor/vue-qrcode/vue-qrcode.min.js" asp-append-version="true"></script>
|
||
<script src="~/vendor/ur-registry/urlib.min.js" asp-append-version="true"></script>
|
||
<script src="~/vendor/bbqr/bbqr.iife.js" asp-append-version="true"></script>
|
||
<script src="~/vendor/vue-qrcode-reader/VueQrcodeReader.umd.min.js" asp-append-version="true"></script>
|
||
|
||
<script>
|
||
window.coinName = "@Model.Network.DisplayName.ToLowerInvariant()";
|
||
document.addEventListener("DOMContentLoaded", function () {
|
||
initCameraScanningApp("Scan wallet QR", data => {
|
||
let xpub = "";
|
||
if (typeof(data) === "object") {
|
||
if (data.type === "crypto-account") {
|
||
const account = window.URlib.CryptoAccount.fromCBOR(data.cbor);
|
||
const [descriptor] = account.getOutputDescriptors();
|
||
xpub = descriptor.getHDKey().getBip32Key();
|
||
} else {
|
||
console.error('Unexpected UR type', data.type)
|
||
}
|
||
} else if (typeof(data) === 'string') {
|
||
xpub = data;
|
||
}
|
||
// submit
|
||
document.getElementById("WalletFileContent").value = xpub;
|
||
document.getElementById("qr-import-form").submit();
|
||
});
|
||
});
|
||
</script>
|
||
}
|