public IActionResult ChangePassword([FromBody] Auth_ChangeUserPasswordModel changeUserPassword)
        {
            Console.WriteLine("api/auth/changepassword");

            // Authenticate
            int userID = Authenticate();

            if (userID == -1)
            {
                return(StatusCode(405, "Authorization token is not valid."));
            }

            // Check if account is a external linked account.
            Tuple <bool, string> isAccountExternal = _authAction.IsAccountLinkedToAlternativeAuth(userID);

            if (isAccountExternal.Item1)
            {
                return(StatusCode(405, "Your account was created using " + isAccountExternal.Item2 + ", visit them to change your password"));
            }

            // Validate user inputed data
            Tuple <bool, string> validation = _inputValidations.Auth_ChangePasswordModelValidation(changeUserPassword);

            if (!validation.Item1)
            {
                return(StatusCode(405, validation.Item2));
            }

            // validate the validation password.
            changeUserPassword.currentPassword = Hash.HashPassword(changeUserPassword.currentPassword);
            changeUserPassword.newPassword     = Hash.HashPassword(changeUserPassword.newPassword);
            if (_authAction.PasswordMatch(_authAction.GetUsersData(userID).username, changeUserPassword.currentPassword) == -1)
            {
                return(StatusCode(405, "Validation failed, password incorrect."));
            }

            // return
            Tuple <bool, string> returnedStatus = _authAction.ChangePassword(userID, changeUserPassword);

            if (returnedStatus.Item1)
            {
                return(Ok("Successfully changed password"));
            }
            else
            {
                return(StatusCode(500, returnedStatus.Item2));
            }
        }
 public Tuple <bool, string> ChangePassword(int userID, Auth_ChangeUserPasswordModel changeUserPasswordModel)
 {
     if (!IsAccountLinkedToAlternativeAuth(userID).Item1)
     {
         try
         {
             authQuery.ChangePassword(userID, changeUserPasswordModel.newPassword);
             return(Tuple.Create(true, String.Empty));
         }
         catch
         {
             return(Tuple.Create(false, "Error sending password to database"));
         }
     }
     return(Tuple.Create(false, "Cannot change password on a linked acount."));
 }
        // This class is for filtering and is supposed to be easy to modify
        public Tuple <bool, string> Auth_ChangePasswordModelValidation(Auth_ChangeUserPasswordModel changeUserPasswordModel)
        {
            string[] stringsToValidate =
            {
                changeUserPasswordModel.currentPassword,
                changeUserPasswordModel.newPassword,
            };
            Tuple <bool, string> doneGeneralValidation  = GeneralInputChecker(stringsToValidate);
            Tuple <bool, string> donePasswordValidation = PasswordInputChecker(changeUserPasswordModel.newPassword);

            if (!donePasswordValidation.Item1)
            {
                return(donePasswordValidation);
            }
            if (!doneGeneralValidation.Item1)
            {
                return(doneGeneralValidation);
            }
            return(Tuple.Create(true, String.Empty));
        }