From ebe10b9c49a0277eff1a1136157b0269fbc41638 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Sun, 23 Aug 2026 18:09:39 +0200 Subject: [PATCH] WIP Vorrang umgedreht (Test folgt auf dem Server) --- server-internal/lib/webdesign-geheimnisse.js | 55 +++++++++++++++----- webdesign/verwaltung.html | 16 ++++-- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/server-internal/lib/webdesign-geheimnisse.js b/server-internal/lib/webdesign-geheimnisse.js index 583dc1ba..c763e0ee 100644 --- a/server-internal/lib/webdesign-geheimnisse.js +++ b/server-internal/lib/webdesign-geheimnisse.js @@ -18,16 +18,35 @@ (lib/crypto.js). Wer die Datenbankdatei in die Hände bekommt -- etwa über eine alte Sicherungskopie -- hat damit noch nichts. - 2. DIE .env BLEIBT GÜLTIG und hat VORRANG. Wer die Werte lieber - klassisch dort pflegt, kann das weiter tun; das Supporter-Abo - benutzt dieselben zwei Werte und läuft womöglich längst darüber. - Die Datenbank ist die Ergänzung für alles, was dort noch fehlt -- - nicht ein zweiter, konkurrierender Ort. + 2. WAS IN DER VERWALTUNG STEHT, GILT. Die .env ist der Rückfall. - Vorrang für die .env und nicht umgekehrt, weil sonst ein Eintrag - im Browser stillschweigend eine funktionierende Servereinstellung - aushebeln könnte. Ein Fehlgriff in einem Formular darf keinen - laufenden Zahlungsverkehr umleiten. + ⚠️ Das war zuerst andersherum, und die Umkehr hat einen konkreten + Anlass (23.08.2026). + + Ursprünglich hatte die .env Vorrang -- mit dem Gedanken, dass ein + Fehlgriff im Formular keine funktionierende Servereinstellung + aushebeln soll. Das klingt vorsichtig, war aber falsch: + + In der .env stand PAYPAL_ENV=sandbox. Filipe stellte im Formular + auf "Echtbetrieb" -- und nichts geschah, weil der Serverwert + gewann. Seine echten Zugangsdaten wurden gegen den TESTSERVER von + PayPal geprüft, der sie zwangsläufig ablehnte. Die Meldung lautete + "PayPal hat die Anmeldung abgelehnt" und zeigte damit auf die + Zugangsdaten statt auf die Betriebsart. + + Ein Formular mit Schaltern, die nichts bewirken, ist schlimmer als + gar kein Formular: Es behauptet eine Wirkung, die es nicht hat, und + schickt einen bei der Fehlersuche in die falsche Richtung. + + Der Sinn dieser Ablage ist gerade, dass Filipe die Werte OHNE SSH + setzen kann. Dann muss das, was er dort einträgt, auch gelten. + + Gefährlich ist das nicht: Diese Werte werden ausschliesslich vom + Webdesign-Bereich gelesen. Das DogiCrew-Supporter-Abo hat sein + eigenes Modul (lib/paypal.js) und liest weiterhin direkt aus der + Umgebung -- es kann hierüber nicht beeinflusst werden. + + Welche Quelle gerade greift, zeigt die Verwaltung bei jedem Wert an. 3. WERTE KOMMEN NIE ZURÜCK. Es gibt keinen Weg, ein gespeichertes Geheimnis wieder auszulesen -- weder über die Schnittstelle noch @@ -99,11 +118,14 @@ export function istGeladen() { return geladen; } /* Der eine Zugriffspunkt fuer den Rest des Codes. SYNCHRON. - Reihenfolge: .env zuerst, Datenbank danach. Begruendung im Kopf. */ + Reihenfolge: Verwaltung zuerst, .env als Rueckfall. Begruendung im + Kopf der Datei -- kurz: Wer den Wert im Formular setzt, erwartet, dass + er gilt. */ export function einstellung(schluessel) { + const ausDb = speicher[schluessel]; + if (ausDb && String(ausDb).trim()) return String(ausDb).trim(); const ausEnv = process.env[schluessel]; - if (ausEnv && String(ausEnv).trim()) return String(ausEnv).trim(); - return speicher[schluessel] || ""; + return ausEnv ? String(ausEnv).trim() : ""; } /* Setzt einen Wert. Leerer Wert = Eintrag entfernen. */ @@ -142,7 +164,9 @@ export function stand() { for (const [schluessel, meta] of Object.entries(ERLAUBTE_SCHLUESSEL)) { const ausEnv = process.env[schluessel] && String(process.env[schluessel]).trim(); const ausDb = speicher[schluessel]; - const wert = ausEnv || ausDb || ""; + /* Dieselbe Reihenfolge wie in einstellung() -- sonst zeigt die + Anzeige eine andere Quelle an, als tatsaechlich benutzt wird. */ + const wert = ausDb || ausEnv || ""; const zeile = db .prepare(`SELECT updated_at FROM app_settings WHERE key = ?`) .get(PRAEFIX + schluessel); @@ -154,7 +178,10 @@ export function stand() { "gesetzt (7 Zeichen)" hilft dabei niemandem. */ wert: meta.geheim ? null : (schluessel === "PAYPAL_ENV" ? wert : null), laenge: wert ? wert.length : 0, - quelle: ausEnv ? "server" : (ausDb ? "verwaltung" : null), + quelle: ausDb ? "verwaltung" : (ausEnv ? "server" : null), + /* Liegt in BEIDEN etwas, ist das erwaehnenswert: Der Serverwert + wird dann nicht benutzt, und das soll man sehen. */ + auchAufServer: !!(ausDb && ausEnv), geaendert: zeile ? zeile.updated_at : null, beschreibung: meta.beschreibung, geheim: meta.geheim, diff --git a/webdesign/verwaltung.html b/webdesign/verwaltung.html index ef9ddfe1..b2c3a938 100644 --- a/webdesign/verwaltung.html +++ b/webdesign/verwaltung.html @@ -2169,13 +2169,23 @@ var felder = PP_FELDER.map(function (f) { var z = st[f.k] || {}; + /* Die Marke sagt, welche Quelle GERADE GILT -- nicht nur, dass + irgendwo etwas steht. Vorher stand bei einem Serverwert nur + "hinterlegt (auf dem Server)", und man konnte nicht erkennen, + dass die eigene Eingabe im Formular davon ueberstimmt wurde. */ var lage = z.gesetzt - ? 'hinterlegt' + - (z.quelle === "server" ? " (auf dem Server)" : "") + - (z.laenge ? " · " + z.laenge + " Zeichen" : "") + "" + ? '' + + (z.quelle === "server" ? "aus der Serverdatei" : "hier eingetragen") + + (z.laenge ? " · " + z.laenge + " Zeichen" : "") + "" + + (z.auchAufServer + ? ' Serverwert wird nicht benutzt' + : "") : 'fehlt'; if (f.art === "wahl") { + /* Der tatsaechlich wirksame Wert, nicht der zuletzt geklickte. + Sonst leuchtet "Echtbetrieb" auf, waehrend in Wahrheit der + Testmodus laeuft -- genau das ist am 23.08.2026 passiert. */ var jetztWert = z.wert || "sandbox"; return '
' + "" +