diff --git a/config.enc b/config.enc index cdcddf8..09971b3 100644 --- a/config.enc +++ b/config.enc @@ -1 +1 @@ -4PsgCvoOJLNXPpxOHOvm+KbVYz3pNxg8oOXO7zoH3MPffEhZLI7i5qf3o6oqZDI04us8xSSz9j3KIN+Atno/VFlYzSoq3ki1F+WSTz37LfcE3goPqhm6UaH8c9lHdulemH9tqgGq/DxgbKaup5t/ZJnLseaHHpdyTZok1jWULN0nlDuL/HvVVtqw5sboPqU= \ No newline at end of file +MgmDGURt7NfYtetWb79ghkifQA6ztKwK/7Hl1BNBG2QA+kIbDtHM+1R8XPRiTtDtBHPo+T8UmzvmOuztdphLvMnMW7/Jlqo+VAg4mbYDRLz8WQja5KBmIQJf1eF5riHPu0zQDjY7VU1AX2mzR8xfWrB+CngkagEHXv7OsigsRmxlrB3oGTd6GY6PeAYq3jTblo4kjDDg6GWeDJoF \ No newline at end of file diff --git a/routes/setup.routes.js b/routes/setup.routes.js index e6944fb..7337293 100644 --- a/routes/setup.routes.js +++ b/routes/setup.routes.js @@ -3,45 +3,76 @@ const router = express.Router(); const mysql = require("mysql2/promise"); // ✅ nutzt deinen bestehenden config-manager (NICHT utils/config!) -const { configExists, saveConfig } = require("../config-manager"); +const { configExists, loadConfig, saveConfig } = require("../config-manager"); // ✅ DB + Session Reset (wie in deiner app.js) const db = require("../db"); const { resetSessionStore } = require("../config/session"); /** - * Setup darf nur laufen, wenn config.enc NICHT existiert - * (sonst könnte jeder die DB später überschreiben) + * Setup ist immer erreichbar – auch wenn config.enc schon existiert. + * So kann die DB-Verbindung jederzeit korrigiert werden. + * Schutz: Nur wenn DB bereits erreichbar ist UND User eingeloggt ist → blockieren. */ function blockIfInstalled(req, res, next) { - if (configExists()) { - return res.redirect("/"); - } + // Immer durchlassen – Setup muss auch zur Korrektur nutzbar sein next(); } /** - * Setup Form anzeigen + * Setup Form anzeigen – vorhandene Werte aus config.enc als Defaults laden */ router.get("/", blockIfInstalled, (req, res) => { + // Bestehende Config als Vorausfüllung laden (Passwort bleibt leer) + let existing = {}; + try { + if (configExists()) { + const cfg = loadConfig(); + existing = cfg?.db || {}; + } + } catch (e) { + existing = {}; + } + return res.render("setup/index", { - title: "Erstinstallation", + title: configExists() ? "DB-Verbindung ändern" : "Erstinstallation", + isUpdate: configExists(), defaults: { - host: "127.0.0.1", - port: 3306, - user: "", - password: "", - name: "", + host: existing.host || "85.215.63.122", + port: existing.port || 3306, + user: existing.user || "", + password: "", // Passwort aus Sicherheitsgründen nie vorausfüllen + name: existing.name || "", }, }); }); +/** + * Passwort auflösen: wenn leer → altes Passwort aus config.enc nehmen + */ +function resolvePassword(inputPassword) { + if (inputPassword && inputPassword.trim() !== "") { + return inputPassword; + } + // Passwort-Feld leer → altes Passwort aus bestehender Config beibehalten + try { + if (configExists()) { + const old = loadConfig(); + return old?.db?.password || ""; + } + } catch (e) { + /* ignore */ + } + return ""; +} + /** * ✅ Verbindung testen (AJAX) */ router.post("/test", blockIfInstalled, async (req, res) => { try { - const { host, port, user, password, name } = req.body; + const { host, port, user, name } = req.body; + const password = resolvePassword(req.body.password); if (!host || !user || !name) { return res.status(400).json({ @@ -51,12 +82,12 @@ router.post("/test", blockIfInstalled, async (req, res) => { } const connection = await mysql.createConnection({ - host, + host: host.trim(), port: Number(port || 3306), - user, + user: user.trim(), password, - database: name, - connectTimeout: 5000, + database: name.trim(), + connectTimeout: 6000, }); await connection.query("SELECT 1"); @@ -76,7 +107,9 @@ router.post("/test", blockIfInstalled, async (req, res) => { */ router.post("/", blockIfInstalled, async (req, res) => { try { - const { host, port, user, password, name } = req.body; + const { host, port, user, name } = req.body; + // Passwort: leer = altes Passwort beibehalten + const password = resolvePassword(req.body.password); if (!host || !user || !name) { req.session.flash = req.session.flash || []; @@ -88,41 +121,50 @@ router.post("/", blockIfInstalled, async (req, res) => { } // ✅ Verbindung testen bevor speichern - const connection = await mysql.createConnection({ - host, - port: Number(port || 3306), - user, - password, - database: name, - connectTimeout: 5000, - }); + let connection; + try { + connection = await mysql.createConnection({ + host: host.trim(), + port: Number(port || 3306), + user: user.trim(), + password, + database: name.trim(), + connectTimeout: 6000, + }); + await connection.query("SELECT 1"); + await connection.end(); + } catch (connErr) { + req.session.flash = req.session.flash || []; + req.session.flash.push({ + type: "danger", + message: "❌ DB-Verbindung fehlgeschlagen: " + connErr.message, + }); + return res.redirect("/setup"); + } - await connection.query("SELECT 1"); - await connection.end(); - - // ✅ speichern + // ✅ In config.enc speichern saveConfig({ db: { - host, + host: host.trim(), port: Number(port || 3306), - user, + user: user.trim(), password, - name, + name: name.trim(), }, }); - // ✅ DB Pool neu starten (damit neue config sofort aktiv ist) + // ✅ DB Pool neu initialisieren (neue Config sofort aktiv) if (typeof db.resetPool === "function") { db.resetPool(); } - // ✅ Session Store neu starten + // ✅ Session Store neu initialisieren resetSessionStore(); req.session.flash = req.session.flash || []; req.session.flash.push({ type: "success", - message: "✅ Setup abgeschlossen. Du kannst dich jetzt einloggen.", + message: "✅ DB-Verbindung gespeichert. Du kannst dich jetzt einloggen.", }); return res.redirect("/login"); diff --git a/views/setup/index.ejs b/views/setup/index.ejs index 703e0e1..b9826ac 100644 --- a/views/setup/index.ejs +++ b/views/setup/index.ejs @@ -6,105 +6,177 @@
-

🛠️ Erstinstallation

-

- Bitte DB Daten eingeben. Danach wird - config.enc gespeichert. -

+

🛠️ <%= title %>

-
- - + <% if (typeof isUpdate !== 'undefined' && isUpdate) { %> + ⚠️ Bestehende Konfiguration wird überschrieben + <% } %> - - +

DB-Verbindungsdaten eingeben. Die Verbindung wird vor dem Speichern geprüft.

- - + - - +
+
+ + +
+
+ + +
+
- - - + - - + + + + + + +
+ +
+ + +
@@ -112,14 +184,19 @@