Se añaden cambios estructurales de la aplicacion

parent 0bcf6e79
const {parameters} = require("../config/parameters"); const config = require("config");
const express = require("express"); const express = require("express");
const basicAuth = require("express-basic-auth"); const basicAuth = require("express-basic-auth");
const userAgentValidator = require("express-useragent"); const userAgentValidator = require("express-useragent");
const server = express(); const server = express();
server.use((req, res, next) => {
console.log("Verificando Credenciales...");
next();
});
/** /**
* Autorizacion basica permitida para la api generada * MiddleWare Function : Autorizacion basica permitida para la api generada
*/ */
server.use(basicAuth({ server.use(
authorizer : myAuthorizer, basicAuth({
unauthorizedResponse: getUnauthorizedResponse authorizer: myAuthorizer,
})) unauthorizedResponse: getUnauthorizedResponse,
})
);
function myAuthorizer(username, password) { server.use((req, res, next) => {
const userMatches = basicAuth.safeCompare(username, parameters.basicAuth.USER) console.log("Autentificado correctamente!...");
const passwordMatches = basicAuth.safeCompare(password, parameters.basicAuth.PASS) next();
});
return userMatches & passwordMatches function myAuthorizer(username, password) {
} const userMatches = basicAuth.safeCompare(
username,
config.get("basicAuth.USER")
);
const passwordMatches = basicAuth.safeCompare(
password,
config.get("basicAuth.PASS")
);
function getUnauthorizedResponse(req) { return userMatches & passwordMatches;
}
function getUnauthorizedResponse(req) {
return req.auth return req.auth
? (`Las credenciales ${req.auth.user}:${req.auth.password} no son válidas.`) ? `Las credenciales ${req.auth.user}:${req.auth.password} no son válidas.`
: 'No se ingresaron credenciales' : "No se ingresaron credenciales";
} }
/** /**
* Se activa la utilizacion de json en express para esta instancia(Response) * MiddleWare Function: Verifica que el req.body sea json y lo trata como tal
*/ */
server.use(express.json()); server.use(express.json());
/** /**
* Se activa la utilizacion de useragent en express para esta instancia(Response) * MiddleWare Function: verifica el contenido de req.body y lo convierte en formato json
*/
//server.use(express.urlencoded({extended : true}));
/**
* MiddleWare Function: permite consumir archivos fisicos de una carpeta del proyecto
*/ */
server.use(userAgentValidator.express());
//server.use(express.static('public'));
/**
* Se activa la utilizacion de useragent en express para esta instancia(Response)
*/
server.use(userAgentValidator.express());
/** /**
* Definicion de funciones asociadas a endpoints * Definicion de funciones asociadas a endpoints
*/ */
function listenPort (port) { function listenPort(port) {
server.listen(port, () => { server.listen(port, () => {
console.log(`Escuchando en puerto ${port}...`); console.log(`Escuchando en puerto ${port}...`);
}); });
} }
module.exports.server = server ; module.exports.server = server;
module.exports.listenPort = listenPort; module.exports.listenPort = listenPort;
\ No newline at end of file
/**
* Objeto de ayuda para respuestas http
*/
const constants = {
HTTP_STATUS_CODE : {
OK: 200,
BAD_REQUEST: 400,
NOT_FOUND: 404,
ERROR: 500,
},
/**
* Objeto de ayuda para secciones html campaña
*/
HTML_SECTIONS : {
HEAD: 1,
BODY: 2,
FOOTER: 3,
},
/**
* Objeto de ayuda para secciones html campaña
*/
ACTIVE_STATUS : {
ACTIVE: 1,
NON_ACTIVE: 2,
},
/**
* Objeto de ayuda para secciones html campaña
*/
DELETE_STATUS : {
DELETE: 1,
NON_DELETE: 0,
},
/**
* Objeto de ayuda para disposicion de contenido
*/
CONTENT_DEVICE_DISPOSITION : {
MOBILE: 1,
DESKTOP: 2,
BOTH: 3,
},
CONTENT_TYPE : {
TEXT: 1,
IMAGE: 2,
VIDEO: 3,
}
}
module.exports.constants = constants;
\ No newline at end of file
{
}
\ No newline at end of file
{
"constants": {
"HTTP_STATUS_CODE": {
"OK": 200,
"BAD_REQUEST": 400,
"NOT_FOUND": 404,
"ERROR": 500
},
"HTML_SECTIONS": {
"HEAD": 1,
"BODY": 2,
"FOOTER": 3
},
"ACTIVE_STATUS": {
"ACTIVE": 1,
"NON_ACTIVE": 2
},
"DELETE_STATUS": {
"DELETE": 1,
"NON_DELETE": 0
},
"CONTENT_DEVICE_DISPOSITION": {
"MOBILE": 1,
"DESKTOP": 2,
"BOTH": 3
},
"CONTENT_TYPE": {
"TEXT": 1,
"IMAGE": 2,
"VIDEO": 3
}
}
}
\ No newline at end of file
{
"name": "ENDPOINTS MCAFEE - DEV",
"version": "1.0.0",
"server":{
"PORT" : 5000
},
"database": {
"DBNAME": "mcafee_multiterritorios",
"DBHOST": "dbtesting.gearlabs.cl",
"DBPORT": 3306,
"DBUSER": "mcafee_admin_territorios",
"DBPSSW": "HSuwshhuw43&%1253"
},
"basicAuth": {
"USER": "userApi",
"PASS" : "34lq4od8usda"
}
}
\ No newline at end of file
const parameters = {
database: {
DBNAME: "mcafee_multiterritorios",
DBHOST: "dbtesting.gearlabs.cl",
DBPORT: 3306,
DBUSER: "mcafee_admin_territorios",
DBPSSW: "HSuwshhuw43&%1253",
},
basicAuth:{
USER : 'userApi',
PASS : '34lq4od8usda'
}
};
module.exports.parameters = parameters;
{
"name": "ENDPOINTS MCAFEE - PROD",
"version": "1.0.0",
"server":{
"PORT" : 5000
},
"database": {
"DBNAME": "mcafee_multiterritorios",
"DBHOST": "dbtesting.gearlabs.cl",
"DBPORT": 3306,
"DBUSER": "mcafee_admin_territorios",
"DBPSSW": "HSuwshhuw43&%1253"
},
"basicAuth": {
"USER": "userApi",
"PASS" : "34lq4od8usda"
}
}
\ No newline at end of file
const mysql = require('mysql'); const mysql = require('mysql');
const configuration = require('../config/parameters'); const config = require('config');
var con = mysql.createPool({ var con = mysql.createPool({
host: configuration.parameters.database.DBHOST, host: config.get("database.DBHOST"),
database: configuration.parameters.database.DBNAME, database: config.get("database.DBNAME"),
user: configuration.parameters.database.DBUSER, user: config.get("database.DBUSER"),
password: configuration.parameters.database.DBPSSW, password: config.get("database.DBPSSW"),
port: configuration.parameters.database.DBPORT port: config.get("database.DBPORT")
}); });
......
const config = require('config');
const szerCampaniaValidator = require("../validation_modules/validation"); const szerCampaniaValidator = require("../validation_modules/validation");
const { constants } = require("../config/constants");
const jsonResponse = {}; const jsonResponse = {};
/*dbConn.con.query("SELECT * from template_css_relacion where tem_id = 1 and dco_id = 1 and tcr_tipo = 1 and tcr_entorno = 1 limit 1", function (err, result) {
if (err) throw err;
//console.log(`Result: ${JSON.stringify(result)}`);
});*/
/** /**
* Definicion de clase para manejo de endpoints - Contenido * Definicion de clase para manejo de endpoints - Contenido
...@@ -22,7 +18,7 @@ class EndPointContenido { ...@@ -22,7 +18,7 @@ class EndPointContenido {
//Si falta el parametro uid, error 400 //Si falta el parametro uid, error 400
var { error } = validateCampania.validate(req.body); var { error } = validateCampania.validate(req.body);
if (error) { if (error) {
res.status(constants.HTTP_STATUS_CODE.BAD_REQUEST).json({"error" : error.details[0].message}); res.status(config.get("constants.HTTP_STATUS_CODE.BAD_REQUEST")).json({"error" : error.details[0].message});
return; return;
} }
...@@ -39,13 +35,13 @@ class EndPointContenido { ...@@ -39,13 +35,13 @@ class EndPointContenido {
//console.log("obteniendo campaña asociada..."); //console.log("obteniendo campaña asociada...");
const campania = await this.getCampaniaById([uid]); const campania = await this.getCampaniaById([uid]);
if(!campania || campania.length == 0) { if(!campania || campania.length == 0) {
res.status(constants.HTTP_STATUS_CODE.NOT_FOUND).json({"error" : `El uid ${uid} no esta asociado a ninguna campaña.`}); res.status(config.get("constants.HTTP_STATUS_CODE.NOT_FOUND")).json({"error" : `El uid ${uid} no esta asociado a ninguna campaña.`});
return; return;
} }
//console.log(campania[0].cam_id); //console.log(campania[0].cam_id);
const template = await this.getTemplateById([campania[0].tem_id]); const template = await this.getTemplateById([campania[0].tem_id]);
if(!template || template.length == 0) { if(!template || template.length == 0) {
res.status(constants.HTTP_STATUS_CODE.NOT_FOUND).json({"error" : `La campaña uid ${uid} no tiene asociado ninguna plantilla de diseño.`}); res.status(config.get("constants.HTTP_STATUS_CODE.NOT_FOUND")).json({"error" : `La campaña uid ${uid} no tiene asociado ninguna plantilla de diseño.`});
return; return;
} }
//console.log(template[0].tem_id); //console.log(template[0].tem_id);
...@@ -57,25 +53,25 @@ class EndPointContenido { ...@@ -57,25 +53,25 @@ class EndPointContenido {
jsonResponse.contenidoHead = await this.generateHtmlSection( jsonResponse.contenidoHead = await this.generateHtmlSection(
campania, campania,
template, template,
constants.HTML_SECTIONS.HEAD, config.get("constants.HTML_SECTIONS.HEAD"),
isMobile isMobile
); );
jsonResponse.contenidoBody = await this.generateHtmlSection( jsonResponse.contenidoBody = await this.generateHtmlSection(
campania, campania,
template, template,
constants.HTML_SECTIONS.BODY, config.get("constants.HTML_SECTIONS.BODY"),
isMobile isMobile
); );
jsonResponse.contenidoFooter = await this.generateHtmlSection( jsonResponse.contenidoFooter = await this.generateHtmlSection(
campania, campania,
template, template,
constants.HTML_SECTIONS.FOOTER, config.get("constants.HTML_SECTIONS.FOOTER"),
isMobile isMobile
); );
res.status(constants.HTTP_STATUS_CODE.OK).send(jsonResponse); res.status(config.get("constants.HTTP_STATUS_CODE.OK")).send(jsonResponse);
} }
async generateHtmlSection(campania, template, type, isMobile) { async generateHtmlSection(campania, template, type, isMobile) {
...@@ -94,17 +90,10 @@ class EndPointContenido { ...@@ -94,17 +90,10 @@ class EndPointContenido {
contenidos.forEach((contenido) => { contenidos.forEach((contenido) => {
let json = {}; let json = {};
var cantidadContenido = countContenido[0]["cantidad"]; var cantidadContenido = countContenido[0]["cantidad"];
console.log("seccion "+contenido.sec_id);
console.log("cantidad contenido "+cantidadContenido);
console.log("buffer de fila "+fila);
console.log(`fila actual ${contenido.cco_fila}...`);
if(fila !== contenido.cco_fila){ if(fila !== contenido.cco_fila){
if (fila != 0) html = html + "</div>"; if (fila != 0) html = html + "</div>";
console.log("generando nueva fila");
fila = contenido.cco_fila; fila = contenido.cco_fila;
html = html + `<div id='fila_id_${contenido.cco_fila}_${contenido.cco_id}' class='row'>`; html = html + `<div id='fila_id_${contenido.cco_fila}_${contenido.cco_id}' class='row'>`;
}else {
console.log("misma fila para la seccion");
} }
json.id = contenido.cco_id; json.id = contenido.cco_id;
...@@ -120,7 +109,6 @@ class EndPointContenido { ...@@ -120,7 +109,6 @@ class EndPointContenido {
if(posContenido == cantidadContenido){ if(posContenido == cantidadContenido){
console.log("cerrando fila actual...");
json.contenido = json.contenido + '</div>'; json.contenido = json.contenido + '</div>';
arrayJson[posContenido - 1] = json; arrayJson[posContenido - 1] = json;
} }
...@@ -140,8 +128,8 @@ class EndPointContenido { ...@@ -140,8 +128,8 @@ class EndPointContenido {
query = query =
query + query +
` WHERE cco_eliminado = ${constants.DELETE_STATUS.NON_DELETE} ` WHERE cco_eliminado = ${config.get("constants.DELETE_STATUS.NON_DELETE")}
and cco_estado = ${constants.ACTIVE_STATUS.ACTIVE} and cco_estado = ${config.get("constants.ACTIVE_STATUS.ACTIVE")}
and cam_id = ${campania[0].cam_id} and cam_id = ${campania[0].cam_id}
and sec_id = ${type} and sec_id = ${type}
`; `;
...@@ -149,11 +137,11 @@ class EndPointContenido { ...@@ -149,11 +137,11 @@ class EndPointContenido {
if (isMobile) if (isMobile)
query = query =
query + query +
` and dis_id in (${constants.CONTENT_DEVICE_DISPOSITION.MOBILE}, ${constants.CONTENT_DEVICE_DISPOSITION.BOTH}) `; ` and dis_id in (${config.get("constants.CONTENT_DEVICE_DISPOSITION.MOBILE")}, ${config.get("constants.CONTENT_DEVICE_DISPOSITION.BOTH")}) `;
else else
query = query =
query + query +
` and dis_id in (${constants.CONTENT_DEVICE_DISPOSITION.DESKTOP}, ${constants.CONTENT_DEVICE_DISPOSITION.BOTH}) `; ` and dis_id in (${config.get("constants.CONTENT_DEVICE_DISPOSITION.DESKTOP")}, ${config.get("constants.CONTENT_DEVICE_DISPOSITION.BOTH")}) `;
query = query + ` ORDER BY cco_fila ASC, cco_columna ASC;`; query = query + ` ORDER BY cco_fila ASC, cco_columna ASC;`;
//console.log(query); //console.log(query);
...@@ -165,19 +153,19 @@ class EndPointContenido { ...@@ -165,19 +153,19 @@ class EndPointContenido {
var html = ""; var html = "";
switch (contenido.cco_tipo) { switch (contenido.cco_tipo) {
case constants.CONTENT_TYPE.TEXT: case config.get("constants.CONTENT_TYPE.TEXT"):
html = ""; html = "";
html = this.getColumnaByDisposicion(contenido.cco_disposicion_nombre, contenido.cco_columna); html = this.getColumnaByDisposicion(contenido.cco_disposicion_nombre, contenido.cco_columna);
html = html + `<div id="texto_fil_${contenido.cco_fila}_con_${contenido.cco_id}" class="${contenido.cco_clase_css}" >${contenido.cco_contenido}</div>`; html = html + `<div id="texto_fil_${contenido.cco_fila}_con_${contenido.cco_id}" class="${contenido.cco_clase_css}" >${contenido.cco_contenido}</div>`;
html = html + '</div>'; html = html + '</div>';
break; break;
case constants.CONTENT_TYPE.IMAGE: case config.get("constants.CONTENT_TYPE.IMAGE"):
html = ""; html = "";
html = this.getColumnaByDisposicion(contenido.cco_disposicion_nombre, contenido.cco_columna); html = this.getColumnaByDisposicion(contenido.cco_disposicion_nombre, contenido.cco_columna);
html = html + `<img id="imagen_fil_${contenido.cco_fila}_con_${contenido.cco_id}" class="${contenido.cco_clase_css}" src="${contenido.cco_contenido}" />`; html = html + `<img id="imagen_fil_${contenido.cco_fila}_con_${contenido.cco_id}" class="${contenido.cco_clase_css}" src="${contenido.cco_contenido}" />`;
html = html + '</div>'; html = html + '</div>';
break; break;
case constants.CONTENT_TYPE.VIDEO: case config.get("constants.CONTENT_TYPE.VIDEO"):
html = ""; html = "";
html = this.getColumnaByDisposicion(contenido.cco_disposicion_nombre, contenido.cco_columna); html = this.getColumnaByDisposicion(contenido.cco_disposicion_nombre, contenido.cco_columna);
html = html + `<div id="video_fil_${contenido.cco_fila}_con_${contenido.cco_id}" class="${contenido.cco_clase_css} embed-responsive embed-responsive-16by9"><iframe class="embed-responsive-item" src="${contenido.cco_contenido}"></iframe></div>`; html = html + `<div id="video_fil_${contenido.cco_fila}_con_${contenido.cco_id}" class="${contenido.cco_clase_css} embed-responsive embed-responsive-16by9"><iframe class="embed-responsive-item" src="${contenido.cco_contenido}"></iframe></div>`;
......
const config = require('config');
const serverApp = require('./appexpress_modules/app'); const serverApp = require('./appexpress_modules/app');
const endPoints = require('./endpoints_modules/endpoints'); const endPoints = require('./endpoints_modules/endpoints');
const dbConn = require('./database_modules/database'); const dbConn = require('./database_modules/database');
const log = require('./logger_modules/logger');
/*Trick para problema con eventListeners maximos*/ /*Trick para problema con eventListeners maximos*/
require('events').EventEmitter.prototype._maxListeners = 100; require('events').EventEmitter.prototype._maxListeners = 100;
/** /**
* Se activa la conexion a la base de datos en modalidad pool * Se activa la conexion a la base de datos en modalidad pool
**/ **/
console.log(`Aplicacion : ${config.get("name")} `);
dbConn.con.getConnection((err, connection) => { dbConn.con.getConnection((err, connection) => {
if(err) { if(err) {
console.log("Ha ocurrido un error con la conexion..."); log.logger.error(`Error con la conexion a la base de datos : ${err}`);
throw err; throw err;
}else console.log("Conectado!...") ; }else console.log("Conectado!...") ;
...@@ -22,7 +25,7 @@ dbConn.con.getConnection((err, connection) => { ...@@ -22,7 +25,7 @@ dbConn.con.getConnection((err, connection) => {
* Solo en ambientes de desarrollo locales se coloca el puerto directamente al iniciar la aplicacion * Solo en ambientes de desarrollo locales se coloca el puerto directamente al iniciar la aplicacion
* en servidores, se debe obtener del objeto global "process" * en servidores, se debe obtener del objeto global "process"
*/ */
const port = process.env.PORT || 5000; const port = process.env.PORT || config.get("server.PORT");
serverApp.listenPort(port); serverApp.listenPort(port);
......
/**
* Configurations of logger.
*/
const appRoot = require('app-root-path');
const winston = require("winston");
var options = {
error: { /*Se almacena registro en archivo de error*/
level: 'error',
name: 'error-file',
filename: `${appRoot}/logs/error.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 100,
colorize: true,
datePattern: "yyyy-MM-dd-",
prepend: true,
},
info: {/*Se almacena registro en archivo de aplicacion*/
level: 'info',
name: 'success-file',
filename: `${appRoot}/logs/app.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 100,
colorize: true,
datePattern: "yyyy-MM-dd-",
prepend: true,
},
console: {/*Log que va directo a la consola*/
level: 'debug',
handleExceptions: true,
json: false,
colorize: true,
},
};
const consoleConfig = [
new winston.transports.Console(options.console),
new winston.transports.File(options.error),
new winston.transports.File(options.info),
];
const createLogger = winston.createLogger({
transports: consoleConfig,
exitOnError: false, // do not exit on handled exceptions
});
module.exports.logger = createLogger;
This diff is collapsed.
...@@ -11,13 +11,19 @@ ...@@ -11,13 +11,19 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"app-root-path": "^3.0.0",
"basic-auth": "^2.0.1", "basic-auth": "^2.0.1",
"config": "^3.3.2",
"express": "^4.17.1", "express": "^4.17.1",
"express-basic-auth": "^1.2.0", "express-basic-auth": "^1.2.0",
"express-useragent": "^1.0.15", "express-useragent": "^1.0.15",
"joi": "^17.2.1", "joi": "^17.2.1",
"log": "^6.0.0",
"log-node": "^7.0.0",
"mongoose": "^5.10.9", "mongoose": "^5.10.9",
"mysql": "^2.18.1", "mysql": "^2.18.1",
"underscore": "^1.11.0" "underscore": "^1.11.0",
"winston": "^3.3.3",
"winston-daily-rotate-file": "^4.5.0"
} }
} }
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