Skip to content

Instantly share code, notes, and snippets.

@giobyte8
Created November 7, 2014 05:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save giobyte8/1c4a92619cc6f33d5b87 to your computer and use it in GitHub Desktop.
Save giobyte8/1c4a92619cc6f33d5b87 to your computer and use it in GitHub Desktop.
Parte 2 | Creando un sistema de chat sobre NodeJS con Socket.IO, ExpressJS, MongoDB, Foundation y Openshift
/* Util para encriptar el password del usuario */
var bcrypt = require('bcrypt-nodejs');
/**
* Data Access Object (DAO) para 'users',
* Debe ser construido con un objeto conectado a la
* base de datos
*/
function UserDAO(db) {
/**
* Si el constructor es llamado sin el operador 'new',
* muestra una advertencia y lo llama correctamente.
*/
if (false == (this instanceof UserDAO)) {
console.log('WARNING: UserDAO constructor called without "new" operator');
return new UserDAO(db);
}
/* Colección 'users' en la base de datos */
var users = db.collection('users');
this.addUser = function (username, password, email, callback) {
// Verificamos que el usuario no exista aun
users.findOne({'_id': username}, function (err, user) {
if (err) throw err;
if (user) {
var user_yet_exist_error = new Error('User yet exists');
user_yet_exist_error.msg = "User yet exists"
return callback(user_yet_exist_error, null);
}
else {
// Generate password hash
var salt = bcrypt.genSaltSync();
var password_hash = bcrypt.hashSync(password, salt);
// Crear el nuevo 'user' con los parametros dados.
var user = {'_id': username, 'password': password_hash, 'email': email};
// Insertar el nuevo usuario en la base de datos
users.insert(user, function (err, result) {
if (err) return callback(err, null);
console.log('Nuevo usuario creado');
return callback(null, result[0]);
});
}
});
}
this.validateLogin = function (username, password, callback) {
users.findOne({'_id': username}, function (err, user) {
if (err) return callback(err, null);
if (user) {
if (bcrypt.compareSync(password, user.password)) {
callback(null, user);
}
else {
var invalid_password_error = new Error('Invalid password');
invalid_password_error.msg = 'Invalid password';
callback(invalid_password_error, null);
}
}
else {
var no_such_user_error = new Error('User not found');
no_such_user_error.msg = 'User not found';
callback(no_such_user_error, null);
}
});
}
}
module.exports.UserDAO = UserDAO;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment