Files
hermes-server/Requests/UpdateGroupPermission.cs

48 lines
1.8 KiB
C#

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<RequestResult> Grant(Channel channel, IDictionary<string, object> data)
{
var id = data["id"].ToString()!;
Guid groupId = new Guid(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,
};
if (!channel.GroupPermissions.Get().Values.Any(p => p.GroupId == groupId && p.Path == path))
{
return Task.FromResult(RequestResult.Failed("Permission does not exist."));
}
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."));
}
}
}