mail/back/validator/validator.ts
2023-04-13 12:15:04 +02:00

72 lines
2.4 KiB
TypeScript

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";
class Validator {
validateCreateAccount: any;
validateGetAccounts: any;
validateGetRooms: any;
validateGetMessages: any;
validateGetMembers: any;
validateSetFlag: 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);
}
_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;
default:
logger.err(`Schema ${name} not found`);
break;
}
}
async validate(
schemaName: string,
args: any,
res: Response,
callback: (body: any, res: Response) => Promise<void>,
): Promise<void> {
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;