From 9f9caca192ac5b440ed8dccce76861de5978939d Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Mon, 28 Aug 2023 13:15:40 +1000 Subject: Modified media controller to take file metadata and checksums from form content headers --- Controllers/MediaController.cs | 25 ++++++++++++++++++------- Util.cs | 8 ++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 Util.cs diff --git a/Controllers/MediaController.cs b/Controllers/MediaController.cs index b476dec..6e04670 100644 --- a/Controllers/MediaController.cs +++ b/Controllers/MediaController.cs @@ -1,4 +1,5 @@ using HyperBooru.Services; +using HyperBooru.Util; using ImageMagick; using Microsoft.AspNetCore.Mvc; using MimeDetective; @@ -76,12 +77,7 @@ public class MediaController : Controller { } [HttpPost] - public IActionResult Upload( - [FromForm] string? checksum, - [FromForm] DateTime? lastAccessTime, - [FromForm] DateTime? lastWriteTime, - [FromForm] DateTime? createTime) { - + public IActionResult Upload() { if(Request.Form.Files.Count == 0) return BadRequest("No files"); @@ -89,10 +85,25 @@ public class MediaController : Controller { foreach(var formFile in Request.Form.Files) { try { + // Parse timestamps from headers + DateTime? lastAccessTime = + formFile.Headers["X-HyperBooru-LastAccessTime"] + .ElementAtOrDefault(0)? + .TryParseDateTimeUtc(); + DateTime? lastWriteTime = + formFile.Headers["X-HyperBooru-LastWriteTime"] + .ElementAtOrDefault(0)? + .TryParseDateTimeUtc(); + DateTime? createTime = + formFile.Headers["X-HyperBooru-CreateTime"] + .ElementAtOrDefault(0)? + .TryParseDateTimeUtc(); + media = mediaService.Create( formFile.OpenReadStream(), formFile.FileName, - checksum, + formFile.Headers["X-HyperBooru-Checksum"] + .ElementAtOrDefault(0), lastAccessTime, lastWriteTime, createTime); diff --git a/Util.cs b/Util.cs new file mode 100644 index 0000000..9cbccdf --- /dev/null +++ b/Util.cs @@ -0,0 +1,8 @@ +namespace HyperBooru.Util; + +public static class Extensions { + public static DateTime? TryParseDateTimeUtc(this string s) { + bool success = DateTime.TryParse(s, out var dateTime); + return success ? DateTime.SpecifyKind(dateTime, DateTimeKind.Utc) : null; + } +} -- cgit v1.3