83 lines
3.7 KiB
C#
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());
|
|
}
|
|
} |