New unit test to scan for external links/forms and if they have rel="noreferrer noopener" (#2668)

* Unit test to check for (possibly) external links

* Add rel="noreferrer noopener" to all external links so unit test passes

* Update BTCPayServer.Tests/UnitTest1.cs

Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>

* Update BTCPayServer.Tests/UnitTest1.cs

Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>

* Fixed bad merge from master

* PascalCasing

Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>
This commit is contained in:
Wouter Samaey 2021-07-06 10:35:42 +02:00 committed by GitHub
parent 40bbc5850f
commit f1a222fbb3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
69 changed files with 216 additions and 149 deletions

View file

@ -206,12 +206,79 @@ namespace BTCPayServer.Tests
List<Task> checkLinks = new List<Task>();
foreach (var file in viewFiles)
{
checkLinks.Add(CheckLinks(regex, httpClient, file));
checkLinks.Add(CheckDeadLinks(regex, httpClient, file));
}
await Task.WhenAll(checkLinks);
}
[Fact]
[Trait("Fast", "Fast")]
public async Task CheckExternalNoReferrerLinks()
{
var views = Path.Combine(TestUtils.TryGetSolutionDirectoryInfo().FullName, "BTCPayServer", "Views");
var viewFiles = Directory.EnumerateFiles(views, "*.cshtml", SearchOption.AllDirectories).ToArray();
Assert.NotEmpty(viewFiles);
foreach (var file in viewFiles)
{
var html = await File.ReadAllTextAsync(file);
CheckHtmlNodesForReferrer(file, html, "a", "href");
CheckHtmlNodesForReferrer(file, html, "form", "action");
}
}
private void CheckHtmlNodesForReferrer(string filePath, string html, string tagName, string attribute)
{
Regex aNodeRegex = new Regex("<" + tagName + "\\s.*?>");
var matches = aNodeRegex.Matches(html).OfType<Match>();
foreach (var match in matches)
{
var node = match.Groups[0].Value;
var attributeValue = GetAttributeValue(node, attribute);
if (attributeValue != null)
{
if (attributeValue.Length == 0 || attributeValue.StartsWith("mailto:") || attributeValue.StartsWith("/") || attributeValue.StartsWith("~/") || attributeValue.StartsWith("#") || attributeValue.StartsWith("?") || attributeValue.StartsWith("javascript:") || attributeValue.StartsWith("@Url.Action("))
{
// Local link, this is fine
}
else if (attributeValue.StartsWith("http://") || attributeValue.StartsWith("https://") ||
attributeValue.StartsWith("@"))
{
// This can be an external link. Treating it as such.
var rel = GetAttributeValue(node, "rel");
// Building the file path + line number helps us to navigate to the wrong HTML quickly!
var lineNumber = html.Substring(0, html.IndexOf(node, StringComparison.InvariantCulture)).Split("\n").Length;
Assert.True(rel != null, "Template file \"" + filePath + ":" + lineNumber + "\" contains a possibly external link (" + node + ") that is missing rel=\"noreferrer noopener\"");
if (rel != null)
{
// All external links should have 'rel="noreferrer noopener"'
var relWords = rel.Split(" ");
Assert.Contains("noreferrer", relWords);
Assert.Contains("noopener", relWords);
}
}
}
}
}
private String GetAttributeValue(String nodeHtml, string attribute)
{
Regex regex = new Regex("\\s" + attribute + "=\"(.*?)\"");
var match = regex.Match(nodeHtml);
if (match.Success)
{
return match.Groups[1].Value;
}
return null;
}
[Fact]
[Trait("Integration", "Integration")]
public async Task CheckSwaggerIsConformToSchema()
@ -286,7 +353,7 @@ namespace BTCPayServer.Tests
}
}
private static async Task CheckLinks(Regex regex, HttpClient httpClient, string file)
private static async Task CheckDeadLinks(Regex regex, HttpClient httpClient, string file)
{
List<Task> checkLinks = new List<Task>();
var text = await File.ReadAllTextAsync(file);

View file

@ -16,7 +16,7 @@
<h2 class="mb-0">
@ViewData["PageTitle"]
<small>
<a href="https://docs.btcpayserver.org/Apps/" target="_blank">
<a href="https://docs.btcpayserver.org/Apps/" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>

View file

@ -98,7 +98,7 @@
</div>
<div class="form-group">
<label asp-for="CustomCSSLink" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomCSSLink" class="form-control" />

View file

@ -69,7 +69,7 @@
</div>
<div class="form-group">
<label asp-for="CustomCSSLink" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomCSSLink" class="form-control" />

View file

@ -17,7 +17,7 @@
</div>
<p>
You can obtain a merchant id at
<a href="https://coinswitch.co/switch/setup/btcpay" target="_blank">
<a href="https://coinswitch.co/switch/setup/btcpay" target="_blank" rel="noreferrer noopener">
https://coinswitch.co/switch/setup/btcpay
</a>
</p>

View file

@ -3,9 +3,9 @@
ViewData["Title"] = "404 - Page not found";
}
This is like searching for a person more beautiful than <a href="https://twitter.com/NicolasDorier" target="_blank">Nicolas Dorier</a>.
This is like searching for a person more beautiful than <a href="https://twitter.com/NicolasDorier" target="_blank" rel="noreferrer noopener">Nicolas Dorier</a>.
<br /><br />
<a href="https://twitter.com/NicolasDorier" target="_blank">
<a href="https://twitter.com/NicolasDorier" target="_blank" rel="noreferrer noopener">
<img src="~/img/errorpages/404_nicolas.jpg" alt="Nicolas Dorier beauty" title="Slowly stroke the image" asp-append-version="true" />
</a>
<br /><br />

View file

@ -6,7 +6,7 @@
Sorry, but our server can't service you.<br />
Either set proper `Accept` header in HTTP request or find a new server.
<br /><br />
<a href="https://twitter.com/jack" target="_blank">
<a href="https://twitter.com/jack" target="_blank" rel="noreferrer noopener">
<img src="~/img/errorpages/406_jack.jpg" alt="Jack guiding you on what's acceptable" title="Bitcoin fixes this™" />
</a>
<br /><br />
@ -16,7 +16,7 @@ Either set proper `Accept` header in HTTP request or find a new server.
</svg>
<span class="css-901oao css-16my406 css-cens5h r-13gxpu9 r-poiln3 r-bcqeeo r-qvutc0" style="-webkit-line-clamp: 3;">
<span class="css-901oao css-16my406 r-poiln3 r-bcqeeo r-qvutc0">
<a href="https://twitter.com/jack/status/1108487911802966017">Jack invites you to learn how Bitcoin fixes this™</a>
<a href="https://twitter.com/jack/status/1108487911802966017" rel="noreferrer noopener">Jack invites you to learn how Bitcoin fixes this™</a>
</span>
</span>
</span>

View file

@ -3,9 +3,9 @@
ViewData["Title"] = "417 - Expectation Failed";
}
You've unfortunately failed expectations of manager <a href="https://twitter.com/pavlenex" target="_blank">Pavlenex</a>. Poor you.
You've unfortunately failed expectations of manager <a href="https://twitter.com/pavlenex" target="_blank" rel="noreferrer noopener">Pavlenex</a>. Poor you.
<br /><br />
<a href="https://twitter.com/pavlenex" target="_blank">
<a href="https://twitter.com/pavlenex" target="_blank" rel="noreferrer noopener">
<img src="~/img/errorpages/417_pavlenex.png" alt="Pavlenex avatar" title="Pavlenex fighting the system, while building better systems" asp-append-version="true" />
</a>
<br /><br />

View file

@ -3,9 +3,9 @@
ViewData["Title"] = "429 - Too Many Requests";
}
Please send requests slower. Or face the wrath of <a href="https://twitter.com/r0ckstardev" target="_blank">Vin Diesel</a>.
Please send requests slower. Or face the wrath of <a href="https://twitter.com/r0ckstardev" target="_blank" rel="noreferrer noopener">Vin Diesel</a>.
<br /><br />
<a href="https://twitter.com/r0ckstardev" target="_blank">
<a href="https://twitter.com/r0ckstardev" target="_blank" rel="noreferrer noopener">
<img src="~/img/errorpages/429_rockstardev.jpg" alt="Vin is angry because you caused 429" title="Move away that cursor" asp-append-version="true" />
</a>
<br /><br />

