diff --git a/src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs b/src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs index 0ce6b209..a37a78c0 100644 --- a/src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs +++ b/src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs @@ -89,7 +89,7 @@ namespace PepperDash.Essentials.Core.Web Name = "DevList", RouteHandler = new DevListRequestHandler() }, - new HttpCwsRoute("deviceCommands") + new HttpCwsRoute("deviceCommands/{deviceKey}") { Name = "DevJson", RouteHandler = new DevJsonRequestHandler() diff --git a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs index 89718fcf..cc6d4cd6 100644 --- a/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs +++ b/src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs @@ -7,11 +7,11 @@ using PepperDash.Core; 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); @@ -22,8 +22,8 @@ namespace PepperDash.Essentials.Core.Web { return new { - Name = assembly.Name, - Version = assembly.Version + assembly.Name, + assembly.Version }; } @@ -31,7 +31,7 @@ namespace PepperDash.Essentials.Core.Web { return new { - Key = device.Key, + device.Key, Name = (device is IKeyName) ? (device as IKeyName).Name : "---" diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs index 1157c5e1..0b7497d2 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/AppDebugRequestHandler.cs @@ -52,7 +52,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers return; } - var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); + var data = context.Request.GetRequestBody(); if (string.IsNullOrEmpty(data)) { context.Response.StatusCode = 400; diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevJsonRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevJsonRequestHandler.cs index 3599eb23..d14ffb83 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevJsonRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevJsonRequestHandler.cs @@ -26,6 +26,26 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers /// 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) { context.Response.StatusCode = 400; @@ -35,7 +55,8 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers return; } - var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); + var data = context.Request.GetRequestBody(); + if (string.IsNullOrEmpty(data)) { context.Response.StatusCode = 400; @@ -46,9 +67,14 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers } try - { - var daw = JsonConvert.DeserializeObject(data); - DeviceJsonApi.DoDeviceActionWithJson(data); + { + var daw = new DeviceActionWrapper { DeviceKey = (string) deviceKey}; + + JsonConvert.PopulateObject(data, daw); + + Debug.LogMessage(LogEventLevel.Verbose, "Device Action Wrapper: {@wrapper}", null, daw); + + DeviceJsonApi.DoDeviceAction(daw); context.Response.StatusCode = 200; context.Response.StatusDescription = "OK"; diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevListRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevListRequestHandler.cs index e9df4347..a83685fb 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevListRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DevListRequestHandler.cs @@ -34,7 +34,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers 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(); diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs index 4ec3bc97..fdcad73c 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/DoNotLoadConfigOnNextBootRequestHandler.cs @@ -52,7 +52,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers return; } - var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); + var data = context.Request.GetRequestBody(); if (string.IsNullOrEmpty(data)) { context.Response.StatusCode = 400; diff --git a/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs b/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs index a08fda2b..6378f1b2 100644 --- a/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs +++ b/src/PepperDash.Essentials.Core/Web/RequestHandlers/SetDeviceStreamDebugRequestHandler.cs @@ -89,7 +89,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers return; } - var data = EssentialsWebApiHelpers.GetRequestBody(context.Request); + var data = context.Request.GetRequestBody(); if (data == null) { context.Response.StatusCode = 500;