2018-01-29 23:23:36 +01:00
|
|
|
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);
|
|
|
|
|
};
|
|
|
|
|
|
2018-03-30 10:54:15 +02:00
|
|
|
validateAnswer = function (answer, answerType) {
|
|
|
|
|
if (answerType !== constants.answerType.PREDEFINED) return true;
|
|
|
|
|
|
2018-01-29 23:23:36 +01:00
|
|
|
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);
|
|
|
|
|
};
|
|
|
|
|
|
2018-03-30 10:54:15 +02:00
|
|
|
validateExternalAnswerSource = function (externalAnswerSource, answerType){
|
|
|
|
|
// TODO: implement validation logic
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2018-01-29 23:23:36 +01:00
|
|
|
validateInvocationName = function (invocationName) {
|
|
|
|
|
if (
|
|
|
|
|
invocationName.length < constants.stringConstraints.INVOCATION_NAME_MIN_LENGTH ||
|
|
|
|
|
invocationName.length > constants.stringConstraints.INVOCATION_NAME_MAX_LENGTH
|
|
|
|
|
)
|
|
|
|
|
return false;
|
2018-03-30 10:54:15 +02:00
|
|
|
let validInvocationNameRegex = /^[a-z,.' ]*$/;
|
2018-01-29 23:23:36 +01:00
|
|
|
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;
|
2018-03-30 10:54:15 +02:00
|
|
|
if (!validateAnswer (skill.intents[i].answer, skill.intents[i].answerType)) return false;
|
|
|
|
|
if (!validateExternalAnswerSource(skill.intents[i].externalAnswerSource, skill.intents[i].answerType)) return false;
|
2018-01-29 23:23:36 +01:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
};
|