public function registration($type_wizard = step_wizard_registration::TYPE_WIZARD_EMP)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/captcha.php";
     $action = __paramInit('string', null, 'action');
     if ($this->status == step_wizard::STATUS_CONFIRM) {
         if ($_SESSION['email'] == 0) {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php";
             $user = new users();
             $email = $user->GetField(wizard::getUserIDReg(), $error, "email");
             $_SESSION['email'] = $email;
         }
         if ($action == registration::ACTION_SEND_MAIL) {
             $send = registration::actionSendMail(false);
             if ($send) {
                 header("Location: /wizard/registration/");
                 exit;
             }
         }
     }
     $type_user = $type_wizard;
     if ($action == 'registration' && $this->status == 0) {
         $error = array();
         if (!$_SESSION["regform_captcha_entered"]) {
             session_start();
             $captchanum = __paramInit('string', null, 'captchanum');
             $num = __paramInit('string', null, 'rndnum');
             $_SESSION['w_reg_captcha_num'] = $captchanum;
             $captcha = new captcha($captchanum);
             if (!$captcha->checkNumber($num)) {
                 $error['captcha'] = 'Неверный код. Попробуйте еще раз';
                 unset($_SESSION['w_reg_captcha_num']);
             }
         }
         if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/employer.php";
         } else {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/freelancer.php";
         }
         $login = trim(__paramInit('string', null, 'login'));
         $email = trim(__paramInit('string', null, 'email'));
         $agree = trim(__paramInit('string', null, 'agree'));
         $phone = trim(__paramInit('string', null, 'phone'));
         $smscode = trim(__paramInit('string', null, 'smscode'));
         // пароль берем напрямую из $_POST, а то __paramInit режет спецсимволы (пароль хешируется - SQL инъекция невозможна)
         $passwd = $_POST['password'];
         if (!$agree) {
             $error['agree'] = 'Прочтите и согласитесь с правилами';
         }
         if ($passwd == '') {
             $error['pwd'] = 'Введите пароль';
         }
         if (!preg_match("/^[a-zA-Z0-9]+[-a-zA-Z0-9_]{2,}\$/", $login)) {
             $error['login'] = '******';
         }
         if (in_array(strtolower($login), $GLOBALS['disallowUserLogins'])) {
             $error['login'] = '******';
         }
         if (!is_email($email)) {
             $error['email'] = 'Поле заполнено некорректно';
         }
         if ($smscode != $_SESSION["smsCode"]) {
             $error['smscode'] = 'Код не совпал';
         }
         if ($phone != $_SESSION["reg_phone"]) {
             $error['phone'] = 'Вы вводили другой номер при запросе кода';
         }
         $phone = preg_replace("#^\\+#", "", $_SESSION["reg_phone"]);
         if (empty($error['login'])) {
             $sql = "SELECT uid FROM users WHERE lower(login) = ?";
             if ($this->_db->val($sql, strtolower($login))) {
                 $error['login'] = '******';
             }
         }
         if (empty($error['email']) && empty($error['captcha'])) {
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/temp_email.php";
             if (temp_email::isTempEmail($email)) {
                 $error['email'] = 'К сожалению, регистрация аккаунта на указанный адрес электронной почты невозможна. Пожалуйста, для регистрации воспользуйтесь почтовым адресом другого домена';
             } else {
                 $sql = "SELECT uid FROM users WHERE lower(email) = ?";
                 if ($this->_db->val($sql, strtolower($email))) {
                     $error['email'] = 'Указанная вами электронная почта уже зарегистрирована. Авторизуйтесь на сайте или укажите другую электронную почту.';
                 }
             }
         }
         if (count($error) == 0) {
             if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) {
                 $newuser = new employer();
             } else {
                 $newuser = new freelancer();
             }
             $newuser->checked_name = false;
             if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) {
                 $newuser->role = 1;
             } else {
                 $newuser->role = 0;
             }
             $newuser->login = substr($login, 0, 15);
             $newuser->email = substr($email, 0, 64);
             $newuser->passwd = substr($passwd, 0, 24);
             $id = $newuser->Create($rerror, $error);
             if ($id && !$error) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/activate_code.php";
                 $this->parent->saveActionWizard($this, step_wizard::STATUS_CONFIRM);
                 $this->parent->bindUserIDReg($id);
                 unset($_SESSION['ref_uri']);
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
                 $smail = new smail();
                 $bSuspect = users::isSuspiciousUser($id, $newuser->login, '', $newuser->uname, '', $newuser->usurname, '');
                 $sPasswd = $bSuspect ? $newuser->passwd : '';
                 // чтобы из админки можно было выслать $smail->NewUser
                 $code = activate_code::Create($id, $newuser->login, $sPasswd, $error);
                 if (!$bSuspect) {
                     $_SESSION['suspect'] = false;
                     // юзер не подозрительный - сразу отпавляем юзеру письмо с кодом активации
                     $smail->NewUser($newuser->login, false, $code, $this->getWizardUserID(), $newuser->role ? 'emp' : 'frl');
                 } else {
                     $_SESSION['suspect'] = true;
                     // отправляем уведомление админу о том, что зарегистрировался подозрительный юзер
                     // если админ его одобрит - то письмо с кодом активации уйдет из админки
                     $smail->adminNewSuspectUser($newuser->login, $newuser->uname, $newuser->usurname);
                 }
                 //Записываем подтвержденный номер телефона в финансы
                 require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sms_gate.php";
                 $phone = '+' . preg_replace("#^\\+#", "", $_SESSION["reg_phone"]);
                 unset($_SESSION["regform_captcha_entered"]);
                 sms_gate::saveSmsInfo($phone, $_SESSION["reg_sms_isnn"], $_SESSION["smsCode"], $_SESION["reg_sms_date_send"], $id);
                 // стираем куку, чтобы показался блок "Вы успешно зарегистрировались"
                 setcookie('master_auth', "", time() - 3600, '/');
                 // Серый список IP ----------------------
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/gray_ip.php';
                 $aGrayList = gray_ip::getGrayListByRegIp(getRemoteIP());
                 if ($aGrayList) {
                     // есть записи в списке первичных IP
                     gray_ip::addSecondaryIp($id, $newuser->login, $newuser->role, $aGrayList);
                 }
                 //---------------------------------------
                 $_SESSION['email'] = $newuser->email;
                 header("Location: /wizard/registration/");
                 exit;
             }
         }
     } elseif ($action == 'authorization') {
         $auth_error = $this->authorization($auth_login);
     }
     include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.reg.php";
 }
