Eigene Zugangscode-Schranke statt Cloudflare Access — löst VanVans Login-Problem
Ersetzt die (fehlerhaft auf die GANZE Domain wirkende) Cloudflare-Zero- Trust-Access-Sperre durch eine eigene, schlanke Lösung nach dem bewährten Vorbild von "Dogfather Universe": eine Pages-Functions-Middleware (functions/_middleware.js) prüft bei jeder Anfrage ein HMAC-signiertes Session-Cookie; ohne gültiges Cookie geht's zu public/gate.html (im Van's- Design), wo ein Zugangscode eingegeben wird. Zwei getrennte Codes für qciga und VanVan, 90 Tage gültig, danach neu eingeben. /admin/* ist komplett ausgenommen — läuft weiter über das echte GitHub-OAuth-Login, das für VanVan schon funktioniert. Bonus: die drei separaten Vorschau-Seiten (demo-normal/demo-konto/demo-abo) sind jetzt überflüssig und entfernt. Stattdessen gibt's ein schwebendes Umschalter-Widget (Layout.astro), das NUR sichtbar ist, wenn das Gate-Cookie vorhanden ist (also nur für uns beide) — auf jeder beliebigen Seite kann per Knopfdruck zwischen "Normaler Besucher", "Angemeldete Kundin" und "Abonnentin" gewechselt werden, ohne die Seite verlassen zu müssen. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
6b1920dfb3
commit
ad07584906
@@ -1,69 +0,0 @@
|
||||
---
|
||||
import Layout from "../../layouts/Layout.astro";
|
||||
import type { Locale } from "../../i18n/config";
|
||||
|
||||
const lang: Locale = "de";
|
||||
|
||||
// Rein internes Vorschau-Konto (nicht verlinkt, nicht in der Sitemap, noindex) — zeigt, wie das
|
||||
// Kundenkonto MIT aktivem Abo aussieht: Großes Abo, 14 durchgehend bezahlte Monate, ein noch
|
||||
// verfügbarer kleiner Teddy, ein bereits eingelöster großer Teddy, ein paar realistische
|
||||
// Benachrichtigungen und laufender Treuebonus-Fortschritt (nur mit aktivem Abo überhaupt aktiv,
|
||||
// siehe scripts/account.ts). Wird per JS ins localStorage DIESES Browsers geschrieben, sobald
|
||||
// die Seite aufgerufen wird — ändert nichts an echten Kundendaten, jede Person, die den Link
|
||||
// öffnet (auch VanVan), sieht die Vorschau in ihrem eigenen Browser.
|
||||
const demoAccount = {
|
||||
loggedIn: true,
|
||||
name: "Vorschau Kundin",
|
||||
username: "Vorschau",
|
||||
email: "[email protected]",
|
||||
photo: "",
|
||||
bewerteteBestellungen: [],
|
||||
treueBestellungen: 6,
|
||||
treuebonusAktiv: false,
|
||||
treuebonusArtikelSlug: null,
|
||||
abo: {
|
||||
stufe: "gross",
|
||||
startDatum: "2025-06-03",
|
||||
bezahltBisDatum: "2026-09-03",
|
||||
bezahlteMonate: 14,
|
||||
gekuendigt: false,
|
||||
gekuendigtAm: null,
|
||||
kleinTeddyFreigeschaltetGesamt: 2,
|
||||
grossTeddyFreigeschaltetGesamt: 1,
|
||||
kleinTeddyEingeloest: 1,
|
||||
grossTeddyEingeloest: 1,
|
||||
historie: [],
|
||||
},
|
||||
benachrichtigungen: [
|
||||
{ key: "abo_teddy_klein_frei", datum: "2026-07-03", gelesen: false },
|
||||
{ key: "abo_zahlung_erfolgreich", datum: "2026-07-03", gelesen: true },
|
||||
{ key: "abo_zahlung_erfolgreich", datum: "2026-06-03", gelesen: true },
|
||||
{ key: "abo_teddy_gross_eingeloest", datum: "2026-06-01", gelesen: true },
|
||||
{ key: "abo_gewechselt", stufe: "gross", datum: "2026-01-15", gelesen: true },
|
||||
{ key: "abo_abgeschlossen", datum: "2025-06-03", gelesen: true },
|
||||
],
|
||||
};
|
||||
---
|
||||
<Layout
|
||||
title="Vorschau: Konto mit aktivem Abo"
|
||||
description="Interne Vorschau-Seite — zeigt das Kundenkonto mit einem simulierten aktiven Abo."
|
||||
lang={lang}
|
||||
path="/demo-abo/"
|
||||
noindex={true}
|
||||
>
|
||||
<section class="section-tight">
|
||||
<div class="container">
|
||||
<p class="todo-note">
|
||||
Interne Vorschau für VanVan — zeigt das Kundenkonto so, wie es mit einem aktiven "Großes Abo"
|
||||
aussieht (Prämien, Benachrichtigungen, Treuebonus). Wird nur in DEINEM Browser simuliert,
|
||||
ändert nichts an echten Kundendaten. Du wirst gleich automatisch weitergeleitet …
|
||||
</p>
|
||||
<p><a href="/konto/angemeldet/#abo" id="demo-weiter-link">Falls die Weiterleitung nicht klappt: hier klicken →</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</Layout>
|
||||
|
||||
<script define:vars={{ demoAccount }}>
|
||||
localStorage.setItem("vandiy_account_v1", JSON.stringify(demoAccount));
|
||||
window.location.href = "/konto/angemeldet/#abo";
|
||||
</script>
|
||||
@@ -1,59 +0,0 @@
|
||||
---
|
||||
import Layout from "../../layouts/Layout.astro";
|
||||
import type { Locale } from "../../i18n/config";
|
||||
|
||||
const lang: Locale = "de";
|
||||
|
||||
// Rein internes Vorschau-Konto — zeigt das Kundenkonto einer ganz normalen, angemeldeten Person
|
||||
// OHNE Abo (Treuebonus dadurch bewusst im gesperrten Zustand, siehe scripts/account.ts). Wird
|
||||
// per JS ins localStorage DIESES Browsers geschrieben, ändert nichts an echten Kundendaten.
|
||||
const demoAccount = {
|
||||
loggedIn: true,
|
||||
name: "Vorschau Kundin",
|
||||
username: "Vorschau",
|
||||
email: "[email protected]",
|
||||
photo: "",
|
||||
bewerteteBestellungen: [],
|
||||
treueBestellungen: 4,
|
||||
treuebonusAktiv: false,
|
||||
treuebonusArtikelSlug: null,
|
||||
abo: {
|
||||
stufe: null,
|
||||
startDatum: null,
|
||||
bezahltBisDatum: null,
|
||||
bezahlteMonate: 0,
|
||||
gekuendigt: false,
|
||||
gekuendigtAm: null,
|
||||
kleinTeddyFreigeschaltetGesamt: 0,
|
||||
grossTeddyFreigeschaltetGesamt: 0,
|
||||
kleinTeddyEingeloest: 0,
|
||||
grossTeddyEingeloest: 0,
|
||||
historie: [],
|
||||
},
|
||||
benachrichtigungen: [],
|
||||
};
|
||||
---
|
||||
<Layout
|
||||
title="Vorschau: angemeldetes Konto (ohne Abo)"
|
||||
description="Interne Vorschau-Seite — zeigt das Kundenkonto einer angemeldeten Person ohne Abo."
|
||||
lang={lang}
|
||||
path="/demo-konto/"
|
||||
noindex={true}
|
||||
>
|
||||
<section class="section-tight">
|
||||
<div class="container">
|
||||
<p class="todo-note">
|
||||
Interne Vorschau für VanVan — zeigt das Kundenkonto einer ganz normalen angemeldeten
|
||||
Person OHNE Abo (Treuebonus ist dadurch bewusst gesperrt zu sehen — genau das Verhalten,
|
||||
das Kund:innen ohne Abo anspornen soll). Wird nur in DEINEM Browser simuliert, ändert
|
||||
nichts an echten Kundendaten. Du wirst gleich automatisch weitergeleitet …
|
||||
</p>
|
||||
<p><a href="/konto/angemeldet/" id="demo-weiter-link">Falls die Weiterleitung nicht klappt: hier klicken →</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</Layout>
|
||||
|
||||
<script define:vars={{ demoAccount }}>
|
||||
localStorage.setItem("vandiy_account_v1", JSON.stringify(demoAccount));
|
||||
window.location.href = "/konto/angemeldet/";
|
||||
</script>
|
||||
@@ -1,29 +0,0 @@
|
||||
---
|
||||
import Layout from "../../layouts/Layout.astro";
|
||||
import type { Locale } from "../../i18n/config";
|
||||
|
||||
const lang: Locale = "de";
|
||||
---
|
||||
<Layout
|
||||
title="Vorschau: normale Ansicht (nicht angemeldet)"
|
||||
description="Interne Vorschau-Seite — zeigt den Shop so, wie ihn nicht angemeldete Besucher:innen sehen."
|
||||
lang={lang}
|
||||
path="/demo-normal/"
|
||||
noindex={true}
|
||||
>
|
||||
<section class="section-tight">
|
||||
<div class="container">
|
||||
<p class="todo-note">
|
||||
Interne Vorschau für VanVan — zeigt den Shop so, wie ihn ein ganz normaler, NICHT
|
||||
angemeldeter Besucher sieht (räumt dafür ein eventuell simuliertes Konto in diesem Browser
|
||||
wieder auf). Du wirst gleich automatisch weitergeleitet …
|
||||
</p>
|
||||
<p><a href="/" id="demo-weiter-link">Falls die Weiterleitung nicht klappt: hier klicken →</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</Layout>
|
||||
|
||||
<script>
|
||||
localStorage.removeItem("vandiy_account_v1");
|
||||
window.location.href = "/";
|
||||
</script>
|
||||
Reference in New Issue
Block a user