feat: upgrade to .NET 6, refactor everything
This commit is contained in:
@@ -1,102 +1,96 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
using NodaTime;
|
||||
namespace PluralKit.Core;
|
||||
|
||||
namespace PluralKit.Core
|
||||
public enum DispatchEvent
|
||||
{
|
||||
public enum DispatchEvent
|
||||
PING,
|
||||
UPDATE_SYSTEM,
|
||||
CREATE_MEMBER,
|
||||
UPDATE_MEMBER,
|
||||
DELETE_MEMBER,
|
||||
CREATE_GROUP,
|
||||
UPDATE_GROUP,
|
||||
UPDATE_GROUP_MEMBERS,
|
||||
DELETE_GROUP,
|
||||
LINK_ACCOUNT,
|
||||
UNLINK_ACCOUNT,
|
||||
UPDATE_SYSTEM_GUILD,
|
||||
UPDATE_MEMBER_GUILD,
|
||||
CREATE_MESSAGE,
|
||||
CREATE_SWITCH,
|
||||
UPDATE_SWITCH,
|
||||
UPDATE_SWITCH_MEMBERS,
|
||||
DELETE_SWITCH,
|
||||
DELETE_ALL_SWITCHES,
|
||||
SUCCESSFUL_IMPORT
|
||||
}
|
||||
|
||||
public struct UpdateDispatchData
|
||||
{
|
||||
public DispatchEvent Event;
|
||||
public string SystemId;
|
||||
public string? EntityId;
|
||||
public string SigningToken;
|
||||
public JObject? EventData;
|
||||
}
|
||||
|
||||
public static class DispatchExt
|
||||
{
|
||||
public static StringContent GetPayloadBody(this UpdateDispatchData data)
|
||||
{
|
||||
PING,
|
||||
UPDATE_SYSTEM,
|
||||
CREATE_MEMBER,
|
||||
UPDATE_MEMBER,
|
||||
DELETE_MEMBER,
|
||||
CREATE_GROUP,
|
||||
UPDATE_GROUP,
|
||||
UPDATE_GROUP_MEMBERS,
|
||||
DELETE_GROUP,
|
||||
LINK_ACCOUNT,
|
||||
UNLINK_ACCOUNT,
|
||||
UPDATE_SYSTEM_GUILD,
|
||||
UPDATE_MEMBER_GUILD,
|
||||
CREATE_MESSAGE,
|
||||
CREATE_SWITCH,
|
||||
UPDATE_SWITCH,
|
||||
UPDATE_SWITCH_MEMBERS,
|
||||
DELETE_SWITCH,
|
||||
DELETE_ALL_SWITCHES,
|
||||
SUCCESSFUL_IMPORT,
|
||||
var o = new JObject();
|
||||
|
||||
o.Add("type", data.Event.ToString());
|
||||
o.Add("signing_token", data.SigningToken);
|
||||
o.Add("system_id", data.SystemId);
|
||||
o.Add("id", data.EntityId);
|
||||
o.Add("data", data.EventData);
|
||||
|
||||
return new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json");
|
||||
}
|
||||
|
||||
public struct UpdateDispatchData
|
||||
public static async Task<bool> ValidateUri(string url)
|
||||
{
|
||||
public DispatchEvent Event;
|
||||
public string SystemId;
|
||||
public string? EntityId;
|
||||
public string SigningToken;
|
||||
public JObject? EventData;
|
||||
}
|
||||
IPHostEntry host = null;
|
||||
|
||||
public static class DispatchExt
|
||||
{
|
||||
public static StringContent GetPayloadBody(this UpdateDispatchData data)
|
||||
try
|
||||
{
|
||||
var o = new JObject();
|
||||
|
||||
o.Add("type", data.Event.ToString());
|
||||
o.Add("signing_token", data.SigningToken);
|
||||
o.Add("system_id", data.SystemId);
|
||||
o.Add("id", data.EntityId);
|
||||
o.Add("data", data.EventData);
|
||||
|
||||
return new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json");
|
||||
var uri = new Uri(url);
|
||||
host = await Dns.GetHostEntryAsync(uri.DnsSafeHost);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public static async Task<bool> ValidateUri(string url)
|
||||
{
|
||||
IPHostEntry host = null;
|
||||
|
||||
try
|
||||
{
|
||||
var uri = new Uri(url);
|
||||
host = await Dns.GetHostEntryAsync(uri.DnsSafeHost);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (host == null || host.AddressList.Length == 0)
|
||||
return false;
|
||||
if (host == null || host.AddressList.Length == 0)
|
||||
return false;
|
||||
|
||||
#pragma warning disable CS0618
|
||||
|
||||
foreach (var address in host.AddressList.Where(address => address.AddressFamily is AddressFamily.InterNetwork))
|
||||
{
|
||||
if ((address.Address & 0x7f000000) == 0x7f000000) // 127.0/8
|
||||
return false;
|
||||
if ((address.Address & 0x0a000000) == 0x0a000000) // 10.0/8
|
||||
return false;
|
||||
if ((address.Address & 0xa9fe0000) == 0xa9fe0000) // 169.254/16
|
||||
return false;
|
||||
if ((address.Address & 0xac100000) == 0xac100000) // 172.16/12
|
||||
return false;
|
||||
}
|
||||
|
||||
if (host.AddressList.Any(address => address.IsIPv6LinkLocal))
|
||||
foreach (var address in host.AddressList.Where(address =>
|
||||
address.AddressFamily is AddressFamily.InterNetwork))
|
||||
{
|
||||
if ((address.Address & 0x7f000000) == 0x7f000000) // 127.0/8
|
||||
return false;
|
||||
if ((address.Address & 0x0a000000) == 0x0a000000) // 10.0/8
|
||||
return false;
|
||||
if ((address.Address & 0xa9fe0000) == 0xa9fe0000) // 169.254/16
|
||||
return false;
|
||||
if ((address.Address & 0xac100000) == 0xac100000) // 172.16/12
|
||||
return false;
|
||||
|
||||
// we only support IPv4 in prod :(
|
||||
return host.AddressList.Any(address => address.AddressFamily is AddressFamily.InterNetwork);
|
||||
}
|
||||
|
||||
if (host.AddressList.Any(address => address.IsIPv6LinkLocal))
|
||||
return false;
|
||||
|
||||
// we only support IPv4 in prod :(
|
||||
return host.AddressList.Any(address => address.AddressFamily is AddressFamily.InterNetwork);
|
||||
}
|
||||
}
|
@@ -1,237 +1,235 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Autofac;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace PluralKit.Core
|
||||
namespace PluralKit.Core;
|
||||
|
||||
public class DispatchService
|
||||
{
|
||||
public class DispatchService
|
||||
private readonly HttpClient _client = new();
|
||||
private readonly ILogger _logger;
|
||||
private readonly ILifetimeScope _provider;
|
||||
|
||||
public DispatchService(ILogger logger, ILifetimeScope provider, CoreConfig cfg)
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly ILifetimeScope _provider;
|
||||
private readonly HttpClient _client = new();
|
||||
public DispatchService(ILogger logger, ILifetimeScope provider, CoreConfig cfg)
|
||||
_logger = logger;
|
||||
_provider = provider;
|
||||
}
|
||||
|
||||
public async Task DoPostRequest(SystemId system, string webhookUrl, HttpContent content, bool isVerify = false)
|
||||
{
|
||||
if (!await DispatchExt.ValidateUri(webhookUrl))
|
||||
{
|
||||
_logger = logger;
|
||||
_provider = provider;
|
||||
_logger.Warning(
|
||||
"Failed to dispatch webhook for system {SystemId}: URL is invalid or points to a private address",
|
||||
system);
|
||||
return;
|
||||
}
|
||||
|
||||
public async Task DoPostRequest(SystemId system, string webhookUrl, HttpContent content, bool isVerify = false)
|
||||
try
|
||||
{
|
||||
if (!await DispatchExt.ValidateUri(webhookUrl))
|
||||
{
|
||||
_logger.Warning("Failed to dispatch webhook for system {SystemId}: URL is invalid or points to a private address", system);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await _client.PostAsync(webhookUrl, content);
|
||||
}
|
||||
catch (HttpRequestException e)
|
||||
{
|
||||
if (isVerify)
|
||||
throw;
|
||||
else
|
||||
_logger.Error("Could not dispatch webhook request!", e);
|
||||
}
|
||||
await _client.PostAsync(webhookUrl, content);
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, UpdateDispatchData data)
|
||||
catch (HttpRequestException e)
|
||||
{
|
||||
if (data.EventData != null && data.EventData.Count == 0)
|
||||
return;
|
||||
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for system {SystemId}", systemId);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(MemberId memberId, UpdateDispatchData data)
|
||||
{
|
||||
if (data.EventData != null && data.EventData.Count == 0)
|
||||
return;
|
||||
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var member = await repo.GetMember(memberId);
|
||||
var system = await repo.GetSystem(member.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = member.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for member {MemberId} (system {SystemId})", memberId, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(GroupId groupId, UpdateDispatchData data)
|
||||
{
|
||||
if (data.EventData != null && data.EventData.Count == 0)
|
||||
return;
|
||||
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var group = await repo.GetGroup(groupId);
|
||||
var system = await repo.GetSystem(group.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = group.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for group {GroupId} (system {SystemId})", groupId, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(Dictionary<GroupId, MemberId> dict, DispatchEvent evt)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var g = await repo.GetGroup(dict.Keys.FirstOrDefault());
|
||||
var system = await repo.GetSystem(g.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_GROUP_MEMBERS;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
|
||||
|
||||
_logger.Debug("Dispatching webhook for group member update (system {SystemId})", system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SwitchId swId, UpdateDispatchData data)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var sw = await repo.GetSwitch(swId);
|
||||
var system = await repo.GetSystem(sw.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = sw.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for switch {SwitchId} (system {SystemId})", sw.Id, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, PKMessage newMessage)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var member = await repo.GetMember(newMessage.Member);
|
||||
|
||||
var fullMessage = new FullMessage
|
||||
{
|
||||
Message = newMessage,
|
||||
Member = member,
|
||||
System = system
|
||||
};
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.CREATE_MESSAGE;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EventData = fullMessage.ToJson(LookupContext.ByOwner, APIVersion.V2);
|
||||
|
||||
_logger.Debug("Dispatching webhook for message create (system {SystemId})", system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, ulong guild_id, SystemGuildPatch patch)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
string memberRef = null;
|
||||
if (patch.AutoproxyMember.Value != null)
|
||||
{
|
||||
var member = await repo.GetMember(patch.AutoproxyMember.Value.Value);
|
||||
memberRef = member.Uuid.ToString();
|
||||
}
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_SYSTEM_GUILD;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EventData = patch.ToJson(memberRef, guild_id);
|
||||
|
||||
_logger.Debug("Dispatching webhook for system {SystemId} in guild {GuildId}", system.Id, guild_id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(MemberId memberId, ulong guild_id, MemberGuildPatch patch)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var member = await repo.GetMember(memberId);
|
||||
var system = await repo.GetSystem(member.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_MEMBER_GUILD;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = member.Uuid.ToString();
|
||||
data.EventData = patch.ToJson(guild_id);
|
||||
|
||||
_logger.Debug("Dispatching webhook for member {MemberId} (system {SystemId}) in guild {GuildId}", member.Id, system.Id, guild_id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(ulong accountId, AccountPatch patch)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystemByAccount(accountId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_MEMBER_GUILD;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.EntityId = accountId.ToString();
|
||||
data.EventData = patch.ToJson();
|
||||
|
||||
_logger.Debug("Dispatching webhook for account {AccountId} (system {SystemId})", accountId, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, Guid uuid, DispatchEvent evt)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = evt;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for entity delete (system {SystemId})", system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
if (isVerify)
|
||||
throw;
|
||||
_logger.Error("Could not dispatch webhook request!", e);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, UpdateDispatchData data)
|
||||
{
|
||||
if (data.EventData != null && data.EventData.Count == 0)
|
||||
return;
|
||||
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for system {SystemId}", systemId);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(MemberId memberId, UpdateDispatchData data)
|
||||
{
|
||||
if (data.EventData != null && data.EventData.Count == 0)
|
||||
return;
|
||||
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var member = await repo.GetMember(memberId);
|
||||
var system = await repo.GetSystem(member.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = member.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for member {MemberId} (system {SystemId})", memberId, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(GroupId groupId, UpdateDispatchData data)
|
||||
{
|
||||
if (data.EventData != null && data.EventData.Count == 0)
|
||||
return;
|
||||
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var group = await repo.GetGroup(groupId);
|
||||
var system = await repo.GetSystem(group.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = group.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for group {GroupId} (system {SystemId})", groupId, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(Dictionary<GroupId, MemberId> dict, DispatchEvent evt)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var g = await repo.GetGroup(dict.Keys.FirstOrDefault());
|
||||
var system = await repo.GetSystem(g.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_GROUP_MEMBERS;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
|
||||
|
||||
_logger.Debug("Dispatching webhook for group member update (system {SystemId})", system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SwitchId swId, UpdateDispatchData data)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var sw = await repo.GetSwitch(swId);
|
||||
var system = await repo.GetSystem(sw.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = sw.Uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for switch {SwitchId} (system {SystemId})", sw.Id, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, PKMessage newMessage)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var member = await repo.GetMember(newMessage.Member);
|
||||
|
||||
var fullMessage = new FullMessage
|
||||
{
|
||||
Message = newMessage,
|
||||
Member = member,
|
||||
System = system
|
||||
};
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.CREATE_MESSAGE;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EventData = fullMessage.ToJson(LookupContext.ByOwner, APIVersion.V2);
|
||||
|
||||
_logger.Debug("Dispatching webhook for message create (system {SystemId})", system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, ulong guild_id, SystemGuildPatch patch)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
string memberRef = null;
|
||||
if (patch.AutoproxyMember.Value != null)
|
||||
{
|
||||
var member = await repo.GetMember(patch.AutoproxyMember.Value.Value);
|
||||
memberRef = member.Uuid.ToString();
|
||||
}
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_SYSTEM_GUILD;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EventData = patch.ToJson(memberRef, guild_id);
|
||||
|
||||
_logger.Debug("Dispatching webhook for system {SystemId} in guild {GuildId}", system.Id, guild_id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(MemberId memberId, ulong guild_id, MemberGuildPatch patch)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var member = await repo.GetMember(memberId);
|
||||
var system = await repo.GetSystem(member.System);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_MEMBER_GUILD;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = member.Uuid.ToString();
|
||||
data.EventData = patch.ToJson(guild_id);
|
||||
|
||||
_logger.Debug(
|
||||
"Dispatching webhook for member {MemberId} (system {SystemId}) in guild {GuildId}",
|
||||
member.Id, system.Id, guild_id
|
||||
);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(ulong accountId, AccountPatch patch)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystemByAccount(accountId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = DispatchEvent.UPDATE_MEMBER_GUILD;
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.EntityId = accountId.ToString();
|
||||
data.EventData = patch.ToJson();
|
||||
|
||||
_logger.Debug("Dispatching webhook for account {AccountId} (system {SystemId})", accountId, system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
|
||||
public async Task Dispatch(SystemId systemId, Guid uuid, DispatchEvent evt)
|
||||
{
|
||||
var repo = _provider.Resolve<ModelRepository>();
|
||||
var system = await repo.GetSystem(systemId);
|
||||
if (system.WebhookUrl == null)
|
||||
return;
|
||||
|
||||
var data = new UpdateDispatchData();
|
||||
data.Event = evt;
|
||||
|
||||
data.SigningToken = system.WebhookToken;
|
||||
data.SystemId = system.Uuid.ToString();
|
||||
data.EntityId = uuid.ToString();
|
||||
|
||||
_logger.Debug("Dispatching webhook for entity delete (system {SystemId})", system.Id);
|
||||
await DoPostRequest(system.Id, system.WebhookUrl, data.GetPayloadBody());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user