Use JSON for POST responses

This commit is contained in:
Infi
2024-08-28 12:52:23 +02:00
parent 7b96b52217
commit 579d405621
2 changed files with 26 additions and 8 deletions
+14 -2
View File
@@ -2,7 +2,7 @@
namespace ChatTwo.Http.MessageProtocol; namespace ChatTwo.Http.MessageProtocol;
#region Outgoing #region Outgoing SSE
public struct SwitchChannel(string name) public struct SwitchChannel(string name)
{ {
[JsonProperty("channel")] public string Name = name; [JsonProperty("channel")] public string Name = name;
@@ -25,7 +25,19 @@ public struct MessageResponse()
} }
#endregion #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() public struct IncomingMessage()
{ {
[JsonProperty("message")] public string Message = string.Empty; [JsonProperty("message")] public string Message = string.Empty;
+12 -6
View File
@@ -158,14 +158,16 @@ public class RouteController
{ {
if (ctx.Request.ContentType != "application/json") 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; return;
} }
var content = JsonConvert.DeserializeObject<IncomingMessage>(ctx.Request.DataAsString, JsonSettings); var content = JsonConvert.DeserializeObject<IncomingMessage>(ctx.Request.DataAsString, JsonSettings);
if (content.Message.Length is < 2 or > 500) 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; return;
} }
@@ -175,21 +177,24 @@ public class RouteController
Plugin.ChatLogWindow.SendChatBox(Plugin.ChatLogWindow.CurrentTab); 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) private async Task ReceiveChannelSwitch(HttpContextBase ctx)
{ {
if (ctx.Request.ContentType != "application/json") 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; return;
} }
var channel = JsonConvert.DeserializeObject<IncomingChannel>(ctx.Request.DataAsString, JsonSettings); var channel = JsonConvert.DeserializeObject<IncomingChannel>(ctx.Request.DataAsString, JsonSettings);
if (!Enum.IsDefined(typeof(InputChannel), channel.Channel)) 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; return;
} }
@@ -198,7 +203,8 @@ public class RouteController
Plugin.ChatLogWindow.SetChannel((InputChannel)channel.Channel); 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) private async Task NewSSEConnection(HttpContextBase ctx)