From 6a3e865f581c5062c09045e1595f09fe45c1409d Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 20 Dec 2018 00:01:53 +0000 Subject: [PATCH] Support receiving report V2 in server. --- .../Controllers/UploadReportController.cs | 54 +++++++++++++++++++ .../DiscImageChef.Server.csproj | 7 +-- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/DiscImageChef.Server/Controllers/UploadReportController.cs b/DiscImageChef.Server/Controllers/UploadReportController.cs index 7d95e1537..eafa0947c 100644 --- a/DiscImageChef.Server/Controllers/UploadReportController.cs +++ b/DiscImageChef.Server/Controllers/UploadReportController.cs @@ -40,6 +40,7 @@ using System.Web.Hosting; using System.Web.Http; using System.Xml.Serialization; using DiscImageChef.CommonTypes.Metadata; +using Newtonsoft.Json; namespace DiscImageChef.Server.Controllers { @@ -93,6 +94,59 @@ namespace DiscImageChef.Server.Controllers #else response.Content = new StringContent("error", System.Text.Encoding.UTF8, "text/plain"); return response; +#endif + } + } + /// + /// Receives a report from DiscImageChef.Core, verifies it's in the correct format and stores it on the server + /// + /// HTTP response + [Route("api/uploadreportv2")] + [HttpPost] + public HttpResponseMessage UploadReportV2() + { + HttpResponseMessage response = new HttpResponseMessage {StatusCode = HttpStatusCode.OK}; + + try + { + HttpRequest request = HttpContext.Current.Request; + + StreamReader sr = new StreamReader(request.InputStream); + string jsonData = sr.ReadToEnd(); + DeviceReportV2 newReport = JsonConvert.DeserializeObject(jsonData); + + if(newReport == null) + { + response.Content = new StringContent("notstats", Encoding.UTF8, "text/plain"); + return response; + } + + Random rng = new Random(); + string filename = $"NewReport_{DateTime.UtcNow:yyyyMMddHHmmssfff}_{rng.Next()}.json"; + while(File.Exists(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(), + "Upload", filename))) + filename = $"NewReport_{DateTime.UtcNow:yyyyMMddHHmmssfff}_{rng.Next()}.json"; + + FileStream newFile = + new + FileStream(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(), "Upload", filename), + FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None); + StreamWriter sw = new StreamWriter(newFile); + sw.Write(jsonData); + sw.Close(); + newFile.Close(); + + response.Content = new StringContent("ok", Encoding.UTF8, "text/plain"); + return response; + } + // ReSharper disable once RedundantCatchClause + catch + { + #if DEBUG + throw; + #else + response.Content = new StringContent("error", System.Text.Encoding.UTF8, "text/plain"); + return response; #endif } } diff --git a/DiscImageChef.Server/DiscImageChef.Server.csproj b/DiscImageChef.Server/DiscImageChef.Server.csproj index f7a53ce1d..f6864ef17 100644 --- a/DiscImageChef.Server/DiscImageChef.Server.csproj +++ b/DiscImageChef.Server/DiscImageChef.Server.csproj @@ -4,7 +4,6 @@ Debug AnyCPU 2.0 - {75342D7A-C5EA-4A6F-A511-850B54310E5B} {349C5851-65DF-11DA-9384-00065B846F21};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Library DiscImageChef.Server @@ -44,7 +43,7 @@ full false bin - DEBUG; + DEBUG;NET461 prompt 4 @@ -114,12 +113,8 @@ - {F2B84194-26EB-4227-B1C5-6602517E85AE} - DiscImageChef.CommonTypes - {0BEB3088-B634-4289-AE17-CDF2D25D00D5} - DiscImageChef.Decoders