View file

@ -3,9 +3,9 @@
ViewData["Title"] = "500 - Internal Server Error";
}
Whoops, something really went wrong! <a href="https://twitter.com/mrkukks">Mr Kukks</a> is so sorry.
Whoops, something really went wrong! <a href="https://twitter.com/mrkukks" rel="noreferrer noopener">Mr Kukks</a> is so sorry.
<br /><br />
<a href="https://twitter.com/mrkukks" target="_blank">
<a href="https://twitter.com/mrkukks" target="_blank" rel="noreferrer noopener">
<img src="~/img/errorpages/500_mrkukks.jpg" alt="Mr Kukks puppy eyes" title="The most innocent look you'll ever see" asp-append-version="true" />
</a>
<br /><br />

View file

@ -6,8 +6,8 @@
The life is all about finding the right Gateways.<br />
Unfortunately, this time you've found a bad one.
<br /><br />
<a href="https://twitter.com/milessuter" target="_blank">
<a href="https://twitter.com/milessuter" target="_blank" rel="noreferrer noopener">
<img src="~/img/errorpages/502_milessuter.jpg" alt="Miles obfuscated profile pic" title="But full name is not obfuscated" asp-append-version="true" />
</a>
<br /><br />
Maybe <a href="https://twitter.com/milessuter">Gateway Tzar Miles</a> can help you out?
Maybe <a href="https://twitter.com/milessuter" rel="noreferrer noopener">Gateway Tzar Miles</a> can help you out?

View file

@ -32,7 +32,7 @@
<div class="form-group">
<label asp-for="KeyPath" class="form-label"></label>
<input asp-for="KeyPath" class="form-control"/>
<span class="text-muted">Please see <a href="https://medium.com/myetherwallet/hd-wallets-and-derivation-paths-explained-865a643c7bf2" target="_blank">this article.</a></span>
<span class="text-muted">Please see <a href="https://medium.com/myetherwallet/hd-wallets-and-derivation-paths-explained-865a643c7bf2" target="_blank" rel="noreferrer noopener">this article.</a></span>
<span asp-validation-for="KeyPath" class="text-danger"></span>
</div>

View file

@ -9,7 +9,7 @@
<h1>Welcome to BTCPay Server</h1>
<hr />
<p class="fw-semibold">BTCPay Server is a free and open source server for merchants wanting to accept Bitcoin for their business.</p>
<a style="background-color: #fff;color: #222;display:inline-block;text-align: center;white-space: nowrap;vertical-align: middle;user-select: none;line-height: 1.25;font-size: 1rem;text-decoration:none;font-weight: 700; text-transform: uppercase;border: none;border-radius: 300px;padding: 15px 30px;" href="https://btcpayserver.org" target="_blank">Official website</a>
<a style="background-color: #fff;color: #222;display:inline-block;text-align: center;white-space: nowrap;vertical-align: middle;user-select: none;line-height: 1.25;font-size: 1rem;text-decoration:none;font-weight: 700; text-transform: uppercase;border: none;border-radius: 300px;padding: 15px 30px;" href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">Official website</a>
</div>
</div>
</header>
@ -55,7 +55,7 @@
<h2>Video tutorials</h2>
<div class="row">
<div class="col-lg-12 text-center">
<a href="https://www.youtube.com/channel/UCpG9WL6TJuoNfFVkaDMp9ug" target="_blank">
<a href="https://www.youtube.com/channel/UCpG9WL6TJuoNfFVkaDMp9ug" target="_blank" rel="noreferrer noopener">
<img src="~/img/youtube.png" class="img-fluid" asp-append-version="true" />
</a>
</div>
@ -73,7 +73,7 @@
Support us by donating through BTCPay Server Foundation<br /> or by directly sending donation to a specific contributor.
</p>
<p>
<a href="https://btcpayserver.org/donate/">
<a href="https://btcpayserver.org/donate/" rel="noreferrer noopener">
<svg viewBox="0 0 208 55" width="208" xmlns="http://www.w3.org/2000/svg">
<path d="m208 48c0 3.866-3.135 7-7 7h-194c-3.866 0-7-3.134-7-7v-41c0-3.866 3.134-7 7-7h194c3.865 0 7 3.134 7 7z" fill="var(--btcpay-bg-cta, #0f3723)"/>
<g fill="#fff">
@ -117,25 +117,25 @@
<div class="row social-row">
<div class="col-6 col-md-3 ms-auto text-center">
<a href="https://chat.btcpayserver.org/" target="_blank">
<a href="https://chat.btcpayserver.org/" target="_blank" rel="noreferrer noopener">
<img src="~/img/mattermost.svg" alt="Mattermost" class="social-logo" asp-append-version="true" />
<span>On Mattermost</span>
</a>
</div>
<div class="col-6 col-md-3 ms-auto text-center">
<a href="https://slack.btcpayserver.org/" target="_blank">
<a href="https://slack.btcpayserver.org/" target="_blank" rel="noreferrer noopener">
<img src="~/img/slack.svg" alt="Slack" class="social-logo" asp-append-version="true" />
<span>On Slack</span>
</a>
</div>
<div class="col-6 col-md-3 me-auto text-center">
<a href="https://twitter.com/BtcpayServer" target="_blank">
<a href="https://twitter.com/BtcpayServer" target="_blank" rel="noreferrer noopener">
<img src="~/img/twitter.svg" alt="Twitter" class="social-logo" asp-append-version="true" />
<span>On Twitter</span>
</a>
</div>
<div class="col-6 col-md-3 me-auto text-center">
<a href="https://github.com/btcpayserver/btcpayserver" target="_blank">
<a href="https://github.com/btcpayserver/btcpayserver" target="_blank" rel="noreferrer noopener">
<img src="~/img/github.svg" alt="Github" class="social-logo" asp-append-version="true" />
<span>On Github</span>
</a>

View file

@ -73,7 +73,7 @@
</div>
@if (Model.RequireConfirm)
{
<form id="RecoveryConfirmation" action="@Model.ReturnUrl" class="position-relative d-flex align-items-start justify-content-center" style="margin-top:4rem;padding-bottom: 80px">
<form id="RecoveryConfirmation" action="@Model.ReturnUrl" class="position-relative d-flex align-items-start justify-content-center" style="margin-top:4rem;padding-bottom: 80px" rel="noreferrer noopener">
<label class="form-check-label lead order-2" for="confirm">I have written down my recovery phrase and stored it in a secure location</label>
<input type="checkbox" class="mt-2 me-3 order-1 form-check-input" id="confirm">
<button type="submit" class="btn btn-primary btn-lg px-5 order-3" id="submit">Done</button>
@ -82,7 +82,7 @@
}
else
{
<a href="@Model.ReturnUrl" class="btn btn-primary btn-lg mt-3 px-5 order-3" id="proceed">Done</a>
<a href="@Model.ReturnUrl" class="btn btn-primary btn-lg mt-3 px-5 order-3" id="proceed" rel="noreferrer noopener">Done</a>
}
</div>
</div>

View file

