validationCheckFactory.js 1.85 KB
Newer Older
Athanasios's avatar
Athanasios committed
1
2
const { check, query } = require("express-validator");
const { toLower, toUpper, boundingboxIsValid } = require("../src/customSanitizers");
Athanasios's avatar
Athanasios committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const assets = require("../src/assets");

const commonChecks = () => {
  return [
    check("service")
      .exists().withMessage("MissingParameterValue")
      .customSanitizer(toLower)
      .equals("3dps").withMessage("InvalidParameterValue"),
    check("acceptversions")
      .exists().withMessage("MissingParameterValue")
      .equals("1.0").withMessage("InvalidParameterValue")
  ];

}

Athanasios's avatar
Athanasios committed
18
const getChecksFor = (parameter) => {
Athanasios's avatar
Athanasios committed
19
20

  switch (parameter.toLowerCase()) {
Athanasios's avatar
Athanasios committed
21
22

    case "request": {
Athanasios's avatar
Athanasios committed
23
      return [
Athanasios's avatar
Athanasios committed
24
25
        ...commonChecks(),
        query("request")
Athanasios's avatar
Athanasios committed
26
          .exists().withMessage("MissingParameterValue")
Athanasios's avatar
Athanasios committed
27
28
29
30
31
32
33
34
          .customSanitizer(toLower)
          .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue")
      ];
    }

    case "scene": {
      return [
        query("crs")
Athanasios's avatar
Athanasios committed
35
          .exists().withMessage("MissingParameterValue")
Athanasios's avatar
Athanasios committed
36
37
38
39
40
41
42
43
44
          .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")
Athanasios's avatar
Athanasios committed
45
46
      ];
    }
Athanasios's avatar
Athanasios committed
47
48
49
50
51
52
53
54

    case "capabilities": {
      return [
        query("request")
          .exists().withMessage("MissingParameterValue")
          .customSanitizer(toLower)
          .equals("getcapabilities").withMessage("InvalidParameterValue")
      ];
Athanasios's avatar
Athanasios committed
55
56
57
58
59
    }
  }

}

Athanasios's avatar
Athanasios committed
60
module.exports = { getChecksFor };