diff --git a/routes/v1.js b/routes/v1.js index 499508816a7c1595e975e23e9508d9129b458925..2b8a79101977d2443e91a56513dcf9c93d274d48 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 4d5a2f0feff94c3d614777b7184e03be65a5fea7..42ccd803e04d167419f825048a74d63e862364cb 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 9ad510a838e5490cc87f57625d5d66546c64b595..1fcf62a72268e908f9a3c9f668229a9a422c8a0f 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 0000000000000000000000000000000000000000..accf652a05f57e04df033879a8c6d3c62478d7b9 --- /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