Se añaden cambios estructurales de la aplicacion

parent 0bcf6e79
const {parameters} = require("../config/parameters");
const config = require("config");
const express = require("express");
const basicAuth = require("express-basic-auth");
const userAgentValidator = require("express-useragent");
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({
authorizer : myAuthorizer,
unauthorizedResponse: getUnauthorizedResponse
}))
function myAuthorizer(username, password) {
const userMatches = basicAuth.safeCompare(username, parameters.basicAuth.USER)
const passwordMatches = basicAuth.safeCompare(password, parameters.basicAuth.PASS)
return userMatches & passwordMatches
}
function getUnauthorizedResponse(req) {
return req.auth
? (`Las credenciales ${req.auth.user}:${req.auth.password} no son válidas.`)
: 'No se ingresaron credenciales'
}
/**
* Se activa la utilizacion de json en express para esta instancia(Response)
*/
server.use(express.json());
/**
* Se activa la utilizacion de useragent en express para esta instancia(Response)
*/
server.use(userAgentValidator.express());
server.use(
basicAuth({
authorizer: myAuthorizer,
unauthorizedResponse: getUnauthorizedResponse,
})
);
server.use((req, res, next) => {
console.log("Autentificado correctamente!...");
next();
});
function myAuthorizer(username, password) {
const userMatches = basicAuth.safeCompare(
username,
config.get("basicAuth.USER")
);
const passwordMatches = basicAuth.safeCompare(
password,
config.get("basicAuth.PASS")
);
return userMatches & passwordMatches;
}
function getUnauthorizedResponse(req) {
return req.auth
? `Las credenciales ${req.auth.user}:${req.auth.password} no son válidas.`
: "No se ingresaron credenciales";
}
/**
* Definicion de funciones asociadas a endpoints
* MiddleWare Function: Verifica que el req.body sea json y lo trata como tal
*/
function listenPort (port) {
server.listen(port, () => {
console.log(`Escuchando en puerto ${port}...`);
});
}
server.use(express.json());
/**
* 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(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
*/
function listenPort(port) {
server.listen(port, () => {
console.log(`Escuchando en puerto ${port}...`);
});
}
module.exports.server = server ;
module.exports.listenPort = listenPort;
\ No newline at end of file
module.exports.server = server;
module.exports.listenPort = listenPort;
/**
* 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 configuration = require('../config/parameters');
const config = require('config');
var con = mysql.createPool({
host: configuration.parameters.database.DBHOST,
database: configuration.parameters.database.DBNAME,
user: configuration.parameters.database.DBUSER,
password: configuration.parameters.database.DBPSSW,
port: configuration.parameters.database.DBPORT
host: config.get("database.DBHOST"),
database: config.get("database.DBNAME"),
user: config.get("database.DBUSER"),
password: config.get("database.DBPSSW"),
port: config.get("database.DBPORT")
});
......
const config = require('config');
const szerCampaniaValidator = require("../validation_modules/validation");
const { constants } = require("../config/constants");
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
......@@ -22,7 +18,7 @@ class EndPointContenido {
//Si falta el parametro uid, error 400
var { error } = validateCampania.validate(req.body);
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;
}
......@@ -39,13 +35,13 @@ class EndPointContenido {
//console.log("obteniendo campaña asociada...");
const campania = await this.getCampaniaById([uid]);
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;
}
//console.log(campania[0].cam_id);
const template = await this.getTemplateById([campania[0].tem_id]);
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;
}
//console.log(template[0].tem_id);
......@@ -57,25 +53,25 @@ class EndPointContenido {
jsonResponse.contenidoHead = await this.generateHtmlSection(
campania,
template,
constants.HTML_SECTIONS.HEAD,
config.get("constants.HTML_SECTIONS.HEAD"),
isMobile
);
jsonResponse.contenidoBody = await this.generateHtmlSection(
campania,
template,
constants.HTML_SECTIONS.BODY,
config.get("constants.HTML_SECTIONS.BODY"),
isMobile
);
jsonResponse.contenidoFooter = await this.generateHtmlSection(
campania,
template,
constants.HTML_SECTIONS.FOOTER,
config.get("constants.HTML_SECTIONS.FOOTER"),
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) {
......@@ -94,17 +90,10 @@ class EndPointContenido {
contenidos.forEach((contenido) => {
let json = {};
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 != 0) html = html + "</div>";
console.log("generando nueva fila");
fila = contenido.cco_fila;
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;
......@@ -120,7 +109,6 @@ class EndPointContenido {
if(posContenido == cantidadContenido){
console.log("cerrando fila actual...");
json.contenido = json.contenido + '</div>';
arrayJson[posContenido - 1] = json;
}
......@@ -140,8 +128,8 @@ class EndPointContenido {
query =
query +
` WHERE cco_eliminado = ${constants.DELETE_STATUS.NON_DELETE}
and cco_estado = ${constants.ACTIVE_STATUS.ACTIVE}
` WHERE cco_eliminado = ${config.get("constants.DELETE_STATUS.NON_DELETE")}
and cco_estado = ${config.get("constants.ACTIVE_STATUS.ACTIVE")}
and cam_id = ${campania[0].cam_id}
and sec_id = ${type}
`;
......@@ -149,11 +137,11 @@ class EndPointContenido {
if (isMobile)
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
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;`;
//console.log(query);
......@@ -165,19 +153,19 @@ class EndPointContenido {
var html = "";
switch (contenido.cco_tipo) {
case constants.CONTENT_TYPE.TEXT:
case config.get("constants.CONTENT_TYPE.TEXT"):
html = "";
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>';
break;
case constants.CONTENT_TYPE.IMAGE:
case config.get("constants.CONTENT_TYPE.IMAGE"):
html = "";
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 + '</div>';
break;
case constants.CONTENT_TYPE.VIDEO:
case config.get("constants.CONTENT_TYPE.VIDEO"):
html = "";
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>`;
......
const config = require('config');
const serverApp = require('./appexpress_modules/app');
const endPoints = require('./endpoints_modules/endpoints');
const dbConn = require('./database_modules/database');
const log = require('./logger_modules/logger');
/*Trick para problema con eventListeners maximos*/
require('events').EventEmitter.prototype._maxListeners = 100;
/**
* Se activa la conexion a la base de datos en modalidad pool
**/
console.log(`Aplicacion : ${config.get("name")} `);
dbConn.con.getConnection((err, connection) => {
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;
}else console.log("Conectado!...") ;
......@@ -22,7 +25,7 @@ dbConn.con.getConnection((err, connection) => {
* Solo en ambientes de desarrollo locales se coloca el puerto directamente al iniciar la aplicacion
* 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);
......
/**
* 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 @@
"author": "",
"license": "ISC",
"dependencies": {
"app-root-path": "^3.0.0",
"basic-auth": "^2.0.1",
"config": "^3.3.2",
"express": "^4.17.1",
"express-basic-auth": "^1.2.0",
"express-useragent": "^1.0.15",
"joi": "^17.2.1",
"log": "^6.0.0",
"log-node": "^7.0.0",
"mongoose": "^5.10.9",
"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