diff --git a/functions/_middleware.js b/functions/_middleware.js index d9ae763..849c0f5 100644 --- a/functions/_middleware.js +++ b/functions/_middleware.js @@ -31,6 +31,9 @@ ist nie für Kund:innen gedacht. /api/orders (Bestellung ANLEGEN beim Checkout) ist bewusst NICHT dauerhaft geschützt — das muss auch für echte Kund:innen erreichbar sein, sobald der Shop öffentlich ist, genau wie der Checkout selbst. + - Die *.pages.dev-Adresse (interne "Werkstatt"/Vorschau, siehe onRequest() unten) bleibt + UNABHÄNGIG vom SITE_PUBLIC-Schalter für immer hinter dem Zugangscode — nur die spätere eigene + Domain soll durch SITE_PUBLIC=true öffentlich werden. - /verwaltung/* + /api/verwaltung/* verlangen ZUSÄTZLICH zum normalen 90-Tage-Seitenzugang noch eine zweite, eigene Sitzung, die nur 24 Stunden gültig ist (siehe functions/_shared/verwaltung-auth.js, /verwaltung-code.html) — auf ausdrücklichen Wunsch. @@ -184,7 +187,18 @@ export async function onRequest(context) { // SITE_PUBLIC=true (wrangler pages secret put) — dann öffnet sich der Rest der Seite für alle, // aber /verwaltung/ bleibt weiterhin komplett hinter dem Zugangscode. const immerGeschuetzterPfad = url.pathname.startsWith("/verwaltung") || url.pathname.startsWith("/api/verwaltung"); - const sitePublic = env.SITE_PUBLIC === "true"; + + // WICHTIG (04.08.2026, auf ausdrücklichen Wunsch klargestellt): Die *.pages.dev-Adresse ist die + // interne "Werkstatt"/Vorschau-Adresse, unter der qciga und VanVan gemeinsam an der Seite + // arbeiten und Änderungen zuerst begutachten, BEVOR sie über die eigene Domain live gehen — + // diese Adresse soll NIEMALS öffentlich werden, auch nicht aus Versehen. Nur die spätere eigene + // Domain (vans-diy-bastelbedarf.com) soll durch SITE_PUBLIC=true öffentlich geschaltet werden + // können. Ohne diese Unterscheidung würde SITE_PUBLIC=true (gedacht für den Domain-Go-Live) + // versehentlich auch die *.pages.dev-Vorschau-Adresse für jede/n im Internet öffnen — genau das + // darf nie passieren, deshalb hier hart anhand des aufgerufenen Hostnamens geprüft, unabhängig + // vom SITE_PUBLIC-Wert. + const istWorkVorschauHost = url.hostname.endsWith(".pages.dev"); + const sitePublic = env.SITE_PUBLIC === "true" && !istWorkVorschauHost; if (sitePublic && !immerGeschuetzterPfad) { return next(); } diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index e4aec9c..717e2d8 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -20,7 +20,7 @@ interface Props { path?: string; /** Seite existiert nur auf Deutsch (Rechtstexte) — siehe LanguageSwitcher. */ legalOnly?: boolean; - /** Interne Vorschau-/Demoseiten (z.B. /demo-abo/) sollen nie von Suchmaschinen indexiert + /** Interne Vorschau-/Demoseiten (z.B. /verwaltung/) sollen nie von Suchmaschinen indexiert * werden — setzt zusätzlich zum Sitemap-Ausschluss noch ein robots-Meta. */ noindex?: boolean; } diff --git a/src/pages/konto/angemeldet.astro b/src/pages/konto/angemeldet.astro index af2d221..c47b4c7 100644 --- a/src/pages/konto/angemeldet.astro +++ b/src/pages/konto/angemeldet.astro @@ -799,8 +799,7 @@ const angekommeneBestellungen = beispielBestellungen.filter((b) => b.status === datenSection?.scrollIntoView({ behavior: "smooth", block: "start" }); }); - // Deep-Link per URL-Hash (z.B. /konto/angemeldet/#abo) — springt direkt zum passenden Tab, - // genutzt u.a. von der Vorschau-Seite /demo-abo/. + // Deep-Link per URL-Hash (z.B. /konto/angemeldet/#abo) — springt direkt zum passenden Tab. const hashTab = location.hash.replace("#", ""); const gueltigeHashTabs = ["bestellungen", "offene", "wunschliste", "daten", "treuebonus", "abo"]; setActiveTab(gueltigeHashTabs.includes(hashTab) ? hashTab : null);