HISP/HorseIsleServer/N00BS/RegisterForm.cs
2022-04-15 00:07:28 +12:00

169 lines
5 KiB
C#

using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using HISP.Security;
using HISP.Server;
namespace HISP.Noobs
{
public partial class RegisterForm : Form
{
public RegisterForm()
{
InitializeComponent();
}
private void RegisterForm_Load(object sender, EventArgs e)
{
ValidateInput();
}
private void ValidateInput()
{
if(ValidateUsername() && ValidatePassword())
CreateAccount.Enabled = true;
else
CreateAccount.Enabled = false;
}
private bool ValidatePassword()
{
int selStart = Password.SelectionStart;
int selLen = Password.SelectionLength;
Password.Text = Regex.Replace(Password.Text, "[^A-Za-z0-9]", "");
Password.SelectionStart = selStart;
Password.SelectionLength = selLen;
if (Password.Text.Length < 6)
{
PasswordValidationFailReason.Text = "- Password must be more than 6 characters.";
return false;
}
if (Password.Text.Length >= 16)
{
PasswordValidationFailReason.Text = "- Password must be less than 16 characters.";
return false;
}
PasswordValidationFailReason.Text = "";
return true;
}
private bool ValidateUsername()
{
int selStart = Username.SelectionStart;
int selLen = Username.SelectionLength;
Username.Text = Regex.Replace(Username.Text, "[^A-Za-z]", "");
Username.SelectionStart = selStart;
Username.SelectionLength = selLen;
if (Username.Text.Length < 3)
{
UsernameValidationFailReason.Text = "- Username must be more than 3 characters.";
return false;
}
if (Username.Text.Length >= 16)
{
UsernameValidationFailReason.Text = "- Username must be less than 16 characters.";
return false;
}
if (Regex.IsMatch(Username.Text, "[A-Z]{2,}"))
{
UsernameValidationFailReason.Text = "- Username have the first letter of each word capitalized.";
return false;
}
if (Username.Text.ToUpper()[0] != Username.Text[0])
{
UsernameValidationFailReason.Text = "- Username have the first letter of each word capitalized.";
return false;
}
if (Database.CheckUserExist(Username.Text))
{
UsernameValidationFailReason.Text = "- Username is already in use.";
return false;
}
UsernameValidationFailReason.Text = "";
return true;
}
private void Username_TextChanged(object sender, EventArgs e)
{
ValidateInput();
}
private void Password_TextChanged(object sender, EventArgs e)
{
ValidateInput();
}
private void CreateAccount_Click(object sender, EventArgs e)
{
int newUserId = Database.GetNextFreeUserId();
// Generate random salt
byte[] salt = new byte[64];
new Random(Guid.NewGuid().GetHashCode()).NextBytes(salt);
// Hash password
string saltText = BitConverter.ToString(salt).Replace("-", "");
string hashsalt = BitConverter.ToString(Authentication.HashAndSalt(Password.Text, salt)).Replace("-", "");
// Insert LGBT Patch here.
string gender = "";
if (BoySelecton.Checked)
gender = "MALE";
if (GirlSelection.Checked)
gender = "FEMALE";
Database.CreateUser(newUserId, Username.Text, hashsalt, saltText, gender, isAdmin.Checked, isMod.Checked);
this.DialogResult = DialogResult.OK;
}
private void isAdmin_CheckedChanged(object sender, EventArgs e)
{
if (isAdmin.Checked)
isMod.Checked = true;
}
private void isMod_CheckedChanged(object sender, EventArgs e)
{
if (!isMod.Checked)
isAdmin.Checked = false;
}
private void Password_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == (char)Keys.Return)
{
if (CreateAccount.Enabled)
{
e.Handled = true;
CreateAccount_Click(null, null);
}
}
}
private void Username_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
{
if (CreateAccount.Enabled)
{
e.Handled = true;
CreateAccount_Click(null, null);
}
}
}
}
}