Refactoring: Introduce IUrlHelper.ActionAbsolute (#6513)

This commit is contained in:
Nicolas Dorier
2024-12-21 00:16:04 +09:00
committed by GitHub
parent 44dc6499cd
commit 8acf1c2d62
8 changed files with 16 additions and 16 deletions

View File

@@ -104,11 +104,6 @@ public static class HttpRequestExtensions
return isRelative ? request.GetAbsoluteRoot() + redirectUrl : redirectUrl; return isRelative ? request.GetAbsoluteRoot() + redirectUrl : redirectUrl;
} }
public static Uri GetAbsoluteUriNoPathBase(this HttpRequest request, string relativeOrAbsolute)
{
return GetAbsoluteUriNoPathBase(request, new Uri(relativeOrAbsolute, UriKind.RelativeOrAbsolute));
}
/// <summary> /// <summary>
/// Will return an absolute URL. /// Will return an absolute URL.
/// If `relativeOrAbsolute` is absolute, returns it. /// If `relativeOrAbsolute` is absolute, returns it.

View File

@@ -15,7 +15,7 @@ namespace BTCPayServer.Tests.Mocks
public string Action(UrlActionContext actionContext) public string Action(UrlActionContext actionContext)
{ {
return $"{_BaseUrl}mock"; return $"/mock";
} }
public string Content(string contentPath) public string Content(string contentPath)

View File

@@ -171,9 +171,8 @@ namespace BTCPayServer.Controllers.Greenfield
var allowedPayjoin = derivationScheme.IsHotWallet && Store.GetStoreBlob().PayJoinEnabled; var allowedPayjoin = derivationScheme.IsHotWallet && Store.GetStoreBlob().PayJoinEnabled;
if (allowedPayjoin) if (allowedPayjoin)
{ {
var endpoint = Request.GetAbsoluteUriNoPathBase( var endpoint = Url.ActionAbsolute(Request, nameof(PayJoinEndpointController.Submit), "PayJoinEndpoint",
Url.Action(nameof(PayJoinEndpointController.Submit), "PayJoinEndpoint", new { network.CryptoCode }).ToString();
new { network.CryptoCode })).ToString();
bip21.QueryParams.Add(PayjoinClient.BIP21EndpointKey, endpoint); bip21.QueryParams.Add(PayjoinClient.BIP21EndpointKey, endpoint);
} }

View File

@@ -697,7 +697,7 @@ namespace BTCPayServer.Controllers
var lnConfig = _LnConfigProvider.GetConfig(configKey); var lnConfig = _LnConfigProvider.GetConfig(configKey);
if (lnConfig != null) if (lnConfig != null)
{ {
model.QRCodeLink = Request.GetAbsoluteUriNoPathBase(Url.Action(nameof(GetLNDConfig), new { configKey })).ToString(); model.QRCodeLink = Url.ActionAbsolute(Request, nameof(GetLNDConfig), new { configKey }).ToString();
model.QRCode = $"config={model.QRCodeLink}"; model.QRCode = $"config={model.QRCodeLink}";
} }
} }

View File

@@ -404,9 +404,8 @@ namespace BTCPayServer.Controllers
var bip21 = network.GenerateBIP21(address?.ToString(), null); var bip21 = network.GenerateBIP21(address?.ToString(), null);
if (allowedPayjoin) if (allowedPayjoin)
{ {
var endpoint = Request.GetAbsoluteUriNoPathBase( var endpoint = Url.ActionAbsolute(Request, nameof(PayJoinEndpointController.Submit), "PayJoinEndpoint",
Url.Action(nameof(PayJoinEndpointController.Submit), "PayJoinEndpoint", new { cryptoCode = walletId.CryptoCode }).ToString();
new { cryptoCode = walletId.CryptoCode })).ToString();
bip21.QueryParams.Add(PayjoinClient.BIP21EndpointKey, endpoint); bip21.QueryParams.Add(PayjoinClient.BIP21EndpointKey, endpoint);
} }

View File

