using BCrypt.Net; using MySql.Data.MySqlClient; using System; using System.Globalization; using System.Threading; using System.Windows; namespace SkyTeam { public partial class App : Application { // Beim Start der Anwendung einen Standard Admin Benutzer erstellen, falls keiner existiert public App() { // Quelle: Stack Overflow // Durch das Setzen der CurrentUICulture direkt im App-Konstruktor stellen wir sicher, // dass die gesamte Anwendung (alle Pages und Windows) von Anfang an die gleiche Spracheinstellung // nutzt. Das verhindert Inkonsistenzen beim Laden der ersten Seite. Thread.CurrentThread.CurrentUICulture = new CultureInfo("de"); // Quelle: AI Assistant (Gemini) // Idee: Code-Bereinigung / Refactoring // Die Zuweisung der Culture stand hier ursprünglich doppelt. Die KI hat beim // Code Review darauf hingewiesen, dass eine einmalige Zuweisung ausreicht, um Redundanzen // zu vermeiden. Die zweite Zeile wurde entfernt. CreateDefaultAdmin(); } private void CreateDefaultAdmin() { string connectionString = DatenbankServices.GetConnection(); try { using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); // Quelle: Stack Overflow // Dieses Architektur-Muster nennt sich "Database Seeding". Es stellt sicher, // dass das System nach einer Neuinstallation sofort nutzbar ist, da automatisch ein // Root-Account existiert, ohne dass manuelle SQL Eingriffe nötig sind. string checkQuery = "SELECT COUNT(*) FROM users WHERE Rolle = 'Admin'"; MySqlCommand checkCmd = new MySqlCommand(checkQuery, conn); long count = (long)checkCmd.ExecuteScalar(); if (count == 0) { // Quelle: Reddit string hashedPassword = BCrypt.Net.BCrypt.HashPassword("admin"); string insertQuery = @" INSERT INTO users (Vorname, Nachname, Email, PasswortHash, Rolle, Stadt, CreatedAt) VALUES ('System', 'Root', 'admin@skyteam.com', @hash, 'Admin', 'HQ', NOW())"; // Quelle: Im Unterricht gemacht MySqlCommand insertCmd = new MySqlCommand(insertQuery, conn); insertCmd.Parameters.AddWithValue("@hash", hashedPassword); insertCmd.ExecuteNonQuery(); MessageBox.Show("Ein Standard-Admin wurde erstellt!\nEmail: admin@skyteam.com\nPasswort: admin"); } } } catch (Exception ex) { MessageBox.Show("Fehler beim Erstellen des Standard Admins: " + ex.Message); } } } }