using System; using System.Linq; using Avalonia.Controls; using Avalonia.Interactivity; using ChronoFlow.Controller; using ChronoFlow.Persistence; using ChronoFlow.Security; using ChronoFlow.View.Security; namespace ChronoFlow.View { /// /// Das Fenster für den Benutzer-Login. /// public partial class LoginWindow : Window { private readonly LoginController _loginController; public LoginWindow() { InitializeComponent(); _loginController = new LoginController(); var service = new SqliteZeiterfassungsService(); service.ErstelleStandardAdmin(); } /// /// Wird ausgeführt, wenn der Benutzer auf "Anmelden" klickt. /// private async void LoginButton_Click(object? sender, RoutedEventArgs e) { var username = UsernameBox.Text?.Trim(); var password = PasswordBox.Text?.Trim(); if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password)) { ErrorText.Text = "Bitte Benutzername und Passwort eingeben."; ErrorText.IsVisible = true; return; } var service = new SqliteZeiterfassungsService(); var benutzerListe = service.LadeAlleBenutzer(); var matchingUsers = benutzerListe.Where(u => u.Username == username).ToList(); if (matchingUsers.Count == 0) { ErrorText.Text = "Benutzername nicht gefunden."; ErrorText.IsVisible = true; return; } if (matchingUsers.Count > 1) { Console.WriteLine("[WARNUNG] Mehrere Benutzer mit gleichem Namen gefunden! Bitte Datenbank prüfen."); ErrorText.Text = "Interner Fehler: Mehrere Benutzer mit gleichem Namen."; ErrorText.IsVisible = true; return; } var user = matchingUsers.First(); Console.WriteLine($"[DEBUG] Benutzer gefunden: {user.Username}"); Console.WriteLine($"[DEBUG] Gespeicherter Hash in DB: {user.Password}"); Console.WriteLine($"[DEBUG] Eingegebenes Passwort: {password}"); bool isMatch = PasswordHasher.VerifyPassword(password, user.Password); Console.WriteLine($"[DEBUG] Passwortprüfung erfolgreich: {isMatch}"); if (!isMatch) { ErrorText.Text = "Falsches Passwort. Bitte erneut versuchen."; ErrorText.IsVisible = true; return; } // Wenn Passwortänderung erforderlich, Dialog anzeigen if (user.MussPasswortAendern) { var dialog = new PasswortAendernDialog(user); var neuesPasswort = await dialog.ShowDialog(this); if (!string.IsNullOrEmpty(neuesPasswort)) { string neuerHash = PasswordHasher.HashPassword(neuesPasswort); Console.WriteLine($"[DEBUG] Neues Passwort (klar): {neuesPasswort}"); Console.WriteLine($"[DEBUG] Neuer gespeicherter Hash: {neuerHash}"); user.Password = neuerHash; user.MussPasswortAendern = false; service.UpdateBenutzer(user); Console.WriteLine("✅ Passwort wurde erfolgreich geändert."); } else { ErrorText.Text = "Sie müssen ein neues Passwort setzen!"; ErrorText.IsVisible = true; return; } } // 🚀 Login erfolgreich → MainWindow starten try { Console.WriteLine("🚀 Öffne MainWindow..."); var main = new MainWindow(user); main.Show(); Console.WriteLine("✅ MainWindow wurde geöffnet."); this.Close(); Console.WriteLine("✅ LoginWindow wurde geschlossen."); } catch (Exception ex) { Console.WriteLine($"[ERROR] MainWindow konnte nicht geöffnet werden: {ex.Message}"); ErrorText.Text = "Interner Fehler beim Starten des Hauptfensters."; ErrorText.IsVisible = true; } } } }