Merge branch 'dev' of ssh://git.verdnatura.es:/var/lib/git/salix into dev

This commit is contained in:
Dani Herrero 2017-05-30 09:06:17 +02:00
commit f57e9ecf6f
16 changed files with 318 additions and 0 deletions

View File

@ -158,8 +158,10 @@ gulp.task('services', function() {
var auth = require('./services/auth/server/server.js'); var auth = require('./services/auth/server/server.js');
var client = require('./services/client/server/server.js'); var client = require('./services/client/server/server.js');
var server = require('./services/salix/server/server.js'); var server = require('./services/salix/server/server.js');
var mailer = require('./services/mailer/server.js');
auth.start(); auth.start();
client.start(); client.start();
server.start(); server.start();
mailer.start();
}); });

1
services/mailer/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

View File

@ -0,0 +1,30 @@
var express = require('express');
var router = new express.Router();
var mail = require('../mail.js');
var database = require('../database.js');
var template = require('../template.js');
// Escrito de cambios en méto de pago del cliente
router.post('/paymentUpdate', function(request, response) {
database.pool.query('SELECT Cliente, `e-mail` AS email FROM Clientes WHERE Id_Cliente = ?', [request.body.user], function(error, rs) {
var params = {
clientName: rs[0].Cliente
};
template.getTemplate('paymentUpdate', params, function(body) {
var data = {
recipient: rs[0].email,
subject: 'Cambios en las condiciones de pago',
body: body
};
if (mail.send(data)) {
response.json({status: "OK"});
} else {
response.json({status: "ERROR"});
}
});
});
});
module.exports = router;

View File

@ -0,0 +1,8 @@
var express = require('express');
var router = new express.Router();
router.get('/test', function(request, response) {
response.send("test");
});
module.exports = router;

View File

@ -0,0 +1,35 @@
<div style="width:600px;font-family:arial,sans-serif;font-size:16px;color:#555;margin:0 auto">
<div style="padding:20px;text-align: center;border-bottom: 1px solid #CCC">
<img class="logo" src="https://verdnatura.es/image/logo.png" style="width:307px;margin-bottom: 5px"/>
<div style="color: #CCC">
<span style="display: block;color:#555;font-size: 10px">Verdnatura Levante SL, B97367486</span>
<span style="display: block;color:#555;font-size: 10px">Avda. Espioca 100, 46460 Silla (Valencia)</span>
</div>
</div>
<div>
<div style="text-align:center">
<h1 style="color: #999;font-size: 34px;margin-top: 35px;margin-bottom: 35px">CAMBIOS EN CONDICIONES DE PAGO</h1>
</div>
<p>
Estimado cliente <strong style="font-size: 20px">{{clientName}}</strong>
</p>
<p style="text-align: justify">
Se han cambiado las condiciones de pago, estas son las nuevas:
</p>
</div>
<div style="font-size:10px;font-weight:100;border-top: 1px solid #CCC;margin-top: 35px">
<p style="text-align: justify">Este mensaje es privado y confidencial, y debe ser utilizado exclusivamente por la persona destinataria del mismo.
Si usted ha recibido este mensaje por error, le rogamos lo comunique al remitente y borre dicho mensaje y cualquier
documento adjunto que pudiera contener. Verdnatura Levante SL no renuncia a la confidencialidad ni a ningún privilegio
por causa de transmisión errónea o mal funcionamiento. Igualmente no se hace responsable de los cambios, alteraciones,
errores u omisiones que pudieran hacerse al mensaje una vez enviado.</p>
<p style="text-align: justify">En cumplimiento de lo dispuesto en la Ley Orgánica 15/1999, de Protección de Datos de Carácter Personal, le comunicamos
que los datos personales que facilite se incluirán en ficheros automatizados de VERDNATURA LEVANTE S.L., pudiendo en todo momento
ejercitar los derechos de acceso, rectificación, cancelación y oposición, comunicándolo por escrito al domicilio social de la entidad.
La finalidad del fichero es la gestión administrativa, contabilidad, y facturación.</p>
</div>
</div>

View File

@ -0,0 +1,11 @@
module.exports = {
/**
* Obtiene las variables de entorno
* @param {String} env - Nombre de la variable de entorno
* @return {String} Valor de la variable de entorno
*/
getEnv: function(env) {
return process.env[env];
}
};

View File

@ -0,0 +1,13 @@
var Settings = require('../Settings.js');
module.exports = {
/**
* Imprimir cabecera
*/
printHeader: function() {
console.log('##########################################################');
console.log('## ' + Settings.name + ' ##');
console.log('##########################################################');
}
};

View File

@ -0,0 +1,26 @@
var mysql = require('mysql');
var settings = require('./Settings.js');
var logger = require('./Logger.js');
module.exports = {
/**
* Variable de instancia del pool
*/
pool: null,
/**
* Iniciar pool de conexión con la base de datos
*/
init: function() {
this.pool = mysql.createPool(settings.mysql);
this.pool.getConnection(function(error, connection) {
if (error) {
logger.print(__LOG_ERROR, 'No se ha podido establecer la conexión con la base de datos. ' + error.code);
} else {
logger.print(__LOG_INFO, 'Conexión con la base de datos establecida');
}
});
}
};

