WIP Vorrang umgedreht (Test folgt auf dem Server)
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user