const constants = require ('../config/constants'); validateEmail = function (email) { if (email.length > constants.stringConstraints.EMAIL_MAX_LENGTH) return false; let validEmailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return validEmailRegex.test (email); }; validateIntentName = function (intentName) { if ( intentName.length < constants.stringConstraints.INTENT_NAME_MIN_LENGTH || intentName.length > constants.stringConstraints.INTENT_NAME_MAX_LENGTH ) return false; let validIntentNameRegex = /^[a-z]*$/i; return validIntentNameRegex.test (intentName); }; validateQuestion = function (question) { if ( question.length < constants.stringConstraints.QUESTION_MIN_LENGTH || question.length > constants.stringConstraints.QUESTION_MAX_LENGTH ) return false; let validQuestionNameRegex = /^[a-z,.' ]*$/i; return validQuestionNameRegex.test (question); }; validateAnswer = function (answer) { if ( answer.length < constants.stringConstraints.ANSWER_MIN_LENGTH || answer.length > constants.stringConstraints.ANSWER_MAX_LENGTH ) return false; let validAnswerRegex = /^[a-z,.' ]*$/i; return validAnswerRegex.test (answer); }; validateInvocationName = function (invocationName) { if ( invocationName.length < constants.stringConstraints.INVOCATION_NAME_MIN_LENGTH || invocationName.length > constants.stringConstraints.INVOCATION_NAME_MAX_LENGTH ) return false; let validInvocationNameRegex = /^[a-z,.' ]*$/i; return validInvocationNameRegex.test (invocationName); }; validateInvocationAnswer = function (invocationAnswer) { if (invocationAnswer.length > constants.stringConstraints.INVOCATION_ANSWER_MAX_LENGTH) return false; let validInvocationAnswerRegex = /^[a-z,.' ]*$/i; return validInvocationAnswerRegex.test (invocationAnswer); }; validateIntentExplanation = function (explanation) { if (explanation.length > constants.stringConstraints.INTENT_EXPLANATION_MAX_LENGTH) return false; let validExplanationRegex = /^[a-z,.' ]*$/i; return validExplanationRegex.test (explanation); }; module.exports = { validateSkill: function (skill) { try { if ( !validateEmail (skill.contactEmail) || !validateInvocationName (skill.invocationName) || !validateInvocationAnswer (skill.invocationAnswer) ) return false; for (let i = 0; i < skill.intents.length; i++) { if (!validateIntentName (skill.intents[i].intentName)) return false; if (!validateAnswer (skill.intents[i].answer)) return false; for (let j = 0; j < skill.intents.length; j++) { if (i === j) continue; if (skill.intents[i].intentName === skill.intents[j].intentName) return false; } for (let j = 0; j < skill.intents[i].questions.length; j++) { if (!validateQuestion (skill.intents[i].questions[j])) return false; for (let k = 0; k < skill.intents[i].questions.length; k++) { if (j === k) continue; if (skill.intents[i].questions[j] === skill.intents[i].questions[k]) return false; } } } return true; } catch (e) { console.log ('Error : ' + e); return false; } }, };