Commit 4591308a authored by Athanasios's avatar Athanasios
Browse files

redirect requests

parent ecb9234f
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
const toLower = (value) => {
if(!value) return;
return value.toLowerCase();
}
......
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
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