const Merchant = require("../models/merchant.js"); module.exports = { merchant: async function(merchant){ if(!this.isSanitary([merchant.name])){ return "Name contains illegal characters"; } if(!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(merchant.email)){ return "Invalid email address"; } let checkMerchant = await Merchant.findOne({email: merchant.email}); if(checkMerchant){ return "An account with that email address already exists"; } let checkPassword = this.password(merchant.password, merchant.confirmPassword); if(this.password(checkPassword !== true)){ return checkPassword; } return true; }, password: function(password, confirmPassword){ if(password.length < 10){ return "Password must contain at least 10 characters"; } if(password !== confirmPassword){ return "Passwords do not match"; } return true; }, quantity: function(num){ if(isNaN(num) || num === ""){ return "Quantity must be a number"; } if(num < 0){ return "Quantity cannot be a negative number"; } return true; }, ingredient: function(ingredient){ if(!this.isSanitary([ingredient.name, ingredient.category, ingredient.unit])){ return "Ingredient contains illegal characters"; } return true; }, recipe: function(recipe){ if(!this.isSanitary([recipe.name])){ return "Ingredient contains illegal characters"; } if(isNaN(recipe.price) || recipe.price === ""){ return "Price must be a number"; } if(recipe.price < 0){ return "Price cannot be a negative number"; } for(let i = 0; i < recipe.ingredients.length; i++){ let checkQuantity = this.quantity(recipe.ingredients[i].quantity); if(checkQuantity !== true){ return checkQuantity; } } return true; }, isSanitary: function(strings){ let disallowed = ["\\", "<", ">", "$", "{", "}", "(", ")"]; for(let i = 0; i < strings.length; i++){ for(let j = 0; j < disallowed.length; j++){ if(strings[i].includes(disallowed[j])){ return false; } } } return true; } }