| 
									
										
										
										
											2020-01-20 17:35:04 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-19 10:54:44 +01:00
										 |  |  | const _ = require('lodash'); | 
					
						
							|  |  |  | const { yup, formatYupErrors } = require('strapi-utils'); | 
					
						
							| 
									
										
										
										
											2020-01-20 17:35:04 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | const createModelConfigurationSchema = require('./model-configuration'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const TYPES = ['singleType', 'collectionType']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Validates type kind | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const validateKind = kind => { | 
					
						
							|  |  |  |   return yup | 
					
						
							|  |  |  |     .string() | 
					
						
							|  |  |  |     .oneOf(TYPES) | 
					
						
							|  |  |  |     .nullable() | 
					
						
							| 
									
										
										
										
											2020-01-21 11:31:20 +01:00
										 |  |  |     .validate(kind) | 
					
						
							|  |  |  |     .catch(error => Promise.reject(formatYupErrors(error))); | 
					
						
							| 
									
										
										
										
											2020-01-20 17:35:04 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-19 10:54:44 +01:00
										 |  |  | const validateGenerateUIDInput = data => { | 
					
						
							|  |  |  |   return yup | 
					
						
							|  |  |  |     .object({ | 
					
						
							|  |  |  |       contentTypeUID: yup.string().required(), | 
					
						
							|  |  |  |       field: yup.string().required(), | 
					
						
							|  |  |  |       data: yup.object().required(), | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     .validate(data, { | 
					
						
							|  |  |  |       strict: true, | 
					
						
							|  |  |  |       abortEarly: false, | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     .catch(error => { | 
					
						
							|  |  |  |       throw strapi.errors.badRequest('ValidationError', formatYupErrors(error)); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const validateCheckUIDAvailabilityInput = data => { | 
					
						
							|  |  |  |   return yup | 
					
						
							|  |  |  |     .object({ | 
					
						
							|  |  |  |       contentTypeUID: yup.string().required(), | 
					
						
							|  |  |  |       field: yup.string().required(), | 
					
						
							|  |  |  |       value: yup | 
					
						
							|  |  |  |         .string() | 
					
						
							|  |  |  |         .matches(new RegExp('^[A-Za-z0-9-_.~]*$')) | 
					
						
							|  |  |  |         .required(), | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     .validate(data, { | 
					
						
							|  |  |  |       strict: true, | 
					
						
							|  |  |  |       abortEarly: false, | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     .catch(error => { | 
					
						
							|  |  |  |       throw strapi.errors.badRequest('ValidationError', formatYupErrors(error)); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const validateUIDField = (contentTypeUID, field) => { | 
					
						
							|  |  |  |   const model = strapi.contentTypes[contentTypeUID]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!model) { | 
					
						
							|  |  |  |     throw strapi.errors.badRequest('ValidationError', ['ContentType not found']); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if ( | 
					
						
							|  |  |  |     !_.has(model, ['attributes', field]) || | 
					
						
							|  |  |  |     _.get(model, ['attributes', field, 'type']) !== 'uid' | 
					
						
							|  |  |  |   ) { | 
					
						
							|  |  |  |     throw strapi.errors.badRequest('ValidationError', { | 
					
						
							|  |  |  |       field: ['field must be a valid `uid` attribute'], | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-19 17:24:27 +02:00
										 |  |  | module.exports = { | 
					
						
							| 
									
										
										
										
											2020-01-20 17:35:04 +01:00
										 |  |  |   createModelConfigurationSchema, | 
					
						
							|  |  |  |   validateKind, | 
					
						
							| 
									
										
										
										
											2020-02-19 10:54:44 +01:00
										 |  |  |   validateGenerateUIDInput, | 
					
						
							|  |  |  |   validateCheckUIDAvailabilityInput, | 
					
						
							|  |  |  |   validateUIDField, | 
					
						
							| 
									
										
										
										
											2019-07-19 17:24:27 +02:00
										 |  |  | }; |