View File

View File

@ -0,0 +1,28 @@
// Tipos de advertencias
global.__LOG_INFO = 1;
global.__LOG_WARNING = 2;
global.__LOG_ERROR = 3;
module.exports = {
/**
* Imprimir advertencia directamente en consola
* @param {Integer} type - Constante tipo de advertencia
*/
print: function(type, message)
{
if (type == __LOG_INFO)
{
console.log('[INFORMACIÓN] -> ' + message);
}
else if(type == __LOG_WARNING)
{
console.log('[ADVERTENCIA] -> ' + message);
}
else if(type == __LOG_ERROR)
{
console.log('[ERROR] -> ' + message);
}
}
}

View File

@ -0,0 +1,48 @@
var nodemailer = require('nodemailer');
var settings = require('./Settings.js');
var logger = require('./Logger.js');
// Módulo para el envío de emails
module.exports = {
transporter: null,
/**
* Si todavía no está inicializada la configuración,
* carga el fichero de configuración.
*/
init: function() {
this.transporter = nodemailer.createTransport(settings.smtp);
this.transporter.verify(function(error, success) {
if (error) {
logger.print(__LOG_ERROR, error);
} else {
logger.print(__LOG_INFO, 'Conexión SMTP establecida');
}
});
},
/**
* Envia un email con los datos recibidos desde un vector.
* @param {Object} data - Datos para el envío del email
*/
send: function(data) {
let mailOptions = {
from: '"' + settings.senderName + '" <' + settings.senderMail + '>',
to: data.recipient,
subject: data.subject,
html: data.body
};
this.transporter.sendMail(mailOptions, (error, info) => {
if (error) {
logger.print(__LOG_ERROR, error);
} else if (Settings.debug) {
logger.print(__LOG_INFO, 'Se ha enviado el email ' + info.messageId + ' [' + info.response + ']');
return true;
}
});
},
}

View File

@ -0,0 +1,16 @@
var express = require('express');
var router = new express.Router();
var settings = require('./settings.js');
// Página por defecto
router.get('/', function(request, response) {
response.send(Settings.name + ' v' + settings.version);
});
// Rutas de los escritos.
router.use('/manuscript', require('./Route/Manuscript.js'));
// Rutas de las notificaciones.
router.use('/notification', require('./Route/Notification.js'));
module.exports = router;

View File

@ -0,0 +1,2 @@
// Módulo de configuración
module.exports = require('./config.json');

View File

@ -0,0 +1,48 @@
var fs = require('fs');
var mustache = require('mustache');
var database = require('./database.js');
var logger = require('./logger.js');
var Template = {
/**
* Obtiene la plantilla
* @param {String} name - Nombre de la plantilla
* @param {Object} params - Datos a reemplazar.
* @param {Object} callback - Callback
*/
getTemplate: function(name, params, callback) {
database.pool.query('SELECT name, attachmentPath FROM vn.mailTemplates WHERE name = ?', [name], function(error, rs)
{
if (rs.length == 0) {
logger.print(__LOG_ERROR, 'La plantilla ' + name + ' no existe');
return;
}
var path = './Application/Template/' + rs[0].name + '.html';
if (!fs.existsSync(path)) {
logger.print(__LOG_ERROR, 'No se ha podido cargar la plantilla ' + name + '.html');
} else {
Template.render(path, params, function(body) {
callback(body);
});
}
});
},
/**
* Renderiza las plantillas
* @param {String} path - Ruta de la plantilla
* @param {Object} params - Listado de parámetros a remplazar
* @param {Object} callback - Callback
*/
render: function(path, params, callback) {
fs.readFile(path, 'utf8', function(error, body) {
mustache.parse(body);
callback(mustache.render(body, params));
});
}
};
module.exports = Template;

View File

@ -0,0 +1,13 @@
{
"name": "MailServer",
"version": "0.0.1",
"description": "Servidor de envío de correos",
"main": "server.js",
"dependencies": {
"body-parser": "^1.17.2",
"express": "^4.15.3",
"mustache": "^2.3.0",
"mysql": "^2.13.0",
"nodemailer": "^4.0.1"
}
}

37
services/mailer/server.js Normal file
View File

@ -0,0 +1,37 @@
/**
* Módulos necesarios
*/
var express = require('express');
var app = module.exports = express();
var bodyParser = require('body-parser');
var settings = require('./Application/settings.js');
var mail = require('./Application/mail.js');
var logger = require('./Application/logger.js');
var database = require('./Application/database.js');
var terminal = require('./Application/Util/terminal.js');
// Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
// Cargar rutas
app.use('/', require('./Application/router.js'));
app.start = function() {
return app.listen(settings.port, function() {
terminal.printHeader();
mail.init();
database.init();
logger.print(__LOG_INFO, 'Servidor de correo iniciado en el puerto ' + settings.port);
if (settings.debug) {
logger.print(__LOG_WARNING, 'El modo debug está activado');
}
});
};
if (require.main === module) {
app.start();
}