Cambiando la encriptación de la contraseña a bcrypt para aumentar la seguridad

parent a701e982
'use strict';
const crypto = require('crypto');
const bcrypt = require('bcrypt');
const saltRounds = 5;
function encrypt (password) {
let shasum = crypto.createHash('sha256');
shasum.update(password);
return shasum.digest('hex');
function hashPassword (text) {
return bcrypt.hash(text, saltRounds);
}
function compare (text, hash) {
return bcrypt.compare(text, hash);
}
function nano (template, data) {
......@@ -20,5 +23,6 @@ function nano (template, data) {
module.exports = {
nano,
encrypt
hashPassword,
compare
};
......@@ -215,7 +215,7 @@ module.exports = function userService (repositories, valueObjects, res) {
}
}
if (!nit && result.contrasena !== text.encrypt(contrasena)) {
if (!nit && !await text.compare(contrasena, result.contrasena)) {
if (result.nro_intentos !== undefined && !isNaN(result.nro_intentos)) {
let intentos = parseInt(result.nro_intentos) + 1;
debug('NRO. INTENTO', intentos, 'MAX. NRO. INTENTOS', nroMaxIntentos);
......
......@@ -100,7 +100,7 @@ test.serial('UsuarioService#createOrUpdate - new', async t => {
t.true(typeof usuario.id === 'number', 'Comprobando que el nuevo usuario tenga un id');
t.is(usuario.usuario, nuevoUsuario.usuario, 'Creando registro - usuario');
t.is(usuario.email, nuevoUsuario.email, 'Creando registro - email');
t.is(usuario.contrasena, text.encrypt(nuevoUsuario.contrasena), 'Creando registro - contraseña');
t.true(await text.compare(nuevoUsuario.contrasena, usuario.contrasena), 'Creando registro - contraseña');
t.is(res.message, 'OK', 'Mensaje correcto');
test.idUser = usuario.id;
......
......@@ -254,7 +254,7 @@ module.exports = function usuariosRepository (models, Sequelize) {
let updated;
try {
if (usuario.contrasena) {
usuario.contrasena = text.encrypt(usuario.contrasena);
usuario.contrasena = await text.hashPassword(usuario.contrasena);
}
if (t) {
cond.transaction = t;
......@@ -274,7 +274,7 @@ module.exports = function usuariosRepository (models, Sequelize) {
let result;
try {
if (usuario.contrasena) {
usuario.contrasena = text.encrypt(usuario.contrasena);
usuario.contrasena = await text.hashPassword(usuario.contrasena);
}
result = await usuarios.create(usuario, t ? { transaction: t } : {});
} catch (e) {
......
......@@ -3,13 +3,11 @@
const casual = require('casual');
const { setTimestampsSeeder } = require('../lib/util');
const { text } = require('../../common');
const contrasena = text.encrypt('123456');
// Datos de producción
let items = [
{
usuario: 'admin',
contrasena,
email: 'admin@email.gob.bo',
estado: 'ACTIVO',
cargo: 'Profesional',
......@@ -19,7 +17,6 @@ let items = [
},
{
usuario: 'ciudadano',
contrasena,
email: 'agepic-3837143@yopmail.com',
estado: 'ACTIVO',
cargo: '',
......@@ -34,7 +31,6 @@ if (typeof process.env.NODE_ENV === 'undefined' || process.env.NODE_ENV !== 'pro
let usuarios = Array(19).fill().map((_, i) => {
let item = {
usuario: casual.username,
contrasena,
email: casual.email,
estado: casual.random_element(['ACTIVO', 'INACTIVO']),
id_persona: casual.integer(3, 10),
......@@ -52,8 +48,17 @@ if (typeof process.env.NODE_ENV === 'undefined' || process.env.NODE_ENV !== 'pro
items = setTimestampsSeeder(items);
module.exports = {
up (queryInterface, Sequelize) {
return queryInterface.bulkInsert('sys_usuarios', items, {});
up: async (queryInterface, Sequelize) => {
try {
let hash = await text.hashPassword('123456');
for (let item of items) {
item.contrasena = hash;
}
await queryInterface.bulkInsert('sys_usuarios', items, {});
return Promise.resolve();
} catch (e) {
return Promise.reject(e);
}
},
down (queryInterface, Sequelize) { }
......
......@@ -4,7 +4,6 @@ const test = require('ava');
const { config, errors } = require('../../common');
const db = require('../');
const { text } = require('../../common');
const contrasena = text.encrypt('123456');
let repositories;
......@@ -44,7 +43,7 @@ test.serial('Usuario#createOrUpdate - new', async t => {
let usuario = `admin-${parseInt(Math.random() * 10000)}`;
const nuevoUsuario = {
usuario,
contrasena,
contrasena: await text.hashPassword('123456'),
email: `${usuario}@mail.com`,
estado: 'ACTIVO',
cargo: 'Jefe',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment