Filipe: "auch die hintergrund bilder vom crew espace sollen anderes
aussehen, der community angepasst wie die zugangscode seite die ist
mega."
UMFAERBEN HAETTE HIER NICHT GEREICHT. Bei der Zugangswand war Rot das
Problem; innen zeigen die neun Buehnen das SPICY-MEDIA-LOGO selbst, in
`halle` und `arena` vielfach nebeneinander. Ein blaues fremdes Logo
waere schlimmer gewesen als ein rotes.
Die Motive gibt es laengst -- auf der oeffentlichen Dogfather-Seite:
studio/lounge "Team Dogi -- Familie. Treue. Zusammenhalt."
halle TEAM DOGI mit den Menschen des Teams
skyline/portal "Streamplan": Dogi und HasiDog auf der Buehne
arena "DogFathers Galerie": Filmrollen, ein Archiv
garage "Der Streamer": Filipe an seinem Platz
Fuer `garage` stand zuerst der Holo-Kontrollraum da -- grossartiges
Bild, aber darauf steht "WERDE MODI". Eine Einladung hinter dem
Aufgabenbrett von Leuten, die laengst dabei sind, liest sich falsch.
Ein Bild sagt etwas, auch wenn es nur Hintergrund ist.
DIE ABDUNKLUNG IST GERECHNET, NICHT GEWAEHLT
Mein erster fester Wert haette 18 von 27 Fassungen HELLER gemacht als
die, die sie ersetzen (114 gegen 67) -- ueber ihnen steht derselbe
kleine Text. Das Werkzeug misst jetzt jede Fassung gegen die bestehende
Buehne derselben Szene und senkt sie genau auf deren Wert.
Ueber eine KURVE statt eines schwarzen Schleiers: v' = 255*(v/255)^g
senkt die Lichter viel staerker als die Tiefen -- das Bild wird dunkler
und behaelt seine Zeichnung. Ein Schleier haette bei den hellsten
Motiven ueber 80 % gebraucht, und darunter liegt dann Nebel statt Bild
(derselbe Fehler wie beim Tresorbild).
Der erste Anlauf mit einer geschlossenen Formel war falsch: Die Kurve
wirkt auf jeden FARBKANAL, die Helligkeit ist eine gewichtete Summe der
drei, und L(v^g) ist nicht L(v)^g. Die Rechnung sagte 61,5 und heraus
kamen 67. Jetzt wird genaehert und nachgemessen, hoechstens sechsmal.
Beim Hochkant-Ausschnitt wird zusaetzlich das FENSTER GESUCHT: fuenf
Kandidaten, erst "dunkel genug", dann "am meisten Motiv". Die Mitte --
die das Haus sonst nimmt -- ist bei diesen Bildern das Hellste.
ZWEI FUNDE AUS DEM BILDSCHIRMFOTO, die nichts mit den Buehnen zu tun
hatten:
1. DIE KOPFLEISTE sagte "SPICY & DOGI · CREATOR WORKSPACE". Reitertitel,
Begruessung und Symbol waren laengst richtig -- nur die Zeile, die
man als Erstes ansieht, nicht. Der Grund: Auf Unterseiten traegt die
Leiste einen Rueckweg-Verweis, auf der Startseite blossen Text; mein
Code kannte nur die erste Bauform.
2. DAS CHILI-ZEICHEN kommt aus dem CSS als Bild, an drei Stellen
(Kopfleiste, Siegel im Ring, die schwebenden Wasserzeichen). Auf
crew. wird die Datei serverseitig durch den Husky ersetzt -- alle
drei auf einmal, und ohne Flackern, weil schon der erste Abruf das
richtige Bild bekommt.
GEMESSEN
pruef-crew-adresse 123 (statt 117): Fuer JEDE Buehne aus start.css --
die Namen werden dort GELESEN, nicht abgeschrieben --
gibt es auf crew. ein eigenes Motiv, auf workspace.
das alte, und die beiden sind nachweislich
verschiedene Dateien.
pruef-rollen 274 pruef-start-ansicht, pruef-zwischenspeicher 21
pruef-modi-wortleck 5 -- er hat wieder angeschlagen, zweimal auf
Kommentare, die ich selbst geschrieben hatte.
27 Fassungen, 3,5 MB (die bisherigen neun Szenen brauchen 7,1).
Co-Authored-By: Claude Opus 5 <[email protected]>
311 lines
14 KiB
JavaScript
311 lines
14 KiB
JavaScript
/* =====================================================================
|
|
Die eigene Adresse der Modi-App (10.09.2026)
|
|
|
|
crew.dogfather-universe.com
|
|
|
|
WARUM EINE EIGENE ADRESSE. Derselbe Grund, aus dem der Creator
|
|
Workspace am 06.09.2026 umgezogen ist (siehe workspace-umzug.js):
|
|
Auf einem Ursprung laesst sich genau EINE App installieren. Zwei
|
|
Manifeste mit verschachtelten Bereichen sind laut w3c/manifest
|
|
Nr. 1180 "strongly not recommended", und Chrome haelt sich daran --
|
|
der zweite Eintrag erscheint dann nur als Verknuepfung, nie als
|
|
eigene App. Filipe will fuer die Modis ausdruecklich eine eigene
|
|
App: "ich will dass es eine eigene app wird."
|
|
|
|
WAS SICH NICHT AENDERT: der Pfad /workspace/, der Dienst (4100), die
|
|
Datenbank, der Code. Getrennt wird ueber den HOSTNAMEN, nicht ueber
|
|
einen zweiten Prozess. Genau so machen es Hauptseite und Workspace
|
|
schon heute.
|
|
|
|
---------------------------------------------------------------------
|
|
DREI FALLEN, DIE MAN EINER BEDINGUNG NICHT ANSIEHT
|
|
---------------------------------------------------------------------
|
|
|
|
1. EIN MUSTER STATT EINER LISTE WAERE TOEDLICH.
|
|
/dogfather-universe\.com$/ passt auch auf
|
|
workspace.dogfather-universe.com -- und wuerde damit genau die
|
|
Adresse abschalten, die man schuetzen will. Deshalb hier zwei
|
|
feste Mengen und kein einziges Muster. (Dieselbe Ueberlegung
|
|
steht schon in workspace-umzug.js; sie hat dort einen Ausfall
|
|
verhindert und gilt hier unveraendert.)
|
|
|
|
2. "ALLES AUSSER crew." IST NICHT DASSELBE WIE "DIE ALTEN ADRESSEN".
|
|
Der naheliegende Satz waere: "Ein Modi darf ueberall rein, nur
|
|
nicht auf einer Adresse, die nicht crew heisst." Damit waeren
|
|
localhost, 127.0.0.1 und jede Pruefadresse eingeschlossen -- und
|
|
saemtliche Modi-Pruefungen wuerden ab sofort messen, dass ein
|
|
Modi nirgends hereinkommt, ohne dass irgendwo etwas rot wird.
|
|
Ein gruener Lauf, der nichts mehr prueft, ist schlimmer als ein
|
|
roter. Deshalb ist OHNE_MODI_HOSTS eine AUFZAEHLUNG der drei
|
|
echten Adressen. Wer eine vierte anlegt, traegt sie hier nach --
|
|
und pruef-crew-adresse.mjs sagt es ihm, wenn er es vergisst.
|
|
|
|
3. "FAENGT AN MIT /workspace" TRIFFT AUCH /workspaceXYZ.
|
|
Beim Workspace-Umzug waere das beinahe passiert. Hier gilt es
|
|
genauso, deshalb dieselbe Schreibweise: genau "/workspace" oder
|
|
alles unter "/workspace/", sonst nichts.
|
|
|
|
---------------------------------------------------------------------
|
|
WARUM DIE ALTE ADRESSE FUER MODIS ZUGEHT
|
|
---------------------------------------------------------------------
|
|
|
|
Ein Modi, der sich weiterhin auf workspace.dogfather-universe.com
|
|
anmelden koennte, haette zwei Anmeldungen, zwei Sitzungen und zwei
|
|
Apps auf dem Startbildschirm -- und der verborgene Zugang haette
|
|
damit eine zweite Spur genau dort, wo alle anderen arbeiten. Er
|
|
bekommt deshalb auf der alten Adresse KEINE Sitzung, sondern den
|
|
Hinweis auf die neue.
|
|
|
|
DASS DIESER HINWEIS DIE ADRESSE NENNT, IST KEIN LECK: Er erscheint
|
|
nur nach Eingabe eines gueltigen Modi-Codes. Wer den hat, ist Modi.
|
|
Fuer jeden anderen -- auch fuer jeden Manager mit gueltigem eigenen
|
|
Code -- veraendert sich an der alten Adresse ueberhaupt nichts.
|
|
|
|
---------------------------------------------------------------------
|
|
UND WARUM AUF DER NEUEN ADRESSE NUR MODIS HEREINKOMMEN
|
|
---------------------------------------------------------------------
|
|
|
|
Sonst waere crew. eine zweite, vollwertige Tuer in den Workspace --
|
|
und die erste Person, die sie zufaellig errät und ihren eigenen Code
|
|
eintippt, wuesste sofort, dass es hier noch etwas gibt. Ein fremder
|
|
Code bekommt dort deshalb dieselbe Antwort wie ein erfundener: die
|
|
Zugangswand sieht aus wie immer, und der Code stimmt nicht.
|
|
===================================================================== */
|
|
|
|
export const CREW_ADRESSE = "https://crew.dogfather-universe.com";
|
|
|
|
/* =====================================================================
|
|
DAS TEAM VON DOGI -- WELCHE ROLLEN DAZUGEHOEREN
|
|
|
|
Blueprint V3.0, Kapitel 1.1 und 3.1: DogFather (Owner), die "rechte
|
|
Hand" (Deputy, eine Person, austauschbar) und die Modis. Die beiden
|
|
letzten leben ausschliesslich auf dieser Adresse und sind fuer die
|
|
Workspace-Welt unsichtbar. DogFather steht in beiden Welten und
|
|
gehoert deshalb NICHT in diese Menge -- sie beantwortet die Frage
|
|
"wer ist hier verborgen", nicht "wer gehoert zum Team".
|
|
|
|
WARUM SIE HIER STEHT UND NICHT IN workspace.js, wo das uebrige
|
|
Rollenmodell liegt: workspace.js importiert diese Datei. Stuende die
|
|
Menge dort, muesste diese Datei zurueckimportieren -- ein Kreis, den
|
|
Node zwar aufloest, aber mit halb gefuellten Modulen, und das faellt
|
|
erst zur Laufzeit auf. Diese Datei hat bewusst KEINE eigenen
|
|
Importe; sie ist damit der einzige Ort, an dem so etwas gefahrlos
|
|
stehen kann. workspace.js gibt sie fuer die Fachmodule weiter. */
|
|
export const TEAM_DOGI_ROLLEN = new Set(["hand", "modi"]);
|
|
|
|
/** Die Adresse der Modi-App. Feste Menge, kein Muster -- Falle 1. */
|
|
const CREW_HOSTS = new Set(["crew.dogfather-universe.com"]);
|
|
|
|
/** Die echten Adressen, auf denen ein Modi nichts verloren hat.
|
|
* Aufzaehlung und ausdruecklich NICHT "alles ausser crew" -- Falle 2. */
|
|
const OHNE_MODI_HOSTS = new Set([
|
|
"dogfather-universe.com",
|
|
"www.dogfather-universe.com",
|
|
"workspace.dogfather-universe.com",
|
|
]);
|
|
|
|
/** Nur der Name, ohne Port und in Kleinschreibung.
|
|
* Hostnamen sind laut RFC 4343 gross/klein-unempfindlich; ein Browser
|
|
* darf "Workspace.Dogfather-Universe.com" schicken. */
|
|
function nurHost(hostKopfzeile) {
|
|
return String(hostKopfzeile || "").toLowerCase().split(":")[0];
|
|
}
|
|
|
|
/** Kommt die Anfrage ueber die Adresse der Modi-App? */
|
|
export function istCrewAdresse(hostKopfzeile) {
|
|
return CREW_HOSTS.has(nurHost(hostKopfzeile));
|
|
}
|
|
|
|
/** Ist das eine der Adressen, auf denen Modis nicht mehr arbeiten? */
|
|
export function istOhneModiAdresse(hostKopfzeile) {
|
|
return OHNE_MODI_HOSTS.has(nurHost(hostKopfzeile));
|
|
}
|
|
|
|
/** Gehoert dieser Pfad zum Workspace-Teil? Genau "/workspace" oder
|
|
* alles darunter -- aber NICHT /workspaceXYZ (Falle 3). */
|
|
export function istWorkspacePfad(pfad) {
|
|
const p = String(pfad || "");
|
|
return p === "/workspace" || p.startsWith("/workspace/");
|
|
}
|
|
|
|
/**
|
|
* Darf diese Person auf dieser Adresse angemeldet sein?
|
|
*
|
|
* Die eine Regel, aus der beide Richtungen folgen. Sie steht hier als
|
|
* eigene Funktion, damit sie ohne laufenden Server pruefbar ist -- und
|
|
* damit sie an GENAU EINER Stelle steht: sitzungLesen() in
|
|
* workspace.js. Jedes der 26 Fachmodule geht dort durch.
|
|
*
|
|
* @param {string} rolle Rolle der angemeldeten Person
|
|
* @param {string} hostKopfzeile Inhalt des Host-Kopffeldes
|
|
*/
|
|
export function sitzungPasstZurAdresse(rolle, hostKopfzeile) {
|
|
const team = TEAM_DOGI_ROLLEN.has(rolle);
|
|
/* crew.: das Team -- und DogFather, der in beiden Welten arbeitet. */
|
|
if (istCrewAdresse(hostKopfzeile)) return team || rolle === "admin";
|
|
/* Die echten alten Adressen: alle ausser dem Team. */
|
|
if (istOhneModiAdresse(hostKopfzeile)) return !team;
|
|
/* localhost, Pruefadressen: unberuehrt. */
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Express-Zwischenschritt fuer die Adresse der Modi-App.
|
|
*
|
|
* Er macht zwei Dinge und ausdruecklich nichts mit Rechten -- die
|
|
* liegen in sitzungLesen():
|
|
*
|
|
* 1. NICHT INDIZIEREN. Die Adresse taucht heute in keinem oeffentlichen
|
|
* Zertifikatsprotokoll auf (nachgemessen am 10.09.2026: crt.sh
|
|
* kennt fuer dogfather-universe.com nur den Platzhalter-Eintrag).
|
|
* Eine Suchmaschine waere der zweite Weg, sie doch zu finden --
|
|
* der Kopf schliesst ihn. Er steht hier und nicht nur als
|
|
* <meta> im HTML, weil er dann auch fuer Bilder, Manifest und
|
|
* jede Antwort ohne HTML gilt.
|
|
*
|
|
* 2. NUR DER WORKSPACE. Auf crew. gibt es die Hauptseite nicht --
|
|
* sonst laege die komplette Dogfather-Website ein zweites Mal
|
|
* unter einer zweiten Adresse (doppelter Inhalt, und ein Weg,
|
|
* die Adresse ueber eine Suchmaschine zu finden). Alles ausserhalb
|
|
* von /workspace und /assets geht zur Zugangswand.
|
|
*
|
|
* Caddy tut Punkt 2 bereits mit derselben Weiche. Dass es hier ein
|
|
* zweites Mal steht, ist Absicht: Eine Schranke, die nur in einer
|
|
* Datei ausserhalb des Projekts existiert, faellt beim naechsten
|
|
* Serverumbau lautlos weg.
|
|
*/
|
|
export function crewWeiche(req, res, next) {
|
|
if (!istCrewAdresse(req.get("host"))) {
|
|
/* DIE ANDERE RICHTUNG -- und sie war ein echtes Loch.
|
|
|
|
Die zweite Zugangswand liegt als Datei im selben Ordner wie alles
|
|
andere und wird von express.static ausgeliefert. Ohne diese Zeile
|
|
kann sie JEDER unter ihrem Dateinamen aufrufen, auch auf
|
|
workspace.dogfather-universe.com -- und saehe dort eine
|
|
Anmeldeseite, die es dort gar nicht geben soll.
|
|
|
|
Gefunden hat das nicht ein Gedanke, sondern eine Pruefung: Der
|
|
Wortleck-Test durchsucht ALLE ausgelieferten Dateien, und dass er
|
|
diese eine ueberhaupt las, war die Antwort auf eine Frage, die
|
|
ich mir nicht gestellt hatte -- naemlich wer sie sonst noch
|
|
abrufen kann.
|
|
|
|
404 UND KEINE WEITERLEITUNG: "Gibt es nicht" ist die Antwort, die
|
|
nichts verraet. Eine Weiterleitung wuerde sagen, dass es die
|
|
Datei gibt, nur woanders.
|
|
|
|
NUR AUF DEN DREI ECHTEN ADRESSEN, nicht "ueberall ausser crew":
|
|
Sonst waere sie auch auf localhost gesperrt, und die Pruefung,
|
|
die die Wand im Browser ansieht, koennte sie nicht mehr oeffnen
|
|
-- sie wuerde gruen bleiben und nichts mehr messen. */
|
|
if (istOhneModiAdresse(req.get("host"))
|
|
&& req.path.toLowerCase().replace(/\/{2,}/g, "/") === "/workspace/crew-index.html") {
|
|
return res.status(404).type("html").send("Nicht gefunden.");
|
|
}
|
|
return next();
|
|
}
|
|
|
|
res.setHeader("X-Robots-Tag", "noindex, nofollow");
|
|
|
|
/* DAS MANIFEST MACHT DIE APP (10.09.2026).
|
|
|
|
Beide Adressen liefern dieselben HTML-Dateien aus -- in jeder steht
|
|
<link rel="manifest" href="/workspace/app.webmanifest">. Auf der
|
|
Modi-Adresse soll dahinter aber ein anderes Manifest stehen: eigener
|
|
Name ("Team Dogi"), eigenes Symbol. Sonst hiesse die App auf dem
|
|
Startbildschirm eines Modis "Creator Workspace" und traege das
|
|
Zeichen mit der Chili -- die zu Spicy Media gehoert, nicht zu ihnen.
|
|
|
|
WARUM DIE ADRESSE UMGEBOGEN WIRD, STATT IN 30 HTML-DATEIEN EINE
|
|
ZWEITE ZEILE ZU SETZEN: Eine zweite Zeile muesste jemand bei jeder
|
|
neuen Seite mitschreiben, und wer sie vergisst, bekommt eine Seite,
|
|
die still zur falschen App gehoert. Hier steht es einmal.
|
|
|
|
ZWISCHENSPEICHER: Cloudflare nimmt den Hostnamen in den Schluessel
|
|
auf, die beiden Antworten koennen sich also nicht vermischen. Der
|
|
Browser ohnehin nicht -- fuer ihn sind es zwei Ursprunge. */
|
|
if (req.path === "/workspace/app.webmanifest") {
|
|
req.url = "/workspace/crew.webmanifest";
|
|
return next();
|
|
}
|
|
|
|
/* DIE ZUGANGSWAND GEHOERT DOGI UND DEN MODIS (10.09.2026).
|
|
|
|
Filipe: "alles soll auf dogfather und die modis perfektionniert
|
|
werden auf der neuen modi seite."
|
|
|
|
Bis dahin stand hier die gewohnte Wand: Spicy-Media-Logo, "Creator
|
|
Workspace", fuenf Rollenkacheln -- fuer einen Modi war davon nichts
|
|
richtig. Jetzt liefert crew. eine eigene Seite mit eigener Buehne,
|
|
eigenem Namen und ohne Kachelreihe.
|
|
|
|
DAS KEHRT EINE FRUEHERE ENTSCHEIDUNG UM, und das gehoert
|
|
hierhergeschrieben: Vorher war die Wand absichtlich identisch --
|
|
wer die Adresse errat, sollte etwas Vertrautes sehen und nichts
|
|
ueber Modis erfahren. Filipe hat anders entschieden. Der Tausch
|
|
ist damit bewusst: Ein Ratender liest jetzt "Team Dogi". Alles
|
|
andere bleibt, wie es war -- sein Code funktioniert dort nicht.
|
|
|
|
ZWEI ADRESSEN, EINE DATEI: `/workspace/` und
|
|
`/workspace/index.html` fuehren beide zur Wand, also muessen beide
|
|
umgebogen werden. Die zweite zu vergessen waere nicht aufgefallen,
|
|
denn im Alltag tippt sie niemand. */
|
|
if (req.path === "/workspace/" || req.path === "/workspace/index.html") {
|
|
req.url = "/workspace/crew-index.html";
|
|
return next();
|
|
}
|
|
|
|
/* DIE BUEHNEN INNEN GEHOEREN AUCH DER MODI-APP (10.09.2026).
|
|
|
|
Filipe: "auch die hintergrund bilder vom crew espace sollen anderes
|
|
aussehen, der community angepasst wie die zugangscode seite die ist
|
|
mega."
|
|
|
|
Die neun Buehnen hinter den Seiten zeigen nicht bloss rotes Licht,
|
|
sondern das Spicy-Media-Logo selbst -- in `halle` und `arena` sogar
|
|
vielfach nebeneinander. Umfaerben haette daraus ein blaues fremdes
|
|
Logo gemacht, also etwas Schlimmeres. Es gibt jetzt eigene Motive
|
|
aus den Community-Bildern der Dogfather-Seite (tools/crew-buehnen.mjs).
|
|
|
|
WARUM DIE ADRESSE UMGEBOGEN WIRD UND NICHT DAS CSS: `start.css`
|
|
nennt die neun Bilder in neun Zeilen und wird an alle
|
|
ausgeliefert. Eine zweite Zeile je Szene fuer die Modi-App waere
|
|
achtzehn Zeilen, die zusammenpassen muessen -- und der Name der
|
|
Szene stuende dann doppelt da. Hier steht eine Regel.
|
|
|
|
UND SIE HAT KEIN FLACKERN: Das Bild wird beim ERSTEN Abruf schon
|
|
als das richtige geliefert. Eine Umschaltung per JavaScript haette
|
|
erst die Spicy-Buehne gezeigt und dann getauscht -- sichtbar, und
|
|
ausgerechnet auf der Seite, die niemand sehen soll. */
|
|
const buehne = /^\/workspace\/assets\/img\/(buehne-[a-z]+-(?:uhd|breit|schmal)\.webp)$/
|
|
.exec(req.path);
|
|
if (buehne) {
|
|
req.url = `/workspace/assets/img/crew-${buehne[1]}`;
|
|
return next();
|
|
}
|
|
|
|
/* DAS ZEICHEN IN DER KOPFLEISTE (10.09.2026).
|
|
|
|
`start.css` setzt links neben den Namen eine Chili -- als
|
|
CSS-Hintergrund, nicht als Bild im HTML. Auf der Modi-Adresse stand
|
|
damit oben links das Zeichen von Spicy Media, auf jeder Seite, den
|
|
ganzen Tag. Im Bildschirmfoto der Startseite war es das Erste, was
|
|
auffiel.
|
|
|
|
UEBER DIE ADRESSE UND NICHT UEBER JAVASCRIPT: Eine Umschaltung im
|
|
Browser haette erst die Chili gezeigt und sie dann getauscht --
|
|
sichtbar, und ausgerechnet an der Stelle, die man zuerst ansieht.
|
|
So kommt beim ersten Abruf schon der Husky.
|
|
|
|
Er liegt laengst da (marke-husky.webp) und wird auf der Zugangswand
|
|
und im App-Symbol ohnehin benutzt. Ein neues Bild waere eine Datei
|
|
mehr fuer dasselbe Zeichen. */
|
|
if (req.path === "/workspace/assets/img/marke-spicy.webp") {
|
|
req.url = "/workspace/assets/img/marke-husky.webp";
|
|
return next();
|
|
}
|
|
|
|
if (istWorkspacePfad(req.path) || req.path.startsWith("/assets/")) return next();
|
|
return res.redirect(302, "/workspace/");
|
|
}
|