Show success/error message after sending test webhook

This commit is contained in:
Umar Bolatov
2021-04-25 20:09:26 -07:00
parent 872c99e033
commit 9f6f74df59
2 changed files with 23 additions and 7 deletions

View File

@@ -123,7 +123,13 @@ namespace BTCPayServer.Controllers
[HttpPost("{storeId}/webhooks/{webhookId}/test")] [HttpPost("{storeId}/webhooks/{webhookId}/test")]
public async Task<IActionResult> TestWebhook(string webhookId, TestWebhookViewModel viewModel) public async Task<IActionResult> TestWebhook(string webhookId, TestWebhookViewModel viewModel)
{ {
await WebhookNotificationManager.TestWebhook(CurrentStore.Id, webhookId, viewModel.Type); var result = await WebhookNotificationManager.TestWebhook(CurrentStore.Id, webhookId, viewModel.Type);
if (result.Success) {
TempData[WellKnownTempData.SuccessMessage] = $"{viewModel.Type.ToString()} event delivered successfully!";
} else {
TempData[WellKnownTempData.ErrorMessage] = $"{viewModel.Type.ToString()} event could not be delivered";
}
return View(nameof(TestWebhook)); return View(nameof(TestWebhook));
} }

View File

@@ -122,7 +122,7 @@ namespace BTCPayServer.HostedServices
return webhookEvent; return webhookEvent;
} }
public async Task TestWebhook(string storeId, string webhookId, WebhookEventType webhookEventType) public async Task<DeliveryResult> TestWebhook(string storeId, string webhookId, WebhookEventType webhookEventType)
{ {
var delivery = NewDelivery(webhookId); var delivery = NewDelivery(webhookId);
var webhook = (await StoreRepository.GetWebhooks(storeId)).Where(w => w.Id == webhookId).FirstOrDefault(); var webhook = (await StoreRepository.GetWebhooks(storeId)).Where(w => w.Id == webhookId).FirstOrDefault();
@@ -133,7 +133,7 @@ namespace BTCPayServer.HostedServices
webhook.GetBlob() webhook.GetBlob()
); );
var result = await SendAndSaveDelivery(deliveryRequest); return await SendDelivery(deliveryRequest);
} }
protected override async Task ProcessEvent(object evt, CancellationToken cancellationToken) protected override async Task ProcessEvent(object evt, CancellationToken cancellationToken)
@@ -295,12 +295,13 @@ namespace BTCPayServer.HostedServices
return wh.Active && wh.AuthorizedEvents.Match(type); return wh.Active && wh.AuthorizedEvents.Match(type);
} }
class DeliveryResult public class DeliveryResult
{ {
public string DeliveryId { get; set; } public string? DeliveryId { get; set; }
public bool Success { get; set; } public bool Success { get; set; }
} }
private async Task<DeliveryResult> SendAndSaveDelivery(WebhookDeliveryRequest ctx)
private async Task<DeliveryResult> SendDelivery(WebhookDeliveryRequest ctx)
{ {
var uri = new Uri(ctx.WebhookBlob.Url, UriKind.Absolute); var uri = new Uri(ctx.WebhookBlob.Url, UriKind.Absolute);
var httpClient = GetClient(uri); var httpClient = GetClient(uri);
@@ -336,10 +337,19 @@ namespace BTCPayServer.HostedServices
deliveryBlob.ErrorMessage = ex.Message; deliveryBlob.ErrorMessage = ex.Message;
} }
ctx.Delivery.SetBlob(deliveryBlob); ctx.Delivery.SetBlob(deliveryBlob);
await StoreRepository.AddWebhookDelivery(ctx.Delivery);
return new DeliveryResult() { Success = deliveryBlob.ErrorMessage is null, DeliveryId = ctx.Delivery.Id }; return new DeliveryResult() { Success = deliveryBlob.ErrorMessage is null, DeliveryId = ctx.Delivery.Id };
} }
private async Task<DeliveryResult> SendAndSaveDelivery(WebhookDeliveryRequest ctx)
{
var result = await SendDelivery(ctx);
await StoreRepository.AddWebhookDelivery(ctx.Delivery);
return result;
}
private byte[] ToBytes(WebhookEvent webhookEvent) private byte[] ToBytes(WebhookEvent webhookEvent)
{ {
var str = JsonConvert.SerializeObject(webhookEvent, Formatting.Indented, DefaultSerializerSettings); var str = JsonConvert.SerializeObject(webhookEvent, Formatting.Indented, DefaultSerializerSettings);