@ -60,7 +60,7 @@
@foreach (var crypto in Model.AvailableCryptos)
{
<li class="vexmenuitem">
<a href="@crypto.Link" onclick="closePaymentMethodDialog('@crypto.PaymentMethodId');return false;">
<a href="@crypto.Link" onclick="closePaymentMethodDialog('@crypto.PaymentMethodId');return false;" rel="noreferrer noopener">
<img alt="@crypto.PaymentMethodName" src="@crypto.CryptoImage" asp-append-version="true" />
@crypto.PaymentMethodName
@(crypto.IsLightning ? Html.Raw("&#9889;") : null)

View file

@ -107,7 +107,7 @@
</script>
</div>
<div class="powered__by__btcpayserver">
Powered by <a target="_blank" href="https://github.com/btcpayserver/btcpayserver">BTCPay Server</a>
Powered by <a target="_blank" href="https://github.com/btcpayserver/btcpayserver" rel="noreferrer noopener">BTCPay Server</a>
</div>
</div>
</div>

View file

@ -58,7 +58,7 @@
<table class="table table-sm table-responsive-md removetopborder">
<tr>
<th>Store</th>
<td><a href="@Model.StoreLink">@Model.StoreName</a></td>
<td><a href="@Model.StoreLink" rel="noreferrer noopener">@Model.StoreName</a></td>
</tr>
<tr>
<th>Invoice Id</th>
@ -110,7 +110,7 @@
{
<tr>
<th>Redirect Url</th>
<td><a href="@Model.RedirectUrl">@Model.RedirectUrl</a></td>
<td><a href="@Model.RedirectUrl" rel="noreferrer noopener">@Model.RedirectUrl</a></td>
</tr>
}
</table>

View file

@ -179,7 +179,7 @@
<h2 class="mb-0">
@ViewData["Title"]
<small>
<a href="https://docs.btcpayserver.org/PaymentRequests/" class="ms-1" target="_blank">
<a href="https://docs.btcpayserver.org/PaymentRequests/" class="ms-1" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>
@ -321,7 +321,7 @@
</div>
</span>
<a href="https://docs.btcpayserver.org/Accounting/" class="ms-1" target="_blank">
<a href="https://docs.btcpayserver.org/Accounting/" class="ms-1" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
@ -359,7 +359,7 @@
<td style="max-width: 180px;">
@if (invoice.RedirectUrl != string.Empty)
{
<a href="@invoice.RedirectUrl" class="wraptext200">@invoice.OrderId</a>
<a href="@invoice.RedirectUrl" class="wraptext200" rel="noreferrer noopener">@invoice.OrderId</a>
}
else
{

View file

@ -5,7 +5,7 @@
{
if (value is string str && str.StartsWith("http"))
{
<a href="@str" target="_blank">@str</a>
<a href="@str" target="_blank" rel="noreferrer noopener">@str</a>
}
else
{

View file

@ -6,8 +6,8 @@
<p>
The <a asp-controller="Home" asp-action="SwaggerDocs" target="_blank">BTCPay Server Greenfield API</a> offers programmatic access to your instance. You can manage your BTCPay
Server (e.g. stores, invoices, users) as well as automate workflows and integrations (see <a href="https://docs.btcpayserver.org/GreenFieldExample/">use case examples</a>).
For that you need the API keys, which can be generated here. Find more information in the <a href="@Url.Action("SwaggerDocs", "Home")#section/Authentication" target="_blank">API authentication docs</a>.
Server (e.g. stores, invoices, users) as well as automate workflows and integrations (see <a href="https://docs.btcpayserver.org/GreenFieldExample/" rel="noreferrer noopener">use case examples</a>).
For that you need the API keys, which can be generated here. Find more information in the <a href="@Url.Action("SwaggerDocs", "Home")#section/Authentication" target="_blank" rel="noreferrer noopener">API authentication docs</a>.
</p>
<table class="table table-lg">
<thead>

View file

@ -11,13 +11,13 @@
<ul>
<li>
Microsoft Authenticator for
<a href="https://go.microsoft.com/fwlink/?Linkid=825072">Android</a> or
<a href="https://go.microsoft.com/fwlink/?Linkid=825073">iOS</a>
<a href="https://go.microsoft.com/fwlink/?Linkid=825072" rel="noreferrer noopener">Android</a> or
<a href="https://go.microsoft.com/fwlink/?Linkid=825073" rel="noreferrer noopener">iOS</a>
</li>
<li>
Google Authenticator for
<a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;hl=en">Android</a> or
<a href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8">iOS</a>
<a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&amp;hl=en" rel="noreferrer noopener">Android</a> or
<a href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8" rel="noreferrer noopener">iOS</a>
</li>
</ul>
</li>

View file

@ -70,7 +70,7 @@
<td class="text-end fw-normal">
@if (!String.IsNullOrEmpty(item.ActionLink))
{
<a href="@item.ActionLink" class="btn btn-link p-0">Details</a>
<a href="@item.ActionLink" class="btn btn-link p-0" rel="noreferrer noopener">Details</a>
<span class="d-none d-md-inline-block"> - </span>
}
<button onclick="return rowseen(this)" class="btn btn-link p-0 btn-toggle-seen" type="submit" name="command" value="flip-individual:@(item.Id)">

View file

@ -90,7 +90,7 @@
<h4 class="mt-5 mb-4">Custom Appearance</h4>
<div class="form-group">
<label asp-for="CustomCSSLink" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomCSSLink" class="form-control" />

View file

@ -12,7 +12,7 @@
<h2 class="mb-0">
@ViewData["Title"]
<small>
<a href="https://docs.btcpayserver.org/PaymentRequests/" class="ms-1" target="_blank">
<a href="https://docs.btcpayserver.org/PaymentRequests/" class="ms-1" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>

View file

@ -328,7 +328,7 @@
</tr>
<tr v-for="payment of invoice.payments" class="table-borderless table-light">
<td class="ps-3 text-break">
<a v-if="payment.link" :href="payment.link" class="text-print-default" target="_blank">{{payment.id}}</a>
<a v-if="payment.link" :href="payment.link" class="text-print-default" target="_blank" rel="noreferrer noopener">{{payment.id}}</a>
<span v-else>{{payment.id}}</span>
</td>
<td v-text="formatDate(payment.receivedDate)"></td>
@ -349,7 +349,7 @@
</main>
<footer class="pt-2 pb-4 d-print-none">
<div class="container text-center">
Powered by <a href="https://btcpayserver.org" target="_blank">BTCPay Server</a>
Powered by <a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">BTCPay Server</a>
</div>
</footer>
</div>

View file

@ -162,7 +162,7 @@
<td class="text-end text-nowrap">
@if (!string.IsNullOrEmpty(invoice.Link))
{
<a class="transaction-link text-print-default @StatusTextClass(invoice.Status.ToString())" href="@invoice.Link">@invoice.Status.GetStateString()</a>
<a class="transaction-link text-print-default @StatusTextClass(invoice.Status.ToString())" href="@invoice.Link" rel="noreferrer noopener">@invoice.Status.GetStateString()</a>
}
else
{
@ -186,7 +186,7 @@
</main>
<footer class="pt-2 pb-4 d-print-none">
<div class="container text-center">
Powered by <a href="https://btcpayserver.org" target="_blank">BTCPay Server</a>
Powered by <a href="https://btcpayserver.org" target="_blank" rel="noreferrer noopener">BTCPay Server</a>
</div>
</footer>
</div>

View file

@ -20,7 +20,7 @@
<h5>Compatible wallets</h5>
<div>
<a href="https://github.com/ZeusLN/zeus" target="_blank" class="d-inline-block me-3 mb-3 text-center">
<a href="https://github.com/ZeusLN/zeus" target="_blank" class="d-inline-block me-3 mb-3 text-center" rel="noreferrer noopener">
<img src="~/img/zeus.jpg" width="100" height="100" asp-append-version="true" alt="Zeus" />
<div class="mt-2">Zeus</div>
</a>
@ -55,7 +55,7 @@
<input asp-for="QRCode" readonly class="form-control" />
</div>
<div class="form-group">
Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file.
Click <a href="@Model.QRCodeLink" target="_blank" rel="noreferrer noopener">here</a> to open the configuration file.
</div>
</div>
}

View file

@ -19,7 +19,7 @@
</p>
</div>
<a href="@Model.ServiceLink" target="_blank" class="form-group">
<a href="@Model.ServiceLink" target="_blank" class="form-group" rel="noreferrer noopener">
<label asp-for="ServiceLink" class="form-label">Service</label>
<input asp-for="ServiceLink" class="form-control" readonly />
</a>

View file

@ -14,7 +14,7 @@
This is recommended if you are hosting BTCPayServer at home and wish to have a clearnet HTTPS address to access your server.
</span>
</p>
<p>Note that you need to properly configure your NAT and BTCPayServer install to get HTTPS certificate. Check the documentation for <a href="https://docs.btcpayserver.org/DynamicDNS/" target="_blank">more information</a>.</p>
<p>Note that you need to properly configure your NAT and BTCPayServer install to get HTTPS certificate. Check the documentation for <a href="https://docs.btcpayserver.org/DynamicDNS/" target="_blank" rel="noreferrer noopener">more information</a>.</p>
</div>
<form method="post" asp-action="DynamicDnsService">
<button id="AddDynamicDNS" class="btn btn-primary" type="submit"><span class="fa fa-plus"></span> Add Dynamic DNS</button>

View file

@ -12,7 +12,7 @@
<a asp-action="storage" asp-route-forceChoice="true" asp-route-returnurl="@ViewData["ReturnUrl"]">
choose your file storage service provider
</a>.
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-upload-files-to-btcpay" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-upload-files-to-btcpay" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</p>
@ -21,7 +21,7 @@ else
{
<p>
Change your <a asp-action="storage" asp-route-forceChoice="true" asp-route-returnurl="@ViewData["ReturnUrl"]">file storage service</a> provider.
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-upload-files-to-btcpay" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-upload-files-to-btcpay" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</p>
@ -83,7 +83,7 @@ else
</li>
<li class="list-group-item">
<strong>Direct URL:</strong>
<a href="@Model.DirectFileUrl" target="_blank">@Model.DirectFileUrl</a>
<a href="@Model.DirectFileUrl" target="_blank" rel="noreferrer noopener">@Model.DirectFileUrl</a>
</li>
</ul>
</div>

View file

@ -14,14 +14,14 @@
<div class="form-group">
<p>Lightning charge is a simple API for invoicing on lightning network, you can use it with several plugins:</p>
<ul>
<li><a href="https://github.com/ElementsProject/woocommerce-gateway-lightning" target="_blank">WooCommerce Lightning Gateway</a>: A comprehensive e-commerce application that integrates with stock-management and order-tracking systems</li>
<li><a href="https://github.com/ElementsProject/nanopos" target="_blank">Nanopos</a>: A simple point-of-sale system for fixed-price goods</li>
<li><a href="https://github.com/ElementsProject/filebazaar" target="_blank">FileBazaar</a>: A system for selling files such as documents, images, and videos</li>
<li><a href="https://github.com/ElementsProject/wordpress-lightning-publisher" target="_blank">Lightning Publisher for WordPress</a>: A patronage model for unlocking WordPress blog entries</li>
<li><a href="https://github.com/ElementsProject/paypercall" target="_blank">Paypercall</a>: A programmers toolkit for Lightning that enables micropayments for individual API calls</li>
<li><a href="https://github.com/ElementsProject/ifpaytt" target="_blank">Ifpaytt</a>: An extension of paypercall that allows web developers using IFTTT to request payments for service usage</li>
<li><a href="https://github.com/ElementsProject/lightning-jukebox" target="_blank">Lightning Jukebox</a>: A fun demo that reimagines a classic technology for the Lightning Network</li>
<li><a href="https://github.com/ElementsProject/nanotip" target="_blank">Nanotip</a>: The simple tip jar, rebuilt to issue Lightning Network invoices</li>
<li><a href="https://github.com/ElementsProject/woocommerce-gateway-lightning" target="_blank" rel="noreferrer noopener">WooCommerce Lightning Gateway</a>: A comprehensive e-commerce application that integrates with stock-management and order-tracking systems</li>
<li><a href="https://github.com/ElementsProject/nanopos" target="_blank" rel="noreferrer noopener">Nanopos</a>: A simple point-of-sale system for fixed-price goods</li>
<li><a href="https://github.com/ElementsProject/filebazaar" target="_blank" rel="noreferrer noopener">FileBazaar</a>: A system for selling files such as documents, images, and videos</li>
<li><a href="https://github.com/ElementsProject/wordpress-lightning-publisher" target="_blank" rel="noreferrer noopener">Lightning Publisher for WordPress</a>: A patronage model for unlocking WordPress blog entries</li>
<li><a href="https://github.com/ElementsProject/paypercall" target="_blank" rel="noreferrer noopener">Paypercall</a>: A programmers toolkit for Lightning that enables micropayments for individual API calls</li>
<li><a href="https://github.com/ElementsProject/ifpaytt" target="_blank" rel="noreferrer noopener">Ifpaytt</a>: An extension of paypercall that allows web developers using IFTTT to request payments for service usage</li>
<li><a href="https://github.com/ElementsProject/lightning-jukebox" target="_blank" rel="noreferrer noopener">Lightning Jukebox</a>: A fun demo that reimagines a classic technology for the Lightning Network</li>
<li><a href="https://github.com/ElementsProject/nanotip" target="_blank" rel="noreferrer noopener">Nanotip</a>: The simple tip jar, rebuilt to issue Lightning Network invoices</li>
</ul>
</div>
</div>

View file

@ -27,7 +27,7 @@
<div class="form-group">
<h5>Browser connection</h5>
<p>
<span>You can go to @Model.WalletName from your browser by <a href="@Model.ServiceLink">clicking here</a><br/></span>
<span>You can go to @Model.WalletName from your browser by <a href="@Model.ServiceLink" rel="noreferrer noopener">clicking here</a><br/></span>
</p>
</div>

View file

@ -11,7 +11,7 @@
<div class="col-lg-8">
<div class="form-group">
<p>The LND seed backup is useful to recover funds of your LND wallet in case of a corruption of your server.</p>
<p>The recovering process is documented by LND on <a href="https://github.com/lightningnetwork/lnd/blob/master/docs/recovery.md">this page</a>.</p>
<p>The recovering process is documented by LND on <a href="https://github.com/lightningnetwork/lnd/blob/master/docs/recovery.md" rel="noreferrer noopener">this page</a>.</p>
</div>
<a class="btn btn-primary @(Model.Removed ? "collapse" : "")" id="details" href="#">See confidential seed information</a>
<div class="form-group @(Model.Removed ? "" : "collapse")">

View file

@ -15,22 +15,22 @@
<div>
@if (Model.Uri == null) // if GRPC
{
<a href="https://www.pebble.indiesquare.me/" target="_blank" class="d-inline-block me-3 text-center">
<a href="https://www.pebble.indiesquare.me/" target="_blank" class="d-inline-block me-3 text-center" rel="noreferrer noopener">
<img src="~/img/pebblewallet.jpg" width="100" height="100" asp-append-version="true" alt="Pebble" />
<div class="mt-2">Pebble</div>
</a>
<a href="https://zaphq.io/" target="_blank" class="d-inline-block me-3 text-center">
<a href="https://zaphq.io/" target="_blank" class="d-inline-block me-3 text-center" rel="noreferrer noopener">
<img src="~/img/zapwallet.jpg" width="100" height="100" asp-append-version="true" alt="Zap" />
<div class="mt-2">Zap</div>
</a>
}
else
{
<a href="https://lightningjoule.com/" target="_blank" class="d-inline-block me-3 mb-3 text-center">
<a href="https://lightningjoule.com/" target="_blank" class="d-inline-block me-3 mb-3 text-center" rel="noreferrer noopener">
<img src="~/img/joule.png" width="100" height="100" asp-append-version="true" alt="Joule" />
<div class="mt-2">Joule</div>
</a>
<a href="https://github.com/ZeusLN/zeus" target="_blank" class="d-inline-block me-3 mb-3 text-center">
<a href="https://github.com/ZeusLN/zeus" target="_blank" class="d-inline-block me-3 mb-3 text-center" rel="noreferrer noopener">
<img src="~/img/zeus.jpg" width="100" height="100" asp-append-version="true" alt="Zeus" />
<div class="mt-2">Zeus</div>
</a>
@ -64,7 +64,7 @@
<input asp-for="QRCode" class="form-control" readonly />
</div>
<p>
Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file.
Click <a href="@Model.QRCodeLink" target="_blank" rel="noreferrer noopener">here</a> to open the configuration file.
</p>
</div>
}

View file

@ -9,7 +9,7 @@
<div class="row mb-5">
<div class="col-lg-6">
<h4 class="mb-3">Domain name</h4>
<p>You can change the domain name of your server by following <a href="https://docs.btcpayserver.org/ChangeDomain" target="_blank">this guide</a>.</p>
<p>You can change the domain name of your server by following <a href="https://docs.btcpayserver.org/ChangeDomain" target="_blank" rel="noreferrer noopener">this guide</a>.</p>
<div class="row g-1">
<div class="col">

View file

@ -30,11 +30,11 @@
<h4 class="mb-3">Compatible wallets</h4>
<div>
<a href="https://play.google.com/store/apps/details?id=com.greenaddress.greenbits_android_wallet" target="_blank" class="d-inline-block me-3 mb-3 text-center">
<a href="https://play.google.com/store/apps/details?id=com.greenaddress.greenbits_android_wallet" target="_blank" class="d-inline-block me-3 mb-3 text-center" rel="noreferrer noopener">
<img src="~/img/GreenWallet.png" width="100" height="100" asp-append-version="true" alt="Blockstream Green" />
<div class="mt-2">Blockstream Green</div>
</a>
<a href="https://www.wasabiwallet.io/" target="_blank" class="d-inline-block me-3 mb-3 text-center">
<a href="https://www.wasabiwallet.io/" target="_blank" class="d-inline-block me-3 mb-3 text-center" rel="noreferrer noopener">
<img src="~/img/wasabi.png" width="100" height="100" asp-append-version="true" alt="Wasabi Wallet" />
<div class="mt-2">Wasabi Wallet</div>
</a>

View file

@ -19,7 +19,7 @@
<div class="form-check my-1">
<input asp-for="AllowLightningInternalNodeForAll" type="checkbox" class="form-check-input"/>
<label asp-for="AllowLightningInternalNodeForAll" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-LightningNetwork/#how-many-users-can-use-lightning-network-in-btcpay" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-LightningNetwork/#how-many-users-can-use-lightning-network-in-btcpay" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="AllowLightningInternalNodeForAll" class="text-danger"></span>
@ -27,7 +27,7 @@
<div class="form-check my-1">
<input asp-for="AllowHotWalletForAll" type="checkbox" class="form-check-input"/>
<label asp-for="AllowHotWalletForAll" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/CreateWallet/#requirements-to-create-wallets" target="_blank">
<a href="https://docs.btcpayserver.org/CreateWallet/#requirements-to-create-wallets" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="AllowHotWalletForAll" class="text-danger"></span>
@ -50,7 +50,7 @@
}
<input asp-for="RequiresConfirmedEmail" type="checkbox" class="form-check-input" disabled="@(isEmailConfigured ? null : "disabled")"/>
<label asp-for="RequiresConfirmedEmail" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-allow-registration-on-my-btcpay-server" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-allow-registration-on-my-btcpay-server" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="RequiresConfirmedEmail" class="text-danger"></span>
@ -79,7 +79,7 @@
<div class="form-check my-1">
<input asp-for="DisableInstantNotifications" type="checkbox" class="form-check-input"/>
<label asp-for="DisableInstantNotifications" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/Notifications/#notifications" target="_blank">
<a href="https://docs.btcpayserver.org/Notifications/#notifications" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="DisableInstantNotifications" class="text-danger"></span>
@ -87,7 +87,7 @@
<div class="form-check my-1">
<input asp-for="DisableStoresToUseServerEmailSettings" type="checkbox" class="form-check-input"/>
<label asp-for="DisableStoresToUseServerEmailSettings" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/Notifications/#server-emails" target="_blank">
<a href="https://docs.btcpayserver.org/Notifications/#server-emails" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="DisableStoresToUseServerEmailSettings" class="text-danger"></span>
@ -107,7 +107,7 @@
<div class="form-check my-1">
<input asp-for="DiscourageSearchEngines" type="checkbox" class="form-check-input"/>
<label asp-for="DiscourageSearchEngines" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-hide-my-btcpay-server-from-search-engines" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-hide-my-btcpay-server-from-search-engines" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="DiscourageSearchEngines" class="text-danger"></span>
@ -191,7 +191,7 @@
<label class="form-label">@network.DisplayName (@network.CryptoCode)</label>
<input type="hidden" asp-for="BlockExplorerLinks[i].CryptoCode" value="@network.CryptoCode"/>
<div class="input-group">
<input type="text" class="form-control" asp-for="BlockExplorerLinks[i].Link" value="@linkValue" data-default-link="@network.BlockExplorerLinkDefault"/>
<input type="text" class="form-control" asp-for="BlockExplorerLinks[i].Link" value="@linkValue" rel="noreferrer noopener" data-default-link="@network.BlockExplorerLinkDefault"/>
<button type="button" class="btn btn-secondary only-for-js" title="Revert to default">
<span class="fa fa-refresh"></span>
</button>

View file

@ -30,11 +30,11 @@
<h4 class="mb-3">Compatible wallets</h4>
<div>
<a href="https://apps.apple.com/us/app/fully-noded/id1436425586" target="_blank" class="d-inline-block me-3 text-center">
<a href="https://apps.apple.com/us/app/fully-noded/id1436425586" target="_blank" class="d-inline-block me-3 text-center" rel="noreferrer noopener">
<img src="~/img/fullynoded.png" width="100" height="100" asp-append-version="true" alt="Fully Noded" />
<div class="mt-2">Fully Noded</div>
</a>
<a href="https://github.com/cryptoadvance/specter-desktop" target="_blank" class="d-inline-block me-3 text-center">
<a href="https://github.com/cryptoadvance/specter-desktop" target="_blank" class="d-inline-block me-3 text-center" rel="noreferrer noopener">
<img src="~/img/specter.png" width="100" height="100" asp-append-version="true" alt="Specter Desktop" />
<div class="mt-2">Specter Desktop</div>
</a>

View file

@ -64,7 +64,7 @@
<tr>
<td>@s.Name</td>
<td style="text-align: right">
<a href="@s.Link" target="_blank">See information</a>
<a href="@s.Link" target="_blank" rel="noreferrer noopener">See information</a>
</td>
</tr>
}
@ -91,7 +91,7 @@
<tr>
<td>@s.Name</td>
<td style="text-align: right">
<a href="@s.Link" target="_blank">See information</a>
<a href="@s.Link" target="_blank" rel="noreferrer noopener">See information</a>
</td>
</tr>
}
@ -143,7 +143,7 @@
<tr>
<td>@s.Name</td>
<td style="text-align: right">
<a href="@s.Link">Edit</a>
<a href="@s.Link" rel="noreferrer noopener">Edit</a>
</td>
</tr>
}

View file

@ -26,7 +26,7 @@
</div>
<div class="form-group mb-5">
<label asp-for="CustomThemeCssUri" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#1-custom-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#1-custom-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomThemeCssUri" class="form-control" />
@ -36,14 +36,14 @@
<h4 class="mb-3">Bootstrap theme</h4>
<div class="form-group">
<label asp-for="BootstrapCssUri" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="BootstrapCssUri" class="form-control" />
<span asp-validation-for="BootstrapCssUri" class="text-danger"></span>
<p class="form-text text-muted">
<a href="https://pikock.github.io/bootstrap-magic/app/index.html" target="_blank">Build your own theme</a>
or <a href="https://bootswatch.com/" target="_blank">pick one already made</a>
<a href="https://pikock.github.io/bootstrap-magic/app/index.html" target="_blank" rel="noreferrer noopener">Build your own theme</a>
or <a href="https://bootswatch.com/" target="_blank" rel="noreferrer noopener">pick one already made</a>
</p>
</div>
<div class="form-group">
@ -51,7 +51,7 @@
<input asp-for="CreativeStartCssUri" class="form-control" />
<span asp-validation-for="CreativeStartCssUri" class="text-danger"></span>
<p class="form-text text-muted">
<a href="https://startbootstrap.com/template-overviews/creative/" target="_blank">Creative Start theme</a>
<a href="https://startbootstrap.com/template-overviews/creative/" target="_blank" rel="noreferrer noopener">Creative Start theme</a>
is used on top of Bootstrap
</p>
</div>

View file

@ -3,6 +3,6 @@
<p>To complete payment, please send <b>@Model.BtcDue @Model.CryptoCode</b> to <b style="word-break: break-word;">@Model.BtcAddress</b></p>
<p>Time remaining: @Model.TimeLeft</p>
<p>
<a href="@Model.InvoiceBitcoinUrl" style="word-break: break-word;">@Model.InvoiceBitcoinUrl</a>
<a href="@Model.InvoiceBitcoinUrl" style="word-break: break-word;" rel="noreferrer noopener">@Model.InvoiceBitcoinUrl</a>
</p>
</div>

View file

@ -71,7 +71,7 @@
<td class="payment-value">@payment.CryptoPaymentData.GetValue() @Safe.Raw(payment.AdditionalInformation is string i ? $"<br/>({i})" : string.Empty)</td>
<td style="max-width:300px;" data-bs-toggle="tooltip" class="text-truncate" title="@payment.TransactionId">
<div class="wraptextAuto">
<a href="@payment.TransactionLink" target="_blank">
<a href="@payment.TransactionLink" target="_blank" rel="noreferrer noopener">
@payment.TransactionId
</a>
</div>

View file

@ -30,7 +30,7 @@
@if (!string.IsNullOrEmpty(Model.Action))
{
<form method="post" class="modal-footer justify-content-center" action="@Model.ActionUrl">
<form method="post" class="modal-footer justify-content-center" action="@Model.ActionUrl" rel="noreferrer noopener">
<button type="submit" class="btn @Model.ButtonClass xmx-2" id="continue" style="min-width:25%;">@Model.Action</button>
<button type="submit" class="btn btn-secondary mx-2" onclick="history.back(); return false;" style="min-width:25%;">Go back</button>
</form>

View file

@ -26,9 +26,9 @@
<div>
Possible free options are
<ul>
<li><a href="https://medium.com/linkpool/release-of-public-ethereum-rpcs-f5dd57455d2e" target="_blank">linkpool.io</a> - Free, just set the url to <code>https://main-rpc.linkpool.io</code></li>
<li><a href="https://chainstack.com/" target="_blank">chainstack.com</a> - Free plan, choose shared public node</li>
<li><a href="https://infura.io/" target="_blank">infura.io</a> - Free tier but limited calls per day</li>
<li><a href="https://medium.com/linkpool/release-of-public-ethereum-rpcs-f5dd57455d2e" target="_blank" rel="noreferrer noopener">linkpool.io</a> - Free, just set the url to <code>https://main-rpc.linkpool.io</code></li>
<li><a href="https://chainstack.com/" target="_blank" rel="noreferrer noopener">chainstack.com</a> - Free plan, choose shared public node</li>
<li><a href="https://infura.io/" target="_blank" rel="noreferrer noopener">infura.io</a> - Free tier but limited calls per day</li>
<li>Your own geth/openethereum node</li>
</ul>
</div>

View file

@ -47,7 +47,7 @@
<td>@payment.Amount</td>
<td>
<div class="wraptextAuto">
<a href="@payment.BalanceLink" target="_blank">
<a href="@payment.BalanceLink" target="_blank" rel="noreferrer noopener">
@payment.DepositAddress
</a>

View file

@ -19,9 +19,9 @@
<partial name="@provider.Partial"/>
}
<p>
<a href="https://www.youtube.com/watch?v=OrYDehC-8TU" target="_blank">Watch this video</a> to understand the importance of blockchain synchronization.
<a href="https://www.youtube.com/watch?v=OrYDehC-8TU" target="_blank" rel="noreferrer noopener">Watch this video</a> to understand the importance of blockchain synchronization.
</p>
<p class="mb-0">If you really don't want to synch and you are familiar with the command line, check <a href="https://github.com/btcpayserver/btcpayserver-docker/blob/master/contrib/FastSync/README.md" target="_blank">FastSync</a>.</p>
<p class="mb-0">If you really don't want to synch and you are familiar with the command line, check <a href="https://github.com/btcpayserver/btcpayserver-docker/blob/master/contrib/FastSync/README.md" target="_blank" rel="noreferrer noopener">FastSync</a>.</p>
</div>
</div>
</div>

View file

@ -3,7 +3,7 @@
<p>To complete payment, please send <b>@Model.BtcDue @Model.CryptoCode</b> to <b style="word-break: break-word;">@Model.BtcAddress</b></p>
<p>Time remaining: @Model.TimeLeft</p>
<p>
<a href="@Model.InvoiceBitcoinUrl" style="word-break: break-word;">@Model.InvoiceBitcoinUrl</a>
<a href="@Model.InvoiceBitcoinUrl" style="word-break: break-word;" rel="noreferrer noopener">@Model.InvoiceBitcoinUrl</a>
</p>
<p>Peer Info: <b>@Model.PeerInfo</b></p>
</div>

View file

@ -53,7 +53,7 @@
<td>@payment.Amount</td>
<td>
<div class="wraptextAuto">
<a href="@payment.TransactionLink" target="_blank">
<a href="@payment.TransactionLink" target="_blank" rel="noreferrer noopener">
@payment.TransactionId
</a>
</div>

View file

@ -17,7 +17,7 @@
<title>Post Redirect</title>
</head>
<body>
<form method="post" id="postform" action="@action">
<form method="post" id="postform" action="@action" rel="noreferrer noopener">
@Html.AntiForgeryToken()
@foreach (var o in Model.Parameters)
{

View file

@ -10,7 +10,7 @@
<span class="d-flex flex-wrap flex-fill flex-column flex-sm-row">
<strong class="me-3">
Shopify
<a href="https://docs.btcpayserver.org/Shopify" target="_blank">
<a href="https://docs.btcpayserver.org/Shopify" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o" title="More information..."></span>
</a>
</strong>

View file

@ -3,24 +3,24 @@
</h5>
<div class="row justify-content-center mb-2">
<div class="p-3 text-center" style="flex-basis:105px;">
<a href="https://kraken.com" target="_blank" class="text-muted small">
<a href="https://kraken.com" target="_blank" class="text-muted small" rel="noreferrer noopener">
<img src="~/img/kraken.svg" alt="Sponsor Kraken" height="50" asp-append-version="true"/>
<span class="d-block mt-3">Kraken</span>
</a>
</div>
<div class="p-3 text-center" style="flex-basis:105px;">
<a href="https://twitter.com/sqcrypto" target="_blank" class="text-muted small">
<a href="https://twitter.com/sqcrypto" target="_blank" class="text-muted small" rel="noreferrer noopener">
<img src="~/img/squarecrypto.svg" alt="Sponsor Square Crypto" height="50" asp-append-version="true"/>
<span class="d-block mt-3">Square Crypto</span>
</a>
</div>
<div class="p-3 text-center" style="flex-basis:105px;">
<a href="https://www.pnxbet.com" target="_blank" class="text-muted small">
<a href="https://www.pnxbet.com" target="_blank" class="text-muted small" rel="noreferrer noopener">
<img src="~/img/pnxbet.png" alt="Sponsor PNXBET" height="50" width="50" asp-append-version="true"/>
<span class="d-block mt-3">PNXBET</span>
</a>
</div>
</div>
<p class="text-center">
<a href="https://foundation.btcpayserver.org" target="_blank">View all supporters</a>
<a href="https://foundation.btcpayserver.org" target="_blank" rel="noreferrer noopener">View all supporters</a>
</p>

View file

@ -90,7 +90,7 @@
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close">
<vc:icon symbol="close" />
</button>
<span>BTCPay is expecting you to access this website from <b>@(Env.ExpectedProtocol)://@(Env.ExpectedHost)/</b>. If you use a reverse proxy, please set the <b>X-Forwarded-Proto</b> header to <b id="browserScheme">@(Env.ExpectedProtocol)</b> (<a href="https://docs.btcpayserver.org/FAQ/FAQ-Deployment/#cause-3-btcpay-is-expecting-you-to-access-this-website-from" target="_blank" class="alert-link">More information</a>)</span>
<span>BTCPay is expecting you to access this website from <b>@(Env.ExpectedProtocol)://@(Env.ExpectedHost)/</b>. If you use a reverse proxy, please set the <b>X-Forwarded-Proto</b> header to <b id="browserScheme">@(Env.ExpectedProtocol)</b> (<a href="https://docs.btcpayserver.org/FAQ/FAQ-Deployment/#cause-3-btcpay-is-expecting-you-to-access-this-website-from" target="_blank" class="alert-link" rel="noreferrer noopener">More information</a>)</span>
</div>
@if (!Env.IsSecure)
{
@ -113,7 +113,7 @@
{
<footer class="footer">
<div class="container">
<div class="float-start">Logo made with 💚 by <a href="https://ibukingdom.themedia.jp/" target="_blank">Ibuki</a></div>
<div class="float-start">Logo made with 💚 by <a href="https://ibukingdom.themedia.jp/" target="_blank" rel="noreferrer noopener">Ibuki</a></div>
<div class="text-end">@Env.ToString()</div>
</div>
</footer>

View file

@ -15,7 +15,7 @@
<h4 class="mb-3">
Shopify
<small>
<a href="https://docs.btcpayserver.org/Shopify" target="_blank">
<a href="https://docs.btcpayserver.org/Shopify" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>
@ -63,14 +63,14 @@
</div>
<div class="alert alert-warning">
<p>
In Shopify please paste following script at <a href="@shopifyUrl/admin/settings/checkout#PolarisTextField1" target="_blank" class="fw-bold"> Settings &gt; Checkout &gt; Order Processing &gt; Additional Scripts</a>
In Shopify please paste following script at <a href="@shopifyUrl/admin/settings/checkout#PolarisTextField1" target="_blank" class="fw-bold" rel="noreferrer noopener"> Settings &gt; Checkout &gt; Order Processing &gt; Additional Scripts</a>
</p>
<kbd style="display: block; word-break: break-all;">
@($"<script src='{Url.Action("ShopifyJavascript", "Shopify", new {storeId = Context.GetRouteValue("storeId")}, Context.Request.Scheme)}'></script>")
</kbd>
</div>
<p class="alert alert-warning">
In Shopify please add a payment method at <a target="_blank" href="@shopifyUrl/admin/settings/payments" class="fw-bold"> Settings &gt; Payments &gt; Manual Payment Methods</a> with the name <kbd>Bitcoin with BTCPay Server</kbd>
In Shopify please add a payment method at <a target="_blank" href="@shopifyUrl/admin/settings/payments" class="fw-bold" rel="noreferrer noopener"> Settings &gt; Payments &gt; Manual Payment Methods</a> with the name <kbd>Bitcoin with BTCPay Server</kbd>
</p>
<p class="alert alert-success">

View file

@ -93,7 +93,7 @@
</div>
<div class="form-group">
<label asp-for="CustomLogo" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomLogo" class="form-control"/>
@ -101,7 +101,7 @@
</div>
<div class="form-group">
<label asp-for="CustomCSS" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomCSS" class="form-control"/>

View file

@ -15,7 +15,7 @@
<h1>@ViewData["Title"]</h1>
<p class="lead text-secondary mt-3">
This key, also called "xpub", is used to generate individual destination addresses for your invoices.
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Wallet/#what-is-a-derivation-scheme" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Wallet/#what-is-a-derivation-scheme" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</p>

View file

@ -18,10 +18,10 @@
<h4 class="mt-5 mb-3">Other Integrations</h4>
<p>Take a look at documentation for the list of other integrations we support and the directions on how to enable them:</p>
<ul>
<li><a href="https://docs.btcpayserver.org/WooCommerce/" target="_blank">WooCommerce</a></li>
<li><a href="https://docs.btcpayserver.org/Drupal/" target="_blank">Drupal</a></li>
<li><a href="https://docs.btcpayserver.org/Magento/" target="_blank">Magento</a></li>
<li><a href="https://docs.btcpayserver.org/PrestaShop/" target="_blank">PrestaShop</a></li>
<li><a href="https://docs.btcpayserver.org/WooCommerce/" target="_blank" rel="noreferrer noopener">WooCommerce</a></li>
<li><a href="https://docs.btcpayserver.org/Drupal/" target="_blank" rel="noreferrer noopener">Drupal</a></li>
<li><a href="https://docs.btcpayserver.org/Magento/" target="_blank" rel="noreferrer noopener">Magento</a></li>
<li><a href="https://docs.btcpayserver.org/PrestaShop/" target="_blank" rel="noreferrer noopener">PrestaShop</a></li>
</ul>
</div>
</div>

View file

@ -11,7 +11,7 @@
<vc:icon symbol="close" />
</button>
Warning: No wallet has been linked to your BTCPay Store.<br/>
See <a href="https://docs.btcpayserver.org/WalletSetup/" target="_blank" class="alert-link">this link</a> for more information on how to connect your store and wallet.
See <a href="https://docs.btcpayserver.org/WalletSetup/" target="_blank" class="alert-link" rel="noreferrer noopener">this link</a> for more information on how to connect your store and wallet.
</div>
}
@ -26,7 +26,7 @@
</div>
<p>Authorize a public key to access Bitpay compatible Invoice API.
<a href="https://support.bitpay.com/hc/en-us/articles/115003001183-How-do-I-pair-my-client-and-create-a-token-" target="_blank">
<a href="https://support.bitpay.com/hc/en-us/articles/115003001183-How-do-I-pair-my-client-and-create-a-token-" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</p>

View file

@ -18,7 +18,7 @@
<div class="form-group">
<h5>Scripting</h5>
<p>Rate script allows you to express precisely how you want to calculate rates for currency pairs.</p>
<p>We are retrieving the rate of each exchange either directly, or via <a href="https://www.coingecko.com/" target="_blank">CoinGecko (free)</a>.</p>
<p>We are retrieving the rate of each exchange either directly, or via <a href="https://www.coingecko.com/" target="_blank" rel="noreferrer noopener">CoinGecko (free)</a>.</p>
<div class="accordion" id="accordion-info">
<div class="accordion-item">
@ -32,7 +32,7 @@
<div class="accordion-body">
@foreach (var exchange in Model.AvailableExchanges.Where(a => a.Source == BTCPayServer.Rating.RateSource.Direct))
{
<a href="@exchange.Url">@exchange.Id</a><span>&nbsp;</span>
<a href="@exchange.Url" rel="noreferrer noopener">@exchange.Id</a><span>&nbsp;</span>
}
</div>
</div>
@ -48,7 +48,7 @@
<div class="accordion-body">
@foreach (var exchange in Model.AvailableExchanges.Where(a => a.Source == BTCPayServer.Rating.RateSource.Coingecko))
{
<a href="@exchange.Url">@exchange.Id</a><span>&nbsp;</span>
<a href="@exchange.Url" rel="noreferrer noopener">@exchange.Id</a><span>&nbsp;</span>
}
</div>
</div>
@ -157,7 +157,7 @@
<select asp-for="PreferredExchange" asp-items="Model.Exchanges" class="form-select"></select>
<span asp-validation-for="PreferredExchange" class="text-danger"></span>
<p id="PreferredExchangeHelpBlock" class="form-text text-muted">
Current Rates source is <a href="@Model.RateSource" target="_blank">@Model.PreferredExchange</a>.
Current Rates source is <a href="@Model.RateSource" target="_blank" rel="noreferrer noopener">@Model.PreferredExchange</a>.
</p>
</div>
<p>

View file

@ -11,7 +11,7 @@
<p class="text-secondary text-start mb-0">
Please understand that the Lightning Network is still under active development and considered experimental.
Before you proceed, take time to familiarize yourself with the risks.
<a href="https://docs.btcpayserver.org/LightningNetwork/" target="_blank">More information</a>
<a href="https://docs.btcpayserver.org/LightningNetwork/" target="_blank" rel="noreferrer noopener">More information</a>
</p>
</div>
</header>

View file

@ -178,7 +178,7 @@
<div class="form-group d-flex align-items-center">
<input asp-for="AnyoneCanCreateInvoice" type="checkbox" class="btcpay-toggle me-2" />
<label asp-for="AnyoneCanCreateInvoice" class="form-label mb-0 me-1"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#allow-anyone-to-create-invoice" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#allow-anyone-to-create-invoice" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</div>
@ -188,7 +188,7 @@
<div class="d-flex align-items-center">
<input asp-for="PayJoinEnabled" type="checkbox" class="btcpay-toggle me-2"/>
<label asp-for="PayJoinEnabled" class="form-label mb-0 me-1"></label>
<a href="https://docs.btcpayserver.org/Payjoin/" target="_blank">
<a href="https://docs.btcpayserver.org/Payjoin/" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</div>
@ -197,7 +197,7 @@
}
<div class="form-group mt-4">
<label asp-for="NetworkFeeMode" class="form-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#add-network-fee-to-invoice-vary-with-mining-fees" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#add-network-fee-to-invoice-vary-with-mining-fees" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<select asp-for="NetworkFeeMode" class="form-select">
@ -208,7 +208,7 @@
</div>
<div class="form-group">
<label asp-for="InvoiceExpiration" class="form-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#invoice-expires-if-the-full-amount-has-not-been-paid-after-minutes" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#invoice-expires-if-the-full-amount-has-not-been-paid-after-minutes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<div class="input-group">
@ -219,7 +219,7 @@
</div>
<div class="form-group">
<label asp-for="MonitoringExpiration" class="form-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#payment-invalid-if-transactions-fails-to-confirm-minutes-after-invoice-expiration" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#payment-invalid-if-transactions-fails-to-confirm-minutes-after-invoice-expiration" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<div class="input-group">
@ -230,7 +230,7 @@
</div>
<div class="form-group">
<label asp-for="PaymentTolerance" class="form-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-paid-even-if-the-paid-amount-is-less-than-expected" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-paid-even-if-the-paid-amount-is-less-than-expected" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<div class="input-group">
@ -241,7 +241,7 @@
</div>
<div class="form-group">
<label asp-for="SpeedPolicy" class="form-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-confirmed-when-the-payment-transaction" target="_blank">
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-confirmed-when-the-payment-transaction" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<select asp-for="SpeedPolicy" class="form-select w-auto" onchange="document.getElementById('unconfirmed-warning').hidden = this.value !== '0';">

View file

@ -14,8 +14,8 @@
<div class="alert alert-warning">
You are not an admin on this server. While you are able to import or generate a wallet via seed with
your account, please understand that you are trusting the server admins not just with your
<a href="https://docs.btcpayserver.org/ThirdPartyHosting/#privacy-concerns" target="_blank" class="alert-link">privacy</a>
but also with <a href="https://docs.btcpayserver.org/ThirdPartyHosting/#trust-concerns" target="_blank" class="alert-link">trivial access to your funds.</a>
<a href="https://docs.btcpayserver.org/ThirdPartyHosting/#privacy-concerns" target="_blank" class="alert-link" rel="noreferrer noopener">privacy</a>
but also with <a href="https://docs.btcpayserver.org/ThirdPartyHosting/#trust-concerns" target="_blank" class="alert-link" rel="noreferrer noopener">trivial access to your funds.</a>
If you NEED to use this feature, please reconsider hosting your own BTCPay Server instance.
</div>
}
@ -65,7 +65,7 @@
<p class="text-muted pt-2">
PayJoin enhances the privacy for you and your customers.
Enabling it gives your customers the option to use PayJoin during checkout.
<a href="https://docs.btcpayserver.org/Payjoin/" target="_blank">
<a href="https://docs.btcpayserver.org/Payjoin/" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</p>

View file

@ -67,7 +67,7 @@
<td>
@if (!string.IsNullOrEmpty(store.WebSite))
{
<a href="@store.WebSite">@store.WebSite</a>
<a href="@store.WebSite" rel="noreferrer noopener">@store.WebSite</a>
}
</td>
<td style="text-align:right">

View file

@ -12,7 +12,7 @@
<h2>
@ViewData["Title"]
<small>
<a href="https://docs.btcpayserver.org/Wallet/" target="_blank">
<a href="https://docs.btcpayserver.org/Wallet/" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>

View file

@ -74,7 +74,7 @@
</div>
<div class="form-group">
<label asp-for="CustomCSSLink" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomCSSLink" class="form-control" />

View file

@ -117,7 +117,7 @@
<td class="text-end">
@if (!(pp.ProofLink is null))
{
<a class="transaction-link" href="@pp.ProofLink">Link</a>
<a class="transaction-link" href="@pp.ProofLink" rel="noreferrer noopener">Link</a>
}
</td>
}

