From c3e3375a14faa9b8ac369865863ab874c9d4447f Mon Sep 17 00:00:00 2001 From: Athanasios <ath.kouk.oid@gmail.com> Date: Tue, 14 Jul 2020 08:44:25 +0200 Subject: [PATCH] redirect requests --- routes/v1.js | 61 +++++++++++++++++++++++++++++------ src/customSanitizers.js | 1 + src/getCapabilitiesHandler.js | 2 +- src/redirectTo.js | 28 ++++++++++++++++ 4 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 src/redirectTo.js diff --git a/routes/v1.js b/routes/v1.js index 4995088..2b8a791 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -4,12 +4,54 @@ const { toLower } = require("../src/customSanitizers"); const { errorHandler } = require("../src/errorHandler"); const checkFactory = require("../src/validationCheckFactory"); const { getSceneHandler } = require("../src/getSceneHandler"); +const { getCapabilitiesHandler } = require("../src/getCapabilitiesHandler"); const bb = require("../src/boundingbox"); +const redirectTo = require("../src/redirectTo"); let router = express.Router(); const checks = [ ...checkFactory.commonChecks(), + check("request") + .exists().withMessage("MissingParameterValue") + .customSanitizer(toLower) + .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue") +]; + +router.route("/").get(checks, (req, res) => { + + const errors = validationResult(req); + if (!errors.isEmpty()) { + let exception = errorHandler(errors); + res.set("Content-Type", "application/xml"); + return res.status(400).send(exception); + } + + redirectTo(req.query.request, req, res); + +}); + +const capabilitiesChecks = [ + check("request") + .exists().withMessage("MissingParameterValue") + .customSanitizer(toLower) + .equals("getcapabilities").withMessage("InvalidParameterValue") +]; + +router.route("/capabilities").get(capabilitiesChecks, (req, res) => { + + const errors = validationResult(req); + if (!errors.isEmpty()) { + let exception = errorHandler(errors); + res.set("Content-Type", "application/xml"); + return res.status(400).send(exception); + } + + getCapabilitiesHandler(req, res); + +}); + +const sceneChecks = [ check("request") .exists().withMessage("MissingParameterValue") .customSanitizer(toLower) @@ -39,18 +81,17 @@ const checks = [ .isIn(["true", "false"]).withMessage("InvalidParameterValue") ]; -router.route("/") - .get(checks, (req, res) => { +router.route("/scene").get(sceneChecks, (req, res) => { - const errors = validationResult(req) - if (!errors.isEmpty()) { - let exception = errorHandler(errors); - res.set("Content-Type", "application/xml"); - return res.status(400).send(exception); - } + const errors = validationResult(req); + if (!errors.isEmpty()) { + let exception = errorHandler(errors); + res.set("Content-Type", "application/xml"); + return res.status(400).send(exception); + } - getSceneHandler(req, res); + getSceneHandler(req, res); - }); +}); module.exports = router; \ No newline at end of file diff --git a/src/customSanitizers.js b/src/customSanitizers.js index 4d5a2f0..42ccd80 100644 --- a/src/customSanitizers.js +++ b/src/customSanitizers.js @@ -1,4 +1,5 @@ const toLower = (value) => { + if(!value) return; return value.toLowerCase(); } diff --git a/src/getCapabilitiesHandler.js b/src/getCapabilitiesHandler.js index 9ad510a..1fcf62a 100644 --- a/src/getCapabilitiesHandler.js +++ b/src/getCapabilitiesHandler.js @@ -9,7 +9,7 @@ const getCapabilitiesHandler = (req, res) => { let capabilities = compiledFunction({ layers: layers }); res.set("Content-Type", "application/xml"); res.status(200).send(capabilities); - + }); } diff --git a/src/redirectTo.js b/src/redirectTo.js new file mode 100644 index 0000000..accf652 --- /dev/null +++ b/src/redirectTo.js @@ -0,0 +1,28 @@ +const url = require('url'); + +const redirectTo = (request, req, res) => { + + switch (request.toLowerCase()) { + case "getscene": { + res.redirect( + url.format({ + pathname: `${req.baseUrl}/scene`, + query: req.query, + }) + ); + break; + } + case "getcapabilities": { + res.redirect( + url.format({ + pathname: `${req.baseUrl}/capabilities`, + query: req.query, + }) + ); + break; + } + } + +} + +module.exports = redirectTo; \ No newline at end of file -- GitLab