using Microsoft.AspNetCore.Http; namespace SeaHaven.Services.Helpers { /// SH-116 media type allowlist for board work-order uploads. public static class WorkOrderMediaFileRules { private static readonly HashSet AllowedContentTypes = new(StringComparer.OrdinalIgnoreCase) { "image/jpeg", "image/png", "video/mp4", "video/quicktime" }; private static readonly HashSet AllowedExtensions = new(StringComparer.OrdinalIgnoreCase) { ".jpg", ".jpeg", ".png", ".mp4", ".mov" }; public static bool IsAllowed(IFormFile file) { if (file == null) return false; var contentTypeOk = !string.IsNullOrWhiteSpace(file.ContentType) && AllowedContentTypes.Contains(file.ContentType.Trim()); var extension = Path.GetExtension(file.FileName ?? ""); var extensionOk = !string.IsNullOrWhiteSpace(extension) && AllowedExtensions.Contains(extension); // Accept when either MIME or extension matches the advertised contract (JPG/PNG/MP4/MOV). return contentTypeOk || extensionOk; } public static void EnsureAllowed(IFormFile file) { if (!IsAllowed(file)) { throw new Exceptions.WorkOrderBoardValidationException( "UnsupportedMediaType", "Supported media types are JPG, PNG, MP4, and MOV."); } } } }