From 3bef26b332fbb3957c61b86993fb46701ad51125 Mon Sep 17 00:00:00 2001 From: s4luorth Date: Mon, 28 Sep 2026 10:54:07 +0200 Subject: [PATCH] FTP: Zugangsdaten robust einlesen (Quotes/CRLF entfernen) Gegen "530 Login incorrect" trotz korrekter Daten (FileZilla ok): host/ user/password werden von versehentlich umschliessenden Anfuehrungszeichen und CR/LF bereinigt (haeufige .env-/docker-env_file-Fallen unter Windows). Co-Authored-By: Claude Opus 4.8 --- src/config/index.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/config/index.js b/src/config/index.js index 1080f72..1fa4243 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -59,14 +59,20 @@ module.exports = { // Alternativer Übermittlungsweg (batch_submissions): Ziel-FTP für die täglichen // Bündel (xlsx + Sammel-Druck-PDF). Passwort NUR über ENV. - ftp: { - host: process.env.SKRIFT_FTP_HOST || '', - port: parseInt(process.env.SKRIFT_FTP_PORT, 10) || 21, - user: process.env.SKRIFT_FTP_USER || '', - password: process.env.SKRIFT_FTP_PASSWORD || '', + // envClean entfernt versehentliche umschließende Anführungszeichen und CR/LF + // (häufige .env-Fallen unter Windows/docker env_file), die sonst zu „530 + // Login incorrect" führen, obwohl die Daten korrekt sind. + ftp: (() => { + const envClean = (v) => String(v || '').replace(/[\r\n]+/g, '').replace(/^(['"])([\s\S]*)\1$/, '$2'); + return { + host: envClean(process.env.SKRIFT_FTP_HOST), + port: parseInt(process.env.SKRIFT_FTP_PORT, 10) || 21, + user: envClean(process.env.SKRIFT_FTP_USER), + password: envClean(process.env.SKRIFT_FTP_PASSWORD), // explizites FTP über TLS (wie im FTP-Client eingestellt). 'false' schaltet ab. secure: String(process.env.SKRIFT_FTP_SECURE || 'true').toLowerCase() !== 'false', // Selbstsigniertes Zertifikat zulassen (viele FTP-Server) – auf 'false' setzen für strikte Prüfung. - rejectUnauthorized: String(process.env.SKRIFT_FTP_REJECT_UNAUTHORIZED || 'false').toLowerCase() === 'true', - }, + rejectUnauthorized: String(process.env.SKRIFT_FTP_REJECT_UNAUTHORIZED || 'false').toLowerCase() === 'true', + }; + })(), };