private async void OnSignUpClicked(object sender, EventArgs e)
        {
            bool signUpFailed = false;

            errorLabel.Text = "";
            string email           = emailEntry.Text.Trim();
            string username        = usernameEntry.Text.Trim();
            string password        = passwordEntry.Text.Trim();
            string confirmPassword = confirmPasswordEntry.Text.Trim();


            if (email.Length == 0 || username.Length == 0 || password.Length == 0 || confirmPassword.Length == 0)
            {
                errorLabel.Text += "All Fields Must Be Filled";
                signUpFailed     = true;
            }

            signUpFailed = ValidateEmail(email, signUpFailed);
            signUpFailed = ValidatePassword(password, confirmPassword, signUpFailed);

            if (signUpFailed)
            {
                return;
            }

            Classes.Angler angler = new Classes.Angler(email, App.GetHash(password), username);
            App.Anglers.Add(angler);
            App.SerializeAnglers();
            App.User = angler;
            Navigation.InsertPageBefore(new MainPage(), this);
            await Navigation.PopAsync();
        }
        private async void OnLogInClicked(object sender, EventArgs e)
        {
            errorLabel.Text = "";
            string email = emailEntry.Text.Trim();

            if (email.Length == 0 || passwordEntry.Text.Length == 0)
            {
                errorLabel.Text = "All Fields Must Be Filled";
                return;
            }

            Classes.Angler angler = ValidateEmail(email);
            if (angler == null)
            {
                return;
            }
            if (!ValidatePassword(angler))
            {
                return;
            }

            App.User = angler;
            Navigation.InsertPageBefore(new MainPage(), this);
            await Navigation.PopAsync();
        }
 private bool ValidatePassword(Classes.Angler angler)
 {
     if (App.GetHash(passwordEntry.Text.Trim()) != angler.PasswordHash)
     {
         errorLabel.Text = "Email Or Password Incorrect";
         return(false);
     }
     return(true);
 }
        private Classes.Angler ValidateEmail(string email)
        {
            if (!Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$", RegexOptions.IgnoreCase))
            {
                errorLabel.Text = "Email Is Invalid";
                return(null);
            }

            Predicate <Classes.Angler> predicate = (Classes.Angler predicateAngler) =>
            {
                return(predicateAngler.Email == email);
            };

            Classes.Angler angler = App.Anglers.Find(predicate);

            if (angler == null)
            {
                errorLabel.Text = "Email Or Password Incorrect";
                return(null);
            }

            return(angler);
        }
        private bool ValidateEmail(string email, bool signUpFailed)
        {
            if (!Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$", RegexOptions.IgnoreCase))
            {
                // Should also attempt to send email to check if valid
                errorLabel.Text += (signUpFailed ? "\n" : "") + "Email Is Invalid";
                return(true);
            }

            Predicate <Classes.Angler> predicate = (Classes.Angler predicateAngler) =>
            {
                return(predicateAngler.Email == email);
            };

            Classes.Angler angler = App.Anglers.Find(predicate);

            if (angler != null)
            {
                errorLabel.Text += (signUpFailed ? "\n" : "") + "Email Already In Use";
                return(true);
            }

            return(signUpFailed);
        }