77 lines
2.6 KiB
TypeScript
77 lines
2.6 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 responseSchema from "./schemas/response-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;
|
|
|
|
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);
|
|
}
|
|
|
|
_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;
|
|
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;
|