/** * Validate data before save * * @access public * @param array $errors * @return void */ function validate(&$errors) { // Validate min length for the password if (!UserPasswords::validateMinLength($this->password_temp)) { $min_pass_length = config_option('min_password_length', 0); $errors[] = lang('password invalid min length', $min_pass_length); } // if // Validate password numbers if (!UserPasswords::validateNumbers($this->password_temp)) { $pass_numbers = config_option('password_numbers', 0); $errors[] = lang('password invalid numbers', $pass_numbers); } // if // Validate uppercase characters if (!UserPasswords::validateUppercaseCharacters($this->password_temp)) { $pass_uppercase = config_option('password_uppercase_characters', 0); $errors[] = lang('password invalid uppercase', $pass_uppercase); } // if // Validate metacharacters if (!UserPasswords::validateMetacharacters($this->password_temp)) { $pass_metacharacters = config_option('password_metacharacters', 0); $errors[] = lang('password invalid metacharacters', $pass_metacharacters); } // if // Validate against password history if (!UserPasswords::validateAgainstPasswordHistory($this->getUserId(), $this->password_temp)) { $errors[] = lang('password exists history'); } // if // Validate new password character difference if (!UserPasswords::validateCharDifferences($this->getUserId(), $this->password_temp)) { $errors[] = lang('password invalid difference'); } // if }
/** * Show and change password form * * @param void * @return null */ function change_password() { $user = Users::findById(get_id()); if (!$user instanceof User) { return; } tpl_assign('user_id', get_id()); if (array_var($_GET, 'msg') && array_var($_GET, 'msg') == 'expired') { $reason = lang('password expired'); } else { $reason = lang('password invalid'); } tpl_assign('reason', $reason); if (is_array(array_var($_POST, 'changePassword'))) { $changePassword_data = array_var($_POST, 'changePassword'); $username = array_var($changePassword_data, 'username'); $old_password = array_var($changePassword_data, 'oldPassword'); $new_password = array_var($changePassword_data, 'newPassword'); $repeat_password = array_var($changePassword_data, 'repeatPassword'); if (trim($username) != $user->getUsername()) { tpl_assign('error', new Error(lang('invalid login data'))); $this->render(); } if (trim($old_password) == '') { tpl_assign('error', new Error(lang('old password required'))); $this->render(); } // if if (!$user->isValidPassword($old_password)) { tpl_assign('error', new Error(lang('invalid old password'))); $this->render(); } // if if (trim($new_password == '')) { tpl_assign('error', new Error(lang('password value missing'))); $this->render(); } // if if ($new_password != $repeat_password) { tpl_assign('error', new Error(lang('passwords dont match'))); $this->render(); } // if if (!UserPasswords::validateMinLength($new_password)) { $min_pass_length = config_option('min_password_length', 0); tpl_assign('error', new Error(lang('password invalid min length', $min_pass_length))); $this->render(); } if (!UserPasswords::validateNumbers($new_password)) { $pass_numbers = config_option('password_numbers', 0); tpl_assign('error', new Error(lang('password invalid numbers', $pass_numbers))); $this->render(); } if (!UserPasswords::validateUppercaseCharacters($new_password)) { $pass_uppercase = config_option('password_uppercase_characters', 0); tpl_assign('error', new Error(lang('password invalid uppercase', $pass_uppercase))); $this->render(); } if (!UserPasswords::validateMetacharacters($new_password)) { $pass_metacharacters = config_option('password_metacharacters', 0); tpl_assign('error', new Error(lang('password invalid metacharacters', $pass_metacharacters))); $this->render(); } if (!UserPasswords::validateAgainstPasswordHistory($user->getId(), $new_password)) { tpl_assign('error', new Error(lang('password exists history'))); $this->render(); } if (!UserPasswords::validateCharDifferences($user->getId(), $new_password)) { tpl_assign('error', new Error(lang('password invalid difference'))); $this->render(); } $user_password = new UserPassword(); $user_password->setPasswordDate(DateTimeValueLib::now()); $user_password->setUserId($user->getId()); $user_password->setPassword(cp_encrypt($new_password, $user_password->getPasswordDate()->getTimestamp())); $user_password->password_temp = $new_password; $user_password->save(); $user->setPassword($new_password); $user->save(); try { CompanyWebsite::instance()->logUserIn($user, $remember); } catch (Exception $e) { tpl_assign('error', new Error(lang('invalid login data'))); $this->render(); } // try $ref_controller = null; $ref_action = null; $ref_params = array(); foreach ($login_data as $k => $v) { if (str_starts_with($k, 'ref_')) { $ref_var_name = trim(substr($k, 4, strlen($k))); switch ($ref_var_name) { case 'c': $ref_controller = $v; break; case 'a': $ref_action = $v; break; default: $ref_params[$ref_var_name] = $v; } // switch } // if } // if if (!count($ref_params)) { $ref_params = null; } if ($ref_controller && $ref_action) { $this->redirectTo($ref_controller, $ref_action, $ref_params); } else { $this->redirectTo('dashboard'); } // if } }