● 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.
58 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|
|
} |