216 lines
8.5 KiB
C#
216 lines
8.5 KiB
C#
using Asp.Versioning;
|
|
using Luski.Shared.PublicServers.V1.ClientToServer.HTTP;
|
|
using Luski.Shared.PublicServers.V1.Enums;
|
|
using Luski.Shared.PublicServers.V1.ServerToClient.HTTP;
|
|
using Luski.Shared.PublicServers.V1.ServerToClient.WSS;
|
|
using Luski.Shared.PublicServers.V1.Shared;
|
|
using LuskiServer.Classes;
|
|
using LuskiServer.Classes.ServerComs;
|
|
using LuskiServer.Classes.TableDef;
|
|
using LuskiServer.Enums.ServerComs;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using ServerDatabase;
|
|
|
|
namespace LuskiServer.Controllers.v1;
|
|
|
|
[ApiVersion(1)]
|
|
[ApiController]
|
|
public class SocketRoleController : ControllerBase
|
|
{
|
|
[HttpPost]
|
|
[Route(LuskiFunctions.Info.Routes.Default.Base)]
|
|
public IActionResult Post([FromBody]RolePostCTS Role)
|
|
{
|
|
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
|
LuskiFunctions.Snowflake sf = LuskiFunctions.Snowflake.GenerateSnowflake();
|
|
Tables.Roles.Insert(
|
|
Roles.ID.CreateParameter(sf.ID),
|
|
Roles.Description.CreateParameter(Role.Description),
|
|
Roles.DisplayName.CreateParameter(Role.DisplayName),
|
|
Roles.ColorType.CreateParameter(Role.ColorType),
|
|
Roles.Color.CreateParameter(Convert.FromHexString(Role.Color)),
|
|
Roles.ServerPermissions.CreateParameter(Role.ServerPermissions),
|
|
Roles.Index.CreateParameter(Role.Index));
|
|
WSS.SendData(SendType.All, new ServerEvent()
|
|
{
|
|
Type = DataType.Role,
|
|
Data = new RoleEvent()
|
|
{
|
|
ID = sf.ID,
|
|
ServerPermissions = Role.ServerPermissions,
|
|
Description = Role.Description,
|
|
DisplayName = Role.DisplayName,
|
|
Index = Role.Index,
|
|
ColorType = Role.ColorType,
|
|
Color = Role.Color
|
|
}
|
|
});
|
|
return this.ResponseToResult(new RoleSTC()
|
|
{
|
|
ID = sf.ID,
|
|
ServerPermissions = Role.ServerPermissions,
|
|
Description = Role.Description,
|
|
DisplayName = Role.DisplayName,
|
|
Index = Role.Index,
|
|
Members = Array.Empty<long>(),
|
|
ColorType = Role.ColorType,
|
|
Color = Role.Color
|
|
});
|
|
}
|
|
|
|
[HttpPatch]
|
|
[Route(LuskiFunctions.Info.Routes.Default.Base)]
|
|
public IActionResult Patch([FromBody]RolePatchCTS Role)
|
|
{
|
|
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
|
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(Role.ID))) return this.ShowError(ErrorCode.Forbidden, "Role does not exist");
|
|
CommandHandler<RoleRow> command = Tables.Roles.CreateCommand().WithFilter(Roles.ID, Role.ID);
|
|
RoleEvent re = new()
|
|
{
|
|
ID = row.ID
|
|
};
|
|
if (Role.ServerPermissions is not null)
|
|
{
|
|
command = command.WithValue(Roles.ServerPermissions, Role.ServerPermissions.Value);
|
|
row.ServerPermissions = Role.ServerPermissions.Value;
|
|
re.ServerPermissions = Role.ServerPermissions.Value;
|
|
}
|
|
if (Role.Description is not null)
|
|
{
|
|
command = command.WithValue(Roles.Description, Role.Description);
|
|
row.Description = Role.Description;
|
|
re.Description = Role.Description;
|
|
}
|
|
if (Role.Index is not null)
|
|
{
|
|
command = command.WithValue(Roles.Index, Role.Index.Value);
|
|
row.Index = Role.Index.Value;
|
|
re.Index = Role.Index.Value;
|
|
}
|
|
if (Role.DisplayName is not null)
|
|
{
|
|
command = command.WithValue(Roles.DisplayName, Role.DisplayName);
|
|
row.DisplayName = Role.DisplayName;
|
|
re.DisplayName = Role.DisplayName;
|
|
}
|
|
if (Role.ColorType is not null)
|
|
{
|
|
command = command.WithValue(Roles.ColorType, Role.ColorType.Value);
|
|
row.ColorType = Role.ColorType.Value;
|
|
re.ColorType = Role.ColorType.Value;
|
|
}
|
|
if (Role.Color is not null)
|
|
{
|
|
command = command.WithValue(Roles.Color, Convert.FromHexString(Role.Color));
|
|
row.Color = Convert.FromHexString(Role.Color);
|
|
re.Color = Role.Color;
|
|
}
|
|
command.Update();
|
|
WSS.SendData(SendType.All, new ServerEvent()
|
|
{
|
|
Type = DataType.Role,
|
|
Data = re
|
|
});
|
|
return this.ResponseToResult(new RoleSTC()
|
|
{
|
|
ID = row.ID,
|
|
ServerPermissions = row.ServerPermissions,
|
|
Description = row.Description,
|
|
DisplayName = row.DisplayName,
|
|
Index = row.Index,
|
|
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(row.ID)),
|
|
ColorType = row.ColorType,
|
|
Color = Convert.ToHexString(row.Color)
|
|
});
|
|
}
|
|
|
|
[HttpPatch]
|
|
[Route(LuskiFunctions.Info.Routes.Default.Base + "/Members")]
|
|
public IActionResult MemberPatch([FromBody]RoleMembersPatchCTS Role)
|
|
{
|
|
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
|
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(Role.ID))) return this.ShowError(ErrorCode.Forbidden, "Role does not exist");
|
|
LuskiFunctions.Database.ExecuteNonQuery($"DELETE FROM {Tables.RoleMembers.Name} WHERE {RoleMembers.Role.Name} = {Role.ID} AND {RoleMembers.User.Name} IN ({string.Join(", ", Role.RemovedMembers)})");
|
|
foreach (long am in Role.AddedMembers)
|
|
{
|
|
try
|
|
{
|
|
Tables.RoleMembers.Insert(RoleMembers.Role.CreateParameter(Role.ID), RoleMembers.User.CreateParameter(am));
|
|
}
|
|
catch
|
|
{
|
|
//ignore
|
|
}
|
|
}
|
|
WSS.SendData(SendType.All, new ServerEvent()
|
|
{
|
|
Type = DataType.RoleMember,
|
|
Data = new RoleEvent()
|
|
{
|
|
ID = row.ID,
|
|
ServerPermissions = row.ServerPermissions,
|
|
Description = row.Description,
|
|
DisplayName = row.DisplayName,
|
|
Index = row.Index,
|
|
Color = Convert.ToHexString(row.Color)
|
|
}
|
|
});
|
|
return this.ResponseToResult(new RoleSTC()
|
|
{
|
|
ID = row.ID,
|
|
ServerPermissions = row.ServerPermissions,
|
|
Description = row.Description,
|
|
DisplayName = row.DisplayName,
|
|
Index = row.Index,
|
|
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(row.ID)),
|
|
Color = Convert.ToHexString(row.Color)
|
|
});
|
|
}
|
|
|
|
[HttpGet]
|
|
[Route(LuskiFunctions.Info.Routes.Default.Base)]
|
|
public IActionResult Get([FromQuery(Name = "id")]long id)
|
|
{
|
|
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
|
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(id))) return this.ShowError(ErrorCode.Forbidden, "Role does not exist");
|
|
return this.ResponseToResult(new RoleSTC()
|
|
{
|
|
ID = row.ID,
|
|
ServerPermissions = row.ServerPermissions,
|
|
Description = row.Description,
|
|
DisplayName = row.DisplayName,
|
|
Index = row.Index,
|
|
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(row.ID)),
|
|
ColorType = row.ColorType,
|
|
Color = Convert.ToHexString(row.Color)
|
|
});
|
|
}
|
|
|
|
[HttpGet]
|
|
[Route(LuskiFunctions.Info.Routes.Default.Base + "/GetAll")]
|
|
public IActionResult GetAll()
|
|
{
|
|
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
|
|
RoleRow[] rows = Tables.Roles.ReadRows();
|
|
|
|
List<RoleSTC> r = new();
|
|
for (int i = 0; i < rows.Length; i++)
|
|
{
|
|
r.Add(new()
|
|
{
|
|
ID = rows[i].ID,
|
|
ServerPermissions = rows[i].ServerPermissions,
|
|
Description = rows[i].Description,
|
|
DisplayName = rows[i].DisplayName,
|
|
Index = rows[i].Index,
|
|
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(rows[i].ID)),
|
|
ColorType = rows[i].ColorType,
|
|
Color = Convert.ToHexString(rows[i].Color)
|
|
});
|
|
}
|
|
return this.ResponseToResult(new RolesSTC()
|
|
{
|
|
Roles = r.ToArray()
|
|
});
|
|
}
|
|
} |