203 lines
6.7 KiB
JavaScript
203 lines
6.7 KiB
JavaScript
// 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 = `
|
|
<div class="message ${type}">
|
|
${message}
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
// 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!');
|
|
}
|
|
}
|
|
});
|