48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
// @flow
|
|
import validator from 'validator';
|
|
import { type Context } from 'koa';
|
|
import { ParamRequiredError, ValidationError } from '../errors';
|
|
import { validateColorHex } from '../../shared/utils/color';
|
|
|
|
export default function validation() {
|
|
return function validationMiddleware(ctx: Context, next: () => Promise<*>) {
|
|
ctx.assertPresent = (value, message) => {
|
|
if (value === undefined || value === null || value === '') {
|
|
throw new ParamRequiredError(message);
|
|
}
|
|
};
|
|
|
|
ctx.assertNotEmpty = (value, message) => {
|
|
if (value === '') {
|
|
throw new ValidationError(message);
|
|
}
|
|
};
|
|
|
|
ctx.assertEmail = (value, message) => {
|
|
if (!validator.isEmail(value)) {
|
|
throw new ValidationError(message);
|
|
}
|
|
};
|
|
|
|
ctx.assertUuid = (value, message) => {
|
|
if (!validator.isUUID(value)) {
|
|
throw new ValidationError(message);
|
|
}
|
|
};
|
|
|
|
ctx.assertPositiveInteger = (value, message) => {
|
|
if (!validator.isInt(value, { min: 0 })) {
|
|
throw new ValidationError(message);
|
|
}
|
|
};
|
|
|
|
ctx.assertHexColor = (value, message) => {
|
|
if (!validateColorHex(value)) {
|
|
throw new ValidationError(message);
|
|
}
|
|
};
|
|
|
|
return next();
|
|
};
|
|
}
|