2013-05-23 23:02:41 -05:00
|
|
|
(function() {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var util = require('util'),
|
|
|
|
_ = require('underscore'),
|
|
|
|
bcrypt = require('bcrypt'),
|
|
|
|
models = require('./models.js'),
|
|
|
|
BaseProvider = require('./dataProvider.bookshelf.base.js'),
|
|
|
|
UsersProvider;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The Users data provider implementation for Bookshelf.
|
|
|
|
*/
|
|
|
|
UsersProvider = function () {
|
|
|
|
BaseProvider.call(this, models.User, models.Users);
|
|
|
|
};
|
|
|
|
|
|
|
|
util.inherits(UsersProvider, BaseProvider);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Naive user add
|
|
|
|
* @param _user
|
|
|
|
* @param callback
|
|
|
|
*
|
|
|
|
* Hashes the password provided before saving to the database.
|
|
|
|
*/
|
|
|
|
UsersProvider.prototype.add = function (_user, callback) {
|
|
|
|
var self = this,
|
|
|
|
// Clone the _user so we don't expose the hashed password unnecessarily
|
|
|
|
userData = _.extend({}, _user);
|
|
|
|
|
|
|
|
this._hashPassword(userData.password, function (err, hash) {
|
|
|
|
if (err) {
|
|
|
|
return callback(err);
|
|
|
|
}
|
|
|
|
|
|
|
|
userData.password = hash;
|
|
|
|
|
|
|
|
BaseProvider.prototype.add.call(self, userData, function (err, createdUser) {
|
|
|
|
if (err) {
|
|
|
|
return callback(err);
|
|
|
|
}
|
|
|
|
|
|
|
|
callback(null, createdUser);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
UsersProvider.prototype._hashPassword = function (password, callback) {
|
|
|
|
bcrypt.genSalt(10, function (err, salt) {
|
|
|
|
if (err) {
|
|
|
|
return callback(err);
|
|
|
|
}
|
|
|
|
|
|
|
|
bcrypt.hash(password, salt, function (err, hash) {
|
|
|
|
if (err) {
|
|
|
|
return callback(err);
|
|
|
|
}
|
|
|
|
|
|
|
|
callback(null, hash);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
UsersProvider.prototype.check = function (_userdata, callback) {
|
|
|
|
var test = {
|
|
|
|
email_address: _userdata.email
|
|
|
|
};
|
2013-05-26 12:17:46 -05:00
|
|
|
|
|
|
|
this.model.forge(test).fetch().then(function (user) {
|
2013-05-23 23:02:41 -05:00
|
|
|
var _user;
|
|
|
|
bcrypt.compare(_userdata.pw, user.attributes.password, function (err, res) {
|
|
|
|
if (err) {
|
|
|
|
return callback(err);
|
|
|
|
}
|
|
|
|
if (res) {
|
|
|
|
_user = user;
|
|
|
|
} else {
|
|
|
|
_user = false;
|
|
|
|
}
|
|
|
|
callback(null, _user);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = UsersProvider;
|
|
|
|
}());
|