Ejemplo n.º 2
0
 if (!is_email($email)) {
     $error_flag = 1;
     $alert[3] = "Поле заполнено некорректно";
 }
 $user = new freelancer();
 $user->GetUser($login);
 $sOldName = $user->uname;
 $sOldSurname = $user->usurname;
 if ($email != $user->email) {
     $ch_mail = 1;
 }
 if ($user->CheckEmail($email)) {
     $error_flag = 1;
     $alert[3] = "Извините, такой электронный ящик уже существует";
 }
 if (temp_email::isTempEmail($email)) {
     $error_flag = 1;
     $alert[3] = "Извините, но почтовые адреса с этого домена запрещены к регистрации";
 }
 $frl = new freelancer();
 $err = $frl->UpdateMain($uid, $name, $surname, $user->email, $oldpwd, $pname, $error_flag);
 if (!$err && !$error_flag) {
     // все что нужно после успешного обновления:
     if (users::isSuspiciousUser($uid, $login, $login, $name, $sOldName, $surname, $sOldSurname)) {
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
         $smail = new smail();
         $smail->adminNewSuspectUser($_SESSION['login'], $name, $surname);
     }
     // галки поля settings
     $frl->updateMainSettings($uid, $question_button_hide, $promo_block_hide, $direct_links);
     $frl->setPromoBlockShowCookie($uid, $promo_block_hide);
Ejemplo n.º 3
0
 public function validate($name, $value, $phone_is_set = false)
 {
     global $DB;
     switch ($name) {
         case 'agree':
             if ($value != 1) {
                 $this->error[$name] = 'Прочтите и согласитесь с правилами';
             }
             break;
         case 'country':
             if ($value <= 0) {
                 $this->error[$name] = 'Выберите страну';
             }
             break;
         case 'city':
             if ($value <= 0) {
                 $this->error[$name] = 'Выберите город';
             }
             break;
         case 'birthday':
             if (!$value) {
                 $this->error[$name] = "Заполните дату дня рождения";
                 $this->errno[$name] = 1;
             }
             break;
         case 'sex':
             if ($value === null) {
                 // $this->error[$name] = 'Выберите пол';
             }
             break;
         case 'uname':
         case 'usurname':
             if (!$value) {
                 $this->error[$name] = "Поле заполнено некорректно";
                 $this->errno[$name] = 1;
             }
             if (!preg_match("/^[-a-zA-Zа-яёА-ЯЁ]+\$/i", $value)) {
                 $this->error[$name] = "Поле заполнено некорректно";
                 $this->errno[$name] = 2;
             }
             break;
         case 'password':
             if ($value == '') {
                 $this->error[$name] = 'Введите пароль';
                 $this->errno[$name] = 1;
             } else {
                 if (strlen($value) > 24) {
                     $this->error[$name] = 'Максимальная длина пароля 24 символа';
                     $this->errno[$name] = 2;
                 } else {
                     if (strlen($value) < 6) {
                         $this->error[$name] = 'Минимальная длина пароля 6 символов';
                         $this->errno[$name] = 3;
                     } else {
                         if (strlen(preg_replace("#[a-zA-Z\\d\\!\\@\\#\$\\%\\^\\&\\*\\(\\)\\_\\+\\-\\=\\;\\,\\.\\/\\?\\[\\]\\{\\}]#", "", $value)) != 0) {
                             $this->error[$name] = 'Поле заполнено некорректно';
                             $this->errno[$name] = 4;
                         }
                     }
                 }
             }
             break;
         case 'login':
             if (!preg_match("/^[a-zA-Z0-9]+[-a-zA-Z0-9_]{2,}\$/", $value)) {
                 $this->error[$name] = 'От 3 до 15 символов. Может содержать латинские буквы, цифры, подчёркивание (_) и дефис (-)';
                 $this->errno[$name] = 1;
             }
             if (in_array(strtolower($value), $GLOBALS['disallowUserLogins'])) {
                 $this->error[$name] = 'Извините, такой логин использовать нельзя';
                 $this->errno[$name] = 2;
             }
             if (empty($this->error[$name])) {
                 $sql = "SELECT uid FROM users WHERE lower(login) = ?";
                 if ($DB->val($sql, strtolower($value))) {
                     $this->error[$name] = 'Извините, этот логин занят. Придумайте другой.';
                     $this->errno[$name] = 3;
                 }
             }
             break;
         case 'email':
             if (!is_email($value)) {
                 $this->error[$name] = 'Поле заполнено некорректно';
                 $this->errno[$name] = 1;
             }
             if (empty($this->error[$name])) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/temp_email.php";
                 if (temp_email::isTempEmail($value)) {
                     $this->error[$name] = 'К сожалению, регистрация аккаунта на указанный адрес электронной почты невозможна. Пожалуйста, для регистрации воспользуйтесь почтовым адресом другого домена';
                     $this->errno[$name] = 2;
                 } else {
                     if ($DB->val("SELECT uid FROM users WHERE lower(email) = ?", strtolower($value))) {
                         if ($this->_disable_email_redirect) {
                             $this->error[$name] = 'Email занят';
                             $this->errno[$name] = 3;
                         } else {
                             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
                             $smail = new smail();
                             $smail->reRegisterToYourMail(strtolower($value));
                             unset($_SESSION["regform_captcha_entered"]);
                             unset($_SESSION["reg_phone"]);
                             unset($_SESSION['send_sms_time']);
                             header_location_exit("/reg_complete.php");
                         }
                     }
                 }
             }
             break;
         case 'smscode':
             if ($_SESSION['smsCode'] != $value && !($value == 7777 && $_SESSION["reg_phone"] == 71111112222 && !is_release())) {
                 $this->error[$name] = 'Неверный код';
             }
             break;
         case 'phone':
             if (!$phone_is_set && $_SESSION["reg_phone"] != $value) {
                 $this->error[$name] = 'Вы подтвердили не этот номер';
                 $this->errno[$name] = 1;
             }
             $sPhone = $phone_is_set ? $value : $_SESSION['reg_phone'];
             if (trim(preg_replace("#[\\D]#", "", $sPhone)) == '') {
                 $this->error[$name] = 'Необходимо ввести номер';
                 $this->errno[$name] = 2;
             }
             break;
     }
 }
