import { createBlob, createRepBlob, uploadSingleFile, } from "../../../actions/azurestorage"; import nextConnect from "next-connect"; import middleware from "../middleware/middleware"; import { consoleLogger } from "../../../actions"; import { fileTypeFromBuffer } from "file-type"; import fs from "fs"; import path from "path"; const ApiProxy = nextConnect(); ApiProxy.use(middleware); ApiProxy.post(async (req, res) => { var checkHash = req.query.hash; // console.log(JSON.stringify(req.body)); // console.log(JSON.stringify(req.body.appealData)); // console.log(req.files); const containerID = req.body.containerID[0]; const casefolderID = req.body.casefolderID[0]; console.log("there are files:", Object.keys(req.files).length); // Add other mimetypes here const allowedMimeTypes = [ "application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "image/tiff", "image/jpeg", "application/zip", "image/png", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ]; var allowedFilesFormData = {}; var invalidFiles = []; // To store the names of invalid files // for (const [fileName, fileDetails] of Object.entries(req.files)) { // if (allowedMimeTypes.includes(fileDetails[0].headers["content-type"])) { // allowedFilesFormData[fileName] = fileDetails.map((file) => ({ // fieldName: file.fieldName, // originalFilename: file.originalFilename, // path: file.path, // size: file.size, // headers: file.headers, // contentType: file.headers["content-type"], // })); // } // } for (const [fileName, fileDetails] of Object.entries(req.files)) { const file = fileDetails[0]; const filePath = file.path; // Check the MIME type from file headers const fileMimeType = file.headers["content-type"]; if (allowedMimeTypes.includes(fileMimeType)) { // Check file signature (magic number) using file-type const buffer = fs.readFileSync(filePath); try { const type = await fileTypeFromBuffer(buffer); // Correct usage of fileTypeFromBuffer console.log("checking mime type ", type); if (type && allowedMimeTypes.includes(type.mime)) { // If the MIME type from the file signature matches the allowed list allowedFilesFormData[fileName] = fileDetails.map( (file) => ({ fieldName: file.fieldName, originalFilename: file.originalFilename, path: file.path, size: file.size, headers: file.headers, contentType: fileMimeType, }) ); } else { console.log( `\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an invalid MIME type based on its content.\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\` ); invalidFiles.push(fileName); // Track invalid file // return res // .status(400) // .json({ error: `Invalid file type for ${fileName}` }); } } catch (error) { console.log( `Error reading file ${fileName} for MIME type validation`, error ); // return res // .status(500) // .json({ error: "Failed to validate file type" }); } } else { console.log( `\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an unsupported MIME type: ${fileMimeType}\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\` ); invalidFiles.push(fileName); // Track invalid file // return res.status(400).json({ // error: `Unsupported MIME type for ${fileName}`, // }); } } //console.log("allowedFilesFormData: ", allowedFilesFormData); // If no valid files are found // if (Object.keys(allowedFilesFormData).length === 0) { // return res.status(400).json({ // error: "No valid files found", // invalidFiles: invalidFiles, // Return the list of invalid files // }); // } invalidFiles = invalidFiles.map((fileName) => { return `${fileName} - Invalid file`; }); try { const data = await uploadSingleFile( allowedFilesFormData, containerID, casefolderID ).then((data) => { return res.status(200).json({ data, invalidFiles }); }); return res.status(200).json({ data, invalidFiles }); } catch (error) { consoleLogger(error); return res.status(500).json({ error: "Failed to upload files" }); } }); export const config = { api: { bodyParser: false, }, }; export default ApiProxy;