Fix: If PoS item code contains a /, LNUrl would not work (fix #4601) (#4602)

This is caused by a weird buggy behavior from ASP.NET Core concerning
path value decoding. (More information on
https://github.com/dotnet/aspnetcore/issues/14170#issuecomment-533342396)

This hasn't been fixed for a while, and the dotnet team keeps reporting
it over and over.
This commit is contained in:
Nicolas Dorier 2023-02-06 18:17:17 +09:00 committed by GitHub
parent 523654f2eb
commit 219d03b8dd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions

View file

@ -265,8 +265,11 @@ namespace BTCPayServer
break;
}
var escapedItemId = Extensions.UnescapeBackSlashUriString(itemCode);
var item = items.FirstOrDefault(item1 =>
item1.Id.Equals(itemCode, StringComparison.InvariantCultureIgnoreCase));
item1.Id.Equals(itemCode, StringComparison.InvariantCultureIgnoreCase) ||
item1.Id.Equals(escapedItemId, StringComparison.InvariantCultureIgnoreCase));
if (item is null ||
item.Inventory <= 0 ||
(item.PaymentMethods?.Any() is true &&

View file

@ -36,6 +36,20 @@ namespace BTCPayServer
{
public static class Extensions
{
/// <summary>
/// Unescape Uri string for %2F
/// See details at: https://github.com/dotnet/aspnetcore/issues/14170#issuecomment-533342396
/// </summary>
/// <param name="uriString">The Uri string.</param>
/// <returns>Unescaped back slash Uri string.</returns>
public static string UnescapeBackSlashUriString(string uriString)
{
if (uriString == null)
{
return null;
}
return uriString.Replace("%2f", "%2F").Replace("%2F", "/");
}
public static bool IsValidEmail(this string email)
{
if (string.IsNullOrEmpty(email))