mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 22:14:26 +01:00
55 lines
2.0 KiB
C#
55 lines
2.0 KiB
C#
#nullable enable
|
|
using System.Globalization;
|
|
using System.Threading.Tasks;
|
|
using BTCPayServer.Client.Models;
|
|
using BTCPayServer.Controllers;
|
|
using BTCPayServer.Data;
|
|
using BTCPayServer.Services.PaymentRequests;
|
|
using WebhookDeliveryData = BTCPayServer.Data.WebhookDeliveryData;
|
|
|
|
namespace BTCPayServer.HostedServices.Webhooks;
|
|
|
|
public class PaymentRequestWebhookDeliveryRequest(
|
|
PaymentRequestEvent evt,
|
|
string webhookId,
|
|
WebhookEvent webhookEvent,
|
|
WebhookDeliveryData delivery,
|
|
WebhookBlob webhookBlob)
|
|
: WebhookSender.WebhookDeliveryRequest(webhookId, webhookEvent, delivery, webhookBlob)
|
|
{
|
|
public override Task<SendEmailRequest?> Interpolate(SendEmailRequest req,
|
|
UIStoresController.StoreEmailRule storeEmailRule)
|
|
{
|
|
var blob = evt.Data.GetBlob();
|
|
if (storeEmailRule.CustomerEmail &&
|
|
MailboxAddressValidator.TryParse(blob.Email, out var bmb))
|
|
{
|
|
req.Email ??= string.Empty;
|
|
req.Email += $",{bmb}";
|
|
}
|
|
|
|
req.Subject = Interpolate(req.Subject, evt.Data);
|
|
req.Body = Interpolate(req.Body, evt.Data);
|
|
return Task.FromResult(req)!;
|
|
}
|
|
|
|
private string Interpolate(string str, PaymentRequestData data)
|
|
{
|
|
var id = data.Id;
|
|
var trimmedId = $"{id.Substring(0, 7)}...{id.Substring(id.Length - 7)}";
|
|
|
|
var blob = data.GetBlob();
|
|
var res = str.Replace("{PaymentRequest.Id}", id)
|
|
.Replace("{PaymentRequest.TrimmedId}", trimmedId)
|
|
.Replace("{PaymentRequest.Amount}", data.Amount.ToString(CultureInfo.InvariantCulture))
|
|
.Replace("{PaymentRequest.Currency}", data.Currency)
|
|
.Replace("{PaymentRequest.Title}", blob.Title)
|
|
.Replace("{PaymentRequest.Description}", blob.Description)
|
|
.Replace("{PaymentRequest.ReferenceId}", data.ReferenceId)
|
|
.Replace("{PaymentRequest.Status}", evt.Data.Status.ToString());
|
|
|
|
res = InterpolateJsonField(res, "PaymentRequest.FormResponse", blob.FormResponse);
|
|
return res;
|
|
}
|
|
}
|