using BCrypt.Net; using MySql.Data.MySqlClient; using PdfSharp.Fonts; using System.Globalization; using System.Reflection; using System.Windows; using static SkyTeam.BuchungenPage; namespace SkyTeam { public partial class App : Application { // Beim Start der Anwendung einen Standard Admin-Benutzer erstellen, falls keiner existiert , selbGedacht. 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"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("de"); GlobalFontSettings.FontResolver = new CustomFontResolver(); } 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) { 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())"; 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); } } } }