2021-06-29 08:40:20 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
using ASC.Common;
|
2021-07-15 15:45:17 +00:00
|
|
|
|
using ASC.Common.Caching;
|
|
|
|
|
using ASC.Common.Logging;
|
2021-06-29 08:40:20 +00:00
|
|
|
|
using ASC.Core;
|
2021-07-15 15:45:17 +00:00
|
|
|
|
using ASC.Web.Webhooks;
|
2021-08-26 18:43:41 +00:00
|
|
|
|
using ASC.Webhooks.Core.Dao.Models;
|
2021-06-29 08:40:20 +00:00
|
|
|
|
|
2021-07-15 15:45:17 +00:00
|
|
|
|
using Microsoft.Extensions.Options;
|
2021-07-08 17:32:59 +00:00
|
|
|
|
|
2021-08-26 18:43:41 +00:00
|
|
|
|
namespace ASC.Webhooks.Core
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
|
|
|
|
[Scope]
|
2021-08-19 09:11:26 +00:00
|
|
|
|
public class WebhookPublisher : IWebhookPublisher
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
|
|
|
|
private DbWorker DbWorker { get; }
|
|
|
|
|
private TenantManager TenantManager { get; }
|
2021-07-15 15:45:17 +00:00
|
|
|
|
private ICacheNotify<WebhookRequest> WebhookNotify { get; }
|
2021-08-19 12:56:14 +00:00
|
|
|
|
|
2021-07-15 15:45:17 +00:00
|
|
|
|
public WebhookPublisher(
|
2021-08-27 14:50:49 +00:00
|
|
|
|
DbWorker dbWorker,
|
2021-07-15 15:45:17 +00:00
|
|
|
|
TenantManager tenantManager,
|
|
|
|
|
IOptionsMonitor<ILog> options,
|
|
|
|
|
ICacheNotify<WebhookRequest> webhookNotify)
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
|
|
|
|
DbWorker = dbWorker;
|
|
|
|
|
TenantManager = tenantManager;
|
2021-07-15 15:45:17 +00:00
|
|
|
|
WebhookNotify = webhookNotify;
|
2021-06-29 08:40:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-09-03 14:02:52 +00:00
|
|
|
|
public void Publish(string eventName, string requestPayload)
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
2021-07-08 17:32:59 +00:00
|
|
|
|
var tenantId = TenantManager.GetCurrentTenant().TenantId;
|
|
|
|
|
var webhookConfigs = DbWorker.GetWebhookConfigs(tenantId);
|
2021-08-03 16:26:28 +00:00
|
|
|
|
|
2021-07-08 17:32:59 +00:00
|
|
|
|
foreach (var config in webhookConfigs)
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
2021-09-03 14:02:52 +00:00
|
|
|
|
var webhooksLog = new WebhooksLog
|
2021-10-19 16:53:28 +00:00
|
|
|
|
{
|
2021-09-03 14:02:52 +00:00
|
|
|
|
Uid = Guid.NewGuid().ToString(),
|
2021-08-03 16:26:28 +00:00
|
|
|
|
TenantId = tenantId,
|
|
|
|
|
Event = eventName,
|
|
|
|
|
CreationTime = DateTime.UtcNow,
|
2021-10-19 16:53:28 +00:00
|
|
|
|
RequestPayload = requestPayload,
|
2021-08-03 16:26:28 +00:00
|
|
|
|
Status = ProcessStatus.InProcess,
|
|
|
|
|
ConfigId = config.ConfigId
|
|
|
|
|
};
|
2021-09-03 14:02:52 +00:00
|
|
|
|
var DbId = DbWorker.WriteToJournal(webhooksLog);
|
2021-08-03 16:26:28 +00:00
|
|
|
|
|
2021-07-15 15:45:17 +00:00
|
|
|
|
var request = new WebhookRequest()
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
2021-08-03 16:26:28 +00:00
|
|
|
|
Id = DbId
|
2021-06-29 08:40:20 +00:00
|
|
|
|
};
|
|
|
|
|
|
2021-07-15 15:45:17 +00:00
|
|
|
|
WebhookNotify.Publish(request, CacheNotifyAction.Update);
|
2021-06-29 08:40:20 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-29 12:39:22 +00:00
|
|
|
|
|
2021-07-08 17:32:59 +00:00
|
|
|
|
public enum ProcessStatus
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
2021-07-08 17:32:59 +00:00
|
|
|
|
InProcess,
|
|
|
|
|
Success,
|
|
|
|
|
Failed
|
2021-06-29 08:40:20 +00:00
|
|
|
|
}
|
|
|
|
|
}
|