More API migration
● Added a template for posting a message to a server ● Minor changes to API structure to provide better stability with the different types ● Started fixing mistakes in the SocketBulkMessage request.
This commit is contained in:
parent
7a157fdc5d
commit
04d9dda073
@ -12,7 +12,7 @@ public class AppConfig
|
|||||||
public byte DataId { get; set; } = 0;
|
public byte DataId { get; set; } = 0;
|
||||||
[JsonInclude]
|
[JsonInclude]
|
||||||
[JsonPropertyName("server_epoch")]
|
[JsonPropertyName("server_epoch")]
|
||||||
public long ServerEpoch { get; set; } = Luski.Info.GetTimestampFromEpoch(0);
|
public DateTime ServerEpoch { get; set; } = DateTime.UtcNow.Date;
|
||||||
[JsonInclude]
|
[JsonInclude]
|
||||||
[JsonPropertyName("database")]
|
[JsonPropertyName("database")]
|
||||||
public string Database { get; set; } = "Some database name";
|
public string Database { get; set; } = "Some database name";
|
||||||
|
@ -80,9 +80,9 @@ public static class Luski
|
|||||||
|
|
||||||
// public static readonly DateTime ServerEpoch = new(2023, 1, 1, 0, 0, 0, 0);
|
// public static readonly DateTime ServerEpoch = new(2023, 1, 1, 0, 0, 0, 0);
|
||||||
|
|
||||||
public static long GetTimestampFromEpoch(long Epoch)
|
public static long GetTimestampFromEpoch(DateTime Epoch)
|
||||||
{
|
{
|
||||||
double ts = Math.Round(DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalMilliseconds - Epoch, 0);
|
double ts = Math.Round(DateTime.UtcNow.Subtract(Epoch).TotalMilliseconds, 0);
|
||||||
return long.Parse(ts.ToString().Replace(".", string.Empty));
|
return long.Parse(ts.ToString().Replace(".", string.Empty));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ public static class Luski
|
|||||||
Timestamp = ID >> 20;
|
Timestamp = ID >> 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Snowflake GenerateSnowflake(long Epoch)
|
public static Snowflake GenerateSnowflake(DateTime Epoch)
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
if (i > 0b_1111_1111_1111) i = 0;
|
if (i > 0b_1111_1111_1111) i = 0;
|
||||||
|
23
LuskiServer/Classes/ServerComs/MessageEvent.cs
Normal file
23
LuskiServer/Classes/ServerComs/MessageEvent.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using LuskiServer.Interfaces.ServerComs;
|
||||||
|
|
||||||
|
namespace LuskiServer.Classes.ServerComs;
|
||||||
|
|
||||||
|
public class MessageEvent : IServerEvent
|
||||||
|
{
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("user_id")]
|
||||||
|
public long UserID { get; set; }
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("channel_id")]
|
||||||
|
public long ChannelID { get; set; }
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("context")]
|
||||||
|
public string Base64Context { get; set; }
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("id")]
|
||||||
|
public long ID { get; set; }
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("files")]
|
||||||
|
public long[] Files { get; set; }
|
||||||
|
}
|
16
LuskiServer/Classes/ServerComs/ServerEvent.cs
Normal file
16
LuskiServer/Classes/ServerComs/ServerEvent.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using LuskiServer.Enums.ServerComs;
|
||||||
|
using LuskiServer.Interfaces.ServerComs;
|
||||||
|
|
||||||
|
namespace LuskiServer.Classes.ServerComs;
|
||||||
|
|
||||||
|
public class ServerEvent
|
||||||
|
{
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("type")]
|
||||||
|
public DataType Type { get; set; }
|
||||||
|
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("data")]
|
||||||
|
public IServerEvent Data { get; set; }
|
||||||
|
}
|
23
LuskiServer/Classes/ServerComs/ServerSendSendEvent.cs
Normal file
23
LuskiServer/Classes/ServerComs/ServerSendSendEvent.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using LuskiServer.Enums.ServerComs;
|
||||||
|
|
||||||
|
namespace LuskiServer.Classes.ServerComs;
|
||||||
|
|
||||||
|
public class ServerSendSendEvent
|
||||||
|
{
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("data")]
|
||||||
|
public ServerEvent Data { get; set; }
|
||||||
|
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("send_type")]
|
||||||
|
public SendType SendType { get; set; }
|
||||||
|
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("id")]
|
||||||
|
public long? ID { get; set; } = null;
|
||||||
|
|
||||||
|
[JsonInclude]
|
||||||
|
[JsonPropertyName("ids")]
|
||||||
|
public long[]? IDS { get; set; } = null;
|
||||||
|
}
|
18
LuskiServer/Classes/ServerComs/WSS.cs
Normal file
18
LuskiServer/Classes/ServerComs/WSS.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using LuskiServer.Enums.ServerComs;
|
||||||
|
|
||||||
|
namespace LuskiServer.Classes.ServerComs;
|
||||||
|
|
||||||
|
public class WSS
|
||||||
|
{
|
||||||
|
public static void SendData(SendType SendType, ServerEvent Event, params long[] IDS)
|
||||||
|
{
|
||||||
|
ServerSendSendEvent SSSE = new()
|
||||||
|
{
|
||||||
|
SendType = SendType,
|
||||||
|
Data = Event
|
||||||
|
};
|
||||||
|
if (SendType == SendType.ID_Group) SSSE.IDS = IDS;
|
||||||
|
else if (SendType == SendType.ID) SSSE.ID = IDS[0];
|
||||||
|
//TODO Start work on server send code
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ namespace LuskiServer.Classes.TableDef;
|
|||||||
public static class Files
|
public static class Files
|
||||||
{
|
{
|
||||||
public static TableColumn<long> ID { get; } = new("id", true);
|
public static TableColumn<long> ID { get; } = new("id", true);
|
||||||
|
public static TableColumn<long> ChannelID { get; } = new("channel_id");
|
||||||
public static TableColumn<long> Size { get; } = new("size");
|
public static TableColumn<long> Size { get; } = new("size");
|
||||||
public static TableColumn<byte[]> Name { get; } = new("name");
|
public static TableColumn<byte[]> Name { get; } = new("name");
|
||||||
public static TableColumn<byte[]> Hash { get; } = new("hash");
|
public static TableColumn<byte[]> Hash { get; } = new("hash");
|
||||||
|
24
LuskiServer/Classes/v1/Incoming/ClientSendMessage.cs
Normal file
24
LuskiServer/Classes/v1/Incoming/ClientSendMessage.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||||
|
|
||||||
|
namespace LuskiServer.Classes.v1.Incoming;
|
||||||
|
|
||||||
|
public class ClientSendMessage
|
||||||
|
{
|
||||||
|
[JsonInclude]
|
||||||
|
[BindRequired]
|
||||||
|
[JsonRequired]
|
||||||
|
[JsonPropertyName("channel_id")]
|
||||||
|
public long ChannelID { get; set; }
|
||||||
|
[JsonInclude]
|
||||||
|
[BindRequired]
|
||||||
|
[JsonRequired]
|
||||||
|
[JsonPropertyName("context")]
|
||||||
|
public string Base64Context { get; set; }
|
||||||
|
|
||||||
|
[JsonInclude]
|
||||||
|
[BindRequired]
|
||||||
|
[JsonRequired]
|
||||||
|
[JsonPropertyName("files")]
|
||||||
|
public long[] Files { get; set; }
|
||||||
|
}
|
@ -15,6 +15,7 @@ namespace LuskiServer.Controllers.v1;
|
|||||||
public class SocketBulkMessageController : ControllerBase
|
public class SocketBulkMessageController : ControllerBase
|
||||||
{
|
{
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
|
[Route(Luski.Info.Routes.Default.Base)]
|
||||||
public IActionResult Get()
|
public IActionResult Get()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
62
LuskiServer/Controllers/v1/SocketMessageController.cs
Normal file
62
LuskiServer/Controllers/v1/SocketMessageController.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
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;
|
||||||
|
//TODO Add a check system for channel access
|
||||||
|
//if (Luski.HasAccessToChannel(ID, data.ChannelID))
|
||||||
|
{
|
||||||
|
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(EncoderType.UTF8),
|
||||||
|
Messages.EncryptionType.CreateParameter(EncryptionType.RSA));
|
||||||
|
//TODO Get all ID for members to send to
|
||||||
|
WSS.SendData(SendType.ID_Group, new ServerEvent()
|
||||||
|
{
|
||||||
|
Type = DataType.MessageCreate,
|
||||||
|
Data = MessageEvent
|
||||||
|
}, Array.Empty<long>());
|
||||||
|
}
|
||||||
|
Response.StatusCode = 201;
|
||||||
|
return null!;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return this.ShowError(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,5 +2,5 @@ namespace LuskiServer.Enums;
|
|||||||
|
|
||||||
public enum ChannelType : short
|
public enum ChannelType : short
|
||||||
{
|
{
|
||||||
Default = 0
|
TextAndVoice = 0
|
||||||
}
|
}
|
6
LuskiServer/Enums/ServerComs/DataType.cs
Normal file
6
LuskiServer/Enums/ServerComs/DataType.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace LuskiServer.Enums.ServerComs;
|
||||||
|
|
||||||
|
public enum DataType
|
||||||
|
{
|
||||||
|
MessageCreate
|
||||||
|
}
|
8
LuskiServer/Enums/ServerComs/SendType.cs
Normal file
8
LuskiServer/Enums/ServerComs/SendType.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace LuskiServer.Enums.ServerComs;
|
||||||
|
|
||||||
|
public enum SendType
|
||||||
|
{
|
||||||
|
All,
|
||||||
|
ID_Group,
|
||||||
|
ID
|
||||||
|
}
|
6
LuskiServer/Interfaces/ServerComs/IServerEvent.cs
Normal file
6
LuskiServer/Interfaces/ServerComs/IServerEvent.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace LuskiServer.Interfaces.ServerComs;
|
||||||
|
|
||||||
|
public interface IServerEvent
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -14,7 +14,7 @@ using Swashbuckle.AspNetCore.SwaggerGen;
|
|||||||
[assembly: Microsoft.AspNetCore.Mvc.ApiController]
|
[assembly: Microsoft.AspNetCore.Mvc.ApiController]
|
||||||
|
|
||||||
Luski.Config = Luski.GetSettings("/etc/luskiserver/app.json", AppConfigContext.Default.AppConfig, true);
|
Luski.Config = Luski.GetSettings("/etc/luskiserver/app.json", AppConfigContext.Default.AppConfig, true);
|
||||||
Console.WriteLine($"Server starting with starting epoch of {DateTime.UnixEpoch.AddMilliseconds(Luski.Config.ServerEpoch).ToLocalTime()}");
|
Console.WriteLine($"Server starting with starting epoch of {Luski.Config.ServerEpoch.ToLocalTime()} and current time of {DateTime.UtcNow.ToLocalTime()}");
|
||||||
Luski.Database = new Database(Luski.Config.Address,
|
Luski.Database = new Database(Luski.Config.Address,
|
||||||
Luski.Config.Database,
|
Luski.Config.Database,
|
||||||
Luski.Config.Username,
|
Luski.Config.Username,
|
||||||
@ -99,7 +99,7 @@ if (!Tables.Categories.TryRead(Categories.ID, out _, Categories.ID.CreateParamet
|
|||||||
);
|
);
|
||||||
Tables.Channels.Insert(
|
Tables.Channels.Insert(
|
||||||
Channels.ID.CreateParameter(0),
|
Channels.ID.CreateParameter(0),
|
||||||
Channels.Type.CreateParameter(ChannelType.Default),
|
Channels.Type.CreateParameter(ChannelType.TextAndVoice),
|
||||||
Channels.Description.CreateParameter(Encoding.UTF8.GetBytes("Default chat for you to use in your new server")),
|
Channels.Description.CreateParameter(Encoding.UTF8.GetBytes("Default chat for you to use in your new server")),
|
||||||
Channels.Name.CreateParameter(Encoding.UTF8.GetBytes("Default Channel")),
|
Channels.Name.CreateParameter(Encoding.UTF8.GetBytes("Default Channel")),
|
||||||
Channels.Key.CreateParameter(Luski.Encryption.Keys.PublicKey),
|
Channels.Key.CreateParameter(Luski.Encryption.Keys.PublicKey),
|
||||||
|
Loading…
Reference in New Issue
Block a user