97 lines
2.4 KiB
JavaScript
Raw Normal View History

'use strict';
const { isUndefined } = require('lodash/fp');
2021-10-20 17:30:05 +02:00
const { yup } = require('@strapi/utils');
const { YupValidationError } = require('@strapi/utils').errors;
const validators = require('./common-validators');
2021-10-20 17:30:05 +02:00
const handleYupError = error => {
throw new YupValidationError(error);
};
const userCreationSchema = yup
.object()
.shape({
email: validators.email.required(),
firstname: validators.firstname.required(),
lastname: validators.lastname.required(),
roles: validators.roles.min(1),
2021-02-05 16:35:47 +01:00
preferedLanguage: yup.string().nullable(),
})
.noUnknown();
const validateUserCreationInput = data => {
2021-10-20 17:30:05 +02:00
return userCreationSchema
.validate(data, { strict: true, abortEarly: false })
.catch(handleYupError);
};
const profileUpdateSchema = yup
.object()
.shape({
email: validators.email.notNull(),
firstname: validators.firstname.notNull(),
lastname: validators.lastname.notNull(),
2020-05-27 16:06:15 +02:00
username: validators.username.nullable(),
password: validators.password.notNull(),
currentPassword: yup
.string()
.when('password', (password, schema) => (!isUndefined(password) ? schema.required() : schema))
.notNull(),
2021-02-05 16:35:47 +01:00
preferedLanguage: yup.string().nullable(),
})
.noUnknown();
const validateProfileUpdateInput = data => {
return profileUpdateSchema
.validate(data, { strict: true, abortEarly: false })
2021-10-20 17:30:05 +02:00
.catch(handleYupError);
};
2020-05-27 16:06:15 +02:00
const userUpdateSchema = yup
.object()
.shape({
email: validators.email.notNull(),
firstname: validators.firstname.notNull(),
lastname: validators.lastname.notNull(),
2020-05-27 16:06:15 +02:00
username: validators.username.nullable(),
password: validators.password.notNull(),
isActive: yup.bool().notNull(),
roles: validators.roles.min(1).notNull(),
2020-05-27 16:06:15 +02:00
})
.noUnknown();
const validateUserUpdateInput = data => {
2021-10-20 17:30:05 +02:00
return userUpdateSchema.validate(data, { strict: true, abortEarly: false }).catch(handleYupError);
2020-05-27 16:06:15 +02:00
};
const usersDeleteSchema = yup
.object()
.shape({
ids: yup
.array()
.of(yup.strapiID())
.min(1)
.required(),
})
.noUnknown();
const validateUsersDeleteInput = async data => {
2021-10-20 17:30:05 +02:00
return usersDeleteSchema
.validate(data, { strict: true, abortEarly: false })
.catch(handleYupError);
};
module.exports = {
validateUserCreationInput,
validateProfileUpdateInput,
2020-05-27 16:06:15 +02:00
validateUserUpdateInput,
validateUsersDeleteInput,
schemas: {
userCreationSchema,
usersDeleteSchema,
userUpdateSchema,
},
};