fix: minor Web API enhancements

* changed path for DevJson to include the device key instead of requiring it in the body
* Made the `GetRequestBody` method an extension method for the `HttpCwsRequest` class
This commit is contained in:
Andrew Welker
2024-05-24 16:12:50 -05:00
parent 5afdc2effa
commit effefc939c
7 changed files with 41 additions and 15 deletions

View File

@@ -89,7 +89,7 @@ namespace PepperDash.Essentials.Core.Web
Name = "DevList", Name = "DevList",
RouteHandler = new DevListRequestHandler() RouteHandler = new DevListRequestHandler()
}, },
new HttpCwsRoute("deviceCommands") new HttpCwsRoute("deviceCommands/{deviceKey}")
{ {
Name = "DevJson", Name = "DevJson",
RouteHandler = new DevJsonRequestHandler() RouteHandler = new DevJsonRequestHandler()

View File

@@ -7,11 +7,11 @@ using PepperDash.Core;
namespace PepperDash.Essentials.Core.Web namespace PepperDash.Essentials.Core.Web
{ {
public class EssentialsWebApiHelpers public static class EssentialsWebApiHelpers
{ {
public static string GetRequestBody(HttpCwsRequest request) public static string GetRequestBody(this HttpCwsRequest request)
{ {
var bytes = new Byte[request.ContentLength]; var bytes = new byte[request.ContentLength];
request.InputStream.Read(bytes, 0, request.ContentLength); request.InputStream.Read(bytes, 0, request.ContentLength);
@@ -22,8 +22,8 @@ namespace PepperDash.Essentials.Core.Web
{ {
return new return new
{ {
Name = assembly.Name, assembly.Name,
Version = assembly.Version assembly.Version
}; };
} }
@@ -31,7 +31,7 @@ namespace PepperDash.Essentials.Core.Web
{ {
return new return new
{ {
Key = device.Key, device.Key,
Name = (device is IKeyName) Name = (device is IKeyName)
? (device as IKeyName).Name ? (device as IKeyName).Name
: "---" : "---"

View File

@@ -52,7 +52,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return; return;
} }
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data)) if (string.IsNullOrEmpty(data))
{ {
context.Response.StatusCode = 400; context.Response.StatusCode = 400;

View File

@@ -26,6 +26,26 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
/// <param name="context"></param> /// <param name="context"></param>
protected override void HandlePost(HttpCwsContext context) protected override void HandlePost(HttpCwsContext context)
{ {
var routeData = context.Request.RouteData;
if(routeData == null)
{
context.Response.StatusCode = 400;
context.Response.StatusDescription = "Bad Request";
context.Response.End();
return;
}
if(!routeData.Values.TryGetValue("deviceKey", out var deviceKey))
{
context.Response.StatusCode = 400;
context.Response.StatusDescription = "Bad Request";
context.Response.End();
return;
}
if (context.Request.ContentLength < 0) if (context.Request.ContentLength < 0)
{ {
context.Response.StatusCode = 400; context.Response.StatusCode = 400;
@@ -35,7 +55,8 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return; return;
} }
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data)) if (string.IsNullOrEmpty(data))
{ {
context.Response.StatusCode = 400; context.Response.StatusCode = 400;
@@ -47,8 +68,13 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
try try
{ {
var daw = JsonConvert.DeserializeObject<DeviceActionWrapper>(data); var daw = new DeviceActionWrapper { DeviceKey = (string) deviceKey};
DeviceJsonApi.DoDeviceActionWithJson(data);
JsonConvert.PopulateObject(data, daw);
Debug.LogMessage(LogEventLevel.Verbose, "Device Action Wrapper: {@wrapper}", null, daw);
DeviceJsonApi.DoDeviceAction(daw);
context.Response.StatusCode = 200; context.Response.StatusCode = 200;
context.Response.StatusDescription = "OK"; context.Response.StatusDescription = "OK";

View File

@@ -34,7 +34,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return; return;
} }
allDevices.Sort((a, b) => System.String.Compare(a.Key, b.Key, System.StringComparison.Ordinal)); allDevices.Sort((a, b) => string.Compare(a.Key, b.Key, System.StringComparison.Ordinal));
var deviceList = allDevices.Select(d => EssentialsWebApiHelpers.MapToDeviceListObject(d)).ToList(); var deviceList = allDevices.Select(d => EssentialsWebApiHelpers.MapToDeviceListObject(d)).ToList();

View File

@@ -52,7 +52,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return; return;
} }
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data)) if (string.IsNullOrEmpty(data))
{ {
context.Response.StatusCode = 400; context.Response.StatusCode = 400;

View File

@@ -89,7 +89,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return; return;
} }
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); var data = context.Request.GetRequestBody();
if (data == null) if (data == null)
{ {
context.Response.StatusCode = 500; context.Response.StatusCode = 500;