From 300497f4af9dea2b5dcaab813ef6aad1f44e6d87 Mon Sep 17 00:00:00 2001 From: Athanasios <ath.kouk.oid@gmail.com> Date: Sun, 25 Jul 2021 21:44:30 +0200 Subject: [PATCH] refactor validation checks --- routes/v1.js | 32 ++++-------------------- src/validationCheckFactory.js | 46 +++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/routes/v1.js b/routes/v1.js index d17f254..3a91200 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -1,25 +1,16 @@ const express = require("express"); -const { check, validationResult, oneOf } = require("express-validator") -const { toLower } = require("../src/customSanitizers"); +const { validationResult } = require("express-validator") const { errorHandler } = require("../src/errorHandler"); const checkFactory = require("../src/validationCheckFactory"); 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(); -const checks = [ - ...checkFactory.commonChecks(), - check("request") - .exists().withMessage("MissingParameterValue") - .customSanitizer(toLower) - .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue") -]; +const requestChecks = checkFactory.getChecksFor("request"); -router.route("/").get(checks, (req, res) => { +router.route("/").get(requestChecks, (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { @@ -32,12 +23,7 @@ router.route("/").get(checks, (req, res) => { }); -const capabilitiesChecks = [ - check("request") - .exists().withMessage("MissingParameterValue") - .customSanitizer(toLower) - .equals("getcapabilities").withMessage("InvalidParameterValue") -]; +const capabilitiesChecks = checkFactory.getChecksFor("capabilities"); router.route("/capabilities").get(capabilitiesChecks, (req, res) => { @@ -52,15 +38,7 @@ router.route("/capabilities").get(capabilitiesChecks, (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") -]; +const sceneChecks = checkFactory.getChecksFor("scene"); router.route("/scene").get(sceneChecks, (req, res) => { diff --git a/src/validationCheckFactory.js b/src/validationCheckFactory.js index f971efc..b2dd408 100644 --- a/src/validationCheckFactory.js +++ b/src/validationCheckFactory.js @@ -1,7 +1,6 @@ -const { check } = require("express-validator"); -const {toLower} = require("../src/customSanitizers"); +const { check, query } = require("express-validator"); +const { toLower, toUpper, boundingboxIsValid } = require("../src/customSanitizers"); const assets = require("../src/assets"); -const bb = require("../src/boundingbox"); const commonChecks = () => { return [ @@ -16,25 +15,46 @@ const commonChecks = () => { } -const specificChecks = (parameter) => { +const getChecksFor = (parameter) => { switch (parameter.toLowerCase()) { - case "getscene": { + + case "request": { return [ - check("boundingbox") + ...commonChecks(), + query("request") .exists().withMessage("MissingParameterValue") - .matches(/^((\-?\d+(\.\d+)?),){3}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue") - .custom(value => bb.isValid(value)).withMessage("InvalidParameterValue"), - check("layers") + .customSanitizer(toLower) + .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue") + ]; + } + + case "scene": { + return [ + query("crs") .exists().withMessage("MissingParameterValue") - .custom(value => assets.allLayersExist(value)).withMessage("UnknownLayer") + .customSanitizer(toUpper) + .matches(/^EPSG:\d{4,5}$/).withMessage("InvalidParameterValue"), + query("layers") + .exists().withMessage("MissingParameterValue") + .custom(value => assets.allLayersExist(value)).withMessage("UnknownLayer"), + query("boundingbox") + .optional() + .matches(/^((\-?\d+(\.\d+)?),){3}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue") + .custom(value => boundingboxIsValid(value)).withMessage("InvalidParameterValue") ]; } - case "getcapabilities": { - return []; + + case "capabilities": { + return [ + query("request") + .exists().withMessage("MissingParameterValue") + .customSanitizer(toLower) + .equals("getcapabilities").withMessage("InvalidParameterValue") + ]; } } } -module.exports = { commonChecks, specificChecks }; \ No newline at end of file +module.exports = { getChecksFor }; \ No newline at end of file -- GitLab