예제 #1
0
 /**
  * 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
     }
 }