Fix validation structure in authorization service (#3967)

Fixes #3597
This commit is contained in:
Rijk van Zanten
2021-02-08 15:13:14 -05:00
committed by GitHub
parent 6108de4f3e
commit 4144cecef5
2 changed files with 24 additions and 23 deletions

View File

@@ -308,13 +308,14 @@ export class AuthorizationService {
if (Object.keys(validation)[0] === '_and') {
const subValidation = Object.values(validation)[0];
const nestedErrors = flatten<FailedValidationException>(
subValidation.map((subObj: Record<string, any>) => this.validateJoi(subObj, payloads))
subValidation.map((subObj: Record<string, any>) => {
return this.validateJoi(subObj, payloads);
})
).filter((err?: FailedValidationException) => err);
errors.push(...nestedErrors);
}
if (Object.keys(validation)[0] === '_or') {
} else if (Object.keys(validation)[0] === '_or') {
const subValidation = Object.values(validation)[0];
const nestedErrors = flatten<FailedValidationException>(
subValidation.map((subObj: Record<string, any>) => this.validateJoi(subObj, payloads))
@@ -324,15 +325,15 @@ export class AuthorizationService {
if (allErrored) {
errors.push(...nestedErrors);
}
}
} else {
const schema = generateJoi(validation);
const schema = generateJoi(validation);
for (const payload of payloads) {
const { error } = schema.validate(payload, { abortEarly: false });
for (const payload of payloads) {
const { error } = schema.validate(payload, { abortEarly: false });
if (error) {
errors.push(...error.details.map((details) => new FailedValidationException(details)));
if (error) {
errors.push(...error.details.map((details) => new FailedValidationException(details)));
}
}
}

View File

@@ -75,45 +75,45 @@ export default function generateJoi(filter: Filter | null): AnySchema {
function getJoi(operator: string, value: any) {
if (operator === '_eq') {
return Joi.any().equal(Object.values(value)[0]);
return Joi.any().equal(value);
}
if (operator === '_neq') {
return Joi.any().not(Object.values(value)[0]);
return Joi.any().not(value);
}
if (operator === '_contains') {
// @ts-ignore
return Joi.string().contains(Object.values(value)[0]);
return Joi.string().contains(value);
}
if (operator === '_ncontains') {
// @ts-ignore
return Joi.string().ncontains(Object.values(value)[0]);
return Joi.string().ncontains(value);
}
if (operator === '_in') {
return Joi.any().equal(...(Object.values(value)[0] as (string | number)[]));
return Joi.any().equal(...(value as (string | number)[]));
}
if (operator === '_nin') {
return Joi.any().not(...(Object.values(value)[0] as (string | number)[]));
return Joi.any().not(...(value as (string | number)[]));
}
if (operator === '_gt') {
return Joi.number().greater(Number(Object.values(value)[0]));
return Joi.number().greater(Number(value));
}
if (operator === '_gte') {
return Joi.number().min(Number(Object.values(value)[0]));
return Joi.number().min(Number(value));
}
if (operator === '_lt') {
return Joi.number().less(Number(Object.values(value)[0]));
return Joi.number().less(Number(value));
}
if (operator === '_lte') {
return Joi.number().max(Number(Object.values(value)[0]));
return Joi.number().max(Number(value));
}
if (operator === '_null') {
@@ -133,12 +133,12 @@ function getJoi(operator: string, value: any) {
}
if (operator === '_between') {
const values = Object.values(value)[0] as number[];
const values = value as number[];
return Joi.number().greater(values[0]).less(values[1]);
}
if (operator === '_nbetween') {
const values = Object.values(value)[0] as number[];
const values = value as number[];
return Joi.number().less(values[0]).greater(values[1]);
}