From 557f1fe3987f96c7f48c0837be55f99443e73b5a Mon Sep 17 00:00:00 2001 From: zkldi Date: Fri, 21 May 2021 13:46:49 +0100 Subject: [PATCH] Refactor multer code out to common --- server/src/api/import/import.ts | 29 +++----------------------- server/src/common/multer.ts | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 26 deletions(-) create mode 100644 server/src/common/multer.ts diff --git a/server/src/api/import/import.ts b/server/src/api/import/import.ts index 3cab1703b..da76f7c00 100644 --- a/server/src/api/import/import.ts +++ b/server/src/api/import/import.ts @@ -1,7 +1,6 @@ -import { Router, NextFunction, Request, Response } from "express"; +import { Router } from "express"; import { FileUploadImportTypes } from "kamaitachi-common"; import { fileImportTypes } from "kamaitachi-common/js/config"; -import multer, { MulterError } from "multer"; import Prudence from "prudence"; import { GetUserWithIDGuaranteed } from "../../common/user"; import CreateLogCtx from "../../common/logger"; @@ -15,30 +14,7 @@ const logger = CreateLogCtx("import.ts"); const router: Router = Router({ mergeParams: true }); -// multer config -const upload = multer({ limits: { fileSize: 1024 * 1024 * 16 } }); // 16MB -const uploadMW = upload.single("scoreData"); - -const parseMultipartScoredata = (req: Request, res: Response, next: NextFunction) => { - uploadMW(req, res, (err: unknown) => { - if (err instanceof MulterError) { - logger.info(`Multer Error.`, { err }); - return res.status(400).json({ - success: false, - description: - "File provided was too large, corrupt, or provided in the wrong field.", - }); - } else if (err) { - logger.error(`Unknown file import error: ${err}`, { err }); - return res.status(500).json({ - success: false, - description: `An internal server error has occured.`, - }); - } - - next(); - }); -}; +const parseMultipartScoredata = CreateMulterSingleUploadMiddleware("scoreData", logger); /** * Import scores from a file. Expects the post request to be multipart, and to provide a scoreData file. @@ -92,6 +68,7 @@ import ParseBatchManual from "../../score-import/import-types/file/batch-manual/ import { ParseSolidStateXML } from "../../score-import/import-types/file/solid-state-squad/parser"; import { ParseMerIIDX } from "../../score-import/import-types/file/mer-iidx/parser"; import ParsePLIIIDXCSV from "../../score-import/import-types/file/pli-iidx-csv/parser"; +import { CreateMulterSingleUploadMiddleware } from "../../common/multer"; /** * Resolves the data from a file upload into an iterable, diff --git a/server/src/common/multer.ts b/server/src/common/multer.ts new file mode 100644 index 000000000..f170bbd72 --- /dev/null +++ b/server/src/common/multer.ts @@ -0,0 +1,37 @@ +import { RequestHandler } from "express"; +import multer, { MulterError } from "multer"; +import CreateLogCtx from "./logger"; + +const defaultLogger = CreateLogCtx("multer.ts"); + +export const DefaultMulterUpload = multer({ limits: { fileSize: 1024 * 1024 * 16 } }); // 16MB + +export const CreateMulterSingleUploadMiddleware = ( + fieldName: string, + logger = defaultLogger +): RequestHandler => { + const UploadMW = DefaultMulterUpload.single(fieldName); + + return (req, res, next) => { + UploadMW(req, res, (err) => { + if (err instanceof MulterError) { + logger.info(`Multer Error.`, { err }); + + return res.status(400).json({ + success: false, + description: + "File provided was too large, corrupt, or provided in the wrong field.", + }); + } else if (err) { + logger.error(`Unknown file import error: ${err}`, { err }); + + return res.status(500).json({ + success: false, + description: `An internal server error has occured.`, + }); + } + + return next(); + }); + }; +};