diff --git a/SkyTeam/LogInPage.xaml.cs b/SkyTeam/LogInPage.xaml.cs index 13da875..a427fdc 100644 --- a/SkyTeam/LogInPage.xaml.cs +++ b/SkyTeam/LogInPage.xaml.cs @@ -13,7 +13,7 @@ namespace SkyTeam { InitializeComponent(); } - + // Quelle: Im Unterricht gemacht private void AdminLink_Click(object sender, RoutedEventArgs e) { if (Application.Current.MainWindow is MainWindow mainWindow) @@ -27,7 +27,8 @@ namespace SkyTeam { string email = BenutzernameTextBox.Text; string password = PasswortTextBox.Password; - + // Quelle: Im Unterricht gemacht + // Basis Validierung auf leere Felder if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password)) { MessageBox.Show("Bitte Email und Passwort eingeben."); @@ -56,7 +57,11 @@ namespace SkyTeam MessageBox.Show("Benutzer wurde nicht gefunden."); return; } - + // Quelle: Stack Overflow "How to verify a BCrypt hash" + // Man kann gehashte Passwörter NICHT direkt im SQL Query vergleichen + // (z.B. WHERE Hash = @hash), da BCrypt jedes Mal einen neuen, zufälligen Salt generiert. + // Wir müssen erst den gespeicherten Hash aus der DB laden und dann die Verify Methode + // der BCrypt-Bibliothek nutzen, um das Klartext passwort damit zu prüfen string storedHash = reader.GetString("PasswortHash"); if (!BCrypt.Net.BCrypt.Verify(password, storedHash)) @@ -64,7 +69,11 @@ namespace SkyTeam MessageBox.Show("Falsches Passwort."); return; } - +// Quelle: AI Assistant (chat gpt) +// Idee: Globales State-Management über eine statische Klasse (SessionManager) +// Kommentar: Anstatt die User ID mühsam über jeden Seitenaufruf hinweg in den Konstruktoren +// weiterzureichen, hat die KI vorgeschlagen, eine statische SessionManager Klasse zu nutzen. +// So sind User-ID, Name und Rolle global für die gesamte Laufzeit abrufbar. SessionManager.CurrentUserId = reader.GetInt32("Id"); SessionManager.CurrentUserName = reader.GetString("Vorname"); SessionManager.Role = reader.GetString("Rolle"); @@ -89,11 +98,18 @@ namespace SkyTeam private void Page_Loaded(object sender, RoutedEventArgs e) { + + // Quelle: Im Unterricht gemacht + // Setzt den Cursor direkt beim Laden der Seite ins Benutzernamen-Feld. BenutzernameTextBox.Focus(); } private void BenutzernameTextBox_PreviewKeyDown(object sender, KeyEventArgs e) { + // Quelle: Stack Overflow "WPF Move focus on enter key" + // Ein UX Feature (User Experience). Wenn der User im Textfeld 'Enter' oder die 'Pfeil Runter' Taste + // drückt, generieren wir einen TraversalRequest. Dadurch springt der Fokus automatisch ins nächste UI-Element + // (das Passwort Feld), ohne dass der User die Maus benutzen muss if (e.Key == Key.Down || e.Key == Key.Enter) { TraversalRequest request =