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 responseSchema from "./schemas/response-schema.json"; import deleteSchema from "./schemas/delete-schema.json"; import deleteRoomSchema from "./schemas/deleteRoom-schema.json"; import { Request, Response } from "express"; import statusCodes from "../utils/statusCodes"; import logger from "../system/Logger"; class Validator { validateCreateAccount: any; validateGetAccounts: any; validateGetRooms: any; validateGetMessages: any; validateGetMembers: any; validateSetFlag: any; validateResponse: any; delete: any; deleteRoom: any; constructor() { this.validateCreateAccount = ajv.compile(createAccountSchema); this.validateGetAccounts = ajv.compile(getAccountSchema); this.validateGetRooms = ajv.compile(getRoomSchema); this.validateGetMessages = ajv.compile(getMessagesSchema); this.validateGetMembers = ajv.compile(getMembersSchema); this.validateSetFlag = ajv.compile(setFlagSchema); this.validateResponse = ajv.compile(responseSchema); this.delete = ajv.compile(deleteSchema); this.deleteRoom = ajv.compile(deleteRoomSchema); } _getSchema(name: string): any { switch (name) { case "createAccount": return this.validateCreateAccount; case "getAccounts": return this.validateGetAccounts; case "getRooms": return this.validateGetRooms; case "getMessages": return this.validateGetMessages; case "getMembers": return this.validateGetMembers; case "addFlag": case "removeFlag": return this.validateSetFlag; case "response": return this.validateResponse; case "delete": return this.delete; case "deleteRoom": return this.deleteRoom; 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;