import { stat } from 'node:fs/promises' import path from 'node:path' import { neueAnsicht } from './schalter.js' /** * Weichen der neuen Kundenansicht (Schalter KUNDENANSICHT_NEU, siehe schalter.js). Handler-Fabriken, die server/index.js * vor express.static einhaengt: je Sitzung die neue Seite aus public/neu/ oder next() fuer die alte (bytegleich, von * express.static ausgeliefert). Die neue Seite wird nie gecacht, weil dieselbe Adresse je Sitzung etwas anderes liefert. */ const NEUES_DASHBOARD = 'neu/dashboard.html' // Nachtrag N39: Seiten, die schon im Pilot aus public/neu/oeffentlich/ kommen, sobald die Datei dort liegt const OEFFENTLICHE_SEITEN = new Map([ ['/kuendigen.html', 'neu/oeffentlich/kuendigen.html'], ['/widerrufen.html', 'neu/oeffentlich/widerrufen.html'], ]) /** Neue Seite senden; no-cache steht vor sendFile, damit Express den Header nicht ueberschreibt. Fehler gehen an next(err). */ function sendeNeu(res, publicDir, datei, next) { res.set('Cache-Control', 'no-cache') res.sendFile(datei, { root: publicDir }, (err) => { if (err) next(err) }) } /** GET /dashboard.html: neue Ansicht -> public/neu/dashboard.html, sonst next(). */ export function dashboardWeiche({ publicDir }) { return (req, res, next) => { if (!neueAnsicht(req)) return next() sendeNeu(res, publicDir, NEUES_DASHBOARD, next) } } /** GET /neu/dashboard.html (Direktaufruf): neue Ansicht -> next() (express.static liefert die Datei), sonst 302 auf /dashboard.html. */ export function neuDirektWeiche() { return (req, res, next) => { if (neueAnsicht(req)) return next() res.redirect(302, '/dashboard.html') } } /** GET /kuendigen.html und /widerrufen.html (N39): angemeldete Pilot-Sitzung und Datei vorhanden -> neue Seite, sonst next(). */ export function oeffentlicheSeiteWeiche({ publicDir }) { return async (req, res, next) => { try { const datei = OEFFENTLICHE_SEITEN.get(req.path) if (!datei || !neueAnsicht(req)) return next() const info = await stat(path.join(publicDir, datei)).catch(() => null) if (!info?.isFile()) return next() sendeNeu(res, publicDir, datei, next) } catch (err) { next(err) } } }