websegura/.eleventy.js

128 lines
3.3 KiB
JavaScript
Raw Normal View History

const glob = require("fast-glob");
const fs = require("fs");
(function createGlobalDataFile() {
const files = glob.sync([
"_data/{comunidades,provincias}/*.json",
"_data/general.json",
]);
let all = files
.map((f) => ({
file: JSON.parse(fs.readFileSync(f, "utf8")),
territorio_id: /^_data.*\/(.*)\.json$/.exec(f)[1],
}))
.map(({ file, territorio_id }) => ({
territorio_id,
territorio: file.name,
webs: file.webs,
}))
.map(({ territorio_id, territorio, webs }) =>
webs.map((w) => ({
territorio_id,
territorio,
url: w.url,
name: w.name,
twitter: w.twitter,
}))
)
.flat()
.map((obj) => {
let results;
try {
results = JSON.parse(
fs.readFileSync(
`_data/results/${obj.url.replace(
new RegExp("\\.", "g"),
"!"
)}.json`,
"utf8"
)
);
} catch (e) {
// Los resultados aún no están disponibles.
}
return {
...obj,
results,
};
})
.map((obj) => ({
...obj,
grade: obj.results?.grade,
score: obj.results?.score ?? 9000, // Si no hay, un número alto para que aparezca al final al ordenar de menos a más seguro.
tests_passed: obj.results?.tests_passed,
state: obj.results?.state,
}));
fs.writeFileSync("_data/all.json", JSON.stringify(all));
})();
2021-01-13 22:31:38 +01:00
module.exports = function (eleventyConfig) {
eleventyConfig.addPassthroughCopy("assets");
eleventyConfig.addPassthroughCopy("images");
2021-01-16 18:03:36 +01:00
2021-01-18 17:21:18 +01:00
eleventyConfig.addFilter("color", (security) => {
if (security.tests_passed < 5) {
return "danger";
}
2021-01-25 13:39:16 +01:00
switch (security && security.grade && security.grade[0]) {
case "A":
case "B":
2021-01-20 19:07:52 +01:00
return "safe";
case "C":
case "D":
return "moderate";
case "E":
case "F":
return "severe";
2021-01-18 17:21:18 +01:00
default:
2021-01-20 19:08:52 +01:00
return "unknown";
2021-01-18 17:21:18 +01:00
}
});
eleventyConfig.addFilter("abbr", (security) => {
let abbr = "";
2021-01-25 13:39:16 +01:00
switch (security && security.grade && security.grade[0]) {
case "A":
2021-01-18 17:21:18 +01:00
abbr = "El sitio es muy seguro.";
break;
case "B":
2021-01-18 17:21:18 +01:00
abbr = "El sitio es seguro.";
break;
case "C":
abbr = "El sitio podría mejorar su seguridad.";
2021-01-18 17:21:18 +01:00
break;
case "D":
abbr = "El sitio debería mejorar su seguridad.";
2021-01-18 17:21:18 +01:00
break;
case "E":
abbr = "El sitio es inseguro.";
2021-01-18 17:21:18 +01:00
break;
case "F":
abbr = "El sitio es muy inseguro.";
2021-01-18 17:21:18 +01:00
break;
default:
2021-01-18 17:43:58 +01:00
return "Desconocido.";
2021-01-16 18:03:36 +01:00
}
2021-01-18 17:21:18 +01:00
2021-02-01 23:05:25 +01:00
abbr += ` Pasó ${security.tests_passed} de las ${security.tests_quantity} comprobaciones realizadas`;
2021-01-18 17:21:18 +01:00
return abbr;
2021-01-16 18:03:36 +01:00
});
eleventyConfig.addFilter("urlEncode", (value) => encodeURIComponent(value));
eleventyConfig.addFilter("testsPassedLt", (value, testsPassed) =>
value.filter((v) => v.tests_passed < testsPassed)
);
eleventyConfig.addFilter(
"scoreGt",
(value, score) => value.filter((v) => v.score > score && v.score < 9000) // 9000 es un valor arbitrariamente alto para marcar webs con resultados pendientes.
);
eleventyConfig.addFilter("filterByTerritorioId", (value, territorio_id) =>
value.filter((v) => v.territorio_id === territorio_id)
);
2021-01-13 22:31:38 +01:00
};