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

74 lines
3.1 KiB
C#

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);
}
}
}
}