62 lines
2.2 KiB
TypeScript
62 lines
2.2 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";
|
|
|
|
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<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; |