Files
FlyTeam/SkyTeam/AdminLoginPage.xaml.cs
2026-03-05 12:32:01 +01:00

83 lines
3.7 KiB
C#

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using MySql.Data.MySqlClient;
using BCrypt.Net;
namespace SkyTeam
{
public partial class AdminLoginPage : Page
{
// Quelle: Microsoft Learn
// Nutzung eines "Expression bodied members" (=>) für den Konstruktor
// Das macht Methoden oder Konstruktoren, die nur aus einer einzigen Zeile bestehen,
// deutlich kompakter und besser lesbar
public AdminLoginPage() => InitializeComponent();
private void AdminLogin_Click(object sender, RoutedEventArgs e)
{
// Quelle: Im Unterricht gemacht
string query = "SELECT Id, PasswortHash FROM users WHERE Email = @email AND Vorname = @user AND Rolle = @role";
try
{
using (MySqlConnection conn = new MySqlConnection(DatenbankServices.GetConnection()))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
// Quelle: Im Unterricht gemacht
cmd.Parameters.AddWithValue("@email", AdminEmailBox.Text);
cmd.Parameters.AddWithValue("@user", AdminUserBox.Text);
cmd.Parameters.AddWithValue("@role", AdminRoleBox.Text);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
string storedHash = reader.GetString("PasswortHash");
int dbId = reader.GetInt32("Id");
// Quelle: Stack Overflow
// Genau wie beim normalen User-Login prüfen wir das Passwort lokal
// über die BCrypt-Bibliothek. Ein direkter Abgleich in der SQL-Datenbank
// (WHERE PasswortHash = @hash) ist unmöglich, da BCrypt dynamische Salts verwendet
if (BCrypt.Net.BCrypt.Verify(AdminPassBox.Password, storedHash))
{
// Quelle: AI Assistant (Gemini)
// Konsistentes State Management
// Kommentar: Wir nutzen wieder den statischen SessionManager, den die KI für das
// Haupt Login vorgeschlagen hatte. So weiß das AdminDashboard sofort, wer eingeloggt ist
SessionManager.CurrentUserId = dbId;
SessionManager.CurrentUserName = AdminUserBox.Text;
MessageBox.Show("Admin-Zugriff gewährt!");
NavigationService.Navigate(new AdminDashboard());
}
else
{
MessageBox.Show("Ungültiges Passwort.");
}
}
else
{
MessageBox.Show("Kein Admin mit diesen Daten gefunden.");
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Fehler: " + ex.Message);
}
}
// Quelle: Im Unterricht gemacht
private void Back_Click(object sender, RoutedEventArgs e) => NavigationService.Navigate(new LogInPage());
}
}