// Supabase Konfiguration const supabaseUrl = 'https://lfxlplnypzvjrhftaoog.supabase.co'; const supabaseKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImxmeGxwbG55cHp2anJoZnRhb29nIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDkyMTQ3NzIsImV4cCI6MjA2NDc5MDc3Mn0.XR4preBqWAQ1rT4PFbpkmRdz57BTwIusBI89fIxDHM8'; const supabase = window.supabase.createClient(supabaseUrl, supabaseKey); // DOM Elemente const resetForm = document.getElementById('resetForm'); const newPasswordInput = document.getElementById('newPassword'); const confirmPasswordInput = document.getElementById('confirmPassword'); const resetBtn = document.getElementById('resetBtn'); const loading = document.getElementById('loading'); const messageContainer = document.getElementById('messageContainer'); // Nachricht anzeigen (muss vor anderen Funktionen definiert werden) function showMessage(type, message) { messageContainer.innerHTML = `
${message}
`; } // URL-Parameter extrahieren console.log('URL Hash:', window.location.hash); const urlParams = new URLSearchParams(window.location.hash.substring(1)); const accessToken = urlParams.get('access_token'); const refreshToken = urlParams.get('refresh_token'); const tokenType = urlParams.get('token_type'); console.log('Access Token gefunden:', !!accessToken); console.log('Refresh Token gefunden:', !!refreshToken); // Prüfen ob Reset-Token vorhanden ist if (!accessToken) { showMessage('error', 'Ungültiger oder fehlender Reset-Link. Bitte fordere einen neuen Reset-Link an.'); resetForm.style.display = 'none'; } // Session mit Token setzen async function setSession() { if (!accessToken || !refreshToken) { showMessage('error', 'Ungültiger Reset-Link. Tokens fehlen.'); resetForm.style.display = 'none'; return false; } try { console.log('Setze Session mit Tokens...'); const { data, error } = await supabase.auth.setSession({ access_token: accessToken, refresh_token: refreshToken }); if (error) { console.error('Session Error:', error); throw error; } console.log('Session erfolgreich gesetzt:', data.user?.email); showMessage('success', `Session aktiv für: ${data.user?.email}`); return true; } catch (error) { console.error('Fehler beim Setzen der Session:', error); showMessage('error', `Fehler beim Laden des Reset-Links: ${error.message}`); resetForm.style.display = 'none'; return false; } } // Passwort zurücksetzen async function resetPassword(newPassword) { try { console.log('Starte Passwort-Update...'); // Erstmal Session prüfen const { data: session } = await supabase.auth.getSession(); console.log('Aktuelle Session:', session); if (!session.session) { throw new Error('Keine aktive Session gefunden'); } const { data, error } = await supabase.auth.updateUser({ password: newPassword }); if (error) { console.error('Update User Error:', error); throw error; } console.log('Passwort erfolgreich aktualisiert:', data); return { success: true, data }; } catch (error) { console.error('Fehler beim Zurücksetzen des Passworts:', error); return { success: false, error: error.message }; } } // Formular-Validierung function validateForm() { const newPassword = newPasswordInput.value; const confirmPassword = confirmPasswordInput.value; if (newPassword.length < 8) { showMessage('error', 'Das Passwort muss mindestens 8 Zeichen lang sein.'); return false; } if (newPassword !== confirmPassword) { showMessage('error', 'Die Passwörter stimmen nicht überein.'); return false; } return true; } // Formular-Submit Handler resetForm.addEventListener('submit', async (e) => { e.preventDefault(); if (!validateForm()) { return; } // UI-Status ändern resetBtn.disabled = true; loading.style.display = 'block'; resetForm.style.display = 'none'; try { // Warten bis Session gesetzt ist const sessionSet = await setSession(); if (!sessionSet) { throw new Error('Session konnte nicht gesetzt werden'); } const result = await resetPassword(newPasswordInput.value); if (result.success) { showMessage('success', '✅ Passwort erfolgreich zurückgesetzt! Du wirst zur Hauptseite weitergeleitet...'); // Nach 3 Sekunden zur Hauptseite weiterleiten setTimeout(() => { window.location.href = '/'; }, 3000); } else { showMessage('error', `❌ Fehler beim Zurücksetzen: ${result.error}`); resetForm.style.display = 'block'; } } catch (error) { console.error('Submit Error:', error); showMessage('error', `❌ Fehler: ${error.message}`); resetForm.style.display = 'block'; } finally { resetBtn.disabled = false; loading.style.display = 'none'; } }); // Session beim Laden der Seite setzen (nur wenn Token vorhanden) if (accessToken && refreshToken) { setSession(); } // Add cookie settings button functionality document.addEventListener('DOMContentLoaded', function() { const cookieSettingsBtn = document.getElementById('cookie-settings-footer'); if (cookieSettingsBtn) { cookieSettingsBtn.addEventListener('click', function() { if (window.cookieConsent) { window.cookieConsent.resetConsent(); } }); } }); // Passwort-Sicherheitshinweise newPasswordInput.addEventListener('input', function() { const password = this.value; const hasLength = password.length >= 8; const hasUpper = /[A-Z]/.test(password); const hasLower = /[a-z]/.test(password); const hasNumber = /\d/.test(password); const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(password); if (password.length > 0) { let hints = []; if (!hasLength) hints.push('Mindestens 8 Zeichen'); if (!hasUpper) hints.push('Großbuchstaben'); if (!hasLower) hints.push('Kleinbuchstaben'); if (!hasNumber) hints.push('Zahlen'); if (!hasSpecial) hints.push('Sonderzeichen'); if (hints.length > 0) { showMessage('info', `💡 Tipp: Verwende auch ${hints.join(', ')} für ein sicheres Passwort.`); } else { showMessage('success', '✅ Starkes Passwort!'); } } });