Files
LuskiServer/LuskiServer/Controllers/v1/SocketMessageController.cs
JacobTech 612ad59547 Permission Storage
● When permissions are applied, it will be done recursively. This will help speed up the code for general permission checks.

● This new layout also makes it faster to get the members who have access to a given channel.

● This push also removed a pointless role override.
2023-05-21 21:38:55 -04:00

58 lines
2.3 KiB
C#

using Asp.Versioning;
using JacobTechEncryption.Enums;
using LuskiServer.Classes;
using LuskiServer.Classes.ServerComs;
using LuskiServer.Classes.TableDef;
using LuskiServer.Classes.v1.Incoming;
using LuskiServer.Classes.WebTypes;
using LuskiServer.Enums;
using LuskiServer.Enums.ServerComs;
using Microsoft.AspNetCore.Mvc;
namespace LuskiServer.Controllers.v1;
[ApiVersion(1)]
[ApiController]
public class SocketMessageController : ControllerBase
{
[HttpPost]
[DisableRequestSizeLimit]
[Route(Luski.Info.Routes.Default.Base)]
public async Task<IActionResult> Post([FromBody]ClientSendMessage data)
{
try
{
if (!this.CanTokenRequest(out long ID, out IActionResult? toc) && toc != null) return toc;
if (!Luski.HasAccessToChannel(ID, data.ChannelID, ServerPermissions.SendMessages)) return this.ResponseToResult(new HTTPResponse() { error = ErrorCode.Forbidden });
Luski.Snowflake Id = Luski.Snowflake.GenerateSnowflake(Tables.Channels.Read(Channels.Epoch, Channels.ID.CreateParameter(data.ChannelID)));
ChannelType type = Tables.Channels.Read(Channels.Type, Channels.ID.CreateParameter(data.ChannelID));
MessageEvent MessageEvent = new()
{
UserID = ID,
ChannelID = data.ChannelID,
Base64Context = data.Base64Context,
ID = Id.ID
};
Tables.Messages.Insert(
Messages.ChannelID.CreateParameter(data.ChannelID),
Messages.ID.CreateParameter(Id.ID),
Messages.AuthorID.CreateParameter(ID),
Messages.Context.CreateParameter(Convert.FromBase64String(data.Base64Context)),
Messages.TimeStamp.CreateParameter(Id.Timestamp),
Messages.Files.CreateParameter(data.Files),
Messages.EncoderType.CreateParameter(data.Encoding),
Messages.EncryptionType.CreateParameter(data.Encryption));
WSS.SendData(SendType.ID_Group, new ServerEvent()
{
Type = DataType.MessageCreate,
Data = MessageEvent
}, Luski.GetChannelBroadcastMembers(data.ChannelID));
Response.StatusCode = 201;
return null!;
}
catch (Exception ex)
{
return this.ShowError(ex);
}
}
}