@@ -1,6 +1,7 @@
using System; using System;
using BTCPayServer; using BTCPayServer;
using BTCPayServer.Abstractions.Extensions;
using BTCPayServer.Client.Models; using BTCPayServer.Client.Models;
using BTCPayServer.Controllers; using BTCPayServer.Controllers;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
@@ -11,6 +12,12 @@ namespace Microsoft.AspNetCore.Mvc
public static class UrlHelperExtensions public static class UrlHelperExtensions
{ {
#nullable enable #nullable enable
public static Uri ActionAbsolute(this IUrlHelper helper, HttpRequest request, string? action, string? controller, object? values)
=> request.GetAbsoluteUriNoPathBase(new Uri(helper.Action(action, controller, values) ?? "", UriKind.Relative));
public static Uri ActionAbsolute(this IUrlHelper helper, HttpRequest request, string? action, string? controller)
=> request.GetAbsoluteUriNoPathBase(new Uri(helper.Action(action, controller) ?? "", UriKind.Relative));
public static Uri ActionAbsolute(this IUrlHelper helper, HttpRequest request, string? action, object? values)
=> request.GetAbsoluteUriNoPathBase(new Uri(helper.Action(action, values) ?? "", UriKind.Relative));
public static string? EnsureLocal(this IUrlHelper helper, string? url, HttpRequest? httpRequest = null) public static string? EnsureLocal(this IUrlHelper helper, string? url, HttpRequest? httpRequest = null)
{ {
if (url is null || helper.IsLocalUrl(url)) if (url is null || helper.IsLocalUrl(url))

View File

@@ -348,7 +348,7 @@ namespace BTCPayServer.Plugins.PointOfSale.Controllers
RedirectAutomatically = settings.RedirectAutomatically, RedirectAutomatically = settings.RedirectAutomatically,
RedirectURL = !string.IsNullOrEmpty(redirectUrl) ? redirectUrl RedirectURL = !string.IsNullOrEmpty(redirectUrl) ? redirectUrl
: !string.IsNullOrEmpty(settings.RedirectUrl) ? settings.RedirectUrl : !string.IsNullOrEmpty(settings.RedirectUrl) ? settings.RedirectUrl
: Request.GetAbsoluteUriNoPathBase(Url.Action(nameof(ViewPointOfSale), "UIPointOfSale", new { appId, viewType })).ToString(), : Url.ActionAbsolute(Request, nameof(ViewPointOfSale), "UIPointOfSale", new { appId, viewType }).ToString(),
PaymentMethods = paymentMethods?.Where(p => p.Value.Enabled).Select(p => p.Key).ToArray() PaymentMethods = paymentMethods?.Where(p => p.Value.Enabled).Select(p => p.Key).ToArray()
}, },
AdditionalSearchTerms = new[] { AppService.GetAppSearchTerm(app) } AdditionalSearchTerms = new[] { AppService.GetAppSearchTerm(app) }
@@ -534,7 +534,7 @@ namespace BTCPayServer.Plugins.PointOfSale.Controllers
{ {
var controller = nameof(UIPointOfSaleController).TrimEnd("Controller", StringComparison.InvariantCulture); var controller = nameof(UIPointOfSaleController).TrimEnd("Controller", StringComparison.InvariantCulture);
var redirectUrl = var redirectUrl =
Request.GetAbsoluteUriNoPathBase(Url.Action(nameof(ViewPointOfSale), controller, new { appId, viewType })).ToString(); Url.ActionAbsolute(Request, nameof(ViewPointOfSale), controller, new { appId, viewType }).ToString();
formParameters.Add("formResponse", FormDataService.GetValues(form).ToString()); formParameters.Add("formResponse", FormDataService.GetValues(form).ToString());
return View("PostRedirect", new PostRedirectViewModel return View("PostRedirect", new PostRedirectViewModel
{ {

View File

@@ -55,7 +55,7 @@ Vue.component("lnurl-withdraw-checkout", {
}, },
data () { data () {
return { return {
url: @Safe.Json(Context.Request.GetAbsoluteUriNoPathBase(Url.Action("SubmitLNURLWithdrawForInvoice", "NFC")).ToString()), url: @Safe.Json(Url.ActionAbsolute(Context.Request, "SubmitLNURLWithdrawForInvoice", "NFC").ToString()),
amount: 0, amount: 0,
submitting: false submitting: false
} }