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