Last active
August 29, 2015 14:03
-
-
Save diguinhorocks/6680c391d5f4501b2288 to your computer and use it in GitHub Desktop.
Mongoose User
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Module dependencies. | |
*/ | |
var mongoose = require('mongoose') | |
, Schema = mongoose.Schema | |
, crypto = require('crypto') | |
, _ = require('underscore') | |
, authTypes = ['github', 'twitter', 'facebook', 'google'] | |
/** | |
* User Schema | |
*/ | |
var UserSchema = new Schema({ | |
name: { type: String, lowercase: true, trim: true }, | |
email: String, | |
username: String, | |
provider: String, | |
school: String, | |
phone: String, | |
hashed_password: String, | |
salt: String, | |
msgs: Number, | |
img: String, | |
facebook: {}, | |
twitter: {}, | |
github: {}, | |
google: {} | |
}) | |
/** | |
* 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 validatePresenceOf = function (value) { | |
return value && value.length | |
} | |
// the below 4 validations only apply if you are signing up traditionally | |
/*UserSchema.path('name').validate(function (name) { | |
// if you are authenticating by any of the oauth strategies, don't validate | |
if (authTypes.indexOf(this.provider) !== -1) return true | |
return name.length | |
}, 'Nome Precisa ser Preenchido')*/ | |
UserSchema.path('email').validate(function (email) { | |
// if you are authenticating by any of the oauth strategies, don't validate | |
if (authTypes.indexOf(this.provider) !== -1) return true | |
return email.length | |
}, 'Email precisa ser preenchido') | |
/*UserSchema.path('username').validate(function (username) { | |
// if you are authenticating by any of the oauth strategies, don't validate | |
if (authTypes.indexOf(this.provider) !== -1) return true | |
return username.length | |
}, 'Usuário precisa ser preenchido')*/ | |
UserSchema.path('hashed_password').validate(function (hashed_password) { | |
// if you are authenticating by any of the oauth strategies, don't validate | |
if (authTypes.indexOf(this.provider) !== -1) return true | |
return hashed_password.length | |
}, 'Senha precisa ser preenchida') | |
/** | |
* Pre-save hook | |
*/ | |
UserSchema.pre('save', function(next) { | |
if (!this.isNew) return next() | |
if (!validatePresenceOf(this.password) | |
&& authTypes.indexOf(this.provider) === -1) | |
next(new Error('Usuário/Senha Invalida')) | |
else | |
next() | |
}) | |
/** | |
* Methods | |
*/ | |
UserSchema.methods = { | |
/** | |
* Authenticate - check if the passwords are the same | |
* | |
* @param {String} plainText | |
* @return {Boolean} | |
* @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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment