From 4591308a00d85dc83489db9e974ec9130f9c336a Mon Sep 17 00:00:00 2001 From: Athanasios <ath.kouk.oid@gmail.com> Date: Tue, 14 Jul 2020 08:51:43 +0200 Subject: [PATCH] redirect requests --- routes/v1.js | 80 ++++++++++++++++++++++++++++++----------- src/customSanitizers.js | 1 + src/redirectTo.js | 28 +++++++++++++++ 3 files changed, 88 insertions(+), 21 deletions(-) create mode 100644 src/redirectTo.js diff --git a/routes/v1.js b/routes/v1.js index 8bcd80e..d17f254 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -1,9 +1,13 @@ const express = require("express"); const { check, validationResult, oneOf } = require("express-validator") -const {toLower} = require("../src/customSanitizers"); +const { toLower } = require("../src/customSanitizers"); const { errorHandler } = require("../src/errorHandler"); const checkFactory = require("../src/validationCheckFactory"); -const requestHandlerFactory = require("../src/requestHandlerFactory"); +const { getSceneHandler } = require("../src/getSceneHandler"); +const { getCapabilitiesHandler } = require("../src/getCapabilitiesHandler"); +const redirectTo = require("../src/redirectTo"); +const assets = require("../src/assets"); +const bb = require("../src/boundingbox"); let router = express.Router(); @@ -12,30 +16,64 @@ const checks = [ check("request") .exists().withMessage("MissingParameterValue") .customSanitizer(toLower) - .isIn([ "getscene", "getcapabilities" ]).withMessage("InvalidParameterValue"), - oneOf([[ - check("request").customSanitizer(toLower).equals("getscene"), - ...checkFactory.specificChecks("getscene") - ], [ - check("request").customSanitizer(toLower).equals("getcapabilities"), - ...checkFactory.specificChecks("getcapabilities") - ]]) + .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue") ]; -router.route("/") - .get(checks, (req, res) => { +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); - } + const errors = validationResult(req); + if (!errors.isEmpty()) { + let exception = errorHandler(errors); + res.set("Content-Type", "application/xml"); + return res.status(400).send(exception); + } - let requestHandler = requestHandlerFactory.createHandler(req.query.request); + redirectTo(req.query.request, req, res); - requestHandler(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("boundingbox") + .exists().withMessage("MissingParameterValue") + .matches(/^((\-?\d+(\.\d+)?),){3}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue") + .custom(value => bb.isValid(value)).withMessage("InvalidParameterValue"), + check("layers") + .exists().withMessage("MissingParameterValue") + .custom(value => assets.allLayersExist(value)).withMessage("UnknownLayer") +]; + +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); + } + + 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/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