diff --git a/Hermes/Socket/Requests/CreateGroupPermissionAck.cs b/Hermes/Socket/Requests/CreateGroupPermissionAck.cs new file mode 100644 index 0000000..ce16dd9 --- /dev/null +++ b/Hermes/Socket/Requests/CreateGroupPermissionAck.cs @@ -0,0 +1,52 @@ +using System.Text.Json; +using HermesSocketLibrary.Requests.Messages; +using Serilog; +using TwitchChatTTS.Chat.Groups; +using TwitchChatTTS.Chat.Groups.Permissions; + +namespace TwitchChatTTS.Hermes.Socket.Requests +{ + public class CreateGroupPermissionAck : IRequestAck + { + public string Name => "create_group_permission"; + private readonly IChatterGroupManager _groups; + private readonly IGroupPermissionManager _permissions; + private readonly JsonSerializerOptions _options; + private readonly ILogger _logger; + + public CreateGroupPermissionAck(IChatterGroupManager groups, IGroupPermissionManager permissions, JsonSerializerOptions options, ILogger logger) + { + _groups = groups; + _permissions = permissions; + _options = options; + _logger = logger; + } + + public void Acknowledge(string requestId, string? json, IDictionary? requestData) + { + if (string.IsNullOrWhiteSpace(json)) + { + _logger.Warning($"Group JSON data is null."); + return; + } + + var permission = JsonSerializer.Deserialize(json, _options); + if (permission == null) + { + _logger.Warning($"Permission data is null."); + return; + } + + var group = _groups.Get(permission.GroupId.ToString()); + if (group == null) + { + _logger.Warning($"Group id does not exist [group id: {permission.GroupId}][permission id: {permission.Id}]"); + return; + } + + _logger.Debug($"Adding permission to group [permission id: {permission.Id}][group id: {permission.GroupId}][path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}]"); + _permissions.Set(permission.Path, permission.Allow); + _logger.Information($"Permission has been added to group [path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}][group name: {group.Name}]"); + } + } +} \ No newline at end of file diff --git a/Hermes/Socket/Requests/DeleteGroupPermissionAck.cs b/Hermes/Socket/Requests/DeleteGroupPermissionAck.cs new file mode 100644 index 0000000..2192a4d --- /dev/null +++ b/Hermes/Socket/Requests/DeleteGroupPermissionAck.cs @@ -0,0 +1,64 @@ +using System.Text.Json; +using HermesSocketLibrary.Requests.Messages; +using Serilog; +using TwitchChatTTS.Chat.Groups; +using TwitchChatTTS.Chat.Groups.Permissions; + +namespace TwitchChatTTS.Hermes.Socket.Requests +{ + public class DeleteGroupPermissionAck : IRequestAck + { + public string Name => "delete_group_permission"; + private readonly IChatterGroupManager _groups; + private readonly IGroupPermissionManager _permissions; + private readonly JsonSerializerOptions _options; + private readonly ILogger _logger; + + public DeleteGroupPermissionAck(IChatterGroupManager groups, IGroupPermissionManager permissions, JsonSerializerOptions options, ILogger logger) + { + _groups = groups; + _permissions = permissions; + _options = options; + _logger = logger; + } + + public void Acknowledge(string requestId, string? json, IDictionary? requestData) + { + if (requestData == null) + { + _logger.Warning("Request data is null."); + return; + } + + if (!requestData.TryGetValue("id", out var permissionId)) + { + _logger.Warning($"Permission Id could not be found."); + return; + } + + if (string.IsNullOrWhiteSpace(json)) + { + _logger.Warning($"Group JSON data is null."); + return; + } + + var permission = JsonSerializer.Deserialize(json, _options); + if (permission == null) + { + _logger.Warning($"Permission data is null."); + return; + } + + var group = _groups.Get(permission.GroupId.ToString()); + if (group == null) + { + _logger.Warning($"Group id does not exist [group id: {permission.GroupId}][permission id: {permission.Id}]"); + return; + } + + _logger.Debug($"Removing permission from group [permission id: {permission.Id}][group id: {permission.GroupId}][path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}]"); + _permissions.Remove(permissionId.ToString()!); + _logger.Information($"Permission has been removed from group [path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}][group name: {group.Name}]"); + } + } +} \ No newline at end of file diff --git a/Hermes/Socket/Requests/UpdateGroupPermissionAck.cs b/Hermes/Socket/Requests/UpdateGroupPermissionAck.cs new file mode 100644 index 0000000..818b433 --- /dev/null +++ b/Hermes/Socket/Requests/UpdateGroupPermissionAck.cs @@ -0,0 +1,52 @@ +using System.Text.Json; +using HermesSocketLibrary.Requests.Messages; +using Serilog; +using TwitchChatTTS.Chat.Groups; +using TwitchChatTTS.Chat.Groups.Permissions; + +namespace TwitchChatTTS.Hermes.Socket.Requests +{ + public class UpdateGroupPermissionAck : IRequestAck + { + public string Name => "update_group_permission"; + private readonly IChatterGroupManager _groups; + private readonly IGroupPermissionManager _permissions; + private readonly JsonSerializerOptions _options; + private readonly ILogger _logger; + + public UpdateGroupPermissionAck(IChatterGroupManager groups, IGroupPermissionManager permissions, JsonSerializerOptions options, ILogger logger) + { + _groups = groups; + _permissions = permissions; + _options = options; + _logger = logger; + } + + public void Acknowledge(string requestId, string? json, IDictionary? requestData) + { + if (string.IsNullOrWhiteSpace(json)) + { + _logger.Warning($"Group JSON data is null."); + return; + } + + var permission = JsonSerializer.Deserialize(json, _options); + if (permission == null) + { + _logger.Warning($"Permission data is null."); + return; + } + + var group = _groups.Get(permission.GroupId.ToString()); + if (group == null) + { + _logger.Warning($"Group id does not exist [group id: {permission.GroupId}][permission id: {permission.Id}]"); + return; + } + + _logger.Debug($"Updating permission to group [permission id: {permission.Id}][group id: {permission.GroupId}][path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}]"); + _permissions.Set(permission.Path, permission.Allow); + _logger.Information($"Permission on group has been updated [path: {permission.Path}][state: {permission.Allow?.ToString() ?? "Inherited"}][group name: {group.Name}]"); + } + } +} \ No newline at end of file diff --git a/Startup.cs b/Startup.cs index a8f1185..b2affb2 100644 --- a/Startup.cs +++ b/Startup.cs @@ -89,6 +89,7 @@ s.AddTransient(); s.AddSingleton(); s.AddTransient(); s.AddTransient(); +s.AddTransient(); s.AddTransient(); s.AddTransient(); s.AddTransient(); @@ -97,6 +98,7 @@ s.AddTransient(); s.AddTransient(); s.AddTransient(); s.AddTransient(); +s.AddTransient(); s.AddTransient(); s.AddTransient(); s.AddTransient(); @@ -116,6 +118,7 @@ s.AddTransient(); s.AddTransient(); s.AddTransient(); s.AddTransient(); +s.AddTransient(); s.AddTransient(); s.AddTransient(); s.AddTransient();