'use strict';

var bcrypt = require('bcryptjs'),
	async = require('async');


process.on('message', function(msg) {
	if (msg.type === 'hash') {
		hashPassword(msg.password, msg.rounds);
	} else if (msg.type === 'compare') {
		compare(msg.password, msg.hash);
	}
});

function hashPassword(password, rounds) {
	async.waterfall([
		function(next) {
			bcrypt.genSalt(parseInt(rounds, 10), next);
		},
		function(salt, next) {
			bcrypt.hash(password, salt, next);
		}
	], function(err, hash) {
		if (err) {
			process.send({err: err.message});
			return process.disconnect();
		}
		process.send({result: hash});
		process.disconnect();
	});
}

function compare(password, hash) {
	bcrypt.compare(password, hash, function(err, res) {
		if (err) {
			process.send({err: err.message});
			return process.disconnect();
		}
		process.send({result: res});
		process.disconnect();
 	});
}