Ejemplo n.º 4
0
 /**
  * Создвние нового пользователя.
  *
  * @param integer $rerror ошибка в данных пользователя
  * @param array   $error  ошибки базы данных
  *
  * @return mixed id пользователя или ошибку, в случае неуспеха
  */
 public function Create(&$rerror, &$error)
 {
     global $DB;
     $id = 0;
     $ip = getRemoteIP();
     // количество регистраций с одного IP
     $sDate = date('Y-m-d');
     $sQuery = 'SELECT COUNT(uid) FROM users WHERE reg_ip=? AND reg_date=?';
     $nCount = $DB->val($sQuery, $ip, $sDate);
     if ($nCount >= self::MAX_REG_IP) {
         $error['exceed_max_reg_ip'] = 1;
         // пишем лог
         $sQuery = 'SELECT COUNT(reg_ip) FROM users_regip_log WHERE reg_ip=? AND reg_date=?';
         if (!$DB->val($sQuery, $ip, $sDate)) {
             $DB->insert('users_regip_log', array('reg_ip' => $ip, 'reg_date' => $sDate));
         }
         return 0;
     }
     if (!preg_match('/^[a-zA-Z0-9]+[-a-zA-Z0-9_]{2,}$/', $this->login)) {
         $rerror += 1;
     }
     if ($this->checked_name) {
         if (!preg_match('/^[-a-zA-Zа-яА-ЯёЁ]+$/', $this->uname)) {
             $rerror += 2;
         }
         if (!preg_match('/^[-a-zA-Zа-яА-ЯёЁ]+$/', $this->usurname)) {
             $rerror += 4;
         }
     }
     if (!is_email($this->email)) {
         $rerror += 8;
     }
     if (!($rerror & 1)) {
         $sql = 'SELECT uid FROM users WHERE lower(login) = ?';
         if ($DB->val($sql, strtolower($this->login))) {
             $error['login_ex'] = 1;
         }
     }
     if (!($rerror & 8)) {
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/temp_email.php';
         if (temp_email::isTempEmail($this->email)) {
             $error['email_ex'] = 2;
         } else {
             $sql = 'SELECT uid FROM users WHERE lower(email) = ?';
             if ($DB->val($sql, strtolower($this->email))) {
                 $error['email_ex'] = 1;
             }
         }
     }
     if (!$error && !$rerror) {
         if (!preg_match('/^[0-1]{16}/', $this->subscr)) {
             $this->subscr = '1111111111111111';
         }
         $rolesize = $GLOBALS['rolesize'];
         $sex_str = 'NULL';
         //$this->sex ? 'true' : 'false';
         $active = true;
         $sql = "\n            INSERT INTO users\n                (login, uname, usurname, passwd, email, role, reg_date, reg_ip, last_time, last_ip, sex, active, subscr) \n            VALUES \n                (?, ?, ?, ?, lower(?), B'{$this->role}'::bit({$rolesize}),current_date, ?, now(), ?, {$sex_str}, ?, ?); \n            SELECT currval('users_uid_seq');";
         $id = $DB->val($sql, $this->login, $this->uname, $this->usurname, self::hashPasswd($this->passwd), $this->email, $ip, $ip, $active, $this->subscr);
         $error = $DB->error;
         if (!$error && !$rerror && $id) {
             $sd = substr($this->login, 0, 2) . '/';
             $cfile = new CFile();
             $cfile->DeleteDir('users/' . $sd . $this->login . '/');
             self::SaveChangeEmailLog($id, $this->email);
         } else {
             // $error = parse_db_error($error, $ex_err);
             $error = parse_db_error($error, $ex_err);
             if ($ex_err) {
                 $error = $ex_err;
             }
         }
     }
     return $id;
 }