diff options
Diffstat (limited to 'models/user.js')
-rw-r--r-- | models/user.js | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/models/user.js b/models/user.js deleted file mode 100644 index b61f7c9..0000000 --- a/models/user.js +++ /dev/null @@ -1,128 +0,0 @@ - -/** - * Module dependencies - */ - -var mongoose = require('mongoose') - , Schema = mongoose.Schema - , crypto =require('crypto') - , authTypes = ['facebook', 'twitter']; - - -/** - * User schema - */ - -var UserSchema = new Schema({ - name: String, - email: String, - username: String, - provider: String, - hashed_password: String, - salt: String, - facebook: {}, - twitter: {} -}); - -/** - * Virtuals - */ - -UserSchema - .virtual('password') - .set(function(password) { - this._password = password - this.salt = this.makeSalt() - this.hashed_password = this.encryptPassword(password) - }).get(function() { return this._password }); - -/** - * Validations - */ -var validatePrecenceOf = function (value) { - return value && value.length; -} - -// the four validations below only apply if you are signing up traditionally - -UserSchema.path('name').validate(function(name) { - // if you're authenticated by any of the oauth strategies (facebook, twitter), don't validate - if(authTypes.indexOf(this.provider) !== -1) return true; - return name.length; -}, 'Name cannot be blank'); - -UserSchema.path('email').validate(function(email) { - if(authTypes.indexOf(this.provider) !== -1) return true; - return email.length; -}, 'Email cannot be blank'); - -UserSchema.path('username').validate(function(username) { - if(authTypes.indexOf(this.provider) !== -1) return true; - return username.length; -}, 'Username cannot be blank'); - -UserSchema.path('hashed_password').validate(function(hashed_password) { - if(authTypes.indexOf(this.provider) !== -1) return true; - return hashed_password.length; -}, 'Password cannot be blank'); - -/** - * Pre-save hook - */ - -UserSchema.pre('save', function(next) { - if (!this.isNew) return next(); - - if(!validatePrecenceOf(this.password) - && authTypes.indexOf(this.provider) === -1) - next(new Error('Invalid password')); - else next(); -}); - - -/** - * Methods - */ - -UserSchema.methods = { - - /** - * Authenticate - check if passwords are the same - * - * @param {String} plainText - * @return {Bolean} - * @api public - */ - - authenticate: function(plainText) { - return this.encryptPassword(plainText) === this.hashed_password; - }, - - /** - * Make salt - * - * @return {String} - * @api public - */ - - makeSalt: function() { - return Math.round((new Date().valueOf() * Math.random())) + ''; - }, - - /** - * Encrypt password - * - * @param {String} password - * @return {String} - * @api public - */ - - encryptPassword: function(password) { - if (!password) return ''; - return crypto.createHmac('sha1', this.salt).update(password).digest('hex'); - } -} - -mongoose.model('User', UserSchema); - - |