import Ajv from "ajv"; import addFormats from "ajv-formats"; const ajv = new Ajv({ allErrors: true }); addFormats(ajv); import createAccountSchema from "./schemas/createAccount-schema.json"; import getAccountSchema from "./schemas/getAccounts-schema.json"; import getRoomSchema from "./schemas/getRooms-schema.json"; import getMessagesSchema from "./schemas/getMessages-schema.json"; import getMembersSchema from "./schemas/getMembers-schema.json"; import setFlagSchema from "./schemas/setFlag-schema.json"; import { Request, Response } from "express"; import statusCodes from "../utils/statusCodes"; import logger from "../system/Logger"; export const validateCreateAccount = ajv.compile(createAccountSchema); export const validateGetAccounts = ajv.compile(getAccountSchema); export const validateGetRooms = ajv.compile(getRoomSchema); export const validateGetMessages = ajv.compile(getMessagesSchema); export const validateGetMembers = ajv.compile(getMembersSchema); export const validateSetFlag = ajv.compile(setFlagSchema); class Validator { _getSchema(name: string): any { switch (name) { case "createAccount": return validateCreateAccount; case "getAccounts": return validateGetAccounts; case "getRooms": return validateGetRooms; case "getMessages": return validateGetMessages; case "getMembers": return validateGetMembers; case "addFlag": case "removeFlag": return validateSetFlag; default: logger.err(`Schema ${name} not found`); break; } } async validate( schemaName: string, args: any, res: Response, callback: (body: any, res: Response) => Promise, ): Promise { const validator = this._getSchema(schemaName); const valid = validator(args); if (!valid) { res.status(statusCodes.NOT_ACCEPTABLE).send({ error: validator.errors }); } else { await callback(args, res); } } } const validator = new Validator(); export default validator;