diff --git a/core/system_view_validate.js b/core/system_view_validate.js new file mode 100644 index 00000000..169f481d --- /dev/null +++ b/core/system_view_validate.js @@ -0,0 +1,56 @@ +var user = require('./user.js'); +var Config = require('./config.js').config; + + +exports.validateUserNameAvail = validateUserNameAvail; +exports.validateEmailAvail = validateEmailAvail; +exports.validateBirthdate = validateBirthdate; +exports.validatePasswordSpec = validatePasswordSpec; + +function validateUserNameAvail(data, cb) { + if(data.length < Config.users.usernameMin) { + cb(new Error('Username too short')); + } else if(data.length > Config.users.usernameMax) { + // generally should be unreached due to view restraints + cb(new Error('Username too long')); + } else { + var usernameRegExp = new RegExp(Config.users.usernamePattern); + var invalidNames = Config.users.newUserNames + Config.users.badUserNames; + + if(!usernameRegExp.test(data)) { + cb(new Error('Username contains invalid characters')); + } else if(invalidNames.indexOf(data.toLowerCase()) > -1) { + cb(new Error('Username is blacklisted')); + } else { + user.getUserIdAndName(data, function userIdAndName(err) { + if(!err) { // err is null if we succeeded -- meaning this user exists already + cb(new Error('Userame unavailable')); + } else { + cb(null); + } + }); + } + } +} + +function validateEmailAvail(data, cb) { + user.getUserIdsWithProperty('email_address', data, function userIdsWithEmail(err, uids) { + if(err) { + cb(new Error('Internal system error')); + } else if(uids.length > 0) { + cb(new Error('Email address not unique')); + } else { + cb(null); + } + }); +} + + +function validateBirthdate(data, cb) { + // :TODO: check for dates in the future, or > reasonable values + cb(isNaN(Date.parse(data)) ? new Error('Invalid birthdate') : null); +} + +function validatePasswordSpec(data, cb) { + cb((!data || data.length < Config.users.passwordMin) ? new Error('Password too short') : null); +}