Commit 3dfe53c7 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Habilita ruta de consulta de config en server

Para permitir la definición de valores de configuración de forma
dinámica, se define un punto de consulta en la aplicación node que, a su
vez, consulta de un sitio externo un fichero json para devolver su
contenido.

Aumenta tiempo entre consultas a sitemap (ahora 10 horas) y define el
tiempo de validez de config en 1h, aunque este también acepta parámetro
para forzar su actualización.

Elimina importación innecesaria de módulo fs.
parent a9bd52bf
Loading
Loading
Loading
Loading
+35 −4
Original line number Diff line number Diff line
const express = require('express'),
	bodyParser = require('body-parser'),
	fs = require('fs'),
	path = require('path'),
	http = require('http'),
	https = require('https'),
@@ -10,9 +9,14 @@ const express = require('express'),
	oauthClientSecret = process.env.OAUTH_CLIENT_SECRET,
	production = !!parseInt(process.env.PRODUCTION, 10),
	apiUrl = process.env.API_URL,
	sitemapUrl = process.env.SITEMAP_URL;
	configUrl = process.env.CONFIG_URL,
	sitemapUrl = process.env.SITEMAP_URL,

let logger, params, version, robotsContent, sitemapContent, sitemapLastUpdated, externalRequest;
	configExpirationMs = 3600000,
	sitemapExpirationMs = 36000000;

let logger, params, version, robotsContent, configContent, configLastUpdated, sitemapContent, sitemapLastUpdated,
	externalRequest;

function getLang(req) {

@@ -61,13 +65,39 @@ function on404Request(req, res) {
	});
}

function onConfigRequest(req, res) {

	res.set('Content-Type', 'application/json');

	const currTimestamp = Date.now();

	if (!configContent || !configContent.length || req.forceRefresh ||
		configLastUpdated < currTimestamp - configExpirationMs) {

		const afterResponseCallback = (status, content) => configContent = status ? content : '';

		const internalReq = https.request(configUrl, externalRequest.onOwnRequestResponse.bind(this, {
			originalRes: res,
			afterResponse: afterResponseCallback
		}));

		internalReq.on('error', externalRequest.onOwnRequestError.bind(this, res));

		internalReq.end();

		configLastUpdated = currTimestamp;
	} else {
		res.send(configContent);
	}
}

function onSitemapRequest(_req, res) {

	res.set('Content-Type', 'text/xml');

	const currTimestamp = Date.now();

	if (!sitemapContent || !sitemapContent.length || sitemapLastUpdated < currTimestamp - 300000) {
	if (!sitemapContent || !sitemapContent.length || sitemapLastUpdated < currTimestamp - sitemapExpirationMs) {
		const afterResponseCallback = (status, content) => sitemapContent = status ? content : '';

		const internalReq = https.request(sitemapUrl, externalRequest.onOwnRequestResponse.bind(this, {
@@ -187,6 +217,7 @@ function exposeRoutes(app) {
	app.get('/activateAccount/:token', onActivateAccountRequest)
		.get('/noSupportBrowser', onNoSupportBrowserRequest)
		.get('/404', on404Request)
		.get('/config', onConfigRequest)
		.get('/sitemap.xml', onSitemapRequest)
		.get('/robots.txt', onRobotsRequest)
		.get(/.*\/jquery.js/, onNullableRequest)
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ OAUTH_URL=https://api.domain/oauth
OAUTH_CLIENT_ID=app
OAUTH_CLIENT_SECRET=secret
API_URL=https://api.domain
CONFIG_URL=https://s3.eu-west-1.amazonaws.com/mediastorage.redmic/public/config.json
SITEMAP_URL=https://s3.eu-west-1.amazonaws.com/mediastorage.redmic/public/sitemap.xml
PRERENDER_URL=http://prerender:3000
PRERENDER_PROTOCOL=https
+1 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ services:
      OAUTH_CLIENT_ID:
      OAUTH_CLIENT_SECRET:
      API_URL:
      CONFIG_URL:
      SITEMAP_URL:
      PRERENDER_URL:
      PRERENDER_PROTOCOL: