using HermesSocketLibrary.Requests.Messages; using HermesSocketServer.Models; using ILogger = Serilog.ILogger; namespace HermesSocketServer.Requests { public class UpdateGroupPermission : IRequest { public string Name => "update_group_permission"; public string[] RequiredKeys => ["id", "group", "path", "allow"]; private ILogger _logger; public UpdateGroupPermission(ILogger logger) { _logger = logger; } public Task Grant(Channel channel, IDictionary data) { var id = data["id"].ToString()!; string groupId = data["group"].ToString()!; string path = data["path"].ToString()!; bool? allow = bool.TryParse(data["allow"].ToString()!, out bool a) ? a : null; var permission = new GroupPermission() { Id = id.ToString(), UserId = channel.Id, GroupId = groupId, Path = path, Allow = allow, }; bool result = channel.GroupPermissions.Modify(id.ToString(), permission); if (result) { _logger.Information($"Updated group permission on channel [permission id: {id}][group id: {groupId}][path: {path}][allow: {allow}][channel: {channel.Id}]"); return Task.FromResult(RequestResult.Successful(permission)); } return Task.FromResult(RequestResult.Failed("Something went wrong when updating the cache.")); } } }