using System; using System.Windows; using System.Windows.Controls; using System.Text.RegularExpressions; using MySql.Data.MySqlClient; using BCrypt.Net; namespace SkyTeam { public partial class RegistrationPage : Page { public RegistrationPage() { InitializeComponent(); } private void RegisterButton_Click(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(EmailTextBox.Text) || string.IsNullOrWhiteSpace(PasswordBox.Password)) { MessageBox.Show("Bitte geben Sie Email und Passwort ein."); return; } if (!IsValidEmail(EmailTextBox.Text)) { MessageBox.Show("Bitte geben Sie eine gültige E-Mail-Adresse ein (z.B. name@domain.com)."); return; } string emailToCheck = EmailTextBox.Text; try { using (MySqlConnection conn = new MySqlConnection(DatenbankServices.GetConnection())) { conn.Open(); string checkQuery = "SELECT COUNT(*) FROM users WHERE Email = @email"; using (MySqlCommand checkCmd = new MySqlCommand(checkQuery, conn)) { checkCmd.Parameters.AddWithValue("@email", emailToCheck); long userCount = (long)checkCmd.ExecuteScalar(); if (userCount > 0) { MessageBox.Show("Sie haben bereits ein Konto mit dieser E-Mail. Bitte löschen Sie es, bevor Sie ein neues erstellen.", "Konto existiert bereits", MessageBoxButton.OK, MessageBoxImage.Error); return; } } string hashedPassword = BCrypt.Net.BCrypt.HashPassword(PasswordBox.Password); string insertQuery = "INSERT INTO users (Vorname, Nachname, Email, PasswortHash, Rolle, Stadt, Anrede, Geburtsdatum) " + "VALUES (@vorname, @nachname, @email, @password, 'User', @stadt, @anrede, @geburtsdatum)"; using (MySqlCommand cmd = new MySqlCommand(insertQuery, conn)) { string selectedAnrede = (SalutationComboBox.SelectedItem as ComboBoxItem)?.Content.ToString(); DateTime? selectedDate = BirthDatePicker.SelectedDate; cmd.Parameters.AddWithValue("@vorname", FirstNameTextBox.Text); cmd.Parameters.AddWithValue("@nachname", LastNameTextBox.Text); cmd.Parameters.AddWithValue("@email", emailToCheck); cmd.Parameters.AddWithValue("@password", hashedPassword); cmd.Parameters.AddWithValue("@stadt", CityTextBox.Text); cmd.Parameters.AddWithValue("@anrede", selectedAnrede ?? (object)DBNull.Value); cmd.Parameters.AddWithValue("@geburtsdatum", selectedDate.HasValue ? selectedDate.Value : (object)DBNull.Value); cmd.ExecuteNonQuery(); } } MessageBox.Show("Dein Konto wurde erfolgreich angelegt!"); if (Application.Current.MainWindow is MainWindow mainWindow) { mainWindow.MainFrame.Navigate(new LogInPage()); } } catch (Exception ex) { MessageBox.Show("Etwas ist schief gelaufen: " + ex.Message); } } private void CancelButton_Click(object sender, RoutedEventArgs e) { if (Application.Current.MainWindow is MainWindow mainWindow) { mainWindow.MainFrame.Navigate(new LogInPage()); } } private bool IsValidEmail(string email) { if (string.IsNullOrWhiteSpace(email)) return false; try { return Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250)); } catch (RegexMatchTimeoutException) { return false; } } } }