From 920c55741101874e0eaf449b69ca7ef113e71085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Tue, 30 May 2023 18:05:02 +0200 Subject: [PATCH] Add a middleware for params validation --- .../middlewares/ParamsValidatorMiddleware.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts diff --git a/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts b/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts new file mode 100644 index 0000000..7bf77bf --- /dev/null +++ b/ExpressAPI/src/middlewares/ParamsValidatorMiddleware.ts @@ -0,0 +1,40 @@ +import * as ExpressValidator from 'express-validator'; +import express from 'express'; +import { StatusCodes } from 'http-status-codes'; +import ApiRequest from '../models/ApiRequest'; + + +class ParamsValidatorMiddleware { + private static _instance: ParamsValidatorMiddleware; + + private constructor() { } + + public static get instance(): ParamsValidatorMiddleware { + if ( !ParamsValidatorMiddleware._instance ) { + ParamsValidatorMiddleware._instance = new ParamsValidatorMiddleware(); + } + + return ParamsValidatorMiddleware._instance; + } + + validate(validations: Array<ExpressValidator.ValidationChain> | ExpressValidator.Schema): (req: ApiRequest, res: express.Response, next: express.NextFunction) => void { + return async (req: ApiRequest, res: express.Response, next: express.NextFunction) => { + + if ( !(validations instanceof Array) ) { + validations = ExpressValidator.checkSchema(validations); + } + + await Promise.all(validations.map(validation => validation.run(req))); + + const errors = ExpressValidator.validationResult(req); + if ( !errors.isEmpty() ) { + return req.session.sendResponse(res, StatusCodes.BAD_REQUEST, { errors: errors.array() }); + } + + return next(); + }; + } +} + + +export default ParamsValidatorMiddleware.instance; -- GitLab