diff --git a/deploy.sh b/deploy.sh index 288c317..8a636f4 100755 --- a/deploy.sh +++ b/deploy.sh @@ -9,6 +9,14 @@ TAG="latest" echo "🚀 Starting deployment for Haumdaucher..." +# Check cluster connectivity +echo "🔌 Verifying Kubernetes cluster connectivity..." +if ! kubectl cluster-info > /dev/null 2>&1; then + echo "❌ Error: Kubernetes cluster is unreachable (kubectl failed). Please check your KUBECONFIG or VPN." + exit 1 +fi +echo "✅ Cluster is reachable." + # Create namespace if it doesn't exist kubectl create namespace $NAMESPACE --dry-run=client -o yaml | kubectl apply -f - diff --git a/src/App.vue b/src/App.vue index 24392dd..de41e9d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -8,6 +8,7 @@ import Datenschutz from './components/sections/Legal/Datenschutz.vue' import HaumdaucherGame from './components/layout/HaumdaucherGame.vue' import { messages } from './locales/i18n' import { useAuth } from './composables/useAuth' +import PasswordReset from './components/auth/PasswordReset.vue' const { isAllowed } = useAuth() @@ -15,6 +16,8 @@ const theme = ref('classic') const showGame = ref(false) const isNatUnlocked = ref(false) const boars = ref<{id: number, top: number}[]>([]) +const isPasswordResetMode = ref(false) +const resetOobCode = ref('') const toggleTheme = (newTheme: string) => { theme.value = newTheme @@ -52,6 +55,12 @@ const startBoarRun = () => { } onMounted(() => { + const urlParams = new URLSearchParams(window.location.search) + if (urlParams.get('mode') === 'resetPassword') { + isPasswordResetMode.value = true + resetOobCode.value = urlParams.get('oobCode') || '' + } + const savedTheme = localStorage.getItem('haumdaucher-theme') if (savedTheme) toggleTheme(savedTheme) @@ -72,9 +81,17 @@ const t = (key: string) => { diff --git a/src/components/auth/PasswordReset.vue b/src/components/auth/PasswordReset.vue new file mode 100644 index 0000000..ff3c7ed --- /dev/null +++ b/src/components/auth/PasswordReset.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/user_creation/email_templates.md b/user_creation/email_templates.md new file mode 100644 index 0000000..bce16c8 --- /dev/null +++ b/user_creation/email_templates.md @@ -0,0 +1,88 @@ +# Firebase Email Templates (HAUMDAUCHER n.e.V.) + +Da Google Cloud Identity Platform (Firebase) die Konfiguration von E-Mail-Vorlagen über Terraform (`google_identity_platform_config`) nicht nativ unterstützt, müssen diese Texte einmalig manuell in der Firebase Console hinterlegt werden. + +## Globale Einstellungen für alle Templates +Bitte stelle in der Firebase Console unter **Authentication > Templates** (oder Identity Platform im GCP Dashboard) Folgendes ein: +- **Sender Name**: HAUMDAUCHER n.e.V. +- **Reply-to**: info@haumdaucher.de + +*(Da `haumdaucher.de` bereits bei Google verifiziert ist, sollte der Versand über diese Domain problemlos funktionieren).* + +--- + +## 1. Passwort zurücksetzen (Password Reset) + +**Subject:** +```text +🌭 Neues Passwort gefällig? (HAUMDAUCHER n.e.V.) +``` + +**Message (Above Link):** +```text +Servus %DISPLAY_NAME%, + +ohje, hast du dein Passwort für den Haumdaucher-Zugang verschwitzt? Keine Sorge, das passiert den Besten nach ein paar Bratwürsten und Knackern zu viel! 🍻 + +Damit du wieder vollen Zugriff auf unsere streng geheimen Wurst- und Spezialitäten-Archive in Regensburg bekommst, klick einfach auf den magischen Link unten: +``` + +**Message (Below Link):** +```text +Lass dir Zeit, der Link rennt nicht weg (anders als eine gute Wurst auf dem Grill 🔥). Falls du gar kein neues Passwort angefordert hast, ignoriere diese E-Mail einfach – dein Account ist sicher. + +Mit fleischigen Grüßen, +Dein Vorstand des HAUMDAUCHER Wurst und Spezialitäten n.e.V. +``` + +--- + +## 2. E-Mail-Adresse bestätigen (Email Address Verification) + +**Subject:** +```text +🥓 Bestätige deine E-Mail für den Haumdaucher-Zirkel! +``` + +**Message (Above Link):** +```text +Servus %DISPLAY_NAME%, + +willkommen bei den wahren Feinschmeckern! 🥩 Bevor wir dich in die tiefsten Geheimnisse unserer Wurst- und Spezialitätenkunde einweihen, müssen wir kurz checken, ob du auch ein echter Mensch bist (und kein veganer Spionage-Bot). + +Bitte bestätige deine E-Mail-Adresse mit einem herzhaften Klick auf diesen Link: +``` + +**Message (Below Link):** +```text +Sobald das erledigt ist, bist du offiziell startklar. Wir freuen uns auf dich! 🍻 + +Mit fleischigen Grüßen, +Dein Vorstand des HAUMDAUCHER Wurst und Spezialitäten n.e.V. +``` + +--- + +## 3. E-Mail-Adresse ändern (Email Address Change) + +**Subject:** +```text +🚨 E-Mail-Änderung beim Haumdaucher n.e.V.! +``` + +**Message (Above Link):** +```text +Servus %DISPLAY_NAME%, + +wir haben gehört, dass du eine neue E-Mail-Adresse für deinen Haumdaucher-Account verwenden möchtest. Hast du den Provider gewechselt oder war die alte Adresse zu vegetarisch? 🥦 + +Bitte bestätige deine neue Adresse hier: +``` + +**Message (Below Link):** +```text +Falls du diese Änderung NICHT angefordert hast, melde dich bitte sofort bei uns unter info@haumdaucher.de – vielleicht versucht jemand, an deine geheimen Regensburger Wurst-Rezepte zu kommen! 🕵️‍♂️ + +Mit fleischigen Grüßen, +Dein Vorstand des HAUMDAUCHER Wurst und Spezialitäten n.e.V. +``` diff --git a/user_creation/src/Code.js b/user_creation/src/Code.js index 227cd0f..a36e04f 100644 --- a/user_creation/src/Code.js +++ b/user_creation/src/Code.js @@ -2,7 +2,7 @@ const CONFIG = { SPREADSHEET_ID: "1q4r08nBA_ClWv3ypPCQ6GVCfMVkQwSKzDSRiokkQQ8Q", // ID from mail_forwarding SHEET_NAME: "Form Responses 1", COL_FORWARD_TO_ADDRESS: 4, // 1-indexed (Column D from mail_forwarding) - ADMIN_EMAIL: "moritz@haumdaucher.de", + ADMIN_EMAIL: "info@haumdaucher.de", PROJECT_ID: "haumdaucher", // Used in the Identity Toolkit REST API DRY_RUN: false, SEND_EMAIL_ON_CREATION: false,