2021-06-29 08:40:20 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Text.Json;
|
|
|
|
|
|
|
|
|
|
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-06-29 08:40:20 +00:00
|
|
|
|
using ASC.Webhooks.Dao.Models;
|
|
|
|
|
|
2021-07-15 15:45:17 +00:00
|
|
|
|
using Microsoft.Extensions.Options;
|
2021-07-08 17:32:59 +00:00
|
|
|
|
|
2021-06-29 08:40:20 +00:00
|
|
|
|
namespace ASC.Webhooks
|
|
|
|
|
{
|
|
|
|
|
[Scope]
|
|
|
|
|
public class WebhookPublisher
|
|
|
|
|
{
|
|
|
|
|
private DbWorker DbWorker { get; }
|
|
|
|
|
private TenantManager TenantManager { get; }
|
2021-07-15 15:45:17 +00:00
|
|
|
|
private ICacheNotify<WebhookRequest> WebhookNotify { get; }
|
|
|
|
|
private ILog Log { get; }
|
|
|
|
|
public WebhookPublisher(
|
|
|
|
|
DbWorker dbWorker,
|
|
|
|
|
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
|
|
|
|
Log = options.Get("ASC.Webhooks");
|
|
|
|
|
WebhookNotify = webhookNotify;
|
2021-06-29 08:40:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
2021-07-08 17:32:59 +00:00
|
|
|
|
public void Publish(EventName eventName, object data)
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
2021-07-08 17:32:59 +00:00
|
|
|
|
var content = JsonSerializer.Serialize(data);
|
|
|
|
|
var tenantId = TenantManager.GetCurrentTenant().TenantId;
|
2021-07-15 15:45:17 +00:00
|
|
|
|
|
|
|
|
|
var webhooksPayload = new WebhooksPayload
|
|
|
|
|
{
|
|
|
|
|
TenantId = tenantId,
|
|
|
|
|
Event = eventName,
|
|
|
|
|
CreationTime = DateTime.UtcNow,
|
|
|
|
|
Data = content,
|
|
|
|
|
Status = ProcessStatus.InProcess
|
|
|
|
|
};
|
|
|
|
|
var DbId = DbWorker.WriteToJournal(webhooksPayload);
|
|
|
|
|
|
2021-07-08 17:32:59 +00:00
|
|
|
|
var webhookConfigs = DbWorker.GetWebhookConfigs(tenantId);
|
|
|
|
|
foreach (var config in webhookConfigs)
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
2021-07-15 15:45:17 +00:00
|
|
|
|
var request = new WebhookRequest()
|
2021-06-29 08:40:20 +00:00
|
|
|
|
{
|
2021-07-15 15:45:17 +00:00
|
|
|
|
Id = DbId,
|
|
|
|
|
SecretKey = config.SecretKey,
|
2021-07-08 17:32:59 +00:00
|
|
|
|
Data = content,
|
2021-07-15 15:45:17 +00:00
|
|
|
|
URI = config.Uri
|
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
|
|
|
|
|
|
|
|
|
public class WebhooksExtension
|
|
|
|
|
{
|
|
|
|
|
public static void Register(DIHelper services)
|
|
|
|
|
{
|
|
|
|
|
services.TryAdd<WebhookPublisher>();
|
|
|
|
|
services.TryAdd<WebhooksIdentifier>();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-08 17:32:59 +00:00
|
|
|
|
public enum EventName
|
|
|
|
|
{
|
2021-07-28 10:10:14 +00:00
|
|
|
|
UntrackedAction,
|
2021-07-08 17:32:59 +00:00
|
|
|
|
NewFileCreated,
|
|
|
|
|
FileUpdated
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
}
|