From 5ddae1b173d7de9892f6a1fff11fc3ab560fffa1 Mon Sep 17 00:00:00 2001 From: JacobTech Date: Tue, 11 Jul 2023 13:30:48 -0400 Subject: [PATCH] Server Controller. Added a controller for server data. --- LuskiServer/Classes/TableDef/Server.cs | 19 +++++ LuskiServer/Classes/Tables.cs | 1 + .../Classes/v1/OutGoing/ServerInfoJson.cs | 10 +++ .../Controllers/v1/SocketServerController.cs | 70 +++++++++++++++++++ LuskiServer/Program.cs | 5 ++ 5 files changed, 105 insertions(+) create mode 100644 LuskiServer/Classes/TableDef/Server.cs create mode 100644 LuskiServer/Classes/v1/OutGoing/ServerInfoJson.cs create mode 100644 LuskiServer/Controllers/v1/SocketServerController.cs diff --git a/LuskiServer/Classes/TableDef/Server.cs b/LuskiServer/Classes/TableDef/Server.cs new file mode 100644 index 0000000..cdbd31f --- /dev/null +++ b/LuskiServer/Classes/TableDef/Server.cs @@ -0,0 +1,19 @@ +using LuskiServer.Enums; +using ServerDatabase; +using ServerDatabase.SourceGenerator; + +namespace LuskiServer.Classes.TableDef; + +public static class Server +{ + public static TableColumn ID { get; } = new("id", true) { DefaultValue = 0 }; + public static TableColumn PictureType { get; } = new("picture_type") {DefaultValue = Enums.PictureType.png }; + public static TableColumn Picture { get; } = new("picture") { DefaultValue = Array.Empty() }; + public static TableColumn Name { get; } = new("name") { DefaultValue = "Luski Server" }; + public static TableColumn Description { get; } = new("description") { DefaultValue = "description" }; + public static TableColumn Owner { get; } = new("owner") { DefaultValue = 0 }; +} + +[TableRow(typeof(Server))] +public partial class ServerRow +{} \ No newline at end of file diff --git a/LuskiServer/Classes/Tables.cs b/LuskiServer/Classes/Tables.cs index c6bf934..ce1fed4 100644 --- a/LuskiServer/Classes/Tables.cs +++ b/LuskiServer/Classes/Tables.cs @@ -6,6 +6,7 @@ namespace LuskiServer.Classes; public static class Tables { public static Table Users { get; } = new("users", null!); + public static Table Server { get; } = new("server", null!); public static Table Roles { get; } = new("roles", null!); public static Table Logs { get; } = new("logs", null!); public static Table Files { get; } = new("files", null!); diff --git a/LuskiServer/Classes/v1/OutGoing/ServerInfoJson.cs b/LuskiServer/Classes/v1/OutGoing/ServerInfoJson.cs new file mode 100644 index 0000000..7715430 --- /dev/null +++ b/LuskiServer/Classes/v1/OutGoing/ServerInfoJson.cs @@ -0,0 +1,10 @@ +using LuskiServer.Interfaces; + +namespace LuskiServer.Classes.v1.OutGoing; + +public class ServerInfoJson : IWebResponse +{ + public string name { get; set; } + public string description { get; set; } + public long owner { get; set; } +} \ No newline at end of file diff --git a/LuskiServer/Controllers/v1/SocketServerController.cs b/LuskiServer/Controllers/v1/SocketServerController.cs new file mode 100644 index 0000000..9cf94c9 --- /dev/null +++ b/LuskiServer/Controllers/v1/SocketServerController.cs @@ -0,0 +1,70 @@ +using System.Net.Mime; +using Asp.Versioning; +using LuskiServer.Classes; +using LuskiServer.Classes.TableDef; +using LuskiServer.Classes.v1.OutGoing; +using LuskiServer.Enums; +using Microsoft.AspNetCore.Mvc; + +namespace LuskiServer.Controllers.v1; + +[ApiVersion(1)] +[ApiController] +public class SocketServerController : ControllerBase +{ + /// + /// Server Info. + /// + /// + [HttpGet] + [ProducesResponseType(typeof(ServerInfoJson), StatusCodes.Status200OK)] + [Produces(MediaTypeNames.Application.Json)] + [Route(Luski.Info.Routes.Default.Base)] + public IActionResult Get() + { + var sr = Tables.Server.ReadRow(Server.ID.CreateParameter(0)); + return this.ResponseToResult(new ServerInfoJson() + { + name = sr.Name, + description = sr.Description, + owner = sr.Owner + }); + } + + /// + /// Returns the icon for the server. + /// + /// + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(typeof(HTTPResponse), StatusCodes.Status403Forbidden)] + [Produces(MediaTypeNames.Image.Jpeg, MediaTypeNames.Image.Gif, MediaTypeNames.Image.Tiff, "image/png")] + [Route(Luski.Info.Routes.Default.Base + "/Icon")] + public IActionResult Icon() + { + if (Tables.Server.TryRead(Server.Picture, out byte[]? image, Server.ID.CreateParameter(0))) + { + return Tables.Server.Read(Server.PictureType, Server.ID.CreateParameter(0)) switch + { + PictureType.png => File(image, "image/png"), + PictureType.jpeg => File(image, "image/jpeg"), + PictureType.bmp => File(image, "image/bmp"), + PictureType.gif => File(image, "image/gif"), + PictureType.ico => File(image, "image/vnd.microsoft.icon"), + PictureType.svg => File(image, "image/svg+xml"), + PictureType.tif => File(image, "image/tiff"), + PictureType.webp => File(image, "image/webp"), + //should never happen + _ => File(image, "image/png"), + }; + } + else + { + return StatusCode(403, new HTTPResponse() + { + error = ErrorCode.Forbidden, + error_message = "the user you have given does not exist" + }); + } + } +} \ No newline at end of file diff --git a/LuskiServer/Program.cs b/LuskiServer/Program.cs index 7bc5957..8a026c5 100644 --- a/LuskiServer/Program.cs +++ b/LuskiServer/Program.cs @@ -46,6 +46,11 @@ foreach (PropertyInfo prop in typeof(Tables).GetProperties()) Luski.Database.RegisterTables(); +if (!Tables.Server.TryRead(Server.ID, out _, Server.ID.CreateParameter(0))) +{ + Tables.Server.Insert(); +} + if (!Luski.Database.VersionsTable.TryRead(Luski.Database.VersionsTable.ID, out _, Luski.Database.VersionsTable.ID.CreateParameter(0))) {