/* ===================================================================== Umzug des Creator Workspace auf eine eigene Adresse (06.09.2026) Der Workspace liegt seit diesem Tag auf workspace.dogfather-universe.com und ist unter der alten Adresse dogfather-universe.com/workspace/ nur noch als Weiterleitung erreichbar. WARUM: Chrome laesst neben der Hauptseite, deren Bereich "/" die ganze Domain umfasst, keine zweite App auf derselben Adresse zu. Unter dem alten Pfad liess sich der Workspace deshalb nur als Verknuepfung ablegen, nie als richtige App installieren -- im Menue stand "Oeffnen in DOGFATHER UNIVERSE" statt "Seite als App installieren". Das ist kein Fehler, sondern Absicht (w3c/manifest Nr. 1180: verschachtelte Bereiche auf einem Ursprung sind "strongly not recommended"). Eine eigene Adresse ist der einzige Weg. Der PFAD /workspace/ bleibt erhalten. An ihm haengen 150 Server-Routen, 107 API-Aufrufe und 26 Server-Dateien -- ihn wegzuschneiden waere ein grosser Umbau ohne Gewinn, denn der Konflikt entsteht durch die gemeinsame ADRESSE, nicht durch den Pfad. WARUM DIESE ENTSCHEIDUNG IN EINER EIGENEN DATEI STEHT: Sie hat zwei Stellen, an denen ein Denkfehler teuer waere, und beide sieht man einer Bedingung nicht an: 1. Derselbe Dienst bedient BEIDE Adressen. Wer nicht auf den Host prueft, baut eine Endlosschleife -- die neue Adresse wuerde sich immer wieder auf sich selbst weiterleiten, und der Workspace waere fuer alle unerreichbar. 2. "faengt an mit /workspace" trifft auch /workspaceXYZ. Ein solcher Pfad gehoert nicht zum Workspace und darf nicht umgeleitet werden. Als eigene Funktion laesst sich beides pruefen, ohne den ganzen Server zu starten -- siehe pruef-workspace-umzug.mjs. ===================================================================== */ export const NEUE_ADRESSE = "https://workspace.dogfather-universe.com"; /** Die alten Adressen, von denen weitergeleitet wird. Bewusst eine feste * Liste und kein Muster: Ein Muster wie /dogfather-universe\.com$/ wuerde * auch auf workspace.dogfather-universe.com passen -- und damit genau die * Endlosschleife bauen, die es zu vermeiden gilt. */ const ALTE_HOSTS = new Set(["dogfather-universe.com", "www.dogfather-universe.com"]); /** * Soll diese Anfrage auf die neue Adresse umgeleitet werden? * @param {string} hostKopfzeile Inhalt des Host-Kopffeldes, ggf. mit Port * @param {string} pfad req.path, also ohne Abfrageteil */ export function sollUmgeleitetWerden(hostKopfzeile, pfad) { const host = String(hostKopfzeile || "").toLowerCase().split(":")[0]; if (!ALTE_HOSTS.has(host)) return false; /* Genau "/workspace" oder alles darunter -- aber NICHT /workspaceXYZ. */ return pfad === "/workspace" || pfad.startsWith("/workspace/"); } /** Express-Zwischenschritt. Bewusst 302 (voruebergehend) statt 301: * Ein 301 wird vom Browser dauerhaft gemerkt und laesst sich praktisch * nicht zurueckholen -- waere an der Umleitung etwas falsch, waere die * alte Adresse fuer jeden, der sie einmal aufgerufen hat, dauerhaft * unbrauchbar, auch nach einer Korrektur. */ export function workspaceUmzug(req, res, next) { if (sollUmgeleitetWerden(req.get("host"), req.path)) { return res.redirect(302, NEUE_ADRESSE + req.originalUrl); } next(); }