View file

@ -16,7 +16,7 @@
<h4 class="mb-0">
@ViewData["Title"]
<small>
<a href="https://docs.btcpayserver.org/PullPayments/" target="_blank">
<a href="https://docs.btcpayserver.org/PullPayments/" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>

View file

@ -179,7 +179,7 @@
<div class="form-check">
<input asp-for="NoChange" class="form-check-input" />
<label asp-for="NoChange" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/Wallet/#dont-create-utxo-change" target="_blank">
<a href="https://docs.btcpayserver.org/Wallet/#dont-create-utxo-change" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</div>
@ -188,7 +188,7 @@
<div class="form-check">
<input asp-for="AlwaysIncludeNonWitnessUTXO" class="form-check-input"/>
<label asp-for="AlwaysIncludeNonWitnessUTXO" class="form-check-label"></label>
<a href="https://medium.com/@@jmacato/wasabi-wallets-advisory-for-trezor-users-7d942c727f92" target="_blank">
<a href="https://medium.com/@@jmacato/wasabi-wallets-advisory-for-trezor-users-7d942c727f92" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</div>
@ -197,7 +197,7 @@
{
<div class="form-group">
<label asp-for="AllowFeeBump" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Wallet/#rbf-replace-by-fee" target="_blank">
<a href="https://docs.btcpayserver.org/Wallet/#rbf-replace-by-fee" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<select asp-for="AllowFeeBump" class="form-select w-auto">

View file

@ -64,7 +64,7 @@
<h4>
Partially Signed Bitcoin Transaction
<small>
<a href="https://docs.btcpayserver.org/Wallet/#signing-with-a-wallet-supporting-psbt" target="_blank">
<a href="https://docs.btcpayserver.org/Wallet/#signing-with-a-wallet-supporting-psbt" target="_blank" rel="noreferrer noopener">
<span class="fa fa-question-circle-o text-secondary pe-none" title="More information..."></span>
</a>
</small>

View file

@ -62,7 +62,7 @@
<p>
If BTCPay Server shows you an invalid balance, <a asp-action="WalletRescan" asp-route-walletId="@Context.GetRouteValue("walletId")">rescan your wallet</a>.
<br/>
If some transactions appear in BTCPay Server, but are missing in another wallet, <a href="https://docs.btcpayserver.org/FAQ/FAQ-Wallet/#missing-payments-in-my-software-or-hardware-wallet">follow these instructions</a>.
If some transactions appear in BTCPay Server, but are missing in another wallet, <a href="https://docs.btcpayserver.org/FAQ/FAQ-Wallet/#missing-payments-in-my-software-or-hardware-wallet" rel="noreferrer noopener">follow these instructions</a>.
</p>
@if (Model.Transactions.Any())
@ -136,7 +136,7 @@
</div>
@if (!string.IsNullOrEmpty(label.Link))
{
<a href="@label.Link" target="_blank" class="badge transaction-details-icon" style="background-color: @label.Color; filter: brightness(1.1);">
<a href="@label.Link" target="_blank" class="badge transaction-details-icon" style="background-color: @label.Color; filter: brightness(1.1);" rel="noreferrer noopener">
<span class="fa fa-info-circle" title="Transaction details" style="color: @label.Color; filter: brightness(0.5);">
<span class="visually-hidden">Transaction details</span>
</span>
@ -146,7 +146,7 @@
}
</td>
<td class="smMaxWidth text-truncate @(transaction.IsConfirmed ? "" : "unconf")">
<a href="@transaction.Link" target="_blank">
<a href="@transaction.Link" target="_blank" rel="noreferrer noopener">
@transaction.Id
</a>
</td>