mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-19 18:11:36 +01:00
Merge pull request #1916 from Kukks/morelabels
Add more labels (payment requests, apps, better payout label)
This commit is contained in:
commit
f6252b73f1
@ -768,7 +768,7 @@ namespace BTCPayServer.Tests
|
|||||||
s.Driver.Navigate().Refresh();
|
s.Driver.Navigate().Refresh();
|
||||||
Assert.Contains("badge transactionLabel", s.Driver.PageSource);
|
Assert.Contains("badge transactionLabel", s.Driver.PageSource);
|
||||||
});
|
});
|
||||||
Assert.Equal("Payout", s.Driver.FindElement(By.ClassName("transactionLabel")).Text);
|
Assert.Equal("payout", s.Driver.FindElement(By.ClassName("transactionLabel")).Text);
|
||||||
|
|
||||||
s.GoToWallet(navPages: WalletsNavPages.Payouts);
|
s.GoToWallet(navPages: WalletsNavPages.Payouts);
|
||||||
TestUtils.Eventually(() =>
|
TestUtils.Eventually(() =>
|
||||||
|
@ -38,6 +38,21 @@ namespace BTCPayServer.Controllers
|
|||||||
private readonly InvoiceController _InvoiceController;
|
private readonly InvoiceController _InvoiceController;
|
||||||
private readonly UserManager<ApplicationUser> _UserManager;
|
private readonly UserManager<ApplicationUser> _UserManager;
|
||||||
|
|
||||||
|
[HttpGet("/apps/{appId}")]
|
||||||
|
public async Task<IActionResult> RedirectToApp(string appId)
|
||||||
|
{
|
||||||
|
switch (await _AppService.GetAppInfo(appId))
|
||||||
|
{
|
||||||
|
case ViewCrowdfundViewModel _:
|
||||||
|
return RedirectToAction("ViewCrowdfund", new {appId});
|
||||||
|
|
||||||
|
case ViewPointOfSaleViewModel _:
|
||||||
|
return RedirectToAction("ViewPointOfSale", new {appId});
|
||||||
|
}
|
||||||
|
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/apps/{appId}/pos/{viewType?}")]
|
[Route("/apps/{appId}/pos/{viewType?}")]
|
||||||
[XFrameOptionsAttribute(XFrameOptionsAttribute.XFrameOptions.AllowAll)]
|
[XFrameOptionsAttribute(XFrameOptionsAttribute.XFrameOptions.AllowAll)]
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
|
||||||
|
using BTCPayServer;
|
||||||
using BTCPayServer.Controllers;
|
using BTCPayServer.Controllers;
|
||||||
|
using BTCPayServer.Services.Apps;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
|
|
||||||
@ -31,6 +33,15 @@ namespace Microsoft.AspNetCore.Mvc
|
|||||||
scheme, host, pathbase);
|
scheme, host, pathbase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string AppLink(this LinkGenerator urlHelper, string appId, string scheme, HostString host, string pathbase)
|
||||||
|
{
|
||||||
|
return urlHelper.GetUriByAction(
|
||||||
|
action: nameof(AppsPublicController.RedirectToApp),
|
||||||
|
controller: "AppsPublic",
|
||||||
|
values: new { appId },
|
||||||
|
scheme, host, pathbase);
|
||||||
|
}
|
||||||
|
|
||||||
public static string InvoiceLink(this LinkGenerator urlHelper, string invoiceId, string scheme, HostString host, string pathbase)
|
public static string InvoiceLink(this LinkGenerator urlHelper, string invoiceId, string scheme, HostString host, string pathbase)
|
||||||
{
|
{
|
||||||
return urlHelper.GetUriByAction(
|
return urlHelper.GetUriByAction(
|
||||||
@ -39,5 +50,14 @@ namespace Microsoft.AspNetCore.Mvc
|
|||||||
values: new { invoiceId = invoiceId },
|
values: new { invoiceId = invoiceId },
|
||||||
scheme, host, pathbase);
|
scheme, host, pathbase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string PayoutLink(this LinkGenerator urlHelper, string walletId,string pullPaymentId, string scheme, HostString host, string pathbase)
|
||||||
|
{
|
||||||
|
return urlHelper.GetUriByAction(
|
||||||
|
action: nameof(WalletsController.Payouts),
|
||||||
|
controller: "Wallets",
|
||||||
|
values: new {walletId, pullPaymentId},
|
||||||
|
scheme, host, pathbase);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -405,9 +405,10 @@ namespace BTCPayServer.HostedServices
|
|||||||
if (proof.TransactionId is null)
|
if (proof.TransactionId is null)
|
||||||
proof.TransactionId = txId;
|
proof.TransactionId = txId;
|
||||||
payout.SetProofBlob(proof, _jsonSerializerSettings);
|
payout.SetProofBlob(proof, _jsonSerializerSettings);
|
||||||
_eventAggregator.Publish(new UpdateTransactionLabel(new WalletId(payout.PullPaymentData.StoreId, newTransaction.CryptoCode),
|
var walletId = new WalletId(payout.PullPaymentData.StoreId, newTransaction.CryptoCode);
|
||||||
|
_eventAggregator.Publish(new UpdateTransactionLabel(walletId,
|
||||||
newTransaction.NewTransactionEvent.TransactionData.TransactionHash,
|
newTransaction.NewTransactionEvent.TransactionData.TransactionHash,
|
||||||
("#3F88AF", "Payout")));
|
UpdateTransactionLabel.PayoutTemplate(payout.Id,payout.PullPaymentDataId, walletId.ToString())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await ctx.SaveChangesAsync();
|
await ctx.SaveChangesAsync();
|
||||||
|
@ -8,6 +8,8 @@ using BTCPayServer.Events;
|
|||||||
using BTCPayServer.Payments;
|
using BTCPayServer.Payments;
|
||||||
using BTCPayServer.Payments.Bitcoin;
|
using BTCPayServer.Payments.Bitcoin;
|
||||||
using BTCPayServer.Services;
|
using BTCPayServer.Services;
|
||||||
|
using BTCPayServer.Services.Apps;
|
||||||
|
using BTCPayServer.Services.PaymentRequests;
|
||||||
using NBitcoin;
|
using NBitcoin;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
@ -50,6 +52,17 @@ namespace BTCPayServer.HostedServices
|
|||||||
labels.Add(UpdateTransactionLabel.PayjoinLabelTemplate());
|
labels.Add(UpdateTransactionLabel.PayjoinLabelTemplate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var paymentId in PaymentRequestRepository.GetPaymentIdsFromInternalTags(invoiceEvent.Invoice))
|
||||||
|
{
|
||||||
|
labels.Add(UpdateTransactionLabel.PaymentRequestLabelTemplate(paymentId));
|
||||||
|
}
|
||||||
|
foreach (var appId in AppService.GetAppInternalTags(invoiceEvent.Invoice))
|
||||||
|
{
|
||||||
|
labels.Add(UpdateTransactionLabel.AppLabelTemplate(appId));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_eventAggregator.Publish(new UpdateTransactionLabel(walletId, transactionId, labels));
|
_eventAggregator.Publish(new UpdateTransactionLabel(walletId, transactionId, labels));
|
||||||
}
|
}
|
||||||
else if (evt is UpdateTransactionLabel updateTransactionLabel)
|
else if (evt is UpdateTransactionLabel updateTransactionLabel)
|
||||||
@ -116,12 +129,24 @@ namespace BTCPayServer.HostedServices
|
|||||||
{
|
{
|
||||||
return ("#cedc21", JObject.FromObject(new { value = "invoice", id = invoice }).ToString());
|
return ("#cedc21", JObject.FromObject(new { value = "invoice", id = invoice }).ToString());
|
||||||
}
|
}
|
||||||
|
public static (string color, string label) PaymentRequestLabelTemplate(string paymentRequestId)
|
||||||
|
{
|
||||||
|
return ("#489D77", JObject.FromObject(new { value = "payment-request", id = paymentRequestId }).ToString());
|
||||||
|
}
|
||||||
|
public static (string color, string label) AppLabelTemplate(string appId)
|
||||||
|
{
|
||||||
|
return ("#5093B6", JObject.FromObject(new { value = "app", id = appId }).ToString());
|
||||||
|
}
|
||||||
|
|
||||||
public static (string color, string label) PayjoinExposedLabelTemplate(string invoice)
|
public static (string color, string label) PayjoinExposedLabelTemplate(string invoice)
|
||||||
{
|
{
|
||||||
return ("#51b13e", JObject.FromObject(new { value = "pj-exposed", id = invoice }).ToString());
|
return ("#51b13e", JObject.FromObject(new { value = "pj-exposed", id = invoice }).ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static (string color, string label) PayoutTemplate(string payoutId, string pullPaymentId, string walletId)
|
||||||
|
{
|
||||||
|
return ("#3F88AF", JObject.FromObject(new { value = "payout", id = payoutId, pullPaymentId, walletId }).ToString());
|
||||||
|
}
|
||||||
public WalletId WalletId { get; set; }
|
public WalletId WalletId { get; set; }
|
||||||
public Dictionary<uint256, List<(string color, string label)>> TransactionLabels { get; set; }
|
public Dictionary<uint256, List<(string color, string label)>> TransactionLabels { get; set; }
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
@ -50,6 +50,7 @@ namespace BTCPayServer.Services.Labels
|
|||||||
{
|
{
|
||||||
var id = jObj.ContainsKey("id") ? jObj["id"].Value<string>() : string.Empty;
|
var id = jObj.ContainsKey("id") ? jObj["id"].Value<string>() : string.Empty;
|
||||||
var idInLabel = string.IsNullOrEmpty(id) ? string.Empty : $"({id})";
|
var idInLabel = string.IsNullOrEmpty(id) ? string.Empty : $"({id})";
|
||||||
|
|
||||||
switch (jObj["value"].Value<string>())
|
switch (jObj["value"].Value<string>())
|
||||||
{
|
{
|
||||||
case "invoice":
|
case "invoice":
|
||||||
@ -63,6 +64,28 @@ namespace BTCPayServer.Services.Labels
|
|||||||
? null
|
? null
|
||||||
: _linkGenerator.InvoiceLink(id, request.Scheme, request.Host, request.PathBase)
|
: _linkGenerator.InvoiceLink(id, request.Scheme, request.Host, request.PathBase)
|
||||||
};
|
};
|
||||||
|
case "payment-request":
|
||||||
|
return new Label()
|
||||||
|
{
|
||||||
|
RawValue = value,
|
||||||
|
Value = "payment-request",
|
||||||
|
Color = color,
|
||||||
|
Tooltip = $"Received through a payment request {idInLabel}",
|
||||||
|
Link = string.IsNullOrEmpty(id)
|
||||||
|
? null
|
||||||
|
: _linkGenerator.PaymentRequestLink(id, request.Scheme, request.Host, request.PathBase)
|
||||||
|
};
|
||||||
|
case "app":
|
||||||
|
return new Label()
|
||||||
|
{
|
||||||
|
RawValue = value,
|
||||||
|
Value = "app",
|
||||||
|
Color = color,
|
||||||
|
Tooltip = $"Received through an app {idInLabel}",
|
||||||
|
Link = string.IsNullOrEmpty(id)
|
||||||
|
? null
|
||||||
|
: _linkGenerator.AppLink(id, request.Scheme, request.Host, request.PathBase)
|
||||||
|
};
|
||||||
case "pj-exposed":
|
case "pj-exposed":
|
||||||
return new Label()
|
return new Label()
|
||||||
{
|
{
|
||||||
@ -74,6 +97,19 @@ namespace BTCPayServer.Services.Labels
|
|||||||
? null
|
? null
|
||||||
: _linkGenerator.InvoiceLink(id, request.Scheme, request.Host, request.PathBase)
|
: _linkGenerator.InvoiceLink(id, request.Scheme, request.Host, request.PathBase)
|
||||||
};
|
};
|
||||||
|
case "payout":
|
||||||
|
return new Label()
|
||||||
|
{
|
||||||
|
RawValue = value,
|
||||||
|
Value = "payout",
|
||||||
|
Color = color,
|
||||||
|
Tooltip = $"Paid a payout of a pull payment ({jObj["pullPaymentId"].Value<string>()})",
|
||||||
|
Link = string.IsNullOrEmpty(id)
|
||||||
|
? null
|
||||||
|
: _linkGenerator.PayoutLink(jObj["walletId"].Value<string>(),
|
||||||
|
jObj["pullPaymentId"].Value<string>(), request.Scheme, request.Host,
|
||||||
|
request.PathBase)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user