'use strict';
var crypto = require('crypto');
var _ = require('lodash');
var Sequelize = require('sequelize');
module.exports = function (db) {
db.define('user', {
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
salt: {
type: Sequelize.STRING
},
twitter_id: {
type: Sequelize.STRING
},
facebook_id: {
type: Sequelize.STRING
},
google_id: {
type: Sequelize.STRING
}
}, {
instanceMethods: {
sanitize: function () {
return _.omit(this.toJSON(), ['password', 'salt']);
},
correctPassword: function (candidatePassword) {
return this.Model.encryptPassword(candidatePassword, this.salt) === this.password;
}
},
classMethods: {
generateSalt: function () {
return crypto.randomBytes(16).toString('base64');
},
encryptPassword: function (plainText, salt) {
var hash = crypto.createHash('sha1');
hash.update(plainText);
hash.update(salt);
return hash.digest('hex');
}
},
hooks: {
beforeValidate: function (user) {
Eif (user.changed('password')) {
user.salt = user.Model.generateSalt();
user.password = user.Model.encryptPassword(user.password, user.salt);
}
}
}
});
};
|