School Commit Init

This commit is contained in:
2024-08-31 12:07:21 +03:00
commit 0b130ee18c
2801 changed files with 4720552 additions and 0 deletions
@@ -0,0 +1,236 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using District_3_App.ExtraInfo;
using District_3_App.ProfileSocialNetworkInfoStuff.Entities;
using District_3_App.ProfileSocialNetworkInfoStuff.ProfileNetworkInfo_Repository;
using Log_In;
namespace District_3_App.LogIn
{
public partial class SignUp : UserControl
{
public User User { get; set; }
private string currentUsername;
private UsersRepository usersRepository;
private UserManager userManager;
public SignUp()
{
InitializeComponent();
string filePath = "./Users.xml";
usersRepository = new UsersRepository(filePath);
userManager = new UserManager(filePath);
}
private Guid GenerateRandomUserId()
{
return Guid.NewGuid();
}
private void SignInLink_Click(object sender, RoutedEventArgs e)
{
var newContent = new SignInPage();
Grid.SetColumn(newContent, 2);
Grid.SetRow(newContent, 0);
Grid.SetRowSpan(newContent, 6);
SignUpGrid.Children.Clear();
SignUpGrid.Children.Add(newContent);
}
private void TogglePasswordVisibility_Click(object sender, RoutedEventArgs e)
{
if (PasswordVisibilityIcon.Source.ToString().Contains("hidePasswordIcon") && txtVisiblePassword.Visibility == Visibility.Collapsed)
{
txtPassword.Visibility = Visibility.Collapsed;
txtVisiblePassword.Visibility = Visibility.Visible;
PasswordVisibilityIcon.Source = new BitmapImage(new Uri("pack://application:,,,/images/showPasswordIcon.png"));
txtVisiblePassword.Text = txtPassword.Password;
}
else
{
txtPassword.Visibility = Visibility.Visible;
txtVisiblePassword.Visibility = Visibility.Collapsed;
PasswordVisibilityIcon.Source = new BitmapImage(new Uri("pack://application:,,,/images/hidePasswordIcon.png"));
txtPassword.Password = txtVisiblePassword.Text;
}
}
private void ToggleConfirmPasswordVisibility_Click(object sender, RoutedEventArgs e)
{
if (ConfirmPasswordVisibilityIcon.Source.ToString().Contains("hidePasswordIcon") && txtVisibleConfirmPassword.Visibility == Visibility.Collapsed)
{
txtConfirmPassword.Visibility = Visibility.Collapsed;
txtVisibleConfirmPassword.Visibility = Visibility.Visible;
ConfirmPasswordVisibilityIcon.Source = new BitmapImage(new Uri("pack://application:,,,/images/showPasswordIcon.png"));
txtVisibleConfirmPassword.Text = txtConfirmPassword.Password;
}
else
{
txtConfirmPassword.Visibility = Visibility.Visible;
txtVisibleConfirmPassword.Visibility = Visibility.Collapsed;
ConfirmPasswordVisibilityIcon.Source = new BitmapImage(new Uri("pack://application:,,,/images/hidePasswordIcon.png"));
txtConfirmPassword.Password = txtVisibleConfirmPassword.Text;
}
}
private void SignUpButton_Click(object sender, RoutedEventArgs e)
{
bool isValid = true;
bool userDoesntExist = true;
if (!ValidateUsername(txtUsername.Text))
{
isValid = false;
}
if (!ValidateEmail(txtEmail.Text))
{
MessageBox.Show("Invalid email.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
isValid = false;
}
// if (ValidatePassword(txtPassword.Password) == false)
// {
// MessageBox.Show("Invalid password. The password's length must be between 5 and 10 characters and must contain at least one uppercase letter, one lowercase letter, one number, and one special character(/_-.)", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
// isValid = false;
// }
// if (ValidateConfirmPassword(txtConfirmPassword.Password) == false)
// {
// MessageBox.Show("Invalid confirmation password. The password's length must be between 5 and 10 characters and must contain at least one uppercase letter, one lowercase letter, one number, and one special character(/_-.)", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
// isValid = false;
// }
if (txtPassword.Password.Equals(txtConfirmPassword.Password) == false)
{
MessageBox.Show("Please choose the same password!.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
isValid = false;
}
if (isValid)
{
if (usersRepository.UsernameExists(txtUsername.Text) || usersRepository.EmailExists(txtEmail.Text) || (usersRepository.UsernameExists(txtUsername.Text) && usersRepository.EmailExists(txtEmail.Text)))
{
MessageBox.Show("Account already exists.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
userDoesntExist = false;
}
if (userDoesntExist)
{
User newUser = new User
{
Id = GenerateRandomUserId(),
Username = txtUsername.Text,
Email = txtEmail.Text,
Password = txtPassword.Password,
ConfirmationPassword = txtConfirmPassword.Password
};
try
{
usersRepository.AddUser(newUser);
userManager.StartOrRenewSession(newUser);
// UserManager.currentUsername = newUser.username;
ClearSignUpForm();
var newContent = new MainWindow();
newContent.Show();
Window.GetWindow(this).Close();
}
catch (ArgumentException ex)
{
// Handle the case where the username already exists
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
private void ClearSignUpForm()
{
txtUsername.Clear();
txtEmail.Clear();
txtPassword.Clear();
txtConfirmPassword.Clear();
}
private bool ValidateUsername(string username)
{
var hasMiniMaxChars = new Regex(@".{5,11}");
var hasNumericChar = new Regex(@"[0-9]+");
var hasAlphabeticChar = new Regex(@"[A-Za-z]");
var hasSpecialChar = new Regex(@"[_.-]");
if (hasMiniMaxChars.IsMatch(username) && hasNumericChar.IsMatch(username) && hasAlphabeticChar.IsMatch(username) && hasSpecialChar.IsMatch(username))
{
return true;
}
else if (!hasMiniMaxChars.IsMatch(username))
{
MessageBox.Show("Invalid username. The username's length must be between 5 and 11 characters.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
else if (!hasNumericChar.IsMatch(username))
{
MessageBox.Show("Invalid username. The username must contain at least one number.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
else if (!hasAlphabeticChar.IsMatch(username))
{
MessageBox.Show("Invalid username. The username must contain at least one alphabetic character..", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
else if (!hasSpecialChar.IsMatch(username))
{
MessageBox.Show("Invalid username. The username must contain at least one special character(_ . -).", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
else
{
return false;
}
}
private bool ValidateEmail(string email)
{
if (Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$", RegexOptions.IgnoreCase))
{
return true;
}
return false;
}
private bool ValidatePassword(string password)
{
var hasNumericChar = new Regex(@"[0-9]+");
var hasUpperChar = new Regex(@"[A-Z]+");
var hasLowerChar = new Regex(@"[a-z]+");
var hasSpecialChar = new Regex(@"[/-_.]+");
var hasMiniMaxChars = new Regex(@".{5,10}");
bool isPasswordValid = hasNumericChar.IsMatch(password) && hasUpperChar.IsMatch(password) && hasLowerChar.IsMatch(password) && hasSpecialChar.IsMatch(password) && hasMiniMaxChars.IsMatch(password);
return isPasswordValid;
}
private bool ValidateConfirmPassword(string confirmPassword)
{
var hasNumericChar = new Regex(@"[0-9]+");
var hasUpperChar = new Regex(@"[A-Z]+");
var hasLowerChar = new Regex(@"[a-z]+");
var hasSpecialChar = new Regex(@"[/\-_.]+");
var hasMiniMaxChars = new Regex(@".{5,10}");
bool isConfirmationPasswordValid = hasNumericChar.IsMatch(confirmPassword) && hasUpperChar.IsMatch(confirmPassword) && hasLowerChar.IsMatch(confirmPassword) && hasSpecialChar.IsMatch(confirmPassword) && hasMiniMaxChars.IsMatch(confirmPassword);
return isConfirmationPasswordValid;
}
}
}