From 579d405621eb36ff3ca9a4a207ee5a15fd46cb14 Mon Sep 17 00:00:00 2001 From: Infi Date: Wed, 28 Aug 2024 12:52:23 +0200 Subject: [PATCH] Use JSON for POST responses --- ChatTwo/Http/MessageProtocol/DataStructure.cs | 16 ++++++++++++++-- ChatTwo/Http/RouteController.cs | 18 ++++++++++++------ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/ChatTwo/Http/MessageProtocol/DataStructure.cs b/ChatTwo/Http/MessageProtocol/DataStructure.cs index d7a3112..a7f067c 100644 --- a/ChatTwo/Http/MessageProtocol/DataStructure.cs +++ b/ChatTwo/Http/MessageProtocol/DataStructure.cs @@ -2,7 +2,7 @@ namespace ChatTwo.Http.MessageProtocol; -#region Outgoing +#region Outgoing SSE public struct SwitchChannel(string name) { [JsonProperty("channel")] public string Name = name; @@ -25,7 +25,19 @@ public struct MessageResponse() } #endregion -#region Incoming +#region Outgoing POST +public struct OkResponse(string message) +{ + [JsonProperty("message")] public string Message = message; +} + +public struct ErrorResponse(string reason) +{ + [JsonProperty("reason")] public string Reason = reason; +} +#endregion + +#region Incoming POST public struct IncomingMessage() { [JsonProperty("message")] public string Message = string.Empty; diff --git a/ChatTwo/Http/RouteController.cs b/ChatTwo/Http/RouteController.cs index c351e14..722749e 100644 --- a/ChatTwo/Http/RouteController.cs +++ b/ChatTwo/Http/RouteController.cs @@ -158,14 +158,16 @@ public class RouteController { if (ctx.Request.ContentType != "application/json") { - await ctx.Response.Send("Request contains wrong content type."); + ctx.Response.StatusCode = 415; + await ctx.Response.Send(JsonConvert.SerializeObject(new ErrorResponse("Request contains wrong media type."))); return; } var content = JsonConvert.DeserializeObject(ctx.Request.DataAsString, JsonSettings); if (content.Message.Length is < 2 or > 500) { - await ctx.Response.Send("Invalid message received."); + ctx.Response.StatusCode = 400; + await ctx.Response.Send(JsonConvert.SerializeObject(new ErrorResponse("Invalid message received."))); return; } @@ -175,21 +177,24 @@ public class RouteController Plugin.ChatLogWindow.SendChatBox(Plugin.ChatLogWindow.CurrentTab); }); - await ctx.Response.Send("Message was send to the channel."); + ctx.Response.StatusCode = 201; + await ctx.Response.Send(JsonConvert.SerializeObject(new OkResponse("Message was send to the channel."))); } private async Task ReceiveChannelSwitch(HttpContextBase ctx) { if (ctx.Request.ContentType != "application/json") { - await ctx.Response.Send("Request contains wrong content type."); + ctx.Response.StatusCode = 415; + await ctx.Response.Send(JsonConvert.SerializeObject(new ErrorResponse("Request contains wrong media type."))); return; } var channel = JsonConvert.DeserializeObject(ctx.Request.DataAsString, JsonSettings); if (!Enum.IsDefined(typeof(InputChannel), channel.Channel)) { - await ctx.Response.Send("Invalid channel received."); + ctx.Response.StatusCode = 400; + await ctx.Response.Send(JsonConvert.SerializeObject(new ErrorResponse("Invalid channel received."))); return; } @@ -198,7 +203,8 @@ public class RouteController Plugin.ChatLogWindow.SetChannel((InputChannel)channel.Channel); }); - await ctx.Response.Send("Function to switch channels has been called."); + ctx.Response.StatusCode = 201; + await ctx.Response.Send(JsonConvert.SerializeObject(new OkResponse("Channel switch got initiated."))); } private async Task NewSSEConnection(HttpContextBase ctx)