no forzar HTTPS por defecto

This commit is contained in:
Cat /dev/Nulo 2023-11-27 20:10:57 -03:00
parent 0c86f0e3e3
commit fb67c517f3

View file

@ -4,18 +4,6 @@ import { Agent, fetch } from "undici";
import { join, normalize } from "node:path"; import { join, normalize } from "node:path";
import { pipeline } from "node:stream/promises"; import { pipeline } from "node:stream/promises";
// lista de dominios que permitimos usar http: porque tienen HTTPS roto..
const brokenHttps = [
"datos.mindef.gov.ar", // cert para otro dominio
"datos.energia.gob.ar", // cert para otro dominio
"datos.minem.gob.ar", // vencido 2022-17-06
"datos.agroindustria.gob.ar", // vencido 2022-03-10
"andino.siu.edu.ar", // self signed, igual parece que todo tira 404 en este..
"datos.salud.gob.ar", // timeout en HTTPS
"datos.jus.gob.ar", // HTTPS redirige incorrectamente a URLs inexistentes
"www.hidro.gob.ar", // no HTTPS
];
// FYI: al menos los siguientes dominios no tienen la cadena completa de certificados en HTTPS. tenemos que usar un hack (node_extra_ca_certs_mozilla_bundle) para conectarnos a estos sitios. (se puede ver con ssllabs.com) ojalá lxs administradorxs de estos servidores lo arreglen. // FYI: al menos los siguientes dominios no tienen la cadena completa de certificados en HTTPS. tenemos que usar un hack (node_extra_ca_certs_mozilla_bundle) para conectarnos a estos sitios. (se puede ver con ssllabs.com) ojalá lxs administradorxs de estos servidores lo arreglen.
// www.enargas.gov.ar, transparencia.enargas.gov.ar, www.energia.gob.ar, www.economia.gob.ar, datos.yvera.gob.ar // www.enargas.gov.ar, transparencia.enargas.gov.ar, www.energia.gob.ar, www.economia.gob.ar, datos.yvera.gob.ar
@ -48,7 +36,7 @@ const jsonString = json.join("");
const parsed = JSON.parse(jsonString); const parsed = JSON.parse(jsonString);
const jobs = parsed.dataset.flatMap((dataset) => const jobs = parsed.dataset.flatMap((dataset) =>
dataset.distribution.map((dist) => ({ dataset, dist })), dataset.distribution.map((dist) => ({ dataset, dist }))
); );
// forma barrani de distribuir carga entre servidores // forma barrani de distribuir carga entre servidores
shuffleArray(jobs); shuffleArray(jobs);
@ -56,11 +44,11 @@ const totalJobs = jobs.length;
let nFinished = 0; let nFinished = 0;
const duplicated = hasDuplicates( const duplicated = hasDuplicates(
jobs.map((j) => `${j.dataset.identifier}/${j.dist.identifier}`), jobs.map((j) => `${j.dataset.identifier}/${j.dist.identifier}`)
); );
if (duplicated) { if (duplicated) {
console.error( console.error(
"ADVERTENCIA: ¡encontré duplicados! es posible que se pisen archivos entre si", "ADVERTENCIA: ¡encontré duplicados! es posible que se pisen archivos entre si"
); );
} }
@ -82,7 +70,7 @@ const greens = Array(128)
dist.downloadURL.includes("minsegar-my.sharepoint.com") dist.downloadURL.includes("minsegar-my.sharepoint.com")
) { ) {
console.debug( console.debug(
`debug: reintentando ${dist.downloadURL} porque tiró 403`, `debug: reintentando ${dist.downloadURL} porque tiró 403`
); );
await wait(15000); await wait(15000);
continue request; continue request;
@ -91,7 +79,7 @@ const greens = Array(128)
} }
console.error( console.error(
`error: Failed to download URL ${dist.downloadURL} (${dataset.identifier}/${dist.identifier}):`, `error: Failed to download URL ${dist.downloadURL} (${dataset.identifier}/${dist.identifier}):`,
error, error
); );
if (!(error instanceof StatusCodeError)) continue request; if (!(error instanceof StatusCodeError)) continue request;
} finally { } finally {
@ -99,7 +87,7 @@ const greens = Array(128)
} }
} while (0); } while (0);
} }
})(), })()
); );
const interval = setInterval(() => { const interval = setInterval(() => {
@ -115,12 +103,6 @@ clearInterval(interval);
async function downloadDist(dataset, dist) { async function downloadDist(dataset, dist) {
const url = new URL(dist.downloadURL); const url = new URL(dist.downloadURL);
// Siempre usar HTTPS excepto cuando está roto
if (brokenHttps.includes(url.host)) {
url.protocol = "http:";
// console.debug(url);
} else url.protocol = "https:";
const res = await fetch(url.toString(), { const res = await fetch(url.toString(), {
dispatcher, dispatcher,
}); });
@ -131,12 +113,12 @@ async function downloadDist(dataset, dist) {
const fileDirPath = join( const fileDirPath = join(
outputPath, outputPath,
sanitizeSuffix(dataset.identifier), sanitizeSuffix(dataset.identifier),
sanitizeSuffix(dist.identifier), sanitizeSuffix(dist.identifier)
); );
await mkdir(fileDirPath, { recursive: true }); await mkdir(fileDirPath, { recursive: true });
const filePath = join( const filePath = join(
fileDirPath, fileDirPath,
sanitizeSuffix(dist.fileName || dist.identifier), sanitizeSuffix(dist.fileName || dist.identifier)
); );
const outputFile = await open(filePath, "w"); const outputFile = await open(